ได้เวลาท้าทายนาฬิกาแล้ว!


25

ฉันต้องการให้คุณสร้างนาฬิกาที่แสดงเวลาในรูปแบบนี้:

18 ----------
19 --------------------------------------------------

แสดง '18: 10 ' ชั่วโมงปัจจุบันและชั่วโมงถัดไปจะปรากฏขึ้นที่ด้านหน้าของบรรทัดตามด้วยช่องว่างและจำนวนขีดกลาง: ในบรรทัดแรกจำนวนนาทีที่ผ่านไปในชั่วโมงนี้และบรรทัดที่สองแสดงจำนวนนาทีที่มากขึ้น ที่จะไปในชั่วโมงนี้

เพื่อชี้แจง

  • นาฬิกาควรแสดงเวลาของระบบ หากการดึงเวลาจากแหล่งอื่นสะดวกกว่าก็ทำได้เช่นกัน มันอาจจะไม่ได้จะมาเป็น input
  • ที่18:00บรรทัดบนสุดเป็นเพียง18(อนุญาตให้ใช้ช่องว่างต่อท้าย แต่ไม่จำเป็น)
  • ที่18:59บรรทัดล่างคือ19 -
  • ชั่วโมง <10 มีการบุด้วยล่วงหน้า0( 01 -----) หรือจัดชิดขวา ( 1 -----) ไม่อนุญาตให้ใช้ตัวเลขหลักเดียวชิดซ้ายแม้ว่าเครื่องหมายขีดกลางจะเริ่มต้นที่ถูกต้อง ( 1 -----ไม่ถูกต้อง)
  • นาฬิกาควรแสดงชั่วโมงในรูปแบบ 24 ชั่วโมง
  • แม้ว่ามันจะเรียกว่ารูปแบบ 24 ชั่วโมง แต่จริงๆแล้ว24มันไม่ได้อยู่ในนั้น ในช่วงชั่วโมง 23 บรรทัดที่สองเริ่มต้นด้วยหรือ00 0
  • จอแสดงผลจำเป็นต้องได้รับการอัพเดตอย่างน้อยหนึ่งครั้งต่อนาที แต่ไม่จำเป็นต้องเกิดขึ้นใน00เวลาไม่กี่วินาที คุณสามารถอัปเดตบ่อยครั้ง / อย่างต่อเนื่องหากสะดวกกว่า แต่ผลลัพธ์ที่แน่นอนต้องยังคงชัดเจน - ไม่ใช่หนึ่งป้ายทั่วหน้าจอ

อินพุต

ไม่มี.

เอาท์พุต

  • ตามที่อธิบายไว้ข้างต้น ช่องว่างต่อท้ายเพื่อเลื่อนนาฬิกาไปยังตำแหน่ง 60-ish ได้รับอนุญาตบนทั้งสองบรรทัดบรรทัดใหม่ต่อท้ายจะได้รับอนุญาต
  • ต้องล้างหน้าจอเมื่อแสดงในนาทีถัดไป: ด้วยคำสั่งล้างหน้าจอหรือเพิ่มบรรทัดใหม่ไม่น้อยกว่า 30 บรรทัด

กฎเพิ่มเติม


ขอให้เรามีช่องว่างสองอันระหว่างหมายเลขกับขีดคั่นหรือไม่?
อดัม

6
"อัปเดตหนึ่งครั้งต่อนาที" - สามารถอัปเดตบ่อยขึ้นได้หรือไม่
smls

1
@smls ใช่คุณสามารถอัปเดตได้บ่อยเท่าที่คุณต้องการ ฉันจะเปลี่ยนสเปคเป็น 'อย่างน้อยหนึ่งครั้งต่อนาที'
steenbergh

1
@KritixiLithos ที่จะแยกการจัดตำแหน่งด้วยตัวเลขสองหลัก (9, 10 หรือ 23, 00) ดังนั้นไม่อนุญาต
steenbergh

1
หลังจาก 23 เป็นชั่วโมงถัดไป 24 หรือ 0 หรือไม่
Kritixi Lithos

คำตอบ:


2

MATL , 41 ไบต์

ขอบคุณ @Kundor ที่สังเกตเห็นความผิดพลาดตอนนี้แก้ไข

`XxFT"4&Z'@+24\OH&YAO'-'60@*5&Z'-|Y"hhD]T

ลองที่MATL ออนไลน์! แต่โปรดทราบว่าโปรแกรมจะถูกฆ่าหลังจาก 30 วินาทีดังนั้นจึงเป็นเรื่องยากที่จะจับการเปลี่ยนแปลงใด ๆ ในผลลัพธ์

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

`           % Do...while
  Xx        %   Clear screen
  FT        %   Push [0 1]
  "         %   For each k in [0 1]
    4&Z'    %     Push current hour
    @+      %     Add k
    24\     %     Modulo 24. This transforms 24 into 0
    OH&YA   %     Convert to base-10 string with 2 digits
    O       %     Push 0. Concatenating with chars will convert this to char,
            %     and char(0) will be displayed as a space
    '-'     %     Push '-'
    60@*    %     Push 60*k
    5&Z'    %     Push current minute
    -|      %     Absolute difference. This gives current minute for k==0,
            %     or 60 minus that for k==1
    Y"      %     Repeat '-' that many times
    hh      %     Concatenate the top three elements into a string
    D      %      Display
  ]         %   End
  T         %   Push true
            % End (implicit). Since the top of the stack contains true, this
            % gives an infinite loop

อาจจะเป็นผม แต่ที่ซ้ำสองเพียงบรรทัดบนสุดจะถูกพิมพ์ ...
steenbergh

@steenbergh มันใช้งานได้สำหรับฉันกับนาทีและวินาทีแทนที่จะเป็นชั่วโมงและนาทีดังนั้นการเปลี่ยนแปลงจะเห็นได้ง่าย: matl.suever.net/…
Luis Mendo

1
ใช่ใช้งานได้ - อันที่จริงแล้วมันอาจเจ๋งที่มีสิ่งนี้เป็น 3 และ 4 ของนาฬิกาของฉัน
steenbergh

@steenbergh: คุณยอมรับคำตอบนี้ แต่มันไม่ถูกต้อง - มันแสดงชั่วโมงหลังจาก 23 เป็น 24 ฉันเชื่อว่าคำตอบที่ถูกต้องสั้นที่สุดคือ Ruby one by Value Ink
Nick Matteo

@ kundor ขอบคุณที่สังเกต แก้ไขแล้วที่ราคา 3 ไบต์
Luis Mendo

11

TI-Basic, 94 ไบต์

" 
Repeat 99<length(Ans
Ans+"-
End
Ans→Str1
Repeat 0
getTime
ClrDraw
Ans{Ans(1)≠24,1,1
Text(0,0,Ans(1),sub(Str1,1,1+Ans(2
Text(6,0,Ans(1)+1,sub(Str1,1,61-Ans(2
End

ค่อนข้างตรงไปตรงมา นั่นคือสตริงที่มีหนึ่งช่องว่างในตอนเริ่มต้น ชั่วโมงจัดชิดขวา ใช้งานได้กับเครื่องคิดเลข TI-84 + เท่านั้นเนื่องจาก TI-83 ไม่มีนาฬิกาภายใน

แก้ไข: ขอบคุณ @kundor สำหรับการสังเกตว่าฉันไม่ได้ปิดลูปสุดท้าย แก้ไขแล้ว (+2 ไบต์)

แก้ไข # 2: ชั่วโมงแรกควรเป็นศูนย์ไม่ใช่ยี่สิบสี่ แก้ไขแล้วที่ราคา +14 ไบต์


ทุกคำสั่งนับเป็นหนึ่งไบต์?
Sygmei

@Sygmei โทเค็นส่วนใหญ่เป็นหนึ่งไบต์ใช่ อย่างไรก็ตามสัญญาณเช่นStr1, getTimeและsub(สองไบต์ในแต่ละ คุณสามารถเรียนรู้เพิ่มเติมได้ที่tibasicdev.wikidot.com/tokens
Timtech

คุณจะไม่มีลิงค์ไปยังโปรแกรมจำลองใช่ไหม?
steenbergh

ฉันขอแนะนำcemetech.net/projects/jstifiedแต่จำไว้ว่ามันผิดศีลธรรมในการใช้ ROM จากอินเทอร์เน็ตกับอีมูเลเตอร์นี้เว้นแต่คุณจะเป็นเจ้าของเครื่องคิดเลขประเภทนั้น
Timtech

1
อย่ากลัวที่จะคลิกที่ลิงก์เพราะอีมูเลเตอร์นั้นถูกต้องและขอให้คุณอัพโหลด ROM ของคุณเองก่อนที่มันจะทำงาน TI เคยให้พวกเขาใช้งานได้อย่างอิสระ แต่พวกเขาก็ไม่ได้มีอยู่แล้ว หากคุณสามารถหา TI-84 จากเพื่อนนั่นจะเป็นตัวเลือกที่ดีที่สุด
Timtech

9

แบตช์ 197 ไบต์

@echo off
set/ah=100+%time:~0,2%,m=1%time:~3,2%
cls
call:l
set/ah=(h-3)%%24+100,m=260-m
call:l
timeout/t>nul 60
%0
:l
set s=%h:~1% 
for /l %%i in (101,1,%m%)do call set s=%%s%%-
echo %s%

หมายเหตุ: บรรทัดที่ 10 มีช่องว่างต่อท้าย สำหรับฉัน%time%ฟอร์แมตชั่วโมงด้วยพื้นที่ว่างส่วนนำ แต่นาทีด้วยศูนย์นำ ฉันตัดสินใจว่าศูนย์นำหน้าเป็นรูปแบบผลลัพธ์ที่ง่ายขึ้นเนื่องจากทั้งหมดที่ฉันต้องทำเพื่อเพิ่ม 100 ชั่วโมงและลบตัวเลขแรก นาทีนั้นยากกว่า08หรือ09จะทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์แปดดังนั้นฉันจึงเติมคำนำหน้าการ1เพิ่ม 100 นาทีอย่างมีประสิทธิภาพโดยปรับออฟเซ็ตลูปให้เหมาะสมซึ่งเป็นไบต์ที่สั้นกว่าการลบ 100


7

Python 3.6, 110 114 112 ไบต์

from time import*
while[sleep(9)]:h,m=localtime()[3:5];print('\n'*50+'%2d '%h+'-'*m+f'\n{-~h%24:2} '+'-'*(60-m))

นี้ใช้ใหม่ F-สตริงการจัดรูปแบบในการบันทึกหนึ่งไบต์ ( f'\n{h+1:2} 'VS '\n%2d '%(h+1).) คุณสามารถเปลี่ยน[sleep(9)]ไป1เพื่อประหยัด 8 ไบต์ แต่แล้วมันก็ spams หน้าจอ

บันทึกหนึ่งไบต์เปลี่ยนwhile 1:...;sleep 60เป็นwhile[sleep(60)]:...ขอบคุณ TuukkaX

ฉันต้องใช้อีก 5 ไบต์เพื่อให้ชั่วโมงถัดไปแสดงหลังจาก 23 เป็น 0 แทนที่จะเป็น 24 เนื่องจาก OP เพิ่งแสดงความคิดเห็น :-(

กู้คืนหนึ่งไบต์ด้วยการนอนหลับเพียง 9 วินาทีแทนที่จะเป็น 60

ที่บันทึกไว้ไบต์ที่สองโดยใช้บิตเล่นซอย่น(h+1)%24ยืมมาจากราคาหมึกคำตอบทับทิม


คุณช่วยอธิบายหน่อยได้ไหมว่าทำไมคุณถึงใส่วงเล็บเหลี่ยมรอบเงื่อนไข if? จะไม่ได้มีช่องว่างระหว่างในขณะที่และการนอนหลับเป็น 1 ไบต์เมื่อเทียบกับ 2 ทั้งสองด้าน? แก้ไข: ไม่เป็นไรมันจะทำให้เป็นจริง ยุติธรรมพอสมควร
เงา

1
@shadow: sleepส่งคืนNoneซึ่งเป็นเท็จ
Nick Matteo

@ ToivoSäwén: sleepยังอยู่ในtimeโมดูลดังนั้นการนำเข้า * จะดีกว่า
Nick Matteo

5

Ruby, 98 95 91 ไบต์

อัพเดททุก 5 วินาที ใช้งานได้กับเทอร์มินัลสไตล์ Unix เท่านั้น

loop{t=Time.now;puts`clear`+"%02d %s
%02d "%[h=t.hour,?-*m=t.min,-~h%24]+?-*(60-m);sleep 5}

รุ่นพรอมต์คำสั่ง Windows, 95 92 ไบต์:

loop{t=Time.now;puts"\e[H\e[2J%02d %s
%02d "%[h=t.hour,?-*m=t.min,-~h%24]+?-*(60-m);sleep 5}

คุณสามารถใช้ backticks แทนระบบได้หรือไม่? `cls`vssystem'cls'
IMP1

ดูเหมือนจะไม่ได้ แต่คุณสามารถใช้h=t.hourแล้วใช้hแทนที่สองt.hourซึ่งจะช่วยประหยัด 3 ไบต์
IMP1

@ IMP1 แน่นอน backticks clsไม่ทำงานสำหรับ ขอบคุณสำหรับคำแนะนำอื่น ๆ ของคุณ!
ค่าหมึก

@ IMP1 ตามที่ปรากฏputs`clear`เป็นวิธีที่จะไปถ้าคุณใช้เทอร์มินัล Unix มันก็ไม่ได้ทำงานกับคำสั่งของ Windows clsพร้อมท์
หมึกมูลค่า

สำหรับ windows คุณสามารถputs"\e[H\e[2J"ล้างคอนโซลซึ่งฉันคิดว่าจะโกนได้สี่ไบต์ มันจะทำให้บรรทัดแรกของคุณอ่านloop{t=Time.now;puts"\e[H\e[2J%02d %s
IMP1

4

Perl 6 , 113 ไบต์

loop {$_=DateTime.now;.put for |('' xx 30),|([\+](.hour,1)».fmt('%2s')Z('-' Xx[\-](.minute,60)».abs));sleep 60}

ลองครั้งเดียวด้วยการหมดเวลาหนึ่งวินาที

หรือลองรุ่นที่มีการเปลี่ยนแปลงซึ่งแสดงผลลัพธ์ของการทำงานเป็นเวลาหลายชั่วโมง

ขยาย:

loop {                  # keep repeating forever

  $_ = DateTime.now;    # assign an object representing the current time

    .put                # print with trailing newline
                        # ( adds a space between numbers and dashes )

  for                   # for each of the following

    |(                  # make it a slip so that it is all part of one list

      '' xx 30          # 30 empty strings (30 empty lines)
    ),

    |(

        [\+](           # triangle produce
          .hour,        # the hour
          1             # the hour plus one

        )».fmt( '%2s' ) # both formatted to two element string ( space padded )

      Z                 # zipped with

        (
            '-'         # a dash

          Xx            # cross (X) using string repeat (x) operator

            [\-](       # triangle produce
              .minute,  # the minute
              60        # the minute minus 60

            )».abs      # absolute value of both
        )
    );

  sleep 60              # wait until the next minute
}

ตัวดำเนินการใดที่รองรับ 'สามเหลี่ยมผลิต' ใน[\+]มันเพิ่มและ[\-]ดูเหมือนว่าจะลบ มันทำงานกับการคูณและเช่นนี้หรือไม่?
Yytsi

@TuukkaX มันควรจะทำงานกับผู้ให้บริการมัดเกือบทั้งหมด โดยพื้นฐานแล้วจะเหมือนกับ[+] LISTที่ลดลงยกเว้นจะให้ค่ากลางแก่คุณ ดูหน้าเอกสารสำหรับการผลิต
แบรดกิลเบิร์ต b2gills

4

QBasic, 120 127 121 ไบต์

อย่าเปิดใช้งานนานเกินไปเพราะแล็ปท็อปของคุณจะติดไฟ ตอนนี้ประหยัด CPU ได้มากขึ้น 99.se%

CLS
m=TIMER\60
h=m\60
m=m MOD 60
FOR i=1TO 2
?USING"## ";h MOD 24;
FOR j=1TO m
?"-";
NEXT
?
h=h+1
m=60-m
NEXT
SLEEP 1
RUN

Ungolfed และคำอธิบาย

DO
    CLS
    totalMinutes = TIMER \ 60
    hour = totalMinutes \ 60
    minute = totalMinutes MOD 60

    FOR row = 1 TO 2
        PRINT USING "## "; hour MOD 24;
        FOR j = 1 TO minute
            PRINT "-";
        NEXT j
        PRINT

        hour = hour + 1
        minute = 60 - minute
    NEXT row

    SLEEP 1
LOOP

เราเริ่มต้นด้วยการล้างหน้าจอจากนั้นรับชั่วโมงและนาทีปัจจุบันTIMERซึ่งส่งคืนจำนวนวินาทีตั้งแต่เที่ยงคืน

นี่เป็นครั้งแรกที่ฉันได้ลองPRINT USINGดังนั้นฉันดีใจที่ได้พบว่ามันไม่ได้รับผลกระทบจากการเล่นโวหาร QBasic ปกติที่มีการพิมพ์จำนวนบวกด้วยพื้นที่ชั้นนำ ##เนื่องจากตัวระบุรูปแบบทำให้มั่นใจได้ว่าตัวเลขหลักเดียวนั้นถูกจัดเรียงชิดขวาและมีพื้นที่ว่างตามที่ต้องการ เราต้องใช้ลูปสำหรับยัติภังค์ แต่น่าเสียดายเนื่องจาก QBasic ไม่มีฟังก์ชันการทำซ้ำสตริง (ถ้าฉันเข้าใจผิดโปรดแจ้งให้ฉันทราบ!)

ข้อความทั้งหมดPRINTจบลงด้วย;การระงับการขึ้นบรรทัดใหม่ แต่หลังจากยัติภังค์เราต้องขึ้นบรรทัดใหม่ ดังนั้นโดดเดี่ยว?หลังจากFORวงด้านใน

SLEEP 1อยู่ในขณะนี้สิ่งที่จำเป็น ถ้าไม่มีมันหน้าจอก็จะหายไปอย่างรวดเร็วหลังจากที่พิมพ์ออกมาว่ามันเป็นแค่เรื่องริบหรี่ (ฉันใช้LOCATE 1แทนCLSตอนแรกด้วยเหตุผลนั้นจนกระทั่งฉันรู้ว่าCLSด้วยความSLEEPสั้นอยู่ดี) RUNรีสตาร์ทโปรแกรมจากด้านบน - วิธีที่สั้นที่สุดเพื่อให้ได้ลูปไม่สิ้นสุด


วิธีนี้จัดการชั่วโมงสุดท้ายของวันได้อย่างไร บรรทัดบนสุดอ่าน 23 แต่อะไรคือชั่วโมงที่บรรทัดล่างสุด
steenbergh

ฉันใช้ Note7 และคิดว่าจะใช้โปรแกรมนี้เพื่ออนาคตอันใกล้แทนที่นาฬิกาแถบสถานะของฉัน นั่นเป็นความคิดที่ดีหรือไม่?
owlswipe

@steenbergh อ๊ะคงที่ มันจะมีประโยชน์สำหรับคุณที่จะพูดถึงกรณีขอบในคำถาม
DLosc

@Dosc Nah ฉันแค่ล้อเล่น :)) แต่ใช่สมาร์ท !!
owlswipe

1
@steenbergh เขาพิมพ์ h MOD 24 ถ้าเริ่มแรก h = 23 จากนั้นวงรอบถัดไปของมัน 24 และได้รับการ modded ถึง 0 แต่ฉันอยากรู้ว่ามันทำงานได้ดี CLS จะลบบรรทัดแรกดังนั้นจึงไม่มีทั้งคู่ที่พิมพ์บนหน้าจอใช่ไหม?
Jens

4

Java 8, 313 300 299 ไบต์

import java.time.*;()->{for(int c=0,h=LocalDateTime.now().getHour(),m=LocalDateTime.now().getMinute(),i;;)if(c>30){c=0;String l="",u,d;for(i=0;i++<60;)l+="-";u=l.substring(0,m);d=l.substring(m);System.out.println((h<10?"0":"")+h+" "+u+"\n"+(h<9?"0":"")+(h+1)+" "+d);}else{c++;System.out.println();}}

การอัปเดตนี้จะทำซ้ำทุก ๆ 30 รอบของ while loop การทำซ้ำอีก 29 รายการเพียงพิมพ์บรรทัดใหม่

Updated

บันทึก13 14 ไบต์เนื่องจากความช่วยเหลือของ Kevin Cruijssen! ขอบคุณ!


สวัสดียินดีต้อนรับสู่ PPCG! ก่อนอื่นอนุญาตเฉพาะโปรแกรม / ฟังก์ชั่นเท่านั้นและรหัสปัจจุบันของคุณคือตัวอย่าง คุณจะต้องล้อมรอบด้วยวิธีการ (เช่นvoid f(){...}และจำเป็นต้องเพิ่มการนำเข้าที่จำเป็น (ในกรณีของคุณimport java.time.*;) ที่กล่าวว่ารหัสของคุณสามารถเล่นกอล์ฟในหลาย ๆ สถานที่เพื่อลดลงเป็น311 ไบต์ (แม้จะมีวิธีการเพิ่ม -declaration and import). (เนื่องจากมันยาวเกินไปสำหรับความคิดเห็นนี้ฉันได้ใส่มันไว้ในความคิดเห็นถัดไป .. xD)
Kevin Cruijssen

import java.time.*;void f(){for(int c=0,h=LocalDateTime.now().getHour(),m=LocalDateTime.now().getMinute(),i;;)if(c>99){c=0;String l="",u,d;for(i=0;i++<61;)l+="-";u=l.substring(0,m);d=l.substring(m);System.out.println((h<10?"0":"")+h+" "+u+"\n"+(h<9?"0":"")+(h+1)+" "+d);}else{c++;System.out.println();}}( 303 ไบต์ ) ฉันขอแนะนำให้อ่านเคล็ดลับสำหรับการเล่นกอล์ฟในชวาและเคล็ดลับสำหรับการเล่นกอล์ฟใน <ทุกภาษา> เพลิดเพลินไปกับการพักผ่อนของคุณ.
Kevin Cruijssen

@KevinCruijssen ฉันได้อัปเดตคำตอบของฉันและสามารถบันทึกได้อีก 3 ไบต์โดยใช้เครื่องหมายแลมบ์ดา นอกจากนี้ฉันเปลี่ยนบางส่วนเป็นรหัสที่คุณให้เช่นกันเพื่อให้ตรงตามข้อกำหนด (เช่นfor(i=0;i++<60แทนที่จะเป็น 61 และ(h<10?แทนที่จะเป็น 9 ขอบคุณที่แจ้งให้ฉันทราบเกี่ยวกับวิธีการประกาศและเคล็ดลับการเล่นกอล์ฟ!
CraigR8806

อา 61 แทน 60 เป็นความผิดพลาดของข้า ฉันคิดว่าฉันเขียนมันfor(i=0;++i<61แทนfor(i=0;i++<61(ในกรณีที่สองนี้ควรจะเป็น 60 จริง ๆ และถึงแม้ว่ามันจะมีจำนวนไบต์เท่ากัน แม้ว่าh<9ในรหัสของฉันถูกต้องแม้ว่า คุณได้h+1<10ก่อนและฉันก็เปลี่ยนแปลงนี้h<9โดยการลบ 1 ทั้งสองด้าน :)
Kevin Cruijssen

1
@KevinCruijssen Ha ฉันไม่ได้เลือกเลย! h<9. ฉันจะแก้ไขเพื่อบันทึกอีก 1 ไบต์ ขอบคุณอีกครั้ง!
CraigR8806

4

C, 176 162 161 160 156 ไบต์

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

main(){int*localtime(),b[9],*t;memset(b,45,60);for(;;)time(&t),t=localtime(&t),usleep(printf("\e[2J%.2d %.*s\n%.2d %.*s\n",t[2],t[1],b,t[2]+1,60-t[1],b));}

Ungolfed:

#import<time.h>
main()
{
 int *t,b[60];
 memset(b,45,60);
 for(;;) {
  time(&t);
  t=localtime(&t);
  usleep(printf("\e[2J%.2d %.*s\n%.2d %.*s\n",t[2],t[1],b,t[2]+1,60-t[1],b));
 }
}

3

JavaScript (ES6), 162 ไบต์

อัปเดตหนึ่งครั้งต่อวินาที

setInterval(c=>{c.clear(d=new Date,m=d.getMinutes(),h=d.getHours(),H=_=>`0${h++}`.slice(-2)),c.log(H()+` ${'-'.repeat(m)}
${H()} `+'-'.repeat(60-m))},1e3,console)


คุณสามารถบันทึกได้ไม่กี่ไบต์โดยการปรับโครงสร้างโค้ดดังนั้นจึงเป็นเพียงคำสั่งเดียว (เป็นไปได้ที่จะเรียกconsole.clear()ภายในconsole.logอาร์กิวเมนต์) และกำหนดในวงเล็บที่ไม่ได้ใช้มากที่สุด เวอร์ชันสำหรับ setInterval(c=>c.log(H(h,c.clear(d=new Date))+` ${'-'.repeat(m)} ${H(h+1)} `+'-'.repeat(60-m)),1e3,console,m=d.getMinutes(h=d.getHours(H=$=>$<9?'0'+$:$)))154B:
ลุค

m=>`0${h++} \.slice(-3)+'-'.repeat(m)คุณสามารถบันทึกพวงของไบต์โดยวางชั่วโมงและนาทีเป็นฟังก์ชั่นเดียว
Neil

3

Python 2, 131 129 127 ไบต์

from time import*
while[sleep(9)]:exec(strftime("a='%H';b=int('%M')"));print "\n"*30+a+" "+"-"*b+"\n"+`int(a)+1`+" "+"-"*(60-b)

บันทึกเป็นไบต์ด้วย @TuukkaX


2
คุณไม่จำเป็นต้องขึ้นบรรทัดใหม่และเว้นวรรคหลังจากwhile 1:
Wheat Wizard

ฉันเริ่มรหัสของคุณ @ 19: 55 ที่ 20:01 19 - \n 20 -----------------------------------------------------------ผมเห็น เวลาไม่ได้อัปเดต ...
steenbergh

@steenbergh ฉันลองด้วยตัวเองโดยการตั้งค่านาฬิกาด้วยตนเองและใช้งานได้สำหรับฉัน
OVS

@ovs ไม่ใช่นาฬิกาที่ท้าทายความสนุก :-) อย่างไรก็ตามอาจมีบางสิ่งบางอย่างที่มี repl.it แล้ว ...
steenbergh

โต๊ะทำงานเซิร์ฟเวอร์ Repl.it ใช้เวลาหนึ่งชั่วโมงตามเวลาท้องถิ่นของฉัน ... และมันก็บอกด้วยเช่นกันที่ด้านบนสุดของคอนโซล ฉันจะดูตัวเองขอบคุณ ...
steenbergh

3

C 251 267 251 ไบต์

 #include<time.h>f(){time_t t;struct tm *t1;h,m,i;while(1){time(&t);t1=localtime(&t);h=t1->tm_hour;m=t1->tm_min;printf("%d ",h);for(i=1;i<=m;i++)printf("-");puts("");printf("%d ",h+1);for(i=0;i<=59-m;i++)printf("-");puts("");sleep(1);system("clear");}}

เวอร์ชันที่ไม่ดี

#include<time.h>
void f()
{
 time_t t;
 struct tm *t1;
 int h,m,i;

 while(1)
 {
  time(&t);     
  t1=localtime(&t);
  h=t1->tm_hour;
  m=t1->tm_min;

  printf("%d ",h);
  for(i=1;i<=m;i++)
   printf("-");

  puts("");
  printf("%d ",h+1);

  for(i=0;i<=59-m;i++)
   printf("-");

  puts("");    

  sleep(1);
  system("clear");    
 }
}

ทำงานให้เสร็จ! สามารถทำให้สั้นลงได้ในบางวิธี สมมติunistd.hไฟล์รวม

@ Neil ขอบคุณสำหรับข้อมูล

@Seth ขอบคุณสำหรับการบันทึก 8 ไบต์


IIRC คุณต้องรวมทุกอย่างที่จำเป็นเพื่อรับรหัสเพื่อคอมไพล์ (ในกรณีนี้คำจำกัดความของtime_tและstruct tm) ในจำนวนไบต์ของคุณ
Neil

แทนการprintf("\n");ที่คุณสามารถใช้puts("");
เซท

3

เล่นกอล์ฟครั้งแรก ...

Powershell, 116 ไบต์ (เดิมคือ 122)

while($d=date){$f="{0:D2}";$h=$d.Hour;$m=$d.Minute;cls;"$($f-f$h)$("-"*$m)`n$($f-f(++$h%24))$("-"*(60-$m))";Sleep 9}

แก้ไข: จากคำแนะนำของ @ AdmBorkBork เปลี่ยน Get-Date เป็น date และ Clear to cls เพื่อการประหยัด 6 ไบต์


ยินดีต้อนรับสู่ PPCG คำตอบที่ดี
george

ยินดีต้อนรับสู่ PPCG! คู่ Golfs ง่าย - คุณสามารถใช้clsแทนclearและ (ตราบใดที่คุณอยู่ใน Windows) แทนdate get-dateฉันยังมั่นใจว่ามีวิธีที่ง่ายกว่าในการจัดรูปแบบผลลัพธ์ - ฉันเล่นกับมันและฉันจะแจ้งให้คุณทราบหากมีอะไรเกิดขึ้น
AdmBorkBork

ดี ลองนี้: 108 while($d=date){cls;"{0,2} {2}``n{1,2} {3}"-f($h=$d.Hour),(++$h%24),('-'*($m=$d.Minute)),('-'*(60-$m));Sleep 9}ไบต์ ใช้ตัวแบ่งบรรทัด LF ในตัวแก้ไขของคุณแทน `` n '
mazzy

3

PHP, 104 105 ไบต์

<? for(;;sleep(6))printf("%'
99s%2d %'-".($m=date(i))."s
%2d %'-".(60-$m).s,"",$h=date(H),"",++$h%24,"");

แสดงสำหรับprintfตัวละครที่กำหนดเอง padding:
"%'-Ns"= สตริงเบาะซ้ายด้วย-เพื่อNตัวละคร

จะพิมพ์ 99 บรรทัดใหม่ (ทุก 6 วินาที) แทนการล้างหน้าจอ

ขึ้นบรรทัดใหม่ต้องเป็นอักขระตัวเดียว ดังนั้นใน Windows \nก็ต้องถูกแทนที่ด้วย


2

GameMaker Language ขนาด 134 ไบต์

s=" "while 1{s+="-"a=current_hour b=current_minute draw_text(0,0,string(a)+string_copy(s,1,b+1)+"#"+string(a+1)+string_copy(s,0,61-b)}

ในการตั้งค่าคุณต้องละเว้นข้อผิดพลาดที่ไม่ร้ายแรงเพื่อให้การทำงานนี้ นอกจากนี้ใน GML #เทียบเท่ากับ\nในภาษาส่วนใหญ่


2

Perl 6 , 104 ไบต์

DateTime.now.&{"\ec{.hour.fmt: '%2s'} {'-'x.minute}\n{(.hour+1).fmt: '%2s'} {'-'x 60-.minute}"}.say xx*

จำเป็นต้องรันบนเทอร์มินัลที่รองรับ ANSIเพื่อให้ลำดับการควบคุมสำหรับการรีเซ็ตเทอร์มินัลทำงานได้

ค่อนข้างธรรมดา (เพราะวิธีการที่สับสนมากขึ้นฉันลองใช้อีกต่อไป):

  • DateTime.now.&{" "}.say xx*: แปลงเวลาปัจจุบันเป็นสตริง (ดูด้านล่าง) แล้วพูดและทำซ้ำทั้งหมดโดยไม่ จำกัด จำนวนครั้ง สตริงถูกสร้างเช่นนี้:
    • \ec: รหัสควบคุม ANSI <ESC>cสำหรับการรีเซ็ตเทอร์มินัลซึ่งจะล้างหน้าจอ
    • {.hour.fmt: '%2s'}: ชั่วโมงจัดชิดขวาไปยัง 2 คอลัมน์
    • : พื้นที่
    • {'-'x.minute}: เส้นประซ้ำครั้งละนาที
    • \n: ขึ้นบรรทัดใหม่
    • {(.hour+1).fmt: '%2s'}: ชั่วโมงถัดไปจัดชิดขวาไปยัง 2 คอลัมน์
    • : พื้นที่
    • {'-'x 60-.minute}: พุ่งซ้ำครั้ง 60 ลบนาที

2

AWK, 190 ไบต์

#!/bin/awk -f
func p(x,y,c){printf("%2s ",x)
for(j=0;j<y;j++)printf(c)
print}BEGIN{for(;;){split(strftime("%H %M"),t)
m=t[2]
if(o!=m){p(a,30,"\n")
p(t[1],m,"-")
p((t[1]+1)%24,60-m,"-")}o=m}}

เนื่องจากAWKไม่มีsleepฟังก์ชั่นในตัวฉันเพียงแค่ให้มันตรวจสอบนาฬิกาอย่างต่อเนื่องเพื่อดูว่านาทีนั้นเปลี่ยนไปหรือไม่ สิ่งสำคัญคือมันใช้งานได้ ... ใช่มั้ย :)


2

Python 3.5, 127 120 117 bytes

from time import*
while[sleep(9)]:h,m=localtime()[3:5];print('\n'*88,*['%2d '%x+'-'*y+'\n'for x,y in[(h,m),(h+1,60-m)]])

1
คุณไม่เพียง แต่สามารถprint('\n'*50)ใช้os.system('cls')งานได้ทั้งบนระบบปฏิบัติการ * และ Windows จะบันทึกสองสามไบต์เนื่องจากคุณสูญเสียosการนำเข้าและ OP บอกว่าอนุญาต
ElPedro

โอ้ฉันไม่ได้อ่านอย่างถูกต้องแล้ว ขอบคุณมากครับ
Gurupad Mamadapur

สำหรับข้อมูลคนส่วนใหญ่มักใช้ <s> </s> รอบจำนวนไบต์เก่าแล้วใส่จำนวนไบต์ใหม่หลังจากนั้นเพราะน่าสนใจที่จะเห็นความคืบหน้าเนื่องจากคำตอบดีขึ้น :-) ต้องลอง 3.5 เวลา. ฉันยังคงทำงานกับ Python 2
ElPedro

1
@ElPedro ใช่ฉันลืมที่จะทำ ฉันจะแก้ไขตอนนี้
Gurupad Mamadapur

2

Python ขนาด115 113 ไบต์

บันทึกสองไบต์ด้วย @kundor และ @Phlarx

import time
while 1:h,m=time.localtime()[3:5];print("\x1b[0;H{:02} {}\n{:02} {} ".format(h,"-"*m,h+1,"-"*(60-m)))

อย่างน้อยในระบบของฉันนี่ไม่ได้ลบอักขระพื้นฐานดังนั้นจำนวนขีดกลางในบรรทัดที่สองจะไม่ลดลงเมื่อเวลาผ่านไป นอกจากนี้: คุณสามารถบันทึกสามไบต์โดยการใส่ห่วงขณะที่ของคุณในบรรทัดเดียวและสองไบต์โดยการเปลี่ยนรูปแบบไปเพียง:02 :2
Nick Matteo

2
คุณสามารถแก้ไขปัญหาที่อธิบายโดย @kundor ใน 1 ไบต์โดยการเพิ่มช่องว่างหลังจาก {} ที่สอดคล้องกัน
Phlarx

@kundor แก้ไขแล้ว! ขอบคุณ ฉันเก็บ:02รูปแบบไว้ทางขวาหนึ่งชั่วโมงด้วยเลขศูนย์
dfernan

@kundor * ใช้แป้นซ้ายหนึ่งชั่วโมงด้วยเลขศูนย์
dfernan

@dfernan: ดี:2แผ่นซ้ายมีช่องว่างซึ่งความท้าทายกล่าวคือตกลง
Nick Matteo

2

C # แบบโต้ตอบ (138 ไบต์)

while(true){var d=DateTime.Now;Console.WriteLine($"{d.Hour:00} {new string('-',d.Minute)}\n{d.Hour+1:00} {new string('-',60-d.Minute)}");}

1
คุณสามารถตีกอล์ฟนี้ด้วย 1) ตั้งชื่อวันที่dแทนได้dtหรือไม่? และ 2) การใช้งานsleep(1e3)หรือ999แทน1000?
steenbergh

@steenbergh ดูการอัปเดต
series0ne

บางสิ่ง ... นี่เป็นเพียงตัวอย่างเล็ก ๆ น้อย ๆ ที่ไม่ใช่วิธีการหรือโปรแกรม (ไม่แน่ใจว่ามันถูกต้องใน C # Interactive หรือไม่) เป็นหลักรหัสของฉัน golfed และถ้ามันควรจะได้รับการแสดงความคิดเห็นเป็นการปรับปรุงไม่ใช่ ทางออกที่แยกจากกัน (แม้ว่านี่จะเป็นการเก็งกำไร) และมีการปรับปรุงเล็ก ๆ น้อย ๆ มากมายที่คุณสามารถทำได้ที่นี่และคุณยังต้องการการนอนหลับหรือไม่?
TheLethalCoder

@TheLethalCoder ฉันใส่ C # Interactive เป็นพิเศษเพราะจะทำงานในคอนโซลการโต้ตอบเท่านั้น สิ่งนี้จะไม่ทำงานในฐานะโปรแกรม C # มาตรฐาน
series0ne

โปรดทราบด้วยว่าสิ่งนี้จะไม่ทำงานเมื่อชั่วโมงเป็น 23 และเมื่อนาทีเป็น 0
TheLethalCoder

2

PHP, 112 120 ไบต์

for(;;sleep(9))echo($s=str_pad)($h=date(H),99,"\n",0).$s(" ",1+$m=date(i),"-")."\n".$s(++$h%24,2,0,0).$s(" ",61-$m,"-");

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

แก้ไข: @Titus สังเกตเห็นข้อผิดพลาดในการแพ็ดของชั่วโมงที่สอง แก้ไขมันราคา 8 ไบต์


การแสดงนี้เตือนข้อความบน stdout Notice: Use of undefined constant str_pad - assumed 'str_pad' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant H - assumed 'H' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant i - assumed 'i' in C:\wamp64\www\my-site\a.php on line 2พร้อมกับการส่งออกที่ถูกต้อง: มีอะไรใน Meta เกี่ยวกับเรื่องนี้บ้าง?
steenbergh

@steenbergh ที่สังเกตเห็น; จะไม่ปรากฏขึ้นหากคุณใช้ค่าเริ่มต้น (พารามิเตอร์บรรทัดคำสั่ง-nหรือerror_reporting(22519);
ติตัส

ชั่วโมงจะต้องมีการเพิ่มความยาว 2
ติตัส

จุดดีการHตั้งค่าสำหรับวันที่เริ่มต้นที่ 00-23 แต่ฉันลืมมันไปเป็นชั่วโมงที่สอง
user59178

บันทึกสองไบต์ด้วยการแบ่งบรรทัดแบบฟิสิคัล
ติตัส

2

Bash (3 และ 4): 90 ไบต์

d=(`sed s/./-/g<$0`);let `date +h=%H,m=%M`;echo $h ${d:0:m}'
'$[++h%24] ${d:m}
sleep 5
$0

เนื่องจากการใช้งาน $0งานสคริปต์นี้จะต้องใส่ลงในไฟล์ไม่ใช่วางลงในเชลล์ bash แบบโต้ตอบ

คำสั่งแรกตั้ง$dไว้ที่ 60 ขีดกลาง; มันขึ้นอยู่กับความจริงที่ว่าบรรทัดแรกของสคริปต์นี้มีความยาว 60 ตัวอักษร นี่คือสามตัวละครที่สั้นกว่าสิ่งที่ดีที่สุดถัดไปที่ฉันจะได้รับ:

d=`printf %060d|tr 0 -`

หากคุณไม่ต้องการให้กล่องนี้หมด PID หรือหน่วยความจำในที่สุดคุณสามารถเพิ่มevalไปยังจุดเริ่มต้นของบรรทัดสุดท้ายซึ่งจะทำให้ 95 ไบต์นี้


let: h=09: value too great for base (error token is "09")ทำให้ผมมีข้อผิดพลาด ปัญหาคือศูนย์นำหน้าถูกตีความว่าเป็นค่าคงที่ฐานแปดดังนั้น 09 จึงไม่ถูกต้อง
Nick Matteo

อืมนั่นหมายความว่าสคริปต์ของฉันเสียไปหลายวิธี ขอบคุณ
Evan Krall

2

BASH, 165 141 155 ไบต์

while :
do
clear
m=`date +%-M`
a=`printf %${m}s`
b=`printf %$((60-m))s`
h=`date +%H`
echo $h ${a// /-}
printf "%02d %s" $((10#$h+1)) ${b// /-}
sleep 9
done

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

การเพิ่มประสิทธิภาพบางอย่าง: เลื่อนsleep 9ไปที่เงื่อนไขของ while loop; ลบ-ด้านหน้าของ M ในสตริงรูปแบบที่บรรทัดที่ 4 คุณไม่จำเป็นต้องใช้ $ หน้าชื่อตัวแปรในนิพจน์ทางคณิตศาสตร์ดังนั้น$((60-$m))สามารถเป็นได้$((60-m))
Evan Krall

ฉันไม่แน่ใจว่าคณิตศาสตร์ของคุณที่บรรทัด 9 นั้นถูกต้องหรือไม่: h=23; echo $((10#$h+1))พิมพ์ 24 สำหรับฉัน
Evan Krall

มีอะไรผิดปกติกับ 24?
pLumo

ฉันต้องการ -M เพราะ $ ((60-08)) ให้ข้อผิดพลาด
pLumo

1

Gura , 138 ไบต์

k(a,b)={if(a<10){a="0"+a;}println(a," ","-"*b)};repeat{t=datetime.now();k(t.hour,t.min);k(t.hour+1,60-t.min);os.sleep(60);print("\n"*30);}

ค่อนข้างสั้นและตรงไปตรงมา :)


ว้าว ... นั่นเร็วมาก มีคำแนะนำในการใช้งาน Gura บ้างไหม? เพียงแค่ดาวน์โหลดไบนารี แต่ทำงานและวางในรหัสนี้จะช่วยให้ฉันข้อผิดพลาดทางไวยากรณ์Gura.exe symbol k is not defined
steenbergh

ลืมเครื่องหมายอัฒภาค! คุณสามารถลองเรียกใช้อีกครั้ง :)
Sygmei

1
อัปเดตนี้ทุกนาทีหรือไม่ คอนโซลดูเหมือนว่าจะเรียกใช้รหัสนี้เพียงครั้งเดียว ...
steenbergh

Woops ไม่เห็นส่วนนั้นอยู่ตอนนี้!
Sygmei

เมื่ออัปเดตควรล้างหน้าจอหรือเพิ่ม 30 บรรทัดใหม่ ชายฉันในกรณีของคุณ ...
steenbergh

1

ตกลงไม่ได้ทำรหัสกอล์ฟสักพักดังนั้นฉันจะพยายามอย่างเศร้า ๆ :)

Unix Korn Shell: 177 171 170 ไบต์

while :
do
clear
h=`date +%H`
m=`date +%M`
d=-----
d=$d$d$d$d
d=$d$d$d
a=`echo $d|cut -b-$m`
let m=60-$m
b=`echo $d|cut -b-$m`
let i=h+1
echo "$h $a\n$i $b"
sleep 9
done

spliced ​​2 echos เป็น 1 บันทึกไม่กี่ไบต์ ... (sleep 9 แทน sleep 10 save 1 byte: P) lol
Ditto

1

Mathematica, 235 ไบต์

d=UpdateInterval;e=Dynamic;f=Refresh;g=AbsoluteTime;Grid[Partition[Riffle[e[f[Floor@Mod[g[]/3600+#,24],d->1]]&/@{0,1},With[{t=#},e[f[""<>Array["-"&,If[t==60,60-#,#]]&@Setting@Floor@Mod[g[]/60+#,60],d->1]]]&/@{0,60}],2],Alignment->Left]

1

กำลังดำเนินการ, 204 200 198 197 ไบต์

บันทึก 5 ไบต์ด้วย @L Sernéโดยใช้ ternaries ที่ชาญฉลาด

void draw(){int i;String s=((i=hour())>9?i:" "+i)+" ";for(i=0;i<minute();i++)s+="-";s+="\n"+((i=hour()+1)>9?i>23?" 0":i:" "+i)+" ";for(i=0;i<60-minute();i++)s+="-";print(s);for(;i++<99;)println();}

เอาต์พุตนี้มีการขึ้นบรรทัดใหม่ 30+ สำหรับการอัปเดตแต่ละครั้ง (ซึ่งจะเกิดขึ้นเมื่อเฟรมได้รับการอัพเดต)

Ungolfed

void draw(){
  int i;
  String s=((i=hour())>9?i:" "+i)+" ";
  for(i=0;i<minute();i++)
    s+="-";
  s+="\n"+((i=hour()+1)>9?i>23?" 0":i:" "+i)+" ";
  for(i=0;i<60-minute();i++)
    s+="-";print(s);
  for(;i++<99;)
    println();
}

เปลี่ยน((i=hour())<10?" ":"")+iเข้าไป((i=hour())>9?i:" "+i)จะประหยัด 2B โชคครั้งที่สอง ... ดีกับการเล่นกอล์ฟต่อไป!
ลุค

@ ขอบคุณ L.Serne สำหรับเคล็ดลับ :)
Kritixi Lithos

การปรับปรุงอื่นที่อาจใช้งานได้: ((i=hour()+1)>24?i=0:i)>9กลายเป็น(i=hour()+1)>9เนื่องจากมีhourเอาต์พุตจำนวนหนึ่งในช่วง 0-23 และแม้ว่าจะเพิ่ม 1 เข้าไปในนั้นจะไม่มีวันมากกว่า 24 นอกจากนี้คุณควรย้ายการเพิ่มขึ้นของiสภาพภายในforลูป เหมือนที่คุณทำในลูปสุดท้าย ควรบันทึก 13B รวม
ลุค

@ L.Sernéสำหรับจุดแรกฉันยังคงต้องรวม ternary เพราะ 23 + 1 ใน 24 ชั่วโมงกลายเป็น 0 (หรืออย่างน้อยฉันคิดว่า) ต่อไปถ้าฉันย้ายส่วนที่เพิ่มขึ้นiภายในเงื่อนไขของ for-loop iจะเริ่ม1แทน0และฉันต้องเพิ่มอีกหนึ่งไบต์i++<=minute()และ bytecount จะยังคงเหมือนเดิม แต่อย่างไรก็ตามต้องขอบคุณที่ช่วยฉันกอล์ฟ 1 ไบต์ :)
Kritixi Lithos

1

C, 239 ไบต์

#include<time.h>
#include<unistd.h>
#define F printf(
void d(n,p){for(;n--;F"%c",p));}int main(){time_t*t;for(;;){d(30,10);time(t);int*m=localtime(t);F"%2d ",m[2]);d(m[1],45);F"\n%2d ",(m[2]+1)%24);d(60-m[1],45);F"\n");sleep(1);}return 0;}

แรงบันดาลใจจากรายการของ Seth และ Abel สิ่งนี้จะส่งออก 0 แทน 24 สำหรับชั่วโมงถัดไปตามต้องการและจะใช้ 30 บรรทัดเพื่อล้างหน้าจอ


1

SmileBASIC ขนาด 55 ไบต์

TMREAD OUT H,M,
CLS?H,"-"*M?(H+1)MOD 24,"-"*(60-M)EXEC.

คำอธิบาย:

TMREAD OUT HOUR,MINUTE,
CLS
PRINT HOUR,"-"*MINUTE
PRINT (HOUR+1) MOD 24,"-"*(60-MINUTE)
EXEC 0 'runs the code stored in slot 0 (the default)

หมายเหตุ: SmileBASIC มีเพียง 50 คอลัมน์ของข้อความดังนั้นมันจะไม่ดูดี ...


1

C # 181 176

for(;;){Console.Clear();var t=DateTime.Now;var h=t.Hour;var m=t.Minute;Console.Write("{0,2} {1}\n{2,2} {3}",h,"".PadLeft(m,'-'),++h%24,"".PadLeft(60-m,'-'));Thread.Sleep(100);}

รหัสนี้จะถือว่าusing System.Threading;บรรทัดนั้นรวมอยู่ด้วย

ชั้นเต็ม:

class Program
{
    static void Main(string[] args)
    {
        Console.Title = string.Format("Started the app at: {0}", DateTime.Now.TimeOfDay);
        //new Timer((o) => { Console.Clear(); var t = DateTime.Now; var h = t.Hour; var m = t.Minute; Console.Write("{0,2} {1}\n{2,2} {3}", h, "".PadLeft(m, '-'), ++h % 24, "".PadLeft(60 - m, '-')); }, null, 0, 60000);

        for (; ; ) { Console.Clear(); var t = DateTime.Now; var h = t.Hour; var m = t.Minute; Console.Write("{0,2} {1}\n{2,2} {3}", h, "".PadLeft(m, '-'), ++h % 24, "".PadLeft(60 - m, '-')); Thread.Sleep(100); }

        Console.ReadKey(true);
    }
}

โซลูชันนี้ไม่มีวิธีออกจากลูป (ต้นฉบับความคิดเห็นรันโค้ดบนเธรดแยกต่างหาก) ดังนั้นConsole.ReadKeyคำสั่งจึงซ้ำซ้อน วิธีเดียวที่จะออกได้คือปิดหน้าต่างคอนโซลหรือCtrl+Break...
nurchi

นี่เป็นเพียงข้อมูลโค้ดไม่ใช่วิธีการหรือโปรแกรมรวมถึงusing System.Threading;ความต้องการที่จะรวมอยู่ในจำนวนไบต์หากคุณใช้งาน Using System;เช่นเดียวกันกับ
TheLethalCoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.