ํƒœ๊ทธ ๋ณด๊ด€๋ฌผ: kolmogorov-complexity

kolmogorov-complexity

420 <s> ๋ธ”๋ ˆ์ด์ฆˆ </ s> Golf It ์š”์ผ์ด 20์‹œ๊ฐ„

์ด๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๋„์ „์ด์ง€๋งŒ ์žฌ๋ฏธ์žˆ๋Š” ์ผ์ž…๋‹ˆ๋‹ค.

์ง๋ฌด

ํ˜„์žฌ ๋‹ฌ 4๊ณผ ์š”์ผ์ด 20์‹œ๊ฐ„ (12 ์‹œ๊ฐ„ ์‹œ๊ณ„ ๊ธฐ์ค€) 4์ด๊ณ  ๋ถ„์ด ์‹œ๊ฐ„ 20์ด๊ฑฐ๋‚˜ ๋ถ„์ด 42 20์ดˆ์ธ ๊ฒฝ์šฐ์ด ์•„์Šคํ‚ค ์•„ํŠธ๋ฅผ ์ธ์‡„ํ•˜์‹ญ์‹œ์˜ค.

                        .
                       .:.
                       :|:
                      .:|:.
                      ::|::
       :.             ::|::             .:
       :|:.          .::|::.          .:|:
       ::|:.         :::|:::         .:|:;
       `::|:.        :::|:::        .:|::'
        ::|::.       :::|:::       .::|:;
        `::|::.      :::|:::      .::|::'
         :::|::.     :::|:::     .::|::;
         `:::|::.    :::|:::    .::|::;'
`::.      `:::|::.   :::|:::   .::|::;'     .:;'
 `:::..    `;::|::.  :::|:::  .::|:::    ::::;
   `:::::.    ':|::. :::|::: .::|:'   ,::::;'
     `:::::.    ':|:::::|:::::|:'   :::::;'
       `:::::.:::::|::::|::::|::::.,:::;'
          ':::::::::|:::|:::|:::::::;:'
             ':::::::|::|::|:::::::''
                  `::::::::::;'
                 .:;'' ::: ``::.
                      :':':
                        ;

ํ›„ํ–‰ ๊ณต๋ฐฑ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๊นŒ์ง€ ๋‚จ์€ ์‹œ๊ฐ„ (๋ถ„ ๋ฐ ์ดˆ)์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ธ์‡„ํ•˜์‹ญ์‹œ์˜ค %d minutes and %d seconds left until your next hit..

์ด๊ฒƒ์€ ์ด๋ฏ€๋กœ ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ๊ฐ€์žฅ ์งง์€ ์ฝ”๋“œ๊ฐ€ ์ด๊น๋‹ˆ๋‹ค!

์ถ”์‹ ์ด ๋„์ „์ด์ด ์‚ฌ์ดํŠธ์— ๋„ˆ๋ฌด ๋ถ€์ ์ ˆํ•˜๋‹ค๋ฉด, ์ €์—๊ฒŒ ์•Œ๋ ค ์ฃผ์‹œ๋ฉด ๋ณ€๊ฒฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.



๋‹ต๋ณ€

ํŒŒ์ด์ฌ 2, 371 ๋ฐ”์ดํŠธ

์ด ์†Œ์Šค๋Š” ์ธ์‡„ ํ•  ์ˆ˜์—†๋Š” ๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ๋กœ ๋””์ฝ”๋”ฉ ํ•  ์ˆ˜์žˆ๋Š” 16 ์ง„ ๋คํ”„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค xxd -r.

00000000: efbb bf66 726f 6d20 7469 6d65 2069 6d70  ...from time imp
00000010: 6f72 742a 0a74 3d74 696d 6528 290a 693d  ort*.t=time().i=
00000020: 300a 7768 696c 6527 3034 3a32 3027 6e6f  0.while'04:20'no
00000030: 7420 696e 2073 7472 6674 696d 6528 2725  t in strftime('%
00000040: 6d3a 2564 2572 272c 6c6f 6361 6c74 696d  m:%d%r',localtim
00000050: 6528 742b 6929 293a 692b 3d31 0a70 7269  e(t+i)):i+=1.pri
00000060: 6e74 5b22 7801 74cd c701 c430 0844 d1bb  nt["x.t....0.D..
00000070: aaf0 cd99 0286 6654 887a dfa0 f41d 7136  ......fT.z....q6
00000080: 8f61 7829 0b6f 5c72 bdb6 9414 de86 d2eb  .ax).o\r........
00000090: 9894 d4e7 64f7 de39 099a 8ed8 32b5 d34a  ....d..9....2..J
000000a0: e8c9 2a53 9da4 371a b1d0 a3d4 18e8 b212  ..*S..7.........
000000b0: 5a25 a139 158a ac90 4cba 7692 4007 c62e  Z%.9....L.v.@...
000000c0: 81b8 31c4 9682 04e2 6ab8 8f21 3bb3 3ce1  ..1.....j..!;.<.
000000d0: 7582 0163 8524 79a8 c175 cb58 7ce5 45ff  u..c.$y..u.X|.E.
000000e0: b3b7 8cc7 bfbe fbaa 9b95 b068 1837 db90  ...........h.7..
000000f0: a546 b54a 5cb9 5c38 6801 0936 a2a8 a85e  .F.J\.\8h..6...^
00000100: 6ca3 4c3e 8e83 a4ef 1412 12ac 7027 7075  l.L>........p'pu
00000110: 2084 ca61 026b 5c30 286e a1fe 222e 6465   ..a.k\0(n..".de
00000120: 636f 6465 2827 7a69 7027 292c 2725 6420  code('zip'),'%d
00000130: 6d69 6e75 7465 7320 616e 6420 2564 2073  minutes and %d s
00000140: 6563 6f6e 6473 206c 6566 7420 756e 7469  econds left unti
00000150: 6c20 796f 7572 206e 6578 7420 6869 742e  l your next hit.
00000160: 2725 2869 2f36 302c 6925 3630 295d 5b69  '%(i/60,i%60)][i
00000170: 3e30 5d                                  >0]

์ฝ์„ ์ˆ˜์žˆ๋Š” ๋ถ€๋ถ„ :

from time import*
t=time()
i=0
while'04:20'not in strftime('%m:%d%r',localtime(t+i)):i+=1
print["(ZLIB DATA)".decode('zip'),'%d minutes and %d seconds left until your next hit.'%(i/60,i%60)][i>0]

๋‹ต๋ณ€

์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ (ES6), 537 ๋ฐ”์ดํŠธ

alert((f=t=>new Date(Date.now()+t*1e3).toISOString().match`(T16|04)[-:]20`)(i=0)?"ร€\u0019\u0002รป1!ยฐ?4\u0002รซ14!ยฐ>C3\u0002=\u0001รŠ34\u0003รŠ1\u0002=4\u00011C3\u000114\u0002=C\u0013รฐ4\u0009\u001fCS\u0002m34\u0001>Iร 14s\u0002>C3\u0001=Iร1CS\u0002n34\u0013ร€4\u0009\u001c34s\u0002?I3\u0001;Iยฐ1C3%รฐ6I3\u0001:Iย 1C3ub3\u0001l4\u00134\u0009\u001934S\u0007\u001bS'`\u0011ย V34\u0013\u00004\u0009\u001034\u0009:Z\u0002iยณ\u0001zC3\u00014\u00091Cs8Z'ยฐ6\u001bย 74Kยณ4\u00079['ร6\u001bยณ4Jยฃ4\u001a8Y'ย yรณ4I4]s\u0002รŠ7M34Cร“w\u0002ยซ6u\u00021u\u0007`6\u0013\u0002รซss#ร€Y".replace(/./g,c=>(l=" .\n:|;`',0123456")[(n=c.charCodeAt())&15]+l[n>>4]).replace(/.\d+/g,c=>c[0].repeat(parseInt(c.slice(1),7)+3)):eval('for(;!f(++i););`${i/60|0} minutes and ${i%60|0} seconds left until your next hit.`'))

CP-1252 ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  :์ด ๊ฒŒ์‹œ๋ฌผ์˜ ๋ชจ๋“  ์ฝ์„ ์ˆ˜์—†๋Š” ํ•ญ๋ชฉ์€ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ๋˜์–ด \u00xxStack Exchange ์‹œ์Šคํ…œ์—์„œ ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํฌ๊ธฐ๋Š” 1 ๋ฐ”์ดํŠธ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…

๊ฐ ๋ฌธ์ž๋ฅผ 4 ๋น„ํŠธ๋กœ ์••์ถ•ํ•˜๋Š” ๊ฒƒ๊ณผ ํ•จ๊ป˜ ๊ธธ์ด ๊ธธ์ด ์ธ์ฝ”๋”ฉ ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ์ฃผ์š” ๋…ผ๋ฆฌ๋Š” 174 ๋ฐ”์ดํŠธ์ด๊ณ  ๋ฆฌํ”„ ๋ฌธ์ž์—ด (์••์ถ• ํ•ด์ œ ํฌํ•จ)์€ 364 ๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค. ์••์ถ• ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

alert((
  f=t=>                                   // f checks for 4:20 in a date
    new Date(Date.now()+t*1e3)            // get the date at now + t seconds
    .toISOString().match`(T16|04)[-:]20`  // find 4:20 in the ISO date string
)(i=0)?

  // Leaf decompression
  "ร€\u0019\u0002รป1!ยฐ?4\u0002รซ14!ยฐ>C3\u0002=\u0001รŠ34\u0003รŠ1\u0002=4\u00011C3\u000114\u0002=C\u0013รฐ4\u0009\u001fCS\u0002m34\u0001>Iร 14s\u0002>C3\u0001=Iร1CS\u0002n34\u0013ร€4\u0009\u001c34s\u0002?I3\u0001;Iยฐ1C3%รฐ6I3\u0001:Iย 1C3ub3\u0001l4\u00134\u0009\u001934S\u0007\u001bS'`\u0011ย V34\u0013\u00004\u0009\u001034\u0009:Z\u0002iยณ\u0001zC3\u00014\u00091Cs8Z'ยฐ6\u001bย 74Kยณ4\u00079['ร6\u001bยณ4Jยฃ4\u001a8Y'ย yรณ4I4]s\u0002รŠ7M34Cร“w\u0002ยซ6u\u00021u\u0007`6\u0013\u0002รซss#ร€Y"
  .replace(/./g,c=>                       // unpack each 4-bit character
    (l=" .\n:|;`',0123456")               // l = lookup table of characters
    [(n=c.charCodeAt())&15]+l[n>>4]       // return the two characters in the byte
  )
  .replace(/.\d+/g,c=>                    // run-length decoding
    c[0].repeat(parseInt(c.slice(1),7)+3) // repeat character n + 3 times (base-7)
  )

:eval(`                                   // eval just to allow a for loop here...
  for(;!f(++i););                         // check each second up until a match

  \`${i/60|0} minutes and ${i%60|0} seconds left until your next hit.\`
`))

์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜

์••์ถ• ์—†์Œ, 911 ๋ฐ”์ดํŠธ

์ด๊ฒƒ์€ ์ „ํ˜€ ์••์ถ•๋˜์ง€ ์•Š์€ ๋ฆฌํ”„ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

`                        .
                       .:.
                       :|:
                      .:|:.
                      ::|::
       :.             ::|::             .:
       :|:.          .::|::.          .:|:
       ::|:.         :::|:::         .:|:;
       \`::|:.        :::|:::        .:|::'
        ::|::.       :::|:::       .::|:;
        \`::|::.      :::|:::      .::|::'
         :::|::.     :::|:::     .::|::;
         \`:::|::.    :::|:::    .::|::;'
\`::.      \`:::|::.   :::|:::   .::|::;'     .:;'
 \`:::..    \`;::|::.  :::|:::  .::|:::    ::::;
   \`:::::.    ':|::. :::|::: .::|:'   ,::::;'
     \`:::::.    ':|:::::|:::::|:'   :::::;'
       \`:::::.:::::|::::|::::|::::.,:::;'
          ':::::::::|:::|:::|:::::::;:'
             ':::::::|::|::|:::::::''
                  \`::::::::::;'
                 .:;'' ::: \`\`::.
                      :':':
                        ;`

๋Ÿฐ ๊ธธ์ด ์ธ์ฝ”๋”ฉ, 542 ๋ฐ”์ดํŠธ

๋ฐ˜๋ณต๋˜๋Š” ์—ฐ์† ๋œ ๋ฌธ์ž๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ ์‹คํ–‰ ๊ธธ์ด ์ธ์ฝ”๋”ฉ์€ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

` 21.
 20.:.
 20:|:
 19.:|:.
 19::|::
 4:. 10::|:: 10.:
 4:|:. 7.::|::. 7.:|:
 4::|:. 6:0|:0 6.:|:;
 4\`::|:. 5:0|:0 5.:|::'
 5::|::. 4:0|:0 4.::|:;
 5\`::|::. 3:0|:0 3.::|::'
 6:0|::. 2:0|:0 2.::|::;
 6\`:0|::. 1:0|:0 1.::|::;'
\`::. 3\`:0|::. 0:0|:0 0.::|::;' 2.:;'
 \`:0.. 1\`;::|::.  :0|:0  .::|:0 1:1;
 0\`:2. 1':|::. :0|:0 .::|:' 0,:1;'
 2\`:2. 1':|:2|:2|:' 0:2;'
 4\`:2.:2|:1|:1|:1.,:0;'
 7':6|:0|:0|:4;:'
 10':4|::|::|:4''
 15\`:7;'
 14.:;'' :0 \`\`::.
 19:':':
 21;`.replace(/.\d+/g,c=>c[0].repeat(+c.slice(1)+3))

3 ํšŒ ์ด์ƒ ๋ฐ˜๋ณต ๋œ ๊ฐ ๋ฌธ์ž๋Š” 10 ์ง„์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค amount - 3. ์ธ์ฝ”๋”ฉ ๋œ ๋ฌธ์ž์—ด์€ ๋‹ค์Œ ์ฝ”๋“œ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

uncompressed.replace(/(.)\1{2,}/g,c=>c[0]+(c.length-3))

4 ๋น„ํŠธ ํŒจํ‚น + RLE, 364 ๋ฐ”์ดํŠธ

์›๋ž˜ ๋ฌธ์ž์—ด์—๋Š” 9 ๊ฐœ์˜ ๊ณ ์œ  ํ•œ ๋ฌธ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, 4๋Š” ๊ฐ๊ฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ตœ์†Œ ๋น„ํŠธ ์ˆ˜์ž…๋‹ˆ๋‹ค. ํŽธ๋ฆฌํ•˜๊ฒŒ, ์ด๊ฒƒ์€ ์ •ํ™•ํžˆ 2 ๊ฐœ์˜ ๋ฌธ์ž ํ‘œํ˜„์„ ๋‹จ์ผ ๋ฐ”์ดํŠธ์— ๋งž์ถœ ์ˆ˜์žˆ๊ฒŒํ•˜์—ฌ ๋‹จ์ˆœํ•˜๊ณ  ๊ณจํ”„ ์นœํ™”์  ์ธ ์••์ถ• ํ•ด์ œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๊ฒŒํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, 7 ๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ๋‚จ์œผ๋ฏ€๋กœ ํฌ์žฅ ์ „์— ๊ธฐ๋ณธ 7 ๋Ÿฐ ๊ธธ์ด ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ 4 ๋น„ํŠธ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ ์••์ถ• ๋ฌธ์ž์˜ ์ƒ์œ„ ๋ฐ ํ•˜์œ„ ๋‹ˆ๋ธ”์— ๋„ฃ๋Š” ๊ฒƒ์€ CP-1252 ์ธ์ฝ”๋”ฉ์ด ์ฝ”๋“œ ํฌ์ธํŠธ 256 ์•„๋ž˜์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ๋‹จ์ผ ๋ฐ”์ดํŠธ๋กœ ์ธ์ฝ”๋”ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”์ดํŠธ ๋‹น 2 ๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ์ €์žฅ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

"ร€\u0019\u0002รป1!ยฐ?4\u0002รซ14!ยฐ>C3\u0002=\u0001รŠ34\u0003รŠ1\u0002=4\u00011C3\u000114\u0002=C\u0013รฐ4\u0009\u001fCS\u0002m34\u0001>Iร 14s\u0002>C3\u0001=Iร1CS\u0002n34\u0013ร€4\u0009\u001c34s\u0002?I3\u0001;Iยฐ1C3%รฐ6I3\u0001:Iย 1C3ub3\u0001l4\u00134\u0009\u001934S\u0007\u001bS'`\u0011ย V34\u0013\u00004\u0009\u001034\u0009:Z\u0002iยณ\u0001zC3\u00014\u00091Cs8Z'ยฐ6\u001bย 74Kยณ4\u00079['ร6\u001bยณ4Jยฃ4\u001a8Y'ย yรณ4I4]s\u0002รŠ7M34Cร“w\u0002ยซ6u\u00021u\u0007`6\u0013\u0002รซss#ร€Y"
.replace(/./g,c=>(l=" .\n:|;`',0123456")[(n=c.charCodeAt())&15]+l[n>>4])
.replace(/.\d+/g,c=>c[0].repeat(parseInt(c.slice(1),7)+3))

๋‹ค์Œ ์ฝ”๋“œ๋Š” ์‹คํ–‰ ๊ธธ์ด ์ธ์ฝ”๋”ฉ ๋ฐ ํŒจํ‚น์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

chars="",max=16;
[...uncompressed].map(c=>~chars.indexOf(c)?0:chars+=c);
base=max-chars.length;
chars+=[...Array(base).keys()].join``;
unpacked=uncompressed.replace(/(.)\1{2,}/g,c=>c[0]+(c.length-3).toString(base));
packed=unpacked.replace(/(.|\n){2}/g,s=> // Note: unpacked length must be even!
  String.fromCharCode(chars.indexOf(s[0])|(chars.indexOf(s[1])<<4)));

ํ—ˆํ”„๋งŒ ์ฝ”๋”ฉ, (๊ฐ€๋Šฅํ•œ ๋ฏธ๋ž˜ ๊ฐœ์„ )

ํŠน์ • ๋ฌธ์ž๋Š” ๋‹ค๋ฅธ ๋ฌธ์ž๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ํ—ˆํ”„๋งŒ ์ธ์ฝ”๋”ฉ (๊ฐ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€๋ณ€ ๊ธธ์ด ์ •์ˆ˜)์€ ์ถ”๊ฐ€ ๋ฐ”์ดํŠธ๋ฅผ ์ ˆ์•ฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์••์ถ• ํ•ด์ œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํ›จ์”ฌ ๋” ๋ณต์žกํ•ด ์ง€๋ฏ€๋กœ ํ›จ์”ฌ ๋” ๋งŽ์€ ์ž‘์—… ์™ธ์—๋„ ์••์ถ• ๋œ ๋ฌธ์ž์—ด์— ์ €์žฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์••์ถ• ํ•ด์ œํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ๋ฐ”์ดํŠธ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‹ต๋ณ€

์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ES6, 905 ๋ฐ”์ดํŠธ

Whew .. 12 ์‹œ๊ฐ„์ œ ์‹œ๊ณ„๊ฐ€ ์งง์ง€ ์•Š์€ ํ•ด๊ฒฐ์ฑ…์„ ์ฃฝ์˜€์Šต๋‹ˆ๋‹ค .
์•„์Šคํ‚ค ์•„ํŠธ 898์ž๋ฅผ ์ธ์‡„ํ•˜๊ธฐ์œ„ํ•œ 905 ๋ฐ”์ดํŠธ

_=>(a=(d=Date)(c=new d(),z=O=>Math.abs(new d(a[3]+O)-c)).split` `)[1]=='Apr'&a[2]==20|~a[4].search(/(04|16):20/)?'0,0,2ca2o,0,10e,0,0,1eu9z4,0,22w,1ulajuo,0,bklxc,2zgg,i,120gdfk,8lc,1s1s,15,j0jf9c,7em8,tac,10,190zcw0,tm8w,ksk,hra0ia,mihog0,3aels,wy,iv8e15,b98u80,cvs1s,575,9fm71g,190zcw0,bg7vgg,1t4,148d4lu,121pblx,b9ea68,2b36,iv8hn5,9zleso,15kytz4,98cp,4fwpwk,zir9ud,1h9u3ln,11c6vb4,84kda8,kbuo05,b98u84,14possy,k9su6i,a26hwk,zvft34,kavrpc,1tn1j4,1r3jis,kamgao,a5bhq8,2b2q,beyt6x,j0y810,muhiww,9xl,a5b7s8,14npcwi,1bkfw1s,4ys,14lipw4,kalr6k,0,1aq,kalqzg,0,48m,2j6hqf,zik0zk,0,33mcjk,0,5'.split`,`.map(a=>('0'.repeat(32)+parseInt(a,36).toString(2)).substr(-32)).join``.match(/.{1,3}/g).map(a=>` .:\`|;'
`[parseInt(a,2)]).join``:~~((T=Math.min(z('/4/20'),z(` ${a[1]} ${++a[2]} 0:4:20`),z(' 4:20'),z(' 0:4:20'),z(' 16:20'),z(' 0:16:20'))/1000)/60)+` minutes and ${~~(T%60)} seconds left until your next hit.`

Ungolfed ์ฝ”๋“œ

์ฐธ๊ณ  : ungolfed ์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

function() {
    // (all vars here are actually global)
    var d = Date; // short reference to Date object
    var dateString = Date() // "Tue Apr 12 2016 20:13:00 GMT+0200 (W. Europe Daylight Time)"
    .split` `; // ["Tue", "Apr", "12", ...]
    var currentDate = new Date();
    dateDiff = function(toAppend) {
        return Math.abs( // no dates in the past
            new Date(dateString[3] + toAppend) // new Date('2016' + something)
            - currentDate // substract the current date.
                          // Thanks JS for the datetime implementation
        );
    }

    if ((dateString[1] == 'Apr' & dateString[2] == 20) |
        ~dateString[4].search(/(04|16):20/)) { // if the time doesn't contain 04:20 or
                                               // 16:20, this will return -1. ~-1 is 0
                                               // and thus falsy
        alert(printAscii());
    } else {
        alert(printTimeLeft());
    }
}

function printAscii() {
    var magicString = '0,0,2ca2o,0,10e,0,0,1eu9z4,0,22w,1ulajuo,0,bklxc,2zgg,i,120gdfk,8lc,1s1s,15,j0jf9c,7em8,tac,10,190zcw0,tm8w,ksk,hra0ia,mihog0,3aels,wy,iv8e15,b98u80,cvs1s,575,9fm71g,190zcw0,bg7vgg,1t4,148d4lu,121pblx,b9ea68,2b36,iv8hn5,9zleso,15kytz4,98cp,4fwpwk,zir9ud,1h9u3ln,11c6vb4,84kda8,kbuo05,b98u84,14possy,k9su6i,a26hwk,zvft34,kavrpc,1tn1j4,1r3jis,kamgao,a5bhq8,2b2q,beyt6x,j0y810,muhiww,9xl,a5b7s8,14npcwi,1bkfw1s,4ys,14lipw4,kalr6k,0,1aq,kalqzg,0,48m,2j6hqf,zik0zk,0,33mcjk,0,5' // ;)
    var splitted = magicString.split`,`;
    var binarySequence = splitted.map(function(piece) {
        return ('0'.repeat(32) + // 000000000... this will be padded
            parseInt(a,36) // parseInt('190zcw0',36) -> 000000002722627584
            .toString(2) // -> 10100010010010000000000000000000
        ).substr(-32) // left pad binary sequence
    }).join``; // create one big binary sequence from several smaller
    var groupsOfThree = binarySequence.match(/.{1,3}/g);
    return groupsOfThree.map(function(three) {
        return ` .:\`|;'\n`[parseInt(a,2)]; // magic.. turn 010 into : etc
    }).join``; // create them blaze
}

function printTimeLeft() {
    // this is way longer than it should be.. probably
    var minimumTimeDifference = Math.min(
        dateDiff('/4/20'), // -> Difference between now and 2016/4/20 00:00:00
        dateDiff(' 4:20'), // 2016 04:20:00.. Sadly the 2016 is needed (i think)
        dateDiff(' 0:4:20'), // 2016 00:04:20
        dateDiff(' 16:20'), // Damn 12 hour clock :(
        dateDiff(' 0:16:20'),
        dateDiff(` ${dateString[1]} // 2016 Apr
                   ${dateString[2]+1} // 2016 Apr 13 (12+1)
                   0:4:20` // Check the first occurrence of 4 minutes and 20 seconds
                           // the next day
    )
    var timeInSeconds = minimumTimeDifference / 1000;
    return Math.floor(timeInSeconds) + // ~~ works like Math.floor
        ` minutes and ${Math.floor(timeInSeconds%60)} seconds left until your next hit.`;
}

์‹œ๋„ ํ•ด๋ด!

f=
_=>(a=(d=Date)(c=new d(),z=O=>Math.abs(new d(a[3]+O)-c)).split` `)[1]=='Apr'&a[2]==20|~a[4].search(/(04|16):20/)?'0,0,2ca2o,0,10e,0,0,1eu9z4,0,22w,1ulajuo,0,bklxc,2zgg,i,120gdfk,8lc,1s1s,15,j0jf9c,7em8,tac,10,190zcw0,tm8w,ksk,hra0ia,mihog0,3aels,wy,iv8e15,b98u80,cvs1s,575,9fm71g,190zcw0,bg7vgg,1t4,148d4lu,121pblx,b9ea68,2b36,iv8hn5,9zleso,15kytz4,98cp,4fwpwk,zir9ud,1h9u3ln,11c6vb4,84kda8,kbuo05,b98u84,14possy,k9su6i,a26hwk,zvft34,kavrpc,1tn1j4,1r3jis,kamgao,a5bhq8,2b2q,beyt6x,j0y810,muhiww,9xl,a5b7s8,14npcwi,1bkfw1s,4ys,14lipw4,kalr6k,0,1aq,kalqzg,0,48m,2j6hqf,zik0zk,0,33mcjk,0,5'.split`,`.map(a=>('0'.repeat(32)+parseInt(a,36).toString(2)).substr(-32)).join``.match(/.{1,3}/g).map(a=>` .:\`|;'
`[parseInt(a,2)]).join``:~~((T=Math.min(z('/4/20'),z(` ${a[1]} ${++a[2]} 0:4:20`),z(' 4:20'),z(' 0:4:20'),z(' 16:20'),z(' 0:16:20'))/1000)/60)+` minutes and ${~~(T%60)} seconds left until your next hit.`

alert(f())

๋‹ค์Œ ์ฝ”๋“œ ์Šค ๋‹ˆํŽซ์—์„œ ์•„์Šคํ‚ค ์•„ํŠธ๋ฅผ ํ…Œ์ŠคํŠธ ํ•  ๋‚ ์งœ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

day=prompt('Day?', 12);
month=prompt('Month?', 'Apr');
f=
_=>(a=(d=Date)(c=new d(),z=O=>Math.abs(new d(a[3]+O)-c)).split` `)[1]==month&a[2]==day|~a[4].search(/(04|16):20/)?'0,0,2ca2o,0,10e,0,0,1eu9z4,0,22w,1ulajuo,0,bklxc,2zgg,i,120gdfk,8lc,1s1s,15,j0jf9c,7em8,tac,10,190zcw0,tm8w,ksk,hra0ia,mihog0,3aels,wy,iv8e15,b98u80,cvs1s,575,9fm71g,190zcw0,bg7vgg,1t4,148d4lu,121pblx,b9ea68,2b36,iv8hn5,9zleso,15kytz4,98cp,4fwpwk,zir9ud,1h9u3ln,11c6vb4,84kda8,kbuo05,b98u84,14possy,k9su6i,a26hwk,zvft34,kavrpc,1tn1j4,1r3jis,kamgao,a5bhq8,2b2q,beyt6x,j0y810,muhiww,9xl,a5b7s8,14npcwi,1bkfw1s,4ys,14lipw4,kalr6k,0,1aq,kalqzg,0,48m,2j6hqf,zik0zk,0,33mcjk,0,5'.split`,`.map(a=>('0'.repeat(32)+parseInt(a,36).toString(2)).substr(-32)).join``.match(/.{1,3}/g).map(a=>` .:\`|;'
`[parseInt(a,2)]).join``:~~((T=Math.min(z('/4/20'),z(` ${a[1]} ${++a[2]} 0:4:20`),z(' 4:20'),z(' 0:4:20'),z(' 16:20'),z(' 0:16:20'))/1000)/60)+` minutes and ${~~(T%60)} seconds left until your next hit.`

alert(f())

๋‹ต๋ณ€