เวลา 24 และ 12 ชั่วโมง


24

เขียนโปรแกรมหรือฟังก์ชั่นโดยไม่มีอินพุตที่พิมพ์หรือส่งคืนสตริงนี้เป็น24 ชั่วโมงและ12 ชั่วโมง :

00:00 12:00am
01:00  1:00am
02:00  2:00am
03:00  3:00am
04:00  4:00am
05:00  5:00am
06:00  6:00am
07:00  7:00am
08:00  8:00am
09:00  9:00am
10:00 10:00am
11:00 11:00am
12:00 12:00pm
13:00  1:00pm
14:00  2:00pm
15:00  3:00pm
16:00  4:00pm
17:00  5:00pm
18:00  6:00pm
19:00  7:00pm
20:00  8:00pm
21:00  9:00pm
22:00 10:00pm
23:00 11:00pm

สตริงจะต้องส่งออกตรงตามที่ปรากฏในที่นี้ ข้อยกเว้นเพียงอย่างเดียวคือมันอาจมีทางขึ้นบรรทัดใหม่ต่อท้าย

ดังนั้นMD5 แฮชของผลลัพธ์ของคุณควรเป็น

827ae6e2dbb1df494930baedb3ee2653

หากคุณไม่ได้ขึ้นบรรทัดใหม่และ

cd4c3d18abee9bafb495f390a919a13f

ถ้าคุณทำ. (แฮชของคุณอาจแตกต่างกันหากระบบของคุณใช้newlineประเภทอื่นแต่ก็ไม่เป็นไร)

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ Tiebreaker เป็นคำตอบก่อนหน้า


ที่คล้ายกัน: codegolf.stackexchange.com/questions/49728/…
Joshpbarron

คำตอบ:


13

Bash + coreutils, 43 30

  • บันทึกแล้ว 7 ไบต์ขอบคุณ @Yossarian
  • บันทึกแล้ว 3 ไบต์ขอบคุณ @AndersKaseorg
seq 0 23|date -f- +%R\ %l:00%P
  • seq สร้างจำนวนเต็ม 0-23 หนึ่งต่อบรรทัด
  • dateตีความแต่ละบรรทัดเป็นวันที่และเวลา dateจำนวนเต็มเปลือยดูเหมือนจะเพียงพอที่จะได้รับการยอมรับเป็นชั่วโมงของวันโดย dateแล้วเอาท์พุทในแต่ละครั้งที่มีการจัดรูปแบบที่จำเป็นต้องใช้ที่มีspecifiers รูปแบบเวลา

ถือว่าLANG=Cสถานที่ตามคำตอบเมตานี้

Ideone


2
คุณสามารถทำได้seq 0 23และบันทึก 7 ไบต์
Yossarian

1
และ%H:00%Rบันทึกอีก 3 รายการ
Anders Kaseorg

@AndersKaseorg, nop, %Rแทรกศูนย์นำหน้าซึ่งไม่ต้องการโดย OP
rexkogitans

@rexkogitans ศูนย์นำเป็นที่ต้องการ (ในคอลัมน์แรกซึ่งเป็นหนึ่งที่ผมกำลังพูดถึง)
Anders Kaseorg

@AndersKaseorg โอ้คุณกำลังพูดถึงคนแรก ... แน่นอนว่าคุณพูดถูก แก้ไขความคิดเห็นของฉันด้านบน
rexkogitans

12

Python 2, 66 ไบต์

for i in range(24):print'%02d:00%3d:00%sm'%(i,12+i%-12,'ap'[i>11])

1
modulo -12 เป็นคนฉลาด!
Erik the Outgolfer

ในกรณีที่ทุกคนสงสัยว่า: i=0;exec"print'%02d:00%3d:00%cm'%(i,~-i%12+1,97+i/12*15);i+=1;"*24เปลี่ยนรหัสในสามวิธีที่แตกต่างกัน แต่การเปลี่ยนแปลงแต่ละครั้งมีความยาวเท่ากัน
Sp3000

8

C, 73 ไบต์

m(i){for(i=25;--i;)printf("%02d:00%3d:00%cm\n",24-i,12-i%12,"pa"[i/13]);}

mIllIbyteพบวิธีที่ประณีตเป็นพิเศษในการเขียนคำตอบนี้ใหม่ ขอบคุณ!


เจ๋ง - ฉันไม่เคยรู้?:
Digital Trauma

ฉันไม่รู้! น่าสนใจ ฉันซ่อมมัน :)
ลินน์

อ่าอืม?:จริง ๆ แล้วใกล้เคียงกับ Perl ||มากที่สุดฉันเชื่อว่า ซีมีมากขึ้นเช่น|| (a || b) ? 1 : 0
Lynn

1
i++,i%12?:12,"ap"[i/12])ขาดจุดลำดับ ไม่สามารถมั่นใจได้เมื่อi++เกิดขึ้น บางทีfor(i=0;i<24;i++) ...i,i%12?:12,"ap"[i/12]...
chux - Reinstate Monica

i++<24ดีกว่า - ไม่เพิ่มไบต์เพิ่มเติมในซอร์สโค้ด
Anatolyg

6

MATL, 46 42 34 ไบต์

12tEt:qy/t15XObZ"!b16XOhhkw14:X~Z)

ก่อนหน้านี้ 42 ไบต์12tEt:q2M/736330+t15XObZ"!b16XOhhkw14:X~Z), และ 46 736330 24t:qw/+t15XO' '24TX"b16XOhhk14: 12X~Z)ไบต์ แน่นอนว่าไม่จำเป็นต้องใช้ 736330 นั่นมันบ้าไปแล้ว!

หมายเหตุ: ไม่ได้ทำงานกับ TryItOnline ผมคิดว่ามีปัญหาที่เข้ากันได้ระหว่าง Matlab datestrและเลอะเลือนการดำเนินงานของ

datestrใช้การแทนค่าตัวเลขของวันที่และแปลงเป็นการแทนค่าสตริงของวันที่นั้น เวลาของวันคือส่วนที่เป็นเศษส่วนของจำนวนดังนั้น 0.0 corrsponds ถึง 0 มกราคม 0000 เวลา 00:00:00 และ 1.0 สอดคล้องกับ 1 มกราคม 0000 เวลา 00:00:00 1/24 คือ 1am, 2/24 2am เป็นต้น

คำอธิบาย

12t         % push a 12 onto the stack and duplicate
Et          % double the 12 and duplicate the 24 (stack now has 12, 24, 24, bottom to top)
:q          % make vector 1:24 and decrement by 1, stack has 12, 24, 0:23
y           % duplicate second element on stack (24)
/           % divide, for (0:23)/24
t           % duplicate elements
15XO        % string representation of date, 15 specifies format
b           % bubble up element in stack (gets a 24 on top of the stack)
Z"!         % makes a column of 24 spaces, to put between columns of times
b           % bubble up another (0:23)/24 
16XO        % string representation of date, 16 for a different format
hh          % concatenate two time vectors and the column of spaces
k           % convert string to lowercase, because CO gives AM/PM not am/pm
w           % swap elements in stack, that first 12 is now on top
14:         % vector of equally spaced values 1:14
X~          % set exclusive-or, returns [1 2 3 4 5 6 7 8 9 10 11 13 14]
Z)          % get the right columns of the string array to remove extra column of blanks
            % implicit display

เพื่อแสดงว่าทำงานได้ใน Matlab นี่คือภาพหน้าจอ

ป้อนคำอธิบายรูปภาพที่นี่


5

/// , 160 ไบต์

/Z/:00 //S/Z //A/:00am
//P/:00pm
/00Z12A01S1A02S2A03S3A04S4A05S5A06S6A07S7A08S8A09S9A10Z10A11Z11A12Z12P13S1P14S2P15S3P16S4P17S5P18S6P19S7P20S8P21S9P22Z10P23Z11P

ลองออนไลน์!

Ungolfed

00:00 12:00 น
01:00 1:00 น
02:00 2:00 น
03:00 3:00 น
04:00 น. 4:00 น
05:00 5:00 น
06:00 6:00 น
07:00 7:00 น
08:00 8:00 น
09:00 9:00 น
10:00 น
11:00 11:00 น
12:00 น. 12:00 น
13:00 13:00 น
14:00 น. 14:00 น
15:00 น. 15.00 น
16:00 น. 16:00 น
17:00 น. 17:00 น
18:00 น. 18:00 น
19:00 น. 19:00 น
20:00 20:00 น
21:00 น. 21:00 น
22:00 น. 10:00 น
23:00 น. 23:00 น


สนุกจริง: การ:00เปลี่ยนเป็นอีกหนึ่งไบต์อีกต่อไป ... TIO
steenbergh

@steenbergh นั่นเป็นเพราะ:00สตริง 3 ไบต์ปรากฏขึ้น 3 ครั้ง 3 × 3 = 9 การทดแทนในกรณีของคุณมีค่าใช้จ่าย 3 + 1 + 3 = 7 เนื่องจากใช้นามแฝง 1 ไบต์และคุณใช้ 3 ครั้งดังนั้น 7 + 3 = 10 9 <10 ดังนั้นฉันจะไม่แทนที่
Erik the Outgolfer

5

MarioLANG, 965 834 ไบต์

ลองออนไลน์

อย่างนี้มันซับซ้อนอย่างน่าขัน

ในทางเทคนิคแล้วผลลัพธ์ที่ถูกต้อง แต่ในทางปฏิบัติ Tio สำหรับ MarioLANG เอาต์พุต "n" แทนที่จะเป็น "n" เมื่อเราพิมพ์ตัวเลขด้วย ':'

ถ้าฉันหาเวลาฉันจะเดาว่าฉันจะลองทำโปรแกรม (อาจจะนานกว่านั้น) เวอร์ชั่นที่ออกอย่างถูกต้องบน Tio

++<>) +++@++++>   [!) >)>((((::(.)::((.))+:+:--(.)::)).).).)+++++++++
++""+ +"=====""====#) "+"============================================
+++)+ +>>+++++- <+<)->+++ ![-).).).))(::)).(:(:)))..(((::)).(:+(:((((<
+>+++ ++"====<( ")")-"!+++#=========================================="
+(+++>++!++)<+( ++++-+++++>
 -))+)=(#==="+( ++++)+++++"==========================================!
 [!!+-[!(+++!!! !+!<+!++!>(((((+:(.))::(((.
==##===#====###=#=#"=##=#"=================<
++++)))+++++++++++++++(((![-).).).)::)).(:))   >
>========================#==================   "
+>+ >
+"+ "=======================================[   =====================#===============[
+!> ! -).).).))(::)).)):+(..(((::)).(:+(((((<++!-).).).))(::)).)):+(.(((::)).(:+(((((<
=#==#======================================="==#======================================

คำอธิบาย:

ปัญหาหลักของเราที่นี่คือความจริงที่ว่าเรามี 6 NaN char (newLine, Space,:, a, p, m)

ใน marioLANG เพื่อพิมพ์อักขระเราต้องมีค่า ascii:

  • newLineคือ 10
  • ช่องว่างคือ 32
  • :คือ 58
  • aคือ 97
  • pคือ 112
  • mคือ 109

ดังนั้นสิ่งแรกที่ต้องทำคือการตั้งค่าหน่วยความจำ:

++<>) +++@++++>   [!) >)> !
++""+ +"=====""====#) "+"==
+++)+ +>>+++++- <+<)->+++ 
+>+++ ++"====<( ")")-"!+++
+(+++>++!++)<+( ++++-+++++
 -))+)=(#==="+( ++++)+++++
 [!!+-[!(+++!!! !+!<+!++!>
==##===#====###=#=#"=##=#"

ด้วยสิ่งนี้หน่วยความจำจะมีลักษณะดังนี้:

                   v   
  32 58 0 0 97 109 10 0
  _  :      a   m  \n

เราจะแปลงaเป็นpในช่วงที่เหลือของโปรแกรม

จากนั้นเราจะทำการส่งออกที่เกิดขึ้นจริง:

++<>) +++@++++>   [!) >)>((((::(.)::((.))+:+:--(.)::)).).).)+++++++++
++""+ +"=====""====#) "+"============================================
+++)+ +>>+++++- <+<)->+++ ![-).).).))(::)).(:(:)))..(((::)).(:+(:((((<
+>+++ ++"====<( ")")-"!+++#=========================================="
+(+++>++!++)<+( ++++-+++++>
 -))+)=(#==="+( ++++)+++++"==========================================!
 [!!+-[!(+++!!! !+!<+!++!>(((((+:(.))::(((.
==##===#====###=#=#"=##=#"=================<
++++)))+++++++++++++++(((![-).).).)::)).(:))   >
>========================#==================   "
+>+ >
+"+ "=======================================[   =====================#===============[
+!> ! -).).).))(::)).)):+(..(((::)).(:+(((((<++!-).).).))(::)).)):+(.(((::)).(:+(((((<
=#==#======================================="==#======================================

4

Julia, 88 71 66 64 ไบต์

[@printf "%02d:00%3d:00%cm
" i-11 i%12+1 i>22?112:97for i=11:34]

นี่เป็นโปรแกรมเต็มรูปแบบที่พิมพ์สตริงที่มีบรรทัดใหม่ต่อท้ายเดี่ยว

ลองออนไลน์!

บันทึก 5 ไบต์ด้วย Sp3000 และ 2 ขอบคุณ Dennis!


4

ฟังก์ชั่น C #, 100 ไบต์

void F(){for(int i=0;i<24;i++){Console.Write($"{i:00}:00 {(i+11)%12+1,2}:00 {(i>11?"p":"a")}m\n");}}

เวอร์ชันที่ไม่ถูกปรับแต่ง:

void F()
{
    for (int i = 0; i < 24; i++)
    {
        Console.Write($"{i:00}:00 {(i + 11)%12 + 1,2}:00 {(i > 11 ? "p" : "a")}m\n");
    }
}

Console.Write() ใช้อักขระมากเกินไป!


สวัสดีและยินดีต้อนรับสู่ PPCG! ฉันใช้ C # บิต แต่สิ่งที่สำคัญที่สุดที่$ทำกับสตริงคืออะไร
NoOne อยู่ที่นี่

3
@NoOneIsHere - ที่เรียกว่า "การแก้ไขสตริง" และเป็นคุณลักษณะใหม่ใน C # 6.0 คุณสามารถอ่านเพิ่มเติมได้ที่นี่https://msdn.microsoft.com/en-us/library/dn961160.aspx
STLDev

3

JavaScript (ES2015) 147 138 137 134 133 ไบต์

((o,x,r)=>{for(i=0;i<24;)b=i%12,c=b||12,o+='0'[r](i<10)+i+++x+' '[r]((c<10)+1)+c+x+(i<13?'a':'p')+"m\n";return o})('',':00','repeat')

ในรุ่นนี้ฉันใช้ประโยชน์จากวิธีการ String.repeat () เพื่อกำจัด. slice () และ. join () ที่มีความยาวและย้ายส่วนเพิ่มภายในลูป

รุ่นก่อนหน้า:

((o,x,i)=>{for(;i<24;i++){b=i%12;o+=[`0${i+x}`.slice(-5),(b||12)+x+(i<12?'a':'p')+'m'].join(' '.repeat((b>0&&b<10)+1))+"\n"}return o})('',':00',0)

ให้เอาต์พุตด้วยการขึ้นบรรทัดใหม่ ทดสอบใน Firefox Scratchpad ไม่แน่ใจว่าการส่งอาร์กิวเมนต์ไปยัง IIFE นั้นใช้ได้หรือไม่ด้วยกฎ "ไม่มีอินพุต"

นี่คือการส่งครั้งแรกของฉันดังนั้นสวัสดีทุกคน! :)


3

TSQL (SQLServer 2012) 146 124 121

DECLARE @ DATETIME=0WHILE @<1BEGIN PRINT
CONVERT(char(5),@,108)+' '+LOWER(RIGHT(FORMAT(@,'g'),8))SET @=dateadd(hh,1,@)END

ลองออนไลน์!

ความพยายามครั้งแรกอีกเล็กน้อย แต่หนึ่งซับ:

SELECT CONVERT(char(5),n,108)+' '+LOWER(RIGHT(FORMAT(n,'g'),8))FROM(SELECT
top 24 dateadd(hh,Number,0)n FROM master..spt_values WHERE'P'=type)x

ลองออนไลน์!


1
ลดเหลือ 121 chars: ลองออนไลน์
Ross Presser

@RossPresser อีกครั้งคุณช่วยฉันเรียนรู้มากที่นี่
t-clausen.dk


2

Javascript, 122 Bytes , 120 Bytes

f=j=>j>12?j-12:j;for(i=0;i<24;i++)console.log('%s:00 %s:00%s',i<10?'0'+i:i,i==0?12:f(i)<10?' '+f(i):f(i),i>11?'pm':'am')

แก้ไข: ข้อผิดพลาดเล็ก ๆ คงที่ + เอาท์พุท:

00:00 12:00am
01:00  1:00am
02:00  2:00am
03:00  3:00am
04:00  4:00am
05:00  5:00am
06:00  6:00am
07:00  7:00am
08:00  8:00am
09:00  9:00am
10:00 10:00am
11:00 11:00am
12:00 12:00pm
13:00  1:00pm
14:00  2:00pm
15:00  3:00pm
16:00  4:00pm
17:00  5:00pm
18:00  6:00pm
19:00  7:00pm
20:00  8:00pm
21:00  9:00pm
22:00 10:00pm
23:00 11:00pm


2

V , 56 53 ไบต์

i00:00 23ñYpñH12G$yP13G$pgvó $/am
í/pm
í 0/  
í/12

ลองออนไลน์!

เนื่องจากนี่เป็นการยากที่จะป้อนนี่คือ hexdump ที่ย้อนกลับได้:

00000000: 6930 303a 3030 201b 3233 f159 7001 f148  i00:00 .23.Yp..H
00000010: 1631 3247 2479 5031 3347 2470 6776 f320  .12G$yP13G$pgv. 
00000020: 242f 616d 0aed 2f70 6d0a ed20 302f 2020  $/am../pm.. 0/  
00000030: 0aed 2f31 320a                           ../12.

รุ่น noncompetingเป็นนิด ๆ 2 ไบต์สั้นถ้าคุณเปลี่ยนทั้งการเกิดขึ้นของG$ด้วยLซึ่งควรจะเหมือนกัน แต่มีข้อผิดพลาด

คำอธิบาย:

i00:00<esc>                                     #Enter the starting text.
           23ñYp<C-a>ñ                          #Duplicate and increment 23 times
                      H                         #Move back to the beginning
                       <C-v>12G$y               #Select 12 lines horizontally
                                 P              #Horizontally paste
                                  13G$p         #Move to line 13 and Horizontally paste again
                                       gv       #Reselect the top 12 lines
                                         ó $/am #Replace a space at the end of the line with 'am'

í/pm      #Replace the previous search with 'pm'
í 0/      #Replace "Space+0" with 2 spaces
í/12      #Replace the previous search with "12"

2

05AB1E , 51 50 48 44 42 ไบต์

บันทึกสองไบต์ด้วยcarusocomputing

รหัส:

24FNgi0}N…:00©ðN12(%12+Dgiðs}®„paN12‹è'mJ,

ลองออนไลน์!

คำอธิบาย

24F                                         # for N in [0...23]
   Ngi0}                                    # if len(N)=1, push 0
        N                                   # push N
         …:00©                              # push ":00" and store a copy in register
             ð                              # push " "
              N12(%12+D                     # push 2 copies of N%(-12)+12
                       giðs}                # if the length of that number is 1, 
                                            # push " " and swap with the number
                            ®               # push ":00" again
                             „pa            # push "pa"
                                N12‹è       # index into that with N<12
                                     'm     # push "m"
                                       J,   # join everything and print with newline

codegolf.stackexchange.com/questions/103242/… ;) ตอนนี้ไม่ว่าจะสามารถเพิ่มประสิทธิภาพต่ำกว่า 50 จะขึ้นอยู่กับคำถามฮ่าฮ่า
Magic Octopus Urn

23Ýแทน24L<1 ไบต์ และนานแค่ไหนที่มีëอยู่? ฉันรู้สึกงี่เง่าไม่รู้เรื่องงบอื่นใน 05AB1E จนถึงตอนนี้
Magic Octopus Urn

@carusocomputing: ขอบคุณ! มีบางสิ่งบางอย่างที่มีอยู่พักหนึ่ง แต่มันก็บั๊กในบางครั้ง โดยเฉพาะเมื่อทำรังไอซี
Emigna

1

PowerShell v2 +, 76 ไบต์

0..23|%{"{0:D2}:00{1,3}:00"-f$_,(($_%12),12)[!($_%12)]+('am','pm')[$_-ge12]}

ลูปจาก0..23และแต่ละวงจะตั้งค่าสตริงด้วยตัว-fดำเนินการ สิ่งแรก{0:D2}ทำให้มั่นใจได้ว่าเราได้เติมศูนย์ไว้ส่วนที่สอง{1,3}รับรองว่าเรามีที่ว่างสำหรับคอลัมน์กลาง อันที่{0}หนึ่งตรงกับ$_ของ-fโอเปอเรเตอร์ในขณะที่{1}สอดคล้องกับ pseudo-ternary ที่เลือกระหว่าง$_%12หรือ12ตามว่าไม่$_%12เป็นศูนย์หรือไม่ (เช่นถ้าเราอยู่ที่$_=13นี่จะเลือก1เวลา 13.00 น.) จากนั้นเราจะ concatenate ว่ากับคนอื่นหลอก ternary ว่าเลือกที่เหมาะสม/ampm


ตรงข้ามกับคำตอบของฉันในรายการทุกครั้งในอัตราครึ่งชั่วโมงมันสั้นกว่าจริง ๆที่นี่เพื่อบังคับตัวเลขเนื่องจากเราได้รับช่องว่างที่ถูกกว่าอย่างมาก นี่คือคำตอบที่ใช้ฟังก์ชั่นวันที่ที่78 ไบต์

0..23|%{(Date -h $_ -f 'HH:00')+(Date -h $_ -f "h:00tt").ToLower().PadLeft(8)}

1

C ++, 81 79 ไบต์

[]{for(time_t t=0,y;t<24;cout<<put_time(gmtime(&y),"%R %l:00%P\n"))y=t++*3600;}

รหัสนี้ต้องมีusing namespace stdที่ไหนสักแห่งก่อนหน้ามัน

มันจะวนรอบค่า 0 ... 23 มันคูณแต่ละค่าด้วย 3600 แปลงเป็นโครงสร้างtmและพิมพ์ รูปแบบการพิมพ์%Rออก 24 ชั่วโมงและนาที; รูปแบบการพิมพ์%lและ%Pส่งออกชิ้นส่วนที่เหมาะสม 12 ชั่วโมง; พวกเขาต้องการGNU

รุ่นออนไลน์ทำงานที่นี่


1

Ruby, 66 62 ไบต์

0.upto(23){|i| puts "%02d:00%3d:00#{'ap'[i/12]}m"%[i,(i-1)%12+1]}

เวอร์ชั่นใหม่

24.times{|i|puts"%02d:00%3d:00#{'ap'[i/12]}m"%[i,(i-1)%12+1]}

1
24.timesสั้นกว่า putsไม่จำเป็นสำหรับพื้นที่ที่อยู่รอบ ๆ
จัดการ

คุณสามารถแทนที่(i-1)ด้วย~-i2 ไบต์
Jordan


1

Sclipting, 76 ไบต์

โปรแกรมสันนิษฐานว่าอินพุตว่างเปล่า ( '0'หรืออะไรก็ตามที่แปลงเป็นจำนวนเต็ม0)

จำนวนไบต์ถือว่าการเข้ารหัส UTF-16

군上❶겠小꼀虛嗎❷꾣갰글❷결加곀剩增❶겠小글虛嗎댆밁⓷꾣갰⓷⓼곀小掘닐밊終

Ungolfed:

군 // 23
上 // for loop (goes from 0 to 23 if input is 0)
    ❶겠小꼀虛嗎 // n < 10 ? "0" : ""
    ❷          // n
    꾣갰글      // ":00 "
    ❷결加곀剩增 // k = (n+11) % 12 + 1
    ❶겠小글虛嗎 // k < 10 ? " " : ""
    댆밁       // "pa"
    ⓷         // Pull n to top of stack
    꾣갰       // ":00"
    ⓷         // Pull "pa" to top of stack
    ⓼         // Pull k to top of stack
    곀小掘     // "pa"[k < 10 ? 1 : 0]
    닐밊       // "m\n"
終 // end of for loop

การวนซ้ำแต่ละครั้งจะทำให้สตริงเล็ก ๆ จำนวนมากบนสแต็ก ในตอนท้ายพวกเขาจะต่อกันโดยอัตโนมัติ


1

JavaScript, 97 95 ไบต์

นี้จะขึ้นอยู่ออกจากคำตอบของ starcorder ขอบคุณGeorge Reithสำหรับการปรับปรุง 2 ไบต์

for(i=0,k=12;i<24;k=i++%12+1)console.log('%s:00 %s:00%sm',i>9?i:'0'+i,k>9?k:' '+k,i>11?'p':'a')

Ungolfed:

for (i=0, k=12; i < 24; k = (i++) % 12 + 1)
    console.log('%s:00 %s:00%sm',
        i > 9 ? i : '0' + i,
        k > 9 ? k : ' ' + k,
        i > 11 ? 'p' : 'a')

คุณสามารถบันทึก 2 ไบต์โดยการเขียนใหม่n < 10เป็น9 < nและการแลกเปลี่ยนกรณี ternary
จอร์จ Reith

1

แบตช์ 167 ไบต์

@echo off
set h=11
set p=a
for /l %%a in (0,1,23)do call:e %%a
exit/b
:e
set a=0%1
set/ah=h%%12+1
set h= %h%
if %1==12 set p=p
echo %a:~-2:00 %h:~-2%:00%p%m

1

Kotlin , 95 ไบต์

สามารถปรับปรุงได้อย่างแน่นอน

fun p(){for(i in 0..23)println("%02d:00 ${(i+11)%12+1}:00${if(i>12)"p" else "a"}m".format(i))}

0

PHP, 110 107 ไบต์

for($h=0;$h<24;){$m=($h+11)%12+1;echo($h<10?0:"")."$h:00 ".($m<10?" ":"")."$m:00".($h++<12?"a":"p")."m\n";}
มุมมองที่ระเบิด
for ($h=0; $h<24; ) {
  $m = ($h+11) % 12 + 1;
  echo ($h < 10 ?  0  : "") . "$h:00 " .
       ($m < 10 ? " " : "") . "$m:00"  . ($h++ < 12 ? "a" : "p") . "m\n";
}

ค่อนข้างแปลกใจพยายามเปลี่ยน($i < 10 ? $s : "") . "$i:00"บิตเป็นฟังก์ชั่น แต่มันเพิ่มขึ้นประมาณ 25 อักขระ ไม่ไปที่นั่น


0

Swift, 85 ไบต์

for x in 0...23{print(String(format:"%02d:00 %2d:00\(x<12 ?"a":"p")m",x,12+x % -12))}

สิ่งนี้ใช้ไม่ได้อย่างน้อยก็ไม่ใช่สำหรับฉันที่ Swift 2.2 ผลผลิต
JAL

ฉันต้องเปลี่ยนรูปแบบสตริงของคุณ:String(format: "%02d:00 %2d:00\(x<12 ?"a":"p")m", x, x%12 != 0 ? x%12 : 12)
JAL

0

ฟังก์ชั่น C, 82 ไบต์

m(i){for(;i<24;printf("%02d:00 %2d:00%cm\n",i,i%12==0?12:i%12,i>11?'p':'a'),i++);}

การใช้งาน 94 ไบต์

m(i){for(;i<24;printf("%02d:00 %2d:00%cm\n",i,i%12==0?12:i%12,i>11?'p':'a'),i++);}main(){m();}

Ungolfed, 337 ไบต์

#include <stdio.h>
void m(){
    int i,a;
    char c;
    for(i=0;i<24;i++){
        if (i%12==0){
            a = 12;
        }
        else{
            a = i%12;
        }
        if (i>11){
            c = 'p';
        } else{
            c = 'a';
        }
        printf("%02d:00 %2d:00%cm\n",i,a,c);
    }
}
int main(){
    m();
}

มันทำงานบน Windows:

ในคำเตือนคุณสามารถค้นหาโปรแกรมทั้งหมด

โปรแกรม C, 85 ไบต์

main(i){for(;i<24;printf("%02d:00 %2d:00%cm\n",i,i%12==0?12:i%12,i>11?'p':'a'),i++);}

คุณอาจต้องเริ่มต้นi=0สำหรับรุ่นฟังก์ชั่น และสำหรับเวอร์ชั่นโปรแกรมคุณสามารถใส่รหัสลงไปได้โดยตรงmain- ไม่จำเป็นต้องกำหนดฟังก์ชั่นที่นั่น!
Anatolyg

ขอบคุณ! แก้ไข !! FYI: ในเวอร์ชัน funcion หากคุณใช้โดยไม่มีพารามิเตอร์จะเริ่มต้นด้วยตนเองเป็น 0!
Giacomo Garabello

i%12==0?12:i%12->i%12?i%12:12
chux - Reinstate Monica

"ในเวอร์ชัน funcion หากคุณใช้โดยไม่มีพารามิเตอร์จะเริ่มต้นด้วยตนเองเป็น 0!" สิ่งนี้ดูเหมือนจะไม่เป็นมาตรฐาน C. การอ้างอิงใด ๆ ที่สนับสนุนสิ่งนี้
chux - Reinstate Monica

ฉันสังเกตเห็นว่ามันทำงานได้เฉพาะใน gcc ฉันได้ติดตั้งบนระบบ windows ของฉัน .. เพื่อนของฉันกับ linux บอกฉันว่ามันไม่ทำงานบนพีซีของเขา แต่ฉันไม่รู้วิธีแก้ไขสำหรับ linux ...
Giacomo Garabello

0

ฟู, 163 ไบต์

วิธีการเดรัจฉานแรงสวย ไม่มีอะไรที่ชาญฉลาดที่นี่ (ฉันลองในสองสามจุด แต่ท้ายที่สุดก็สั้นลงไม่ได้) แค่อยากจะให้ฟูยิง ฟูพิมพ์สิ่งใด ๆ โดยอัตโนมัติภายในเครื่องหมายคำพูด $c10พิมพ์ตัวแบ่งบรรทัด (## ... )วน##ซ้ำจนกว่าเซลล์ปัจจุบันจะเท่ากัน

"00:00 12:00am"$c10+1(10"0"$i":00  "$i":00am"$c10+1)(12$i":00 "$i":00am"$c10+1)"12:00 12:00pm"$c10+1(22$i":00  ">+1$i<":00pm"$c10+1)(24$i":00 ">+1$i<":00pm"$c10+1)

Ungolfed เล็กน้อย:

"00:00 12:00am"$c10+1
(10"0"$i":00  "$i":00am"$c10+1)
(12$i":00 "$i":00am"$c10+1)
"12:00 12:00pm"$c10+1
(22$i":00  ">+1$i<":00pm"$c10+1)
(24$i":00 ">+1$i<":00pm"$c10+1)

ลองออนไลน์


0

Javascript (ใช้ไลบรารีภายนอก - นับได้) (107 ไบต์)

_.Range(0,24).WriteLine(x=>((x<10?"0"+x:x)+":00 "+(((h=((x+11)%12)+1))<10?" "+h:h)+":00"+(x<12?"am":"pm")))

เชื่อมโยงไปยังห้องสมุด: https://github.com/mvegh1/Enumerable/

คำอธิบายรหัส: สร้างอาร์เรย์ของจำนวนเต็มตั้งแต่ 0 ถึง 23 สำหรับการเขียนแต่ละบรรทัดตามภาคแสดง เพรดิเคตนั้นตรวจสอบว่า val ปัจจุบันน้อยกว่า 10 หรือไม่และแปะมันด้วย 0 มิฉะนั้นจะใช้ val ปัจจุบันตามที่เป็นอยู่ จากนั้นเพิ่มสตริงนาทีให้กับมัน ถ้าอย่างนั้นโดยทั่วไปแล้วจะใช้กลอุบายเล็กน้อยในการแปลงทหารเป็นเวลา am / pm และจัดการ padding สำหรับ am / pm ครั้งน้อยกว่า 10

ป้อนคำอธิบายรูปภาพที่นี่


0

SmileBASIC ขนาด 73 ไบต์

FOR H=0TO 23?FORMAT$(%02D:00 %2D:00%Sm",H,(H+11)MOD 12+1,"ap"[H>11])NEXT

มีคนพบสูตร 24-> 12 ชั่วโมงที่ดีกว่าสูตรเก่าของฉันซึ่งช่วยประหยัด 3 ไบต์และ 5 ไบต์ในโปรแกรมอื่น


0

PHP, 67 65 64 ไบต์

สิ่งนี้ใช้การเข้ารหัส IBM-850

for(;$i<24;)printf(~┌¤═ø┼¤¤┌╠ø┼¤¤┌îƧ,$i,$i%12?:12,$i++>11?p:a);

ด้วยสตริงที่ไม่ได้เข้ารหัส (66 ไบต์):

for(;$i<24;)printf("%02d:00%3d:00%sm\n",$i,$i%12?:12,$i++>11?p:a);

ทำงานแบบนี้:

php -n -r 'for(;$i<24;)printf(~┌¤═ø┼¤¤┌╠ø┼¤¤┌îƧ,$i,$i%12?:12,$i++>11?p:a);'

การปรับแต่ง

  • บันทึก 2 ไบต์โดยปรับปรุงรูปแบบ sprintf
  • บันทึกไบต์โดยการกำจัดพื้นที่ที่ไม่จำเป็น (ขอบคุณ @Titus)

คุณสามารถใช้แทน-n -d error_reporting=30709ควรจะมีช่องว่างก่อนไม่มี/am pmบันทึกหนึ่งไบต์ในเวอร์ชันที่ไม่ได้เข้ารหัสด้วยการแบ่งบรรทัดแบบฟิสิคัล
ติตัส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.