แสดงเวลาปัจจุบันในรูปแบบ ASCII


14

ท้าทาย

งานของคุณคือการส่งออกเวลา (ในเวลา 12 ชั่วโมง) ใน ascii art

ตัวละครทั้งหมดที่จะใช้มีดังนี้:

  ___    __   ___    ____    _  _     _____     __    ______ 
 / _ \  /_ | |__ \  |___ \  | || |   | ____|   / /   |____  |
| | | |  | |    ) |   __) | | || |_  | |__    / /_       / / 
| | | |  | |   / /   |__ <  |__   _| |___ \  | '_ \     / /  
| |_| |  | |  / /_   ___) |    | |    ___) | | (_) |   / /   
 \___/   |_| |____| |____/     |_|   |____/   \___/   /_/    

   ___     ___  
  / _ \   / _ \                                _
 | (_) | | (_) |   __ _ _ __    _ __ _ __     (_)
  > _ <   \__, |  / _` | '  \  | '_ \ '  \     _ 
 | (_) |    / /   \__,_|_|_|_| | .__/_|_|_|   (_)
  \___/    /_/                 |_|          

(สำหรับแต่ละหมายเลข / สัญลักษณ์แต่ละรายการปรึกษาส่วนสำคัญนี้ )

คุณจะได้รับการป้อนข้อมูลในอาร์เรย์ของแบบฟอร์ม:

  • [hours, minutes, 'am/pm']. ตัวอย่างเช่น[4, 57, 'am']ใช้เครื่องหมายคำพูดเดี่ยวใช้เวลา am / pm เท่านั้น
  • "hours-minutes-am/pm"หรือ ตัวอย่างเช่น,"4-56-am"
  • หรือ[hours, 'minutes', 'am/pm']สำหรับภาษาที่ไม่สามารถจัดการเลขศูนย์นำหน้ากับตัวเลขได้ ตัวอย่างเช่น,[4, '07', 'am']

คุณสามารถใช้วิธีการป้อนข้อมูลก็ได้

เอาต์พุตจะอยู่ในรูปแบบ1 2 : 5 9 amที่มีหนึ่งช่องว่างเริ่มต้นสองช่องว่างระหว่างแต่ละหมายเลข (ในส่วนสำคัญแต่ละหมายเลขมีหนึ่งช่องว่างในแต่ละด้านแล้ว) หนึ่งช่องว่างระหว่าง: (โคลอน) และหมายเลขข้างเคียงและหนึ่งช่องว่าง ระหว่างหมายเลขสุดท้ายและam/pmด้วยตัวเลือกนำหน้าและ / หรือขึ้นบรรทัดใหม่ ช่องว่างทั้งหมดอยู่ระหว่างจุดขวาสุดของสัญลักษณ์ด้านซ้ายและจุดซ้ายสุดของสัญลักษณ์ด้านขวา

อนุญาตเอาต์พุตโดยนัย

ขนาดไบต์ที่ต่ำที่สุดชนะ

am/pmจะต้องสอดคล้องดังกล่าวที่ด้านล่างของpในpmสอดคล้องกับด้านล่างของส่วนที่เหลือของการส่งออกที่เป็นที่ undercore แสดงถึงด้านบนของam/pmการเริ่มต้นในการลงเส้นที่สาม (ไม่นับบรรทัดใหม่ชั้นนำ)

เครื่องหมายจุดคู่จะถูกจัดตำแหน่งให้เป็นอักขระตัวแรก (ขีดล่าง) เริ่มที่บรรทัดที่สองลงมา (ไม่นับบรรทัดใหม่ที่นำหน้า)

สำหรับminutes < 10เอาท์พุทนาทีด้วยผู้นำ0(คุณควรได้รับสิ่งนี้ในอินพุต) ยกตัวอย่างเช่น->[8, 04, 'pm']8 : 0 4 pm

คุณต้องไม่ดึงข้อมูลสำหรับหมายเลขจากไลบรารีหรือทรัพยากรภายนอก ข้อมูลทั้งหมดจะต้องมีอยู่ในโปรแกรม

ตัวอย่างเช่นสำหรับอินพุต[12, 47, 'am']เอาต์พุตจะเป็นดังนี้:

  __    ___          _  _      ______  
 /_ |  |__ \    _   | || |    |____  | 
  | |     ) |  (_)  | || |_       / /   __ _ _ __ 
  | |    / /    _   |__   _|     / /   / _` | '  \
  | |   / /_   (_)     | |      / /    \__,_|_|_|_|
  |_|  |____|          |_|     /_/     

(หากคุณเห็นกรณีขอบใด ๆ ที่คุณไม่สามารถตัดสินใจได้ว่าจะทำอย่างไรโปรดโพสต์ในความคิดเห็นและฉันจะเพิ่มลงในตัวอย่าง)



2
เป็นไปได้ที่ซ้ำกันของหมายเลขRender "รูปแบบนาฬิกาดิจิตอล"
Mego

@ คุณคิดยังไง คำถามนั้นบอกว่าเรนเดอร์ (มี) เป็นจำนวน (มาก) พื้นฐานศิลปะ ASCII คำถามนี้ทำให้เกิดศิลปะแบบ ASCII เพิ่ม am / pm และโคลอนและระบุอินพุตด้วยอาร์เรย์ที่มีประเภทผสมกัน

โดยเฉพาะ: คำถามนั้นคือหมายเลขรูปแบบนาฬิกา คำถามนี้เป็นเวลาจริงด้วยการจัดรูปแบบที่เหมาะสม

รูปแบบที่แตกต่างกันของตัวเลขและการเพิ่มของเครื่องหมายโคลอนและ am / pm ทำเพียงเล็กน้อยเพื่อแยกแยะความท้าทาย imo ส่วนหลักของความท้าทายยังคงแปลงจำนวนเต็มเป็นศิลปะ ASCII
Mego

9
@ ฉันไม่คิดว่านี่เป็นสิ่งที่ซ้ำกัน ความท้าทายอื่น ๆ นั้นมีการจัดรูปแบบที่เรียบง่ายเป็นพิเศษ (แม้แต่บีบอัดได้เป็นไบนารี) อันนี้น่าจะได้คำตอบที่ซับซ้อนมากขึ้นเช่น kolmogorov
PurkkaKoodari

คำตอบ:


5

Perl, 592 579 540 522 510 ไบต์

ภายใต้ภาคส่วน!

($L,$C,$b)=unpack"W/aW/aB*",q!12346677889999 _|/\)(
'<,>.` PP¨ 
¨@T @ôäð˜SÀ§€fÌU`à¨Àäð'€GÖf`3 X½`fÍ5 s Î|½`gËÖ— $¡))õ™˜À8Sô BÁªx~O àÔýåËþÏÃÆ~O‡ŸY¬Àf s 
½`À*õŸ/X8|½`p>^€<¯å­kgúºÖ·Óʸ°ªÀj® kª¸•p¸å\×   ­ô!;@c=map{$i<<=$_-$P if$_>$P;$P=$_;sprintf"%${l}b",$i++}$L=~/./g;while($b){$b=~s/^$c[$_]// and$g.=($C=~/./sg)[$_]for 0..$#c}$_=pop;s/-/:/;y/apm-/;</d;for$a(0..5){map{$o.=substr((split$/,$g)[$a],($x=-48+ord)*12,('6356766766099'=~/./g)[$x]+3)}/./g;$o.=$/}print$o

โปรแกรมนี้คาดว่าเวลาในรูปแบบที่ 2 ( "12-34-am" ) เป็นอาร์กิวเมนต์บรรทัดคำสั่ง

แสดงความคิดเห็น:

($L,$C,$b) = unpack "W/aW/aB*",             # extract code lengths, chars, and bitstream
    q!12346677889999 _|/\)(
'<,>.` PP¨ 
¨@T @ôäð˜SÀ§€fÌU`à¨Àäð'€GÖf`3 X½`fÍ5 s Î|½`gËÖ— $¡))õ™˜À8Sô BÁªx~O àÔýåËþÏÃÆ~O‡ŸY¬Àf s 
½`À*õŸ/X8|½`p>^€<¯å­kgúºÖ·Óʸ°ªÀj® kª¸•p¸å\×   ­ô!;
@c = map {                                  # reconstruct huffman prefix codes
    $i <<= $_-$P if $_ > $P;                # increase code size
    $P = $_;                                # keep track of previous code
    sprintf "%${l}b", $i++                  # append code as bitstring
}
$L=~/./g;                                   # canonical huffman prefix lengths
while ( $b ) {                              # decompress font
        $b =~ s/^$c[$_]//                   # match and strip prefix code
        and $g .= ($C=~/./sg)[$_]           # append char for prefix code
    for 0..$#c                              # iterate prefix codes in order
}                                           # luckily we can omit checking trailing bytes    

$_ = pop;                                   # get cmdline arg "12-34-am"    
s/-/:/;                                     # ord(':')-ord('0')=10
y/apm-/;</d;                                # 'a'-> chr(11), 'p' -> chr(12), strip -,m
for $a (0..5) {                             # iterate 6 output lines
    map {                                   # iterate each char in input
        $o .= substr(
            ( split $/, $g )[$a],           # grab line $a
            ( $x=-48+ord ) * 12,            # $x=glyph index, 12=glyph width
            ('6356766766099'=~/./g)[$x]+3   # glyph display width
        )
    } /./g;
    $o .= $/                                # append newline
}
print $o                                    # output

โปรดทราบว่าเนื่องจากปัญหาการเข้ารหัสอักขระเมื่อคุณวางรหัสด้านบนในไฟล์เอาต์พุตอาจมีรูปแบบไม่ถูกต้อง ดังนั้นนี่คือเวอร์ชั่น golfed ซึ่งเข้ารหัส base-64 คัดลอกและวางลงในbase64 -d > 510.pl:

KCRMLCRDLCRiKT11bnBhY2siVy9hVy9hQioiLHEhDjEyMzQ2Njc3ODg5OTk5DiBffC9cKSgKJzws
Pi5gFQBQAVACqAIgCqgBQBVUAqAFQAH05PAOmANTwBqngGbMBlVgHOAaqMDk8AcngEfWZmAzAA9Y
Ar1gZs0DNQBzoAHOBny9YGfL1g+XoAUkoSkp9ZmYDMAHOANT9A1Cwap4Bn5PABzgH9T9AeV/GBAB
y/7Pw8Z+Tx+Hn1mswGYAc6AKvWAMwCr1gZ8vWAc4Bny9YA5wPl6APK/lrWtn+rrWt9PKuAawBqrA
aq4AawGquAeVcA64AeVcAdcAAAABrfQhO0BjPW1hcHskaTw8PSRfLSRQIGlmJF8+JFA7JFA9JF87
c3ByaW50ZiIlJHtsfWIiLCRpKyt9JEw9fi8uL2c7d2hpbGUoJGIpeyRiPX5zL14kY1skX10vLyBh
bmQkZy49KCRDPX4vLi9zZylbJF9dZm9yIDAuLiQjY30kXz1wb3A7cy8tLzovO3kvYXBtLS87PC9k
O2ZvciRhKDAuLjUpe21hcHskby49c3Vic3RyKChzcGxpdCQvLCRnKVskYV0sKCR4PS00OCtvcmQp
KjEyLCgnNjM1Njc2Njc2NjA5OSc9fi8uL2cpWyR4XSszKX0vLi9nOyRvLj0kL31wcmludCRv

นี่คือแบบอักษรที่ฉันใช้ ฉันเว้นระยะร่ายมนตร์ 12 อักขระออกจากกัน (ขนาดของ am / pm) สำหรับการจัดทำดัชนีอย่างง่าย

   ___        __          ___         ____        _  _        _____         __        ______       ___         ___            
  / _ \      /_ |        |__ \       |___ \      | || |      | ____|       / /       |____  |     / _ \       / _ \      _  
 | | | |      | |           ) |        __) |     | || |_     | |__        / /_           / /     | (_) |     | (_) |    (_)          __ _ _ __   _ __ _ __ 
 | | | |      | |          / /        |__ <      |__   _|    |___ \      | '_ \         / /       > _ <       \__, |     _          / _` | '  \ | '_ \ '  \
 | |_| |      | |         / /_        ___) |        | |       ___) |     | (_) |       / /       | (_) |        / /     (_)         \__,_|_|_|_|| .__/_|_|_|
  \___/       |_|        |____|      |____/         |_|      |____/       \___/       /_/         \___/        /_/                              |_|

แบบอักษรนี้คือ 592 ไบต์
วิธีการก่อนหน้านี้ใช้การบีบอัดข้อมูล RLE สองสามรูปแบบเพื่อลดจำนวนนี้เป็น 353 ไบต์ด้วยราคาของรหัสการบีบอัด 78 ไบต์
การเข้ารหัส Huffman บีบอัดฟอนต์เป็น 221 ไบต์ที่ราคา 154 ไบต์สำหรับอัลกอริธึมการบีบอัด


สาปมัน! ผมต้องการบีบอัดสตริงสำหรับ Haskell ..
J Atkin

2

Bash + GNU Utilities + figlet , 134

ไม่แน่ใจว่าได้รับอนุญาตจาก figlet หรือไม่ แต่ดูเหมือนว่าจะให้แบบอักษรที่ถูกต้อง - bigสำหรับตัวเลขและsmallสำหรับ:และ{a,p}m:

f=figlet\ -f
b()(date +%$1|sed 's/./& /g'|$f big)
b -I|paste - <(echo "    ";$f small ": ") <(b M) <(echo;date +%P|$f small)|tr \\t \ 

ส่วนที่เหลือเป็นเพียงการได้รับข้อมูลที่ถูกต้องจากนั้นทำการdateสับเปลี่ยนรูปแบบไปรอบ ๆ ดังนั้นมันจึงดูถูกต้อง:

  ___          _____    ___    
 / _ \    _   | ____|  / _ \               
| (_) |  (_)  | |__   | | | |   __ _ _ __  
 > _ <    _   |___ \  | | | |  / _` | '  \ 
| (_) |  (_)   ___) | | |_| |  \__,_|_|_|_|
 \___/        |____/   \___/               

Figlet อาจจะติดตั้งบน Ubuntu sudo apt-get install figletด้วย


oooh ไม่คิดว่าช่องโหว่นี้ ฉันจะแก้ไขคำถามเพื่อให้แน่ใจว่าข้อมูลตัวละครรวมอยู่ในโปรแกรม แต่ให้การส่งและติดป้ายกำกับไม่ทำงาน - มันยังดีอยู่

2
อย่างไรก็ตามฉันใช้ figlet เพื่อรับข้อมูลสำหรับตัวเลขดังนั้น +1 สำหรับการหานั้น :)

เพียงเพื่อให้ชัดเจน: ไม่สามารถโหลดแบบอักษรจากแหล่งภายนอกหรือจากไลบรารี

2

C ++, 938 ไบต์

รุ่นที่แก้ไขแล้วพร้อมการบีบอัดข้อมูลพื้นฐานบางอย่าง: ทดสอบที่นี่

#include <stdio.h>
#include <time.h>
int main(){char e[]="!1`2!3`1!2`1!4`2!4`!1`!4`4!4`1!3`5!4`2!4`2!35^!`!]!1^`!}!}`1!]!1}`2!]!1}!}1!}!2}!`3}!2^!^!2}`3!1}!2^!`!]!2^!`!]!31`!}!}!}!}!1}!}!3*!}!2`1*!}!}!}1!}`!1}!}`1!3^!^`!6^!^!2}!)`*!}!}!)`*!}!2`1!`!`!`1!3`!`1!`!`1!4)`*}!}!}!}!1}!}!2^!^!2}`1!=!1}`1!2`}!}`2!]!1}!(`!]!4^!^!4?!`!=!2]`1-!}!1^!`a!}!(!1]!1}!(`!]!(!1]!4`!}!}`}!}!1}!}!1^!^`!2`2*!}!3}!}!3`2*!}!}!)`*!}!2^!^!4}!)`*!}!3^!^!2]`1-`}`}`}`}!}!/`1^`}`}`}!2)`*!]`2^!2}`}!}`3}!}`3^!4}`}!2}`3^!2]`2^!2^`^!6]`2^!3^`^!16}`}!14",l[]="8578988998>?3",f[666],*q=f,*p=e,c,r;time_t z;time(&z);tm*u=localtime(&z);while(*p){if(*p>47&&*p<58){r=*p++-48;if(*p>47&&*p<58)r=r*10+*p++-48;while(r--)*q++=c;}else{*q++=c=*p++==94?48:p[-1];}}c=u->tm_hour;sprintf(e,"%02d<%02d%c",c%12,u->tm_min,':'+c/12);for(int s,n,o,r=0;r<6;r++){for(q=e;*q;q++){o=r*111;for(n=0; n<*q-48;n++)o+=l[n]-48;s=l[n]-48;for(n=o;n<o+s;n++)putchar(f[n]-1);}putchar('\n');}return 0;}

ส่วนหัวของการส่งนี้ไม่มีผลต่อขนาดของไบต์เมื่อเปรียบเทียบกับข้อมูลที่ต้องการดังนั้นนี่อาจเป็นโอกาสที่ยุติธรรมในการชนะ

2

Haskell, 932 699 ไบต์

ยายน้อยกว่า 700 ไบต์ !!

t=transpose
i=intercalate
l=lines
u=unlines
s=show
c(h,m,a)=u$t$l(i(r"!!\n!!\n")(map d(s h++':':(if m<10 then '0':s m else s m)))++r"!!"++(d$a!!0))
e s z n=i s$splitOn z n
r=e"   ""!"
d 'a'=b 10
d 'p'=b 11
d ':'=b 12
d n=b$read[n]
b n=splitOn(r"!!")(u$t$l$r$e" |""@"$e"___""$"$e"_|""~"$e"!!""*"$e"_ ""#""  $! __!$! $_! # _!  $__!  __! $$! $!  $*****  \n / #\\  /_@@_#\\ @$ \\ @@|@!| $~!/ /!|$#@  / #\\!/ #\\****!  #\n|@@@ @@! )@!__)@@@|@#@@__! / /_* / / @ (_)@@ (_)@  _###__! #_##__!(_)\n|@@@ @@!/ /!|_#< @__!~@$ \\ @ '#\\!  / /! > #<!\\__,@ / _`@ '  \\ @ '#\\ '  \\!#\n|@~@ @@  / /_!$)@!@@! $)@@ (_)@!/ /!@ (_)@! / /  \\__,~~~~@ .__/~~~ (_)\n \\$/!|~@$~@$_/! @~!|$_/!\\$/!/_/*\\$/! /_/**!@~** ")!!n

ค่อนข้างอวดดี

module Clock where
import Data.Lists

main :: IO ()
main = putStr $ clock (5,05,"am")

clock :: (Int, Int, String) -> String
clock (h,m,a) | m <- if m < 10 then '0':show m else show m
              , hm <- intercalate "      \n      \n" (map digit (show h ++ ':' :m))
              =  unlines $ transpose $ lines (hm ++ "      "++(digit$a!!0))

digit :: Char -> String
digit 'a' = numbers 10
digit 'p' = numbers 11
digit ':' = numbers 12
digit n = numbers (read [n])


numbers :: Int -> String
numbers n = splitOn "      " (unlines $ transpose $ lines "  ___    __   ___    ____    _  _     _____     __    ______    ___     ___                                \n / _ \\  /_ | |__ \\  |___ \\  | || |   | ____|   / /   |____  |  / _ \\   / _ \\                             _ \n| | | |  | |    ) |   __) | | || |_  | |__    / /_       / /  | (_) | | (_) |  __ _ _ __    _ __ _ __   (_)\n| | | |  | |   / /   |__ <  |__   _| |___ \\  | '_ \\     / /    > _ <   \\__, | / _` | '  \\  | '_ \\ '  \\   _ \n| |_| |  | |  / /_   ___) |    | |    ___) | | (_) |   / /    | (_) |    / /  \\__,_|_|_|_| | .__/_|_|_| (_)\n \\___/   |_| |____| |____/     |_|   |____/   \\___/   /_/      \\___/    /_/                |_|             ") !! n

มันทำงานอย่างไร

(นี่คือวิธีที่โปรแกรม ungolfed ทำงาน)

clock :: (Int, Int, String) -> String
clock (h,m,a) | m <- if m < 10 then '0':show m else show m
              , hm <- intercalate "      \n      \n" (map digit (show h ++ ':' :m))
              =  unlines $ transpose $ lines (hm ++ "      "++(digit$a!!0))

clockใช้เวลา tuple ของเวลาและส่งกลับสตริง mเป็นนาทีในปัจจุบันที่มีชั้นนำเพิ่มถ้ามันเป็น0 เป็นชั่วโมงและนาทีเข้าร่วมด้วย สิ่งสุดท้ายที่มันทำคือเปลี่ยนรานแซคชัน<10hm:

digit :: Char -> String
digit 'a' = numbers 10
digit 'p' = numbers 11
digit ':' = numbers 12
digit n = numbers (read [n])

ค่อนข้างง่ายที่นี่ digitเป็นฟังก์ชั่นที่แมปตัวอักษรไปยังตำแหน่งต่างๆในสตริงที่จัดเก็บไว้

numbers :: Int -> String
numbers n = splitOn "      " (unlines $ transpose $ lines  replace" |""@"$replace"___""$"$replace"_|""~"$replace"!!""*"$replace"_ ""#""  $! __!$! $_! # _!  $__!  __! $$! $!  $*****  \n / #\\  /_@@_#\\ @$ \\ @@|@!| $~!/ /!|$#@  / #\\!/ #\\****!  #\n|@@@ @@! )@!__)@@@|@#@@__! / /_* / / @ (_)@@ (_)@  _###__! #_##__!(_)\n|@@@ @@!/ /!|_#< @__!~@$ \\ @ '#\\!  / /! > #<!\\__,@ / _`@ '  \\ @ '#\\ '  \\!#\n|@~@ @@  / /_!$)@!@@! $)@@ (_)@!/ /!@ (_)@! / /  \\__,~~~~@ .__/~~~ (_)\n \\$/!|~@$~@$_/! @~!|$_/!\\$/!/_/*\\$/! /_/**!@~** ")!!n

นี่คือสายวิเศษที่เก็บไว้

การเปลี่ยนแปลงจริงเท่านั้นระหว่างโปรแกรมแข็งแรงเล่นกอล์ฟและ ungolfed !@$คือว่าโปรแกรมแข็งแรงเล่นกอล์ฟเพิ่มการบีบอัดสตริงบางโดยการเปลี่ยนรูปแบบบางอย่างร่วมกันกับถ่าน สตริงข้อมูลดั้งเดิมคือ667ไบต์หลังจากการแทนที่การบีบอัดจะเป็น390ไบต์


1

JavaScript (ES6), 994 985 ไบต์

ความพยายามอย่างยิ่งยวดกับข้อมูลดิบไม่ได้ถูกบีบอัดเลยและวิธีการที่ไม่มีรสนิยมที่ดีสำหรับการแสดงผล

แต่เฮ้ ... มันเป็นเพียงคำตอบ codegolf ที่สองของฉัน!

d="   ___   !  / _ \\  ! | | | | ! | | | | ! | |_| | !  \\___/  0  __  ! /_ | !  | | !  | | !  | | !  |_| 0  ___   ! |__ \\  !    ) | !   / /  !  / /_  ! |____| 0  ____   ! |___ \\  !   __) | !  |__ <  !  ___) | ! |____/  0  _  _    ! | || |   ! | || |_  ! |__   _| !    | |   !    |_|   0  _____  ! | ____| ! | |__   ! |___ \\  !  ___) | ! |____/  0    __   !   / /   !  / /_   ! |  _ \\  ! | (_) | !  \\___/  0  ______  ! |____  | !     / /  !    / /   !   / /    !  /_/     0   ___   !  / _ \\  ! | (_) | !  > _ <  ! | (_) | !  \\___/  0   ___   !  / _ \\  ! | (_) | !  \\__, | !    / /  !   /_/   0   ! _ !(_)! _ !(_)!   0!! __ _ _ __ !/ _` | '  \\!\\__,_|_|_|_|!0!! _ __ _ __ !| '_ \\ '  \\!| .__/_|_|_|!|_|".split(0);
f=a=>{t="toString",s="split",h=a[0][t]()[s](""),m=a[1][s](""),p=a[2]=='am'?11:12,g=h.length>1?1:0,r="";for(i=0;i<6;i++){r+=d[h[0]][s]('!')[i];r+=(g&&1)?d[h[1]][s]('!')[i]:"";r+=d[10][s]('!')[i]+d[m[0]][s]('!')[i]+d[m[1]][s]('!')[i]+d[p][s]('!')[i]+"\n"}return r}

ส่งเก่า (994 ไบต์) :

d=["   ___   !  / _ \\  ! | | | | ! | | | | ! | |_| | !  \\___/  ","  __  ! /_ | !  | | !  | | !  | | !  |_| ","  ___   ! |__ \\  !    ) | !   / /  !  / /_  ! |____| ","  ____   ! |___ \\  !   __) | !  |__ <  !  ___) | ! |____/  ","  _  _    ! | || |   ! | || |_  ! |__   _| !    | |   !    |_|   ","  _____  ! | ____| ! | |__   ! |___ \\  !  ___) | ! |____/  ","    __   !   / /   !  / /_   ! |  _ \\  ! | (_) | !  \\___/  ","  ______  ! |____  | !     / /  !    / /   !   / /    !  /_/     ","   ___   !  / _ \\  ! | (_) | !  > _ <  ! | (_) | !  \\___/  ","   ___   !  / _ \\  ! | (_) | !  \\__, | !    / /  !   /_/   ","   ! _ !(_)! _ !(_)!   ","!! __ _ _ __ !/ _` | '  \\!\\__,_|_|_|_|!","!! _ __ _ __ !| '_ \\ '  \\!| .__/_|_|_|!|_|"];
f=a=>{
    t="toString",s="split",h=a[0][t]()[s](""),m=a[1][s],p=(a[2]=='am')?11:12,g=(h.length>1)?1:0,r="";
    for(i=0;i<6;i++){
        r+=d[h[0]].s('!')[i];
        r+=g&&1?d[h[1]].s('!')[i]:"";
        r+=d[10].s('!')[i]+d[m[0]].s('!')[i]+d[m[1]].s('!')[i]+d[p].s('!')[i]+"\n"
    }
return r
}

แยกเป็นบรรทัด ๆ เพื่อให้อ่านง่ายขึ้น

โดยทั่วไป:

var f = function (a) {
  hours = a[0].toString().split(""), // convert hours to a string then array to
                                    // handle single and and double numbers
  minutes = a[1].split(""), // ditto with minutes
  period = a[2] == "am" ? 11 : 12, // if it is am, get data[11], if pm, get data[12]
  g = hours.length > 1 ? 1 : 0, // if hours > 9, then g is true
  r = ""; // the string that will be returned
for (i = 0; i < 6; i++) {
    r += data[hours[0]].split("!")[i]; // add the first digit of hours to r
    r += g && 1 ? data[hours[1]].split("!")[i] : ""; // if g is true, add the second 
                                                    //digit of hours to r
    r += data[10].split("!")[i] + // colon
    data[minutes[0]].split("!")[i] + // first digit of minutes
    data[minutes[1]].split("!")[i] + // second digit of minutes
    data[period].split("!")[i] + // am/pm
    "\n"; // and finally linebreak.
  } // entire loop repeated six times, each iteration adds one line to the string
return r; // return the string
};

0

Python 3, 1085 1072 ไบต์

แข็งแรงเล่นกอล์ฟ

def f(h,c="",n=["   ___   @  / _ \  @ | | | | @ | | | | @ | |_| | @  \___/  ","  __  @ /_ | @  | | @  | | @  | | @  |_| ","  ___   @ |__ \  @    ) | @   / /  @  / /_  @ |____| ","  ____   @ |___ \  @   __) | @  |__ <  @  ___) | @ |____/  ","  _  _    @ | || |   @ | || |_  @ |__   _| @    | |   @    |_|   ","  _____  @ | ____| @ | |__   @ |___ \  @  ___) | @ |____/  ","    __   @   / /   @  / /_   @ |  _ \  @ | (_) | @  \___/  ","  ______  @ |____  | @     / /  @    / /   @   / /    @  /_/     ","   ___   @  / _ \  @ | (_) | @  > _ <  @ | (_) | @  \___/  ","   ___   @  / _ \  @ | (_) | @  \__, | @    / /  @   /_/   ","   @ _ @(_)@ _ @(_)@   ","            @            @ __ _ _ __ @/ _` | '  \@\__,_|_|_|_|@            ","            @            @ _ __ _ __ @| '_ \ '  \@| .__/_|_|_|@|_|"]):
 for i in range(6):
  for j in range(3):
   if j<2:
    x=int(h[j]);d=x//10;u=x%10
    if d>0 or j>0:c+=n[d].split("@")[i]
    c+=n[u].split("@")[i]
    if j==0:c+=" "+n[10].split("@")[i]+" "
   else:y=11 if h[j]=="am" else 12;c+=" "+n[y].split("@")[i]
  c+="\n"
 return c

Ungolfed

import os
from time import ctime

def asciiClock(hour):
    num = ["   ___   @  / _ \  @ | | | | @ | | | | @ | |_| | @  \___/  @","  __  @ /_ | @  | | @  | | @  | | @  |_| @",
   "  ___   @ |__ \  @    ) | @   / /  @  / /_  @ |____| @","  ____   @ |___ \  @   __) | @  |__ <  @  ___) | @ |____/  @",
   "  _  _    @ | || |   @ | || |_  @ |__   _| @    | |   @    |_|   @","  _____  @ | ____| @ | |__   @ |___ \  @  ___) | @ |____/  @",
   "    __   @   / /   @  / /_   @ |  _ \  @ | (_) | @  \___/  @","  ______  @ |____  | @     / /  @    / /   @   / /    @  /_/     @",
   "   ___   @  / _ \  @ | (_) | @  > _ <  @ | (_) | @  \___/  @","   ___   @  / _ \  @ | (_) | @  \__, | @    / /  @   /_/   @",
   "   @ _ @(_)@ _ @(_)@   @","            @            @ __ _ _ __ @/ _` | '  \@\__,_|_|_|_|@            @",
   "            @            @ _ __ _ __ @| '_ \ '  \@| .__/_|_|_|@|_|@"]
    clock = ""
    for i in range(6):
        for j in range(3):
            if j < 2:
                x = int(hour[j])
                d = x // 10
                u = x % 10
                if d > 0 or j > 0:
                    clock += num[d].split("@")[i]
                clock += num[u].split("@")[i]
                if j == 0:
                    clock += " " + num[10].split("@")[i] + " "
            else:
                y = 11 if hour[j] == "am" else 12
                clock += " " + num[y].split("@")[i]
        clock += "\n"
    return clock

previousMinute = -1
while True:
    hour = ctime().split()[3].split(":")
    h = int(hour[0])
    m = hour[1]
    x = "am" if h < 12 else "pm"
    if h > 12:
        h -= 12
    if  previousMinute != m:
        os.system("clear") # if using Windows change to "cls"
        print(asciiClock([h, m, x]))
    previousMinute = m
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.