একটি বিসিডি বাইনারি ঘড়ি আঁকুন


10

এএসসিআইআই তে একটি বিসিডি বাইনারি ঘড়ি তৈরি করুন । উল্লিখিত হিসাবে, এটি বিন্দুগুলির ছয় কলামে সময় প্রদর্শন করবে:

বাইনারি ঘড়ি
(উত্স: উইকিমিডিয়া কমন্স )

প্রতিটি কলামটি বাইনারি-কোডড অঙ্ক, পড়ার সময়, মিনিট এবং সেকেন্ডে বাম থেকে ডান। ঘন্টা 24 ঘন্টা বিন্যাসে দেওয়া হয়।

প্রদর্শনের সময়টি কমান্ড-লাইন থেকে বা স্টিডিনের (যেটি আরও ভাল ফিট করে) থেকে পড়ে। খালি থাকলে বর্তমান সময়ের পরিবর্তে ব্যবহার করা উচিত।

আউটপুট আকার এখানে কিছুটা সীমাবদ্ধ এবং আমরা কেবল দুটি লাইনের পাঠ্যই ফিট করতে পারি। সুতরাং আপনাকে বিন্দুগুলি কেবল দুটি লাইনে লাগাতে হবে। চরিত্রগুলি ., :এবং 'এখানে কাজে আসে।

ইনপুট

ISO-8601 ফর্ম্যাটে প্রদর্শিত সময়, অর্থাত্ HH:MM:SSভগ্নাংশের সেকেন্ড ছাড়া। বাধ্যতামূলক 24 ঘন্টা ফর্ম্যাট। ইনপুট খালি থাকতে পারে সেক্ষেত্রে বর্তমান সময়টি ব্যবহৃত হবে।

আউটপুট

উপরের চিত্রের মতো দুটি লাইন বিসিডি বাইনারি ঘড়ি উপস্থাপন করে। প্রতিটি লাইন হুবহু ছয় অক্ষর দীর্ঘ এবং একমাত্র অনুমোদিত অক্ষর স্থান, সময়কাল, কোলন এবং অ্যাস্টোস্ট্রোফ।

বিজয়ী

বাইট গণনা দ্বারা সংক্ষিপ্ততম কোড জয়। একটি টাই, সমাধান পোস্ট প্রথম জয়।

নমুনা ইনপুট 1

 

(খালি)

নমুনা আউটপুট 1

     .
''. ::

নমুনা ইনপুট 2

17:59:20

নমুনা আউটপুট 2

 ..'  
.:..' 

নমুনা ইনপুট 3

01:08:01

নমুনা আউটপুট 3

   '  
 .   .

উত্তর:


5

গল্ফস্ক্রিপ্ট (+ রুবি / তারিখ) - 46 টি অক্ষর

"#{`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(অর্থাত্ আক্ষরিক ইওএফ)।


আক্ষরিক ইওএফ বলে কোনও জিনিস নেই! :-)
জেবি

1
আপনি এর সাথে 4 টি অক্ষর শেভ করতে পারেন Time.now.to_s[11,8]
লার্স হগসেট

@ লারস: এটি পরিবর্তন হয়েছে, ধন্যবাদ!
ভেন্টোরো

3

উইন্ডোজ পাওয়ারশেল, ৮১

যেহেতু আমি টাস্কটি লেখার সময় কোনও বাস্তবায়ন তৈরি করি নি তাই আমি নিজেকে শুরু থেকেই এটি গল্ফের জন্য যোগ্য মনে করি :-)

-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... :)
Timwi

2

গল্ফস্ক্রিপ্ট (+ রুবি), 63

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

এখনও গল্ফস্ক্রিপ্ট সঙ্গে একটি শিক্ষানবিস। আমাকে আঘাত করবেন না।


সংক্ষিপ্ত করার জন্য কয়েকটি জিনিস রয়েছে (আমার উত্তর দেখুন)। আমার উত্তরটিতে না থাকা এই মুহুর্তে আপনার কাছে নির্দিষ্ট - বন্ধনীগুলি রুবি ফাংশন কল থেকে বাদ দেওয়া যেতে পারে, ""কোয়ার্স থেকে মিথ্যে করা যায় যাতে আপনি মুছে ফেলতে পারেন ,\
নবাব

@ ন্যাব: ধন্যবাদ ঠিক আছে, ভেন্টোরো ইতিমধ্যে আমাকে জানিয়েছিল যে এটি নেমে গেছে 63৩ তে, যদিও আমি তাকে কীভাবে বলার জন্য আনতে পারি না ;-)। তবুও স্ট্রিং ইন্টারপোলেশনের মাধ্যমে রুবিকে এটিকে টেনে নিয়ে যাওয়া কোনওভাবেই প্রতারণার মতো অনুভব করে। আমি মনে করি আমি নীচে আমার পছন্দের ভাষার সাথে থাকব এবং কেবল রুবিকে পরাজিত করার চেষ্টা করব :-)
জো ২

প্রশ্নটি যেহেতু বর্তমান সময়ে অ্যাক্সেসের দরকার ছিল, তাই
রুবীর

@gnibbler: আমি জানি তবুও, এটি গল্ফস্ক্রিপ্টের একমাত্র সত্যই অপ্রাপ্তযোগ্য বৈশিষ্ট্য এবং আমি বিশেষত সেই কারণে এটি ব্যবহার করতে পছন্দ করি না ;-)
জোয়ে

2

পার্ল (84)

#! পার্ল -পিএল
$ _ || = স্থানীয় সময়; y /: // d; / \ d {6} /; $ _ = $ &; y / 0-9 / .... '' /; $ _। = "\ n $ & "; y / 0-9 /। ':।': ./

সাধারণ পার্ল-গল্ফ ট্রিক :)"\n$&"$/.$&
টিমভি

@ টিমউই আমি সেখানে একটি সত্যিকারের নিউলাইন ব্যবহার করতে পেরেছি :)
চাইনিজ পার্ল

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

ভিবিএ (এক্সেল), 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

সময়টি কমান্ড-লাইন থেকে বা স্টিডিনের দেওয়া হয়। উভয় এখানে কাজ বলে মনে হচ্ছে না।
জোয়

আমি দুঃখিত, আপনার মানে কি?
রিমুয়েল

এটি মোটামুটি কড়া ইনপুট সীমাবদ্ধতার সাথে একটি পুরানো কাজ এবং ভিবিএ সম্ভবত নির্দিষ্ট মতো ইনপুট পরিচালনা করতে পারে না। প্রদত্ত টাস্কের শর্তাবলী, প্রয়োজনীয়তার অংশটিকে উপেক্ষা করার জন্য এটি চয়ন করে কারণ এই উত্তরটি এর সমাধান করে না।
জো

1
@remoel, আপনি নিয়ে এসে এই উত্তর উন্নত করতে পারেন Ifমধ্যে বিবৃতি [..](অল্টার + 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ফাংশনের জন্য অ-ব্রেকিং স্পেসের দুর্দান্ত কৌশল ricks নতুন নতুন জিনিস শিখেছি এক্সডি নিস! এবং ধন্যবাদ! : ডি
রিমোয়েল


0

VimScript, 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.