बीसीडी बाइनरी घड़ी ड्रा करें


10

ASCII में BCD बाइनरी घड़ी बनाएँ । जैसा कि निहित है, यह डॉट्स के छह स्तंभों में समय प्रदर्शित करेगा:

बाइनरी घड़ी
(स्रोत: विकिमीडिया कॉमन्स )

प्रत्येक कॉलम एक बाइनरी-कोडेड अंक है, जो बाएं से दाएं घंटे, मिनट और सेकंड पढ़ रहा है। घंटे 24-घंटे के प्रारूप में दिए गए हैं।

प्रदर्शित होने का समय कमांड-लाइन से या स्टडिन (जो भी बेहतर हो) से पढ़ा जाता है। यदि खाली है, तो इसके बजाय वर्तमान समय का उपयोग किया जाना चाहिए।

आउटपुट का आकार यहां थोड़ा कम है और हम केवल पाठ की दो पंक्तियों को ही फिट कर सकते हैं। इसलिए आपको डॉट्स को केवल दो लाइनों में रखना आवश्यक है। वर्ण ., :और 'यहाँ काम आते हैं।

इनपुट

ISO-8601 प्रारूप में प्रदर्शित होने का समय, यानी HH:MM:SSबिना आंशिक सेकंड के। अनिवार्य 24 घंटे का प्रारूप। इनपुट खाली हो सकता है जिस स्थिति में वर्तमान समय का उपयोग किया जाएगा।

उत्पादन

ऊपर की छवि के रूप में बीसीडी बाइनरी घड़ी का प्रतिनिधित्व करने वाली दो लाइनें। प्रत्येक पंक्ति ठीक छह वर्णों वाली है और केवल स्वीकृत वर्ण स्थान, काल, बृहदान्त्र और एपोस्ट्रोफ हैं।

विजेता

बाइट काउंट जीत से सबसे छोटा कोड। एक टाई में, समाधान पहले जीतता है।

नमूना इनपुट 1

 

(खाली)

नमूना उत्पादन 1

     .
''. ::

नमूना इनपुट 2

17:59:20

नमूना उत्पादन 2

 ..'  
.:..' 

नमूना इनपुट 3

01:08:01

नमूना आउटपुट 3

   '  
 .   .

जवाबों:


5

गोल्फस्क्रिप्ट (+ माणिक / तिथि) - ४६ वर्ण

"#{`date`}"10>+9<" .':":S-.{4/12-S=}%n@{4%S=}%

आप बदल सकते हैं `date`के साथ Time.nowयदि आवश्यक हो तो (+2 वर्ण)।


मैं जानता था कि यह गोल्फ की कोशिश करने के लिए भी निराशाजनक था ;-)
जॉय

5

माणिक, 107 103 99 94 90 अक्षर

$><<[$/,(gets||Time.now.to_s[11,8]).tr(z=" .':","").bytes.map{|a|$><<z[a/4-12];z[a%4]}]*""

ध्यान दें कि इनपुट में लाइनब्रेक नहीं होना चाहिए, इसलिए समाधान का परीक्षण करने के लिए कुछ ऐसा उपयोग करें echo -n "01:08:01" | ruby1.9 bcd.rb

डिफ़ॉल्ट व्यवहार का परीक्षण करने के लिए, इसे चलाएं ruby1.9 bcd.rbऔर दर्ज करें ^D(यानी एक शाब्दिक ईओएफ)।


शाब्दिक EOF जैसी कोई चीज़ नहीं है! :-)
जेबी

1
आप के साथ 4 वर्ण शेव कर सकते हैं Time.now.to_s[11,8]
लार्स हग्सथ

@ लार्स: इसे बदल दिया, धन्यवाद!
वेंटरो

3

विंडोज पॉवरशेल, 81

चूँकि मैंने कार्य को लिखते समय एक कार्यान्वयन नहीं बनाया था, इसलिए मैं खुद को शुरू से ही इसे गोल्फ का पात्र मानता हूँ, :-)

-join" .':
"[(($d="$(date)$args"[-8..-1]-ne58)|%{($_-band12)/4})+,4+($d|%{$_%4})]

इतिहास:

  • 2011-02-26 23:50 (119) पहला प्रयास।
  • 2011-02-26 23:55 (108) मज़ा लेना।
  • 2011-02-27 00:03 (102) पहली पंक्ति का चयन अनुकूलित। [Math]::Floorबहुत लंबा है। मुझे उससे नफरत है।
  • 2011-02-27 02:22 (101) मुझे :पहली पंक्ति की आवश्यकता नहीं है ।
  • 2011-02-27 02:53    (95) अनुकूलित इनपुट या वर्तमान समय प्राप्त करना।
  • 2011-03-04 20:36    (88) केवल एक ही सम्मिलित रहता है। एक स्ट्रिंग से आवश्यक हर वर्ण को अनुक्रमित करना (लाइन ब्रेक सहित)।
  • 2011-03-04 20:39    (83)58 इसके बजाय :ऑटो-कास्ट का पूर्णांक बनाने के लिए उपयोग करना - $_उद्धरण चिह्नों में संलग्न करने की आवश्यकता नहीं है :-)
  • 2011-03-04 20:42    (81) के बाद कोष्ठक -joinअब आवश्यक नहीं हैं।

2

रूबी - 124 वर्ण

t=*((i=gets)=="
"? Time.now.strftime('%H%M%S'):i).tr(':
','').bytes
puts (0..1).map{|i|t.map{|_|" .':"[i<1? _/4-12:_%4]}*''}

2

सी#

236 अक्षर

using System;using System.Linq;class X{static void Main(){var d=Console.In.ReadToEnd().Replace(":","");for(int i=0;i<2;i++)Console.WriteLine(string.Join("",(d==""?DateTime.Now.ToString("HHmmss"):d).Select(c=>" .':"[i<1?c/4-12:c%4])));}}

पठनीय:

using System;
using System.Linq;
class X
{
    static void Main()
    {
        var d = Console.In.ReadToEnd().Replace(":", "");
        for (int i = 0; i < 2; i++)
            Console.WriteLine(string.Join("",
                (d == "" ? DateTime.Now.ToString("HHmmss") : d)
                .Select(c => " .':"[i < 1 ? c / 4 - 12 : c % 4])));
    }
}

1
- 48जब आप कर रहे हों % 4, तो करने की कोई आवश्यकता नहीं है , जैसे48 % 4 == 0
डॉगबर्ट

@ डॉगबर्ट: शानदार, धन्यवाद! इसने मुझे यह विचार भी दिया कि ... c/4-12से छोटा है (c-48)/4: :)
टिमवी

2

गोल्फस्क्रिप्ट (रूबी), 63

."#{Time.now.strftime'%T'}"if':'-:|{4/12-" .':":@\=}%n|{4%@\=}%

अभी भी गोल्फस्क्रिप्ट के साथ एक शुरुआत है। मुझे मत मारो।


छोटा करने के लिए कुछ चीजें हैं (मेरा उत्तर देखें)। आपके पास इस समय जो मेरे उत्तर में नहीं है, उसके लिए विशिष्ट है - कोष्ठक रूबी फ़ंक्शन कॉल से ""हटाए जा सकते हैं, झूठे को सह सकते हैं ताकि आप निकाल सकें ,\
नबंवर

@ नब: धन्यवाद। ठीक है, वेंटरो ने पहले ही मुझे बताया कि वह इसे 63 तक नीचे कर दिया था, हालांकि मैं उसे यह बताने के लिए नहीं ला सका कि ;-)। फिर भी, रूबी को स्ट्रिंग इंटरपोलेशन के माध्यम से इस तरह घसीटते हुए, किसी तरह धोखा देने जैसा महसूस होता है। मुझे लगता है कि मैं नीचे अपनी पसंदीदा भाषा के साथ रहूंगा और बस रूबी :-) को हरा करने की कोशिश करूंगा
जॉय

चूंकि मौजूदा समय में सवाल आवश्यक है, वैसे भी माणिक का सहारा लिए बिना यह वास्तव में संभव नहीं है
23:27

@gnibbler: मुझे पता है। फिर भी, यह गोल्फस्क्रिप्ट की वास्तव में एकमात्र अपरिहार्य विशेषता है और मुझे इसकी वजह से विशेष रूप से इसका उपयोग करना पसंद नहीं है ;-)
जॉय

2

पर्ल (84)

# - पर्ल -प्ल
$ _ || = स्थानीय समय; y /: // d; / \ d {6} /; $ _ = $ &? y / 0-9 / .... '' /? $ _ = = "\ n $। & "; y / 0-9 /। ':': ./

आप को बदलने के द्वारा एक चरित्र को बचा सकता है "\n$&"के लिए $/.$&आम पर्ल गोल्फ चाल :) -
Timwi

@ टिमवी मैं वहां एक वास्तविक न्यूलाइन का उपयोग कर सकता हूं :)
चीनी पर्ल गोथ

2

पायथन 3, 136 वर्ण

import time
d=input()
for i in(0,1):print(''.join([" .':"[[c>>2,c&3][i]]for c in map(int,d.replace(':','')or time.strftime('%H%M%S'))]))

जब मैं ए करता हूं तो मुझे 137 मिलते हैं wc -c। अच्छा काम थो। +1
काज़ार्क

1

पायथन - 201 172 वर्ण

from time import*
t=raw_input()
if not t:t=strftime('%H:%M:%S')
t=t.replace(':','')
for i in(0,2):print''.join(" .':"[int(bin(int(d))[2:].rjust(4,'0')[i:i+2],2)]for d in t)

कैसे के बारे में: t=raw_input().replace(':','')/ if not t:t=strftime('%H%M%S')- आप 5 पात्रों को बचाता है :)
टिमवी

@ टिमवी उस के लिए धन्यवाद!
जुआन

1

लुआ - 163 160 चार्ज

s=io.read():match"(%S+)"or os.date("%X",os.time())t=" .':"w=io.write for l=1,2 do for k in s:gmatch"(%d)"do y=1+select(l,(k-k%4)/4,k%4)w(t:sub(y,y))end w"\n"end

1

VBA (एक्सेल), 150 148 132 बाइट्स

[A1]इनपुट के रूप में तत्काल विंडो और सेल का उपयोग करना ।

a=Format(IIf([a1]="",Now,[a1]),"hhmmss"):b=Split(" ,.,',:",","):For c=1To Len(a):d=Mid(a,c,1):e=e &b(d\4):f=f &b(d Mod 4):Next:?e:?f

समय या तो कमांड-लाइन से या स्टडिन से दिया जाता है। न यहां काम लगता है।
जॉय

मैं माफ़ी चाहता हूँ, तुम्हारा मतलब क्या है?
रेमोएल

यह काफी कड़े इनपुट प्रतिबंध के साथ एक पुराना काम है और VBA संभवतः निर्दिष्ट जैसे इनपुट को संभाल नहीं सकता है। दिए गए कार्य के संदर्भ में, यह उत्तर इसे हल नहीं करता है क्योंकि यह आवश्यकताओं के भाग को अनदेखा करना चुनता है।
जॉय

1
@remoel, आप Ifस्टेटमेंट को [..]नोटेशन में लाकर , और स्प्लिट स्टेटमेंट (Alt + 255) में रेग्युलर स्पेस के बजाय नॉन-ब्रेकिंग स्पेस का उपयोग करके और फिर स्ट्रिंग कॉनसेनटेशन के बजाय स्ट्रिंग जोड़कर इस उत्तर को बेहतर बना सकते हैं। ऐसा दिखना चाहिए a=Format([IF(A1,A1,NOW())],"hhmmss"):b=Split("  . ' :"):For c=1To Len(a):d=Mid(a,c,1):e=e+b(d\4):f=f+b(d Mod 4):Next:?e:?f, जहां विभाजन कथन में पहला चरित्र गैर-उल्लेखनीय स्थान है
टेलर स्कॉट

1
splitफ़ंक्शन के लिए गैर-ब्रेकिंग स्पेस की शांत चाल । नई चीजें सीखी फिर से XD नाइस! और धन्यवाद! : डी
रेमोएल


0

विमस्क्रिप्ट, 143 अक्षर

if getline(1)==''
norm"=strftime("%T")^Mp
en
nm- "ax"=@a/4^MgP
nm, "ax"=@a%4^MgP
norm0YP--x--x--xP^M,,x,,x,,xP
%s/0/ /g
%s/1/./g
%s/2/'/g
%s/3/:/g
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.