Nháy mắt mười hai


43

Nhiều thiết bị điện tử, đặc biệt là những thiết bị cũ, sẽ hiển thị nhấp nháy 12:00khi thời gian chưa được đặt. Mục đích của thử thách này là tái tạo lại điều này.

Cụ thể, nhiệm vụ là hiển thị 12:00--:--luân phiên trong một vòng lặp vô hạn .

Khoảng thời gian nên là 1 giây, chia đều trong hai khoảng thời gian 0,5 giây. Ở đây "1 giây" và "đều" có thể được giải thích một cách lỏng lẻo. Ví dụ, có thể chấp nhận được nếu mã tạm dừng 0,5 giây giữa khi hiển thị các chuỗi, ngay cả khi khoảng thời gian kết quả sẽ cao hơn 1 giây một chút. Tạm dừng ban đầu trước khi hiển thị chuỗi đầu tiên được chấp nhận.

Mỗi chuỗi mới có thể được hiển thị bằng cách thay thế chuỗi cũ hoặc trong một dòng mới . Khoảng trắng lưu trữ được cho phép, ngoại trừ rằng nếu mỗi chuỗi mới nằm trên một dòng khác nhau thì sẽ không có các dòng trống giữa các chuỗi liên tiếp.

Mã ngắn nhất trong byte thắng.


1
điều này có được tính là phức tạp kolmogorov không?
FlipTack

@FlipTack Tôi nghĩ vậy, nhưng tôi không chắc. Suy nghĩ, có ai không?
Luis Mendo

@LuisMendo Tôi không nghĩ vậy, tôi nghĩ thẻ KG chủ yếu dành cho một chuỗi cố định. Điều này có nhiều hơn cho nó, các chuỗi chờ và xen kẽ.
Rɪᴋᴇʀ

Có thể gửi 0,5 giây trước khi hiển thị đầu ra ban đầu?
FlipTack

1
IMHO, tuyên bố "Mỗi chuỗi mới có thể được hiển thị bằng cách thay thế chuỗi cũ hoặc trong một dòng mới" làm cho thử thách này không thú vị.
Đặt

Câu trả lời:


4

Thạch , 20 byte

.“12:00“--:--”ṄœS¥€ß

Làm thế nào nó hoạt động

.“12:00“--:--”ṄœS¥€ß  Main link. No arguments.

.                     Set the return value to 0.5.
 “12:00“--:--”        Yield ["12:00", "--:--"].
                 ¥    Combine the two links to the left into a dyadic chain.
              Ṅ       Print the left argument.
               œS     Sleep as many seconds as the right argument specifies.
                  €   Map the created dyadic chain over the string array, with
                      right argument equal to the return value, i.e., 0.5.
                   ß  Recursive call the main link.

Vì vậy, về cơ bản, bạn đang biến cả hai chuỗi trong danh sách thành các liên kết của riêng chúng, với lệnh ngủ được thêm vào? Ngọt.
steenbergh

32

HTML / CSS, 131 108 106 101 + 18 17 = 149 126 125 123 118 byte

a{background:#FFF;margin:-5ch;animation:a 1s steps(2,start)infinite}@keyframes a{to{visibility:hidden
<tt>--:--<a>12:00

Chỉnh sửa: Đã lưu 23 byte nhờ @insertusernamehere. Đã lưu 1 byte bằng cách chuyển từ <pre>sang <tt>. Đã lưu 2 byte nhờ @darrylyeo. Đã lưu 5 byte nhờ @DBS.


1
@insertusernamehere Bah, tôi đã đánh gôn a{position:absolute}nhưng hoàn toàn quên mất pre...
Neil

Bạn vẫn cần thẻ trước? các css chỉ đề cập đến a.
ev3commander

@ ev3commander Tôi đã lưu một byte bằng cách chuyển sang <tt>.
Neil

Bạn có thể loại bỏ }}hoàn toàn cuối cùng .
darrylyeo

Tôi nghĩ rằng bạn sẽ có thể đơn giản hóa margin-leftđể marginkể từ khi bạn đang làm việc từ phía trên bên trái nào margin:-5ch;nên có tác dụng tương tự.
DBS

15

Shell và pv, 26 byte

Công yescụ này sử dụng công cụ tiêu chuẩn và pv phần tử đường ống Shell để đo dữ liệu đi qua

yes '12:00
--:--'|pv -qlL2

2
Giải pháp hay, nhưng ngôn ngữ có lẽ nên được nêu là "Shell và pv", vì dù sao (theo hiểu biết của tôi) pv không được bao gồm trong bất kỳ shell nào cũng không phải là một phần của các tiện ích cốt lõi GNU hoặc BSD.
Spector Mitchell

1
Đó là một mẹo hay! (mà tôi tin rằng đã được tiên phong bởi @Digital Trauma ở đây ). Mặc dù trong trường hợp này, nó cảm thấy hơi trái ngược với tinh thần của thử thách, vì tuyên bố sứ mệnh là "hiển thị 12:00 và -: - thay thế" (bắt chước một màn hình nhấp nháy), nhưng mã này sẽ chỉ xuất ra từng ký tự với tốc độ không đổi 12 ký tự mỗi giây thay vào đó. Điều đó có nghĩa là "12:00" sẽ chỉ ở trên màn hình trong 1/12 (0,08) giây ("12: 0 _" = 1 / 12s => "12:00" = 2 / 12s => "-").
zeppelin

@zeppelin cảm ơn bạn đã tham khảo: Tôi đã sử dụng mẫu của @ DigitalTrauma -qlL2để tạo 2 dòng bằng giây thay vì -qL12: 12 ký tự bằng giây. Độ dài của kịch bản là như nhau
F. Hauri

15

Python2, 80 75 73 69 67 66 byte

import time
n=0
while[time.sleep(.5)]:print"1-2-::0-0-"[n::2];n^=1

Tôi nhận thấy rằng ma thuật chuỗi của tôi dài hơn một chút so với chọn chuỗi từ một mảng. Nevermind, tìm ra nó.

Giải thích :

  • Tôi đặt bộ đếm n thành 0, sẽ được chuyển từ 0 đến 1.

  • Tôi lặp vô tận với vòng lặp while 1.

  • Tôi tạo một chuỗi 1-2-::0-0-, trong đó chứa chuỗi 12:00--:--xen kẽ.

    • Bắt đầu từ chỉ số 0 với bước 2, chúng tôi nhận được: 12:00

    • Bắt đầu từ chỉ số 1 với bước 2, chúng tôi nhận được: --:--

  • Tôi sử dụng n để tạo chuỗi lặp lại 0 , 1 , 0 , 1 , 0 ... đây sẽ là chỉ số bắt đầu của chuỗi.

    • Sử dụng n^=1, trong mỗi vòng lặp, chúng ta có được chuỗi đó. ^là nhà điều hành XOR.
    • Nếu n == 0 -> n^=1kết quả là 1
    • Nếu n == 1 -> n^=1kết quả bằng 0
  • Tôi in chuỗi và ngủ ( .5-> 0.5) giây.

@FlipTack đã lưu 4 byte! -> Đặt vòng lặp trong một dòng.

@Rod đã lưu 2 byte! -> n+=1đến n^=1, do đó n%2để n.

@xnor đã lưu một byte! -> while 1-> while[time.sleep(.5)].


7
bạn có thể thay thế n+=1với n^=1, và sau đó sử dụng [n::2], tiết kiệm 2 byte và tránh số lượng lớn c:
Rod

4
nếu bạn thay đổi print"1-2-::0-0-"[n::2]thành print"\b"*6+"1-2-::0-0-"[n::2],nó sẽ thêm một vài byte nhưng nó sẽ nhấp nháy tại chỗ
Buzz

1
@Buzz bạn có thể sử dụng \rthay vì \b\b\b...di chuyển đến đầu dòng. Nhưng dù sao, điều này sẽ chỉ thêm byte vào giải pháp hiện tại.
FlipTack

Bạn có thể lưu một byte bằng cách làm while[time.sleep(.5)]:.
xnor

@xnor Tôi rất chắc chắn, rằng điều này không thể được đánh gôn nhiều hơn. Trang web này tiếp tục làm tôi ngạc nhiên. Cảm ơn!
Yytsi

15

Octave, 63 62 61 55 byte

c='--:--00:21';while c=flip(c)disp(c(1:5));pause(.5)end

Lưu hai byte nhờ Tom Carpenter! Sử dụng một chuỗi thay vì hai chuỗi trong một mảng ô ngắn hơn.

Giải trình:

c='--:--00:21';  % A string where the 5 first characters are --:-- or 12:00 when reversed
while c=flip(c)  % A string is always considered true in Octave, so this will loop forever
                 % while flipping the order of the string each time
 disp(c(1:5)     % display the 5 first characters of the string c
 pause(.5)       % Pause 0.5 second
end              % End loop

Một vài byte được lưu vì Octave không yêu cầu dấu hai chấm hoặc dấu chấm phẩy giữa flip(c)disp(), và giữa pause(.5)end.


1
Ý tưởng tốt đẹp để sử dụng flipthay vì một quầy!
Luis Mendo

11

JavaScript, 59 byte

y=1;setInterval('console.log(["12:00","--:--"][y^=1])',500)

Giải trình

setInterval('...',500) đặt một khoảng thời gian để thực thi mã trong chuỗi cứ sau 500 mili giây hoặc 1/2 giây.

y=1đặt một biến y, thành 1 ban đầu. Theo cách đó, điều đầu tiên được in là 12:00yđược sử dụng để truy cập vào mảng.

console.log(...)ghi lại bất cứ điều gì vào giao diện điều khiển, trong này 12:00hoặc --:--.

["12:00","--:--"][y^=1]tạo một mảng với các chuỗi chứa cả hai trạng thái. Sau đó, yđược sử dụng để truy cập một trong các yếu tố. Cuối cùng, ^=hoặc toán tử hợp chất XOR không y = y ^ 1. Điều này chỉ đảo ngược bit vì 1 ^ 1là 0 và 0 ^ 1là 1, tương tự như những gì @TuukkaX đã làm . Bằng cách này, chuỗi được ghi xen kẽ giữa hai phần tử trong mảng và do đó tạo ra hiệu ứng nhấp nháy.


Đã có thể lưu một byte bằng cách này:y=1;setInterval('console.log(y?"12:00":"--:--");y=!y',500)
woutr_be

Mẹo ETHproductions tại câu trả lời của tôi : You can save some bytes with setInterval(...,i=500) :-). Về cơ bản chúng tôi cũng có câu trả lời tương tự và nó cũng hiệu quả với bạn.
Christoph

11

V , 31 30 27 25 24 byte

Đã lưu 5 byte nhờ @ nmjcman101 bằng cách hoán đổi thứ tự 12:00--:--do đó kcó thể xóa bất kỳ bằng cách xóa òđể cuối cùng có thể thêm nó vào

Đã lưu 1 byte nhờ @DJMcMayhem bằng cách đặt cả hai 12:00--:--trong một dòng

i12:00--:--<ESC>bDòVp:sl500m

Giải pháp cũ:

i12:00<ESC>ò:sl500m
Óä/-
:sl500m
uò

<ESC>0x1b

Hexdump:

00000000: 6931 323a 3030 2d2d 3a2d 2d1b 6244 f256  i12:00--:--.bD.V
00000010: 703a 736c 3530 306d                      p:sl500m

Giải trình

i12:00--:--<ESC>   inserts 12:00\n--:--
bD                 go to the beginning of --:-- and delete it
ò                  recursively do:
 Vp                 select line and paste (effectively doing a replace)
 :sl500m            sleep for 500 milliseconds
                   the last ò is added implicitly at the end

Gif (lỗi thời)

Lưu ý: Tôi đã bật đánh dấu

giff


7
Bạn đã chớp mắt theo nghĩa đen trong gif đó :-)
Luis Mendo

Thứ hai òđược đưa ra ngầm, vì vậy bạn có thể loại bỏ nó.
DJMcMayhem

@DJMcMayhem Nó, vì một số lý do, không hoạt động mà không có lần thứ hai ò. Nó chỉ chạy một lần
Kritixi Lithos

2
Hoán đổi thứ tự đầu vào của bạn để bạn không cần cái đầu tiên k. Sau đó, thay vì pkddbạn chỉ có thể sử dụng Vp, như ptrong chế độ chọn trực quan, hoán đổi hiệu quả lựa chọn với thanh ghi mặc định.
nmjcman101

1
Tôi biết bạn có vấn đề khi xóa ò, nhưng nếu nó hoạt động ngay bây giờ, tôi nghĩ bạn sẽ có thể thay đổi nó òVp:sl500mvà để V thêm ^Mò2 byte.
nmjcman101

11

bash, 58 56 45 byte

lưu 3 byte bằng cách triệt tiêu --sau khi set1 arg là một số.

set 12:00 --:--;for((a=1;;a=3-a)){ echo ${!a};sleep .5;}

Đã lưu 16 byte bằng cách sử dụng cú pháp của @DigitalTrauma :

f()(echo $1;sleep .5);f 12:00;f --:--;exec $0

Sau đó mất 5 byte vì bình luận của zeppelin .

Điều này không thể được kiểm tra trên dòng lệnh. Khi chúng tôi tham gia $0, điều này phải được viết thành một kịch bản để chạy.

Chuyển hướng

Với một chút chuẩn bị, điều này có thể trở nên tốt đẹp ( 412 byte ):

set -- "         ▗▖         
▗▄▄▖▗▄▄▖ ▝▘ ▗▄▄▖▗▄▄▖
         ▗▖         
         ▝▘         " " ▟▌ ▟▀▜▖ ▗▖ ▗▛▙ ▗▛▙ 
 ▐▌  ▗▟▘ ▝▘ █▗▐▌█▗▐▌
 ▐▌ ▗▛▗▖ ▗▖ ▜▖▟▘▜▖▟▘
▝▀▀▘▀▀▀▘ ▝▘  ▀▘  ▀▘ "
r=`tput cup 0`
clear;for((a=1;;a=3-a)){ printf "$r${!a}";sleep .5;}

Hoặc thậm chí hai dòng giống nhau nhưng với:

set -- '                                            






      HM!          .o#HMMMMM#o.                 .o#MMMMH#\\         .d#MMMMH#\\
    _HMMi         ?MMH*"""`"MMMb               dMMH"""`*MMH,      dMMH"""`*MMH.
##HMMMMMi        |MMP"       9MML             ?MMP      `MMM.    dMM?      `MMM.
`""`"9MM|        dMM!        -MMR     HMH}   .MMM        |MM}   .MMH        |MM|
     |MM|         "`         JMMT     dHH}   |MM|         MMM   |MM|        -MMM
     |MM!                 .,HMM*             |MM|         MMM.  ]MM|         MMM
     |MMi              _o#MMH*"              |MM|         MMM   {MM|         MMM
     |MMi           .dHMM#""                 |MM|         MMM"  {MM|        .MMM
     |MMi         .HMM*"                     `MM6        ,MMR   |MM}        |MMF
     |MMi        ,MMP"                        9MM,       dMM|    HMM,       dMM"
     {MMi        MMM?\\o,\\\\\\\\\\\\\\\\,     q##+    `HMM\\    .dMM?     `HMH\\    .dMM?
     |MM|       :MMMMMMMMMMMMMMM[     HMMk     `*HMM##MMM#"       `*HMM##MMMP"
      "`          "     ` ` ` `                   """"`""            """"""    ' '









                                      MHM|                                      
                                      HHH|                                      

               ______.  ._______.            ________.  ._______.               
               MMMMMM:  {MMMMMMM|            &MMMMMMM:  |MMMMMMM[               


                                      ###|                                      
                                      MMM|                                      
                                                                               '

3
s(){ echo $1;sleep .5;};for((;;)){ s 12:00;s --:--;}
thao tác

2
@manatwork Đẹp! Tôi nghĩ nó không giống kịch bản! Bạn phải xuất bản chúng như một câu trả lời!
F. Hauri

Tôi phải thừa nhận rằng nghệ thuật ASCII hoàn toàn tuyệt đẹp ... Bạn đã sử dụng một công cụ để tạo ra nó hay bạn đã làm nó bằng tay?
Sản phẩm ETH

2
@ETHproductions Tôi sử dụng Ghostscript : printf '%%\041\n/Helvetica findfont\n24 scalefont\nsetfont\nnewpath\n%s %s moveto\n(%s) show\nshowpage\n' -2.456 0.550003 12:00 | gs -sDEVICE=pnmraw -r600 -g470x146 -sOutputFile=- -q - | pnmscale -width 160 | ppmtopgm | pgmtopbm | pbmtoascii -2x4;-)
F. Hauri

1
... hoặcf()(echo $1;sleep .5);f 12:00;f --:--;$0
Chấn thương kỹ thuật số

9

Perl, 49 byte

{select$,,$,,$,,0.5;say$|--?"12:00":"--:--";redo}

Perl sleepcó thể không ngủ trong thời gian dưới 1 giây, do đó việc sử dụng select undef, undef, undef, .5(golfed bằng cách thay thế undefbằng $,) để ngủ .5 giây.
Điều thú vị khác: $|chỉ có thể giữ 0hoặc 1. Vì vậy, $|--chỉ cần thay đổi giá trị của nó, từ 0đến 1.
Và cuối cùng, {... ;redo}hoạt động như một vòng lặp vô hạn.


6

*> <> , 43 42 byte

<v":1200----"
S>@5dov>~r@@}r5
1&}o:&<^!?:-

Hãy thử nó ở đây!

Tôi cảm thấy mình có thể rút ngắn lại, tôi có một vài ý tưởng để thử ... Về cơ bản, điều này tạo ra một đống :1200----. Nó cô lập :và lật ngăn xếp, chèn :vào giữa một trong hai ----hoặc 1200(tùy thuộc vào bất kỳ vị trí nào ở cuối ngăn xếp).

Tôi cũng nên lưu ý rằng chỉ * * <> hướng dẫn sử dụng này là S(ngủ), nếu không đây là chương trình> <> thích hợp.

Cập nhật: Đã lưu 1 byte bằng cách dịch chuyển :sang phải thay vì bảo vệ nó bằng một thanh ghi.

Giải trình

Khởi tạo

<v":1200----"

Ở đây chúng tôi xây dựng ngăn xếp mà chúng tôi sẽ sử dụng cho vòng đời của chương trình.

<              move the IP left
  ":1200----"  push ":1200----" to the stack
 v             move the IP down into "output time"

Thời gian đầu ra

 >@5dov
1&}o:&<^!?:-

Đây là phần mà thời gian thực sự được xuất ra. Đầu tiên 5 được đẩy vào ngăn xếp để vòng lặp bên dưới biết chạy 5 lần.

Initialisation:

 >@5dov

 >       move the IP right
  @      move the ":" back two spaces in the stack
   5     push 5 to the stack (let's call this `i`)
    do   output carriage return
      v  move IP down into "loop"

Loop:

1&}o:&<^!?:-

      <       move the IP left
     &        place i onto the register
  }o:         output a character and shift the stack left
 &            place i back onto the stack
1          -  decrement i by 1
       ^!?:   if i == 0, exit to "recover and swap"

Phục hồi và trao đổi

S      >~r@@}r5

Ở đây chúng tôi phục hồi :từ vị trí mà nó tạo ra sau đầu ra và chúng tôi kết thúc với một ngăn xếp đảo ngược. Điều này thực sự thoát ra "thời gian đầu ra" độc đáo, gây ra một vòng lặp vô hạn.

       >         move the IP right
        ~        remove trailing i from stack
         r@@     reverse the stack and move ":" to the front
            }r   reverse the stack again, keeping ":" on the front
S             5  sleep for 500ms

Giải pháp 45 byte

<v[5"12:00"1
d/S5
o/!?l
v>]?v
 00.>0"--:--"5[

Hãy thử nó ở đây!

Đây cũng là một chương trình> <>.

Tôi thực sự nghĩ rằng nó có thể lưu một số byte với phương pháp này. Điều này khá đơn giản là đầu ra 12:00, sau đó --:--. Tôi lưu byte bằng cách sử dụng lại thường trình đầu ra o/!?l(tôi thậm chí còn sử dụng lại nhân bản đó như cả mục nhập và thoát). Tôi sử dụng nhiều ngăn xếp để lưu trữ trạng thái (có đầu ra 12hoặc --) và chọn trạng thái tôi nên xuất với v>]?v.

Giải thích đến sớm! (1/2)


6

HTML / CSS (chỉ Chrome), 80 + 4 = 84 byte

tt:after{content:"--:--";animation:a 1s infinite}@keyframes a{to{content:"12:00"
<tt>

Chỉnh sửa : Thuộc tính "nội dung" không thể hoạt hình theo đặc tả CSS , nhưng trên trình duyệt máy tính để bàn Chrome.


1
Có vẻ là cụ thể của Chrome. Ít nhất là không hoạt động trên Firefox. Đây không phải là một vấn đề, giải pháp vẫn còn hiệu lực, sẽ rất tốt để chỉ định nó.
thao tác

6

Noodel , không biên dịch 16 byte

--:-- 12:00ḷçėḍh

Noodel vẫn còn rất nhiều công việc đang tiến triển. Chỉ cần cố gắng để có được bàn chân của tôi ướt với một vài thách thức.

Thử nó:)

Làm thế nào nó hoạt động

--:--            # Creates the string literal "--:--" and places i into the front of the pipe.
                 # Space is a NOP command to separate the string literals.
      12:00      # Creates the string literal "12:00" and places it into the front of the pipe.
           ḷ     # Loop the following code unconditionally.
            ç    # Clear the screen and print a copy of what is in the pipe.
             ė   # Take what is in the front of the pipe and put it into the back.
              ḍh # Delay for half a second.

Đây là một đoạn mã :)

<div id="noodel" code="--:-- 12:00ḷçėḍh" input="" cols="10" rows="2"></div>

<script src="https://tkellehe.github.io/noodel/noodel-latest.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>


2
Nếu thông dịch viên sau ngày thử thách, vui lòng đánh dấu đây là "không cạnh tranh" :). Noodel trông gọn gàng, chắc chắn kiểm tra nó ra.
redstarcoder

@redstarcoder Rất tiếc! Cảm ơn, quên đặt nó.
tkellehe

Bạn có thể giải thích mã hóa? Nó bổ sung tới hơn 16 trong UTF-8.
devR Rich

1
Tôi nhìn vào liên kết của bạn, nó không giải thích được mã hóa. Bạn thấy, không phải tất cả các ký tự là 1 byte theo "mặc định" (UTF-8). Chỉ định một mã hóa hiện có hoặc tạo một mã hóa, ngược lại, đây là số byte sai. Cần có một bài viết meta ở đâu đó về điều này. Trừ khi bạn xác định mã hóa, đây là UTF-8 và là 22 byte. @tkellehe
devR Rich

1
Tìm thấy bài meta , btw.
devR Rich

5

QBIC , 37 33 byte

{sleep 01?@12:00`┘sleep 01?@--:--

Thật không may, QBasic chỉ có thể ngủ trong cả giây. Tôi sẽ thấy về việc nghĩ ra một phương pháp để sớm linh hoạt hơn. Tôi đã nhập 1 như 01để mô phỏng .5.

Giải trình:

{         Starts DO loop
sleep 01  Sleeps for 1 second
?@12:00`  Creates A$, sets value to "12:00" and prints A$
┘         Newline: a string literal doesn't break the line, so we need a newline to 
          control the compiled QBasic syntax
          <Rinse and repeat for "--:--">
          <DO-LOOP implicitly closed by QBIC>

Trong các bản dựng cũ hơn của QBIC $(không gian) là các ký tự dành riêng. Gọi một hàm QBasic cần khoảng trắng (như sleep x) hoặc $( left$(..)) yêu cầu một mã bằng chữ:

'QBASIC CODE`

Mã trong một khối mã theo nghĩa đen được truyền trực tiếp đến QBasic mà không bị phân tách bởi QBIC. Bằng cách giảm tải các chức năng từ các biểu tượng đó ( $đã trở thành 'và các dòng mới bây giờ (alt-217) thay vì ) các biểu tượng không còn được QBIC xem là ký tự đặc biệt và chỉ đơn giản được truyền lại. Điều tương tự cũng đúng đối với bảng chữ cái viết thường: nó được sử dụng để biểu diễn các biến số trong cả QBIC và QBasic và được giữ nguyên. Sử dụng chức năng QBasic không được triển khai trong QBIC (như SLEEP) chỉ đơn giản là vấn đề không sử dụng ký tự dành riêng QBIC. Điều này được thực hiện dễ dàng hơn với những thay đổi gần đây trong các ký hiệu lệnh.


4

JavaScript, 77 76 72 byte

setInterval('l=console.log,l("12:00"),setTimeout("l(`--:--`)",‌​500)',1e3)

Cảm ơn Kritixi Lithos cho 1 byte và L. Serne cho 4 byte!


1000có thể rút ngắn thành1e3
Kritixi Lithos

2
setIntervalsetTimeoutchấp nhận một chuỗi có mã làm đối số đầu tiên, vì vậy bạn có thể lưu 4B khác: setInterval('l=console.log,l("12:00"),setTimeout("l(-: -)",500)',1e3)
Luke

Ý `nghĩa của nó bây giờ là ES6, trong khi câu trả lời trước chỉ cần ES5.
Neil

4

Con trăn 2 88 85 73 71 byte

import time
c="--:--00:21"
while 1:print c[:5];c=c[::-1];time.sleep(.5)

Hãy thử nó ở đây!

Bằng cách mượn ý tưởng của Stewie Griffin về việc lật danh sách, chương trình đã được thực hiện. Phiên bản Ungolfed với lời giải thích:

import time                      # Import time module
c = "--:--00:21"                 # String with two values
while 1:                         # Infinite Loop
    print c[::5]                 # Print the first 5 chars in string
    c = c[::-1]                  # Flip the string
    time.sleep(.5)               # Wait 0.5 seconds

Cảm ơn @FlipTack đã lưu 14 byte!


1
Bạn có thể chơi golf thậm chí ngắn hơn bằng cách sử dụng chuỗi cắt, như thế này
FlipTack

4

PHP, 51 50 47

for(;;usleep(5e5))echo$i++%2?"--:--
":"12:00
";

1 byte được lưu do thao tác và 3 byte khác được lưu bởi insertusernamehere. Cảm ơn!


1
Nếu bạn di chuyển usleep(5e5)cuộc gọi đến fortham số thứ 3, ,dấu phân cách trở nên không cần thiết, lưu 1 ký tự.
manatwork

@manatwork cảm ơn! Tôi đã có while(1)lúc đầu.
Christoph

2
Bạn có thể tiết kiệm thêm 3 byte : Hủy bỏ các khoảng trắng giữa echo$ivà thay thế \nvới một newline thực tế.
insertusernamehere

@insertusernamehere ngay cả khi chơi golf điều này làm tổn thương đôi mắt của tôi: D nhưng hey nó hoạt động.
Christoph

3

Bình thường, 23 byte

#?=!Z"12:00""--:--".d.5

Trong mã giả:

                Z = 0
#               while 1:
 ?=!Z               if ( Z = not Z ):
     "12:00"            print("12:00")
                    else:
     "--:--"            print("--:--")
 .d.5               sleep(0.5)

Sử dụng biến preinitialized Zlà flip-flop và đảo ngược trạng thái của nó mỗi lần ifcố gắng kiểm tra điều kiện.


đặt .d5 ở phía trước của vòng lặp và xóa trích dẫn kết thúc
Maltysen

3

hồng ngọc, 47 42 byte

Chưa có câu trả lời nào của ruby, vì vậy đây là lần thử đầu tiên của tôi:

%w{12:00 --:--}.cycle{|a|puts a;sleep 0.5}

3

GNU sed, 39 byte

CHỈNH SỬA:

  • Hoán đổi giấc ngủi12: 00 (để làm cho mã nguồn trông đẹp hơn một chút)

Chơi gôn

s/^/sleep .5/
h
i12:00
e
i--:--
x
e
G
D

Giải thích

s/^/sleep .5/   #Put 'sleep .5' to the pattern space
h               #Copy pattern space to hold space
i12:00          #Print "12:00" (insert before a line) 
e               #Execute command that is found in pattern space
i--:--          #Print "--:--"
x               #Exchange the contents of the hold and pattern spaces
e               #Execute command that is found in pattern space

G               #Append a newline to the contents of the pattern 
                #space, and then append the contents of the hold
                #space to that of the pattern space.

D               #Delete text in the pattern space up to the 
                #first newline, and restart cycle with the 
                #resultant pattern space, without reading a new 
                #line of input.

Dùng thử trực tuyến!


3

dc (bash), 37 byte

[12:00][--:--][[rp!sleep .5]xlax]dsax

Điều này hoạt động bằng cách đẩy hai chuỗi "12:00" và "-: -" trên ngăn xếp và sau đó liên tục hoán đổi các giá trị, in vật phẩm ở đầu ngăn xếp và ngủ nửa giây.

Để chạy cái này, bạn có thể lưu nó trong một tập tin và sau đó gõ

tên tập tin dc

hoặc bạn có thể chạy nó trực tiếp từ dòng lệnh bash bằng cách gõ

dc <<< '[12:00] [-: -] [[rp! ngủ .5] xlax] dsax'


3

Perl 6 ,  48 41  34 byte

loop {print "\r",<--:-- 12:00>[$_=!$_];sleep .5}
loop {put <--:-- 12:00>[$_=!$_];sleep .5}
sleep .put/2 for |<12:00 --:-->xx*

sử dụng một forvòng lặp có thể làm cho nó ngắn hơn một chút:for |<12:00 --:-->xx* {sleep .5;.say}
smls

Thậm chí ngắn hơn nếu bạn sử dụng thực tế saytrả về 1:sleep .say/2 for |<12:00 --:-->xx*
smls

2

Thạch, 22 byte

®‘©ị“12:00“--:--”ṄœS.ß

Không hoạt động trên TIO. Bắt Jelly chạy trên Android với QPython3 cũng là một trải nghiệm thú vị.

Giải trình

®‘©ị“12:00“--:--”ṄœS.ß    Main link. No arguments. 
®                         Read the register. Initially 0.
 ‘                        Increment. 
  ©                       Save to the register.
   ị                      Get the n'th (wrapping) item of...
    “12:00“--:--”         ["12:00", "--:--"]
                 Ṅ        Print the string and a newline. 
                  œS      Sleep for...
                    .     ...0.5 seconds. (. is an alias for 0.5)
                     ß    Call this link again. 

1
Có ngủ không Bạn có thể thêm một lời giải thích?
steenbergh

1
@steenbergh Đã thêm. Xin lỗi vì sự chậm trễ, việc chỉnh sửa các thụt lề này để giải thích là một chút khó khăn trên ứng dụng SE với phông chữ không đơn cách.
PurkkaKoodari

2

Toán học, 38 byte

Dynamic@If[Clock[]>.5,"12:00","--:--"]

Giải trình

Clock[]

Xuất ra một biến đồng hồ quay vòng liên tục từ 0 đến 1 mỗi giây.

If[Clock[]>.5,"12:00","--:--"]

Nếu biến đồng hồ lớn hơn 0,5, xuất ra "12:00." Nếu không, đầu ra "-: -".

Dynamic@ ...

Làm cho chương trình động (cập nhật liên tục)


2

Javascript, 57 55

setInterval('console.log(++i%2?"12:00":"--:--")',i=500)

2 byte được lưu nhờ vào ETHproductions


3
Bạn có thể lưu một số byte bằng setInterval(...,i=500):-)
ETHproductions

2

Bản thảo 225 214

Chỉ để vui thôi! Đừng gửi cái này đến máy in thật !!

/Courier findfont 9 scalefont setfont{usertime 500 mod 5 lt{newpath 9 9 moveto 1 setgray 99 setlinewidth 99 99 lineto stroke 0 setgray}if newpath 9 9 moveto usertime 999 mod 500 lt{(--:--)}{(12:00)}ifelse show}loop

Thử nó:

gs -c '/Courier findfont 9 scalefont setfont{usertime 500 mod 5 lt{newpath 9 9 moveto 1 setgray 99 setlinewidth 99 99 lineto stroke 0 setgray}if newpath 9 9 moveto usertime 999 mod 500 lt{(--:--)}{(12:00)}ifelse show}loop'

hoặc là

cat <<eops >/tmp/blinkingTwelve.ps
%!
/Courier findfont
9 scalefont
setfont
{
  usertime 500 mod 5 lt {
    newpath
    9 9 moveto
    1 setgray
    99 setlinewidth
    99 99 lineto
    stroke
    0 setgray
  } if
  newpath
  9 9 moveto
  usertime 999 mod 500 lt {
    (--:--)
  } {
    (12:00)
  } ifelse
  show
} loop
eops

sau đó

gs /tmp/blinkingTwelve.ps
gv /tmp/blinkingTwelve.ps

Nhưng đừng cố mở cái này với người xem tinh vi hơn và quan tâm đến hình thu nhỏ của máy tính để bàn!


Nếu gs -c '...'lệnh nhắc một trang trắng, bạn có thể phải tăng cửa sổ hiển thị hoặc sử dụng độ phân giải nhỏ hơn: gs -r45 -c '...'hoặc giấy tờ nhỏ hơngs -r600 -g360x200 -c '...'
F. Hauri

2

Javascript (trong trình duyệt), 174 160 159 122 112 111 109 107 66 (91) byte

Tôi đã presử dụng vì sử dụng phông chữ đơn sắc không phải là một phần của yêu cầu, vì vậy số mới của tôi là 66 . Một số ký tự được thêm vào để sử dụng phông chữ đơn cách nhưng vì điều này là không cần thiết, tôi sẽ không đếm thêm 25 ký tự này.

Cảm ơn ETHproductions đã lưu 14 byte,

đến Kritixi Lithos để tiết kiệm 1 byte

để manatwork để tiết kiệm 1 3 byte,

đến Christoph để lưu thêm hai byte và

với bản thân tôi để tiết kiệm 37 byte bằng cách sử dụng [..][b^=1]thay vì setTimeout... và 10 lần nữa bằng cách thay thế function(){..}bằng dấu ngoặc kép ...

setInterval("document.body.innerHTML=++b%2?'12:00':'--:--'",b=500)
body{font-family:Courier}

... tệ hơn:

Từ 66 đến một cái gì đó nữa ...

... nhưng để giải trí, trên tinh thần của màn hình nhấp nháy:

SVG="http://www.w3.org/2000/svg";XLNK="http://www.w3.org/1999/xlink";
s=["1200","----"];p=0;function d(n){for(i=n.length;i>0;i--) {
  document.getElementById('n'+i).setAttribute('class','n'+n[i-1])}
  document.getElementById('sz').setAttribute('class','n'+n[0])}
setInterval("p=1-p;d(s[p])",500);
#svg2 { --c: #FF6;stroke:#432;stroke-width:12;stroke-linecap:round;stroke-linejoin:round; stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none; } path.b { fill:#543;stroke:none; } .blue     { --c: #68F; } .green    { --c: #6F8; } .red      { --c: #F88; } .dec rect  { stroke: var(--c); } .n1 #B { stroke: var(--c); }  .n1 #C { stroke: var(--c); } .n2 #A { stroke: var(--c); }  .n2 #B { stroke: var(--c); } .n2 #D { stroke: var(--c); }  .n2 #E { stroke: var(--c); } .n2 #G { stroke: var(--c); }  .n3 #A { stroke: var(--c); } .n3 #B { stroke: var(--c); }  .n3 #C { stroke: var(--c); } .n3 #D { stroke: var(--c); }  .n3 #G { stroke: var(--c); } .n4 #B { stroke: var(--c); }  .n4 #C { stroke: var(--c); } .n4 #F { stroke: var(--c); }  .n4 #G { stroke: var(--c); } .n5 #A { stroke: var(--c); }  .n5 #C { stroke: var(--c); } .n5 #D { stroke: var(--c); }  .n5 #F { stroke: var(--c); } .n5 #G { stroke: var(--c); } .n6 #A { stroke: var(--c); }  .n6 #C { stroke: var(--c); } .n6 #D { stroke: var(--c); }  .n6 #E { stroke: var(--c); } .n6 #F { stroke: var(--c); }  .n6 #G { stroke: var(--c); } .n7 #A { stroke: var(--c); }  .n7 #B { stroke: var(--c); } .n7 #C { stroke: var(--c); } .n8 #A { stroke: var(--c); }  .n8 #B { stroke: var(--c); } .n8 #C { stroke: var(--c); }  .n8 #D { stroke: var(--c); } .n8 #E { stroke: var(--c); }  .n8 #F { stroke: var(--c); } .n8 #G { stroke: var(--c); } .n9 #A { stroke: var(--c); }  .n9 #B { stroke: var(--c); } .n9 #C { stroke: var(--c); }  .n9 #D { stroke: var(--c); } .n9 #F { stroke: var(--c); }  .n9 #G { stroke: var(--c); } .n0 #A { stroke: var(--c); }  .n0 #B { stroke: var(--c); } .n0 #C { stroke: var(--c); }  .n0 #D { stroke: var(--c); } .n0 #E { stroke: var(--c); }  .n0 #F { stroke: var(--c); } .n11 #B { stroke: var(--c); } .n11 #C { stroke: var(--c); } .n11 #E { stroke: var(--c); } .n11 #F { stroke: var(--c); } .nA #A { stroke: var(--c); }  .nA #B { stroke: var(--c); } .nA #C { stroke: var(--c); }  .nA #E { stroke: var(--c); } .nA #F { stroke: var(--c); }  .nA #G { stroke: var(--c); } .nB #C { stroke: var(--c); }  .nB #D { stroke: var(--c); } .nB #E { stroke: var(--c); }  .nB #F { stroke: var(--c); } .nB #G { stroke: var(--c); } .nC #A { stroke: var(--c); }  .nC #D { stroke: var(--c); } .nC #E { stroke: var(--c); }  .nC #F { stroke: var(--c); } .nD #B { stroke: var(--c); }  .nD #C { stroke: var(--c); } .nD #D { stroke: var(--c); }  .nD #E { stroke: var(--c); } .nD #G { stroke: var(--c); } .nE #A { stroke: var(--c); }  .nE #D { stroke: var(--c); } .nE #E { stroke: var(--c); }  .nE #F { stroke: var(--c); } .nE #G { stroke: var(--c); } .nF #A { stroke: var(--c); }  .nF #E { stroke: var(--c); } .nF #F { stroke: var(--c); }  .nF #G { stroke: var(--c); } .nR #E { stroke: var(--c); }  .nR #G { stroke: var(--c); } .nO #C { stroke: var(--c); }  .nO #D { stroke: var(--c); } .nO #E { stroke: var(--c); }  .nO #G { stroke: var(--c); } .n- #G { stroke: var(--c); }  .n1 #y { stroke: var(--c); } .n1 #z { stroke: var(--c); }
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 645 230" id="svg2"> <defs id="dfs4"><g id="n"><path d="M 15,5 155,5 145,225 5,225 z" class="b"/> <path id="A" d="M 45,15 125, 15"/><path id="B" d="M 135,25 125,105"/><path id="C" d="M 125,125 115,205"/><path id="D" d="M 25,215 105,215"/><path id="E" d="M 25,125 15,205"/><path id="F" d="M 35,25 25,105"/><path id="G" d="M 35,115 115,115"/><rect id="P" width="5" height="5" ry="2.5" x="130" y="205"/></g><g id="s"><path d="M 10,5 35,5 25,225 0,225 z" id="a" class="b"/><rect id="y" width="5" height="5" ry="2.5" x="13.5" y="145"/><rect id="z" width="5" x="17" height="5" ry="2.5" y="75"/></g></defs><use id="n1" xlink:href="#n" /><use id="n2" xlink:href="#n" transform="translate(150,0)" /><use xlink:href="#s" id="sz" transform="translate(305,0)"/><use id="n3" transform="translate(335,0)" xlink:href="#n" /><use id="n4" xlink:href="#n" transform="translate(485,0)" />
</svg>


1
1000có thể trở thành1e3
Kritixi Lithos

1
Bạn có thể lưu một loạt byte bằng cách loại bỏ tất cả các thể hiện của window.; window.setTimeoutcũng giống như setTimeout.
Sản phẩm ETH

1
ttngắn hơn prevà cũng ngụ ý việc sử dụng phông chữ đơn cách. (Chỉ là phần tử nội tuyến, không phải khối, nhưng điều này sẽ không tạo ra sự khác biệt ở đây.)b=document.body.append(a=document.createElement('tt'))
manatwork

1
d=document;d.body.append(a=d.createElement('tt'));setInterval("a.innerHTML=++b%2?'12:00':'--:--'",b=500)tiết kiệm 5 byte
Christoph

1
Có một lý do để tạo ra một yếu tố? setInterval("document.body.innerHTML=++b%2?'12:00':'--:--'",b=500)chỉ chậm trễ không gian đơn sắc ưa thích nhưng chỉ có 66 byte.
Christoph

2

QuickBASIC , 167 vết cắn (ngon)

a%=VAL(RIGHT$(STR$(TIMER*100),2))
b%=a%+50
IF b%>99THEN b%=b%-99
DO
c%=VAL(RIGHT$(STR$(TIMER*100),2))
IF c%=a% THEN PRINT"--:--"
IF c%=b% THEN PRINT"12:00"
LOOP

Tôi sẽ không bao giờ chiến thắng dù sao đi nữa. QB không có sàn () và cũng không có chức năng ngủ trong x mili giây. Do đó, điều này hoạt động bằng cách lấy phần dấu phẩy động của TIMER (trả về giây trôi qua kể từ nửa đêm, cộng với một phần của giây hiện tại được biểu thị dưới dạng thập phân hai chữ số). Sau đó, chúng tôi thêm một vòng lặp "50 đơn vị" vào đó để xác định khi nào pha nên chuyển từ "-: -" sang "12:00" và sử dụng số thập phân TIMER ban đầu cho công tắc từ "12:00" đến "--:--".

Cuối cùng, ngay cả khi chạy nó cũng tuân thủ QB4.5, trong DOSBox trên một máy khá mạnh sẽ bỏ qua các nhịp. Đó là bởi vì QB thực sự không đủ nhanh để thực hiện DO-LOOP và các đánh giá bên trong MS mà chúng tôi đang thực hiện so sánh. Sẽ cần một hộp từ TƯƠNG LAI!

Dù sao, bây giờ tôi đã nhìn 100, và tôi đã làm cho mọi sinh viên Đại học Mỹ hài lòng vì họ có thể có câu trả lời cho lớp Comp Sci của họ - vì họ vẫn đang dạy điều này ...


Bạn có thể loại bỏ một số không gian? tức là b% = b% - 99để b%=b%-99?
Rɪᴋᴇʀ

Vâng, tôi khá chắc chắn là có thể, nhưng tôi đã sử dụng IDE gốc, sau khi bạn nhấn enter ở cuối dòng, sẽ thêm chúng trở lại. Tôi phải chỉnh sửa nó bên ngoài IDE trong DOS, và sau đó tìm ra các tham số cho trình liên kết / trình biên dịch để kiểm tra xem giải pháp của tôi có còn hoạt động không ... Vì vậy, nó có thể ngắn hơn, nhưng không nằm trong khung nỗ lực của tôi.
Robert Lerner

Chà, bạn cần đánh golf mã này nếu không nó không phải là câu trả lời hợp lệ và sẽ bị xóa. Xin lỗi vì điều đó. (Tôi hoàn toàn hiểu ý của bạn, nhưng toàn bộ cộng đồng đã quyết định chống lại các câu trả lời không chơi gôn)
Rɪᴋᴇʀ

Điểm tốt, tôi sẽ loại bỏ không gian.
Robert Lerner

2

Clojure, 79 62 byte

V2

-17 byte bằng cách thay đổi từ vòng lặp lập chỉ mục khủng khiếp sang vòng lặp trong danh sách vô hạn.

Tạo một danh sách vô hạn "12:00""--:--"lặp đi lặp lại nhiều lần, sau đó sử dụng doseqđể liên tục kéo tin nhắn tiếp theo và in nó.

(doseq[m(cycle["12:00""--:--"])](Thread/sleep 500)(println m))

V1

(loop[i 0](Thread/sleep 500)(println(["12:00""--:--"]i))(recur(if(= 0 i)1 0))))

Tôi không thể nghĩ ra một cách hay để thu gọn các hằng số "12:00" và "-: -", vì vậy tôi phải viết mã cho chúng.

Ung dung:

(loop [i 0] ; Track which sign we showed last
    (Thread/sleep 500)
    (println (["12:00" "--:--"] i)) ; Index the vector to get the string to print
    (recur (if (= 0 i)1 0))) ; Swap the index, and loop again

2

Pushy , 22 byte (không cạnh tranh)

`--:`wO`12:0`&["500oWF

Câu trả lời này sử dụng hai ngăn xếp, bằng cách lật giữa chúng, lần lượt in các ký tự:

`--:`    \ Push these characters to stack 1
 w       \ Mirror around center, yielding "--:--"
 O       \ On the second stack...
 `12:0`  \ Push these characters
 &       \ Duplicate the last (for :00)

 [        \ Infinitely:
  "       \   Print the current stack
  500oW   \   Wait 500 milliseconds
  F       \   Swap stacks
          \ (Implicit end loop)

Các oWlệnh là một phần của một tập các lệnh thực nghiệm ghi lùi thách thức, làm cho câu trả lời này không cạnh tranh.


2

Windows PowerShell, 46 55 byte

function a{sleep -m 500;cls};for(){"12:00";a;"--:--";a}

Mã gốc:

a{sleep -m 500;cls};for(){"12:00";a;"--:--";a}
^ this won't work on other PCs. No idea why.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.