Waktu 24 dan 12 Jam

24

Tulis program atau fungsi tanpa input yang mencetak atau mengembalikan string 24 jam dan 12 jam ini:

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

String harus berupa output persis seperti yang ditampilkan di sini. Satu-satunya pengecualian adalah bahwa ia dapat secara opsional memiliki satu baris baru.

Jadi hash MD5 dari output Anda seharusnya

827ae6e2dbb1df494930baedb3ee2653

jika Anda tidak memiliki baris baru dan

cd4c3d18abee9bafb495f390a919a13f

jika kamu melakukan. (Hash Anda mungkin berbeda jika sistem Anda menggunakan jenis baris baru tapi tidak apa-apa.)

Kode terpendek dalam byte menang. Tiebreaker adalah jawaban sebelumnya.

Hobi Calvin
sumber

Jawaban:

13

Bash + coreutils, 43 30

  • Disimpan 7 byte berkat @Yossarian
  • Disimpan 3 byte berkat @AndersKaseorg
seq 0 23|date -f- +%R\ %l:00%P
  • seq menghasilkan bilangan bulat 0-23, satu per baris.
  • datemenginterpretasikan setiap baris sebagai datetime. Bare integer tampaknya cukup untuk dikenali sebagai jam dalam sehari date. datekemudian output setiap kali dengan format yang diperlukan menggunakan penentu format waktu yang tersedia .

Asumsikan LANG=Clokal, sesuai jawaban meta ini .

Ideone.

Trauma Digital
sumber
2
Anda bahkan dapat melakukan seq 0 23dan menyimpan 7 byte
Yossarian
1
Dan %H:00%Rmenyimpan 3 lainnya.
Anders Kaseorg
@AndersKaseorg, nop, %Rmemasukkan nol di depan, tidak diinginkan oleh OP.
rexkogitans
@rexkogitans Sebuah terkemuka nol adalah ingin (di kolom pertama, yang merupakan salah satu yang saya bicarakan).
Anders Kaseorg
@AndersKaseorg, oh, Anda berbicara tentang yang pertama ... maka Anda benar, tentu saja. Mengoreksi komentar saya di atas.
rexkogitans
12

Python 2, 66 byte

for i in range(24):print'%02d:00%3d:00%sm'%(i,12+i%-12,'ap'[i>11])
kennytm
sumber
1
modulo -12 pintar!
Erik the Outgolfer
Kalau-kalau ada yang bertanya-tanya: i=0;exec"print'%02d:00%3d:00%cm'%(i,~-i%12+1,97+i/12*15);i+=1;"*24mengubah kode dalam tiga cara berbeda, tetapi setiap perubahan memiliki panjang yang sama.
Sp3000
8

C, 73 byte

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

mIllIbyte menemukan cara yang sangat rapi untuk menulis ulang jawaban ini. Terima kasih!

Lynn
sumber
Keren - Saya tidak pernah tahu tentang?:
Digital Trauma
Saya tidak tahu! Menarik. Saya memperbaikinya :)
Lynn
Ahh, yah, ?:sebenarnya setara dengan Perl ||, saya percaya. C ||lebih mirip (a || b) ? 1 : 0.
Lynn
1
i++,i%12?:12,"ap"[i/12])tidak memiliki titik urutan. Tidak bisa memastikan kapan i++terjadi. Mungkinfor(i=0;i<24;i++) ...i,i%12?:12,"ap"[i/12]...
chux - Reinstate Monica
i++<24lebih baik - tidak menambahkan lebih banyak byte ke kode sumber
anatolyg
6

MATL, 46 42 34 byte

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

Sebelumnya, 42 byte 12tEt:q2M/736330+t15XObZ"!b16XOhhkw14:X~Z),, dan 46 byte 736330 24t:qw/+t15XO' '24TX"b16XOhhk14: 12X~Z),. Tentu saja 736330 tidak diperlukan, itu gila!

Catatan: Tidak berfungsi dengan TryItOnline, saya pikir ada masalah kompatibilitas antara implementasi Matlab dan Octaves datestr.

datestrmengambil representasi nomor dari suatu tanggal dan mengubahnya menjadi representasi string dari tanggal tersebut. Waktu dalam sehari adalah bagian pecahan dari angka tersebut, jadi 0,0 kortond hingga 0 Januari 0000, pada pukul 00:00:00, dan 1,0 berkorespondensi dengan tanggal 1 Januari 0000, pukul 00:00:00. 1/24 adalah 1 pagi, 2/24 2 pagi dll.

Penjelasan

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

Untuk menunjukkannya berfungsi di Matlab, berikut adalah tangkapan layar

masukkan deskripsi gambar di sini

David
sumber
5

/// , 160 byte

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

Cobalah online!

Tidak disatukan

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

Erik the Outgolfer
sumber
Fakta yang menyenangkan: menjadikan :00penggantian menjadi satu byte lebih lama ... TIO
steenbergh
@steenbergh Itu karena :00adalah string 3-byte yang muncul 3 kali. 3 × 3 = 9, membuat penggantian dalam biaya kasus Anda 3 + 1 + 3 = 7 karena menggunakan alias 1-byte, dan Anda menggunakannya 3 kali, jadi 7 + 3 = 10. 9 <10, jadi saya tidak akan menggantinya.
Erik the Outgolfer
5

MarioLANG, 965 834 byte

Cobalah online

nah ini sangat rumit.

Secara teknis outputnya valid tetapi dalam praktiknya Tio untuk output MarioLANG "n" ​​bukan "n" ketika kita mencetak angka dengan ':'

jika saya menemukan waktu saya akan menebak saya akan mencoba untuk melakukan (mungkin lebih lama) versi program yang menghasilkan dengan benar di Tio

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

Penjelasan:

masalah utama kami di sini adalah fakta bahwa kami memiliki 6 NaN char (newLine, Space,:, a, p, m)

di marioLANG, untuk mencetak karakter, kita memerlukan nilai ascii mereka:

  • newLine adalah 10
  • Ruang adalah 32
  • : adalah 58
  • a adalah 97
  • p adalah 112
  • m adalah 109

Jadi hal pertama yang harus dilakukan adalah mengatur memori:

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

dengan ini, memori terlihat seperti:

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

kami akan mengubah sebuah ke p selama sisa program

maka kami melakukan output aktual:

++<>) +++@++++>   [!) >)>((((::(.)::((.))+:+:--(.)::)).).).)+++++++++
++""+ +"=====""====#) "+"============================================
+++)+ +>>+++++- <+<)->+++ ![-).).).))(::)).(:(:)))..(((::)).(:+(:((((<
+>+++ ++"====<( ")")-"!+++#=========================================="
+(+++>++!++)<+( ++++-+++++>
 -))+)=(#==="+( ++++)+++++"==========================================!
 [!!+-[!(+++!!! !+!<+!++!>(((((+:(.))::(((.
==##===#====###=#=#"=##=#"=================<
++++)))+++++++++++++++(((![-).).).)::)).(:))   >
>========================#==================   "
+>+ >
+"+ "=======================================[   =====================#===============[
+!> ! -).).).))(::)).)):+(..(((::)).(:+(((((<++!-).).).))(::)).)):+(.(((::)).(:+(((((<
=#==#======================================="==#======================================
Eter Katak
sumber
4

Julia, 88 71 66 64 byte

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

Ini adalah program lengkap yang mencetak string dengan satu baris baru.

Cobalah online!

Disimpan 5 byte berkat Sp3000 dan 2 berkat Dennis!

Alex A.
sumber
4

Fungsi C #, 100 byte

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");}}

Versi tidak disatukan:

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() terlalu banyak karakter!

STLDev
sumber
Halo, dan selamat datang di PPCG! Saya menggunakan C # sedikit, tetapi apa yang $dilakukan pemimpin ke string?
NoOneIsHere
3
@NoOneIsHere - Itu disebut "interpolasi string" dan ini fitur baru di C # 6.0. Anda dapat membaca lebih lanjut tentang ini di sini https://msdn.microsoft.com/en-us/library/dn961160.aspx .
STLDev
3

JavaScript (ES2015), 147 138 137 134 133 byte

((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')

Dalam versi ini saya memanfaatkan metode String.repeat () untuk menghilangkan .slice () dan .join () yang panjang dan memindahkan penambahan di dalam loop.

Versi sebelumnya:

((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)

Memberikan output dengan mengikuti baris baru. Diuji dalam Firefox Scratchpad. Tidak yakin apakah meneruskan argumen ke IIFE tidak masalah dengan aturan "tidak ada input".

Ini kiriman pertama saya, jadi halo untuk semua orang! :)

Leibrug
sumber
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

Cobalah online!

Upaya pertama, sedikit lebih lama, tetapi hanya satu kalimat:

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

Cobalah online!

t-clausen.dk
sumber
1
Dikurangi menjadi 121 karakter: coba online
Ross Presser
@RossPresser sekali lagi Anda membantu saya, belajar banyak di sini
t-clausen.dk
2

Perl 5, 58

map{printf"%02u:00%3u:00%sm
",$_,$_%12||12,$_>11?p:a}0..23
msh210
sumber
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')

Sunting: Bug kecil diperbaiki + keluaran:

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
starcorder
sumber
2

V , 56 53 byte

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

Cobalah online!

Karena ini sulit untuk dimasukkan, berikut adalah hexdump yang dapat dibalik:

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.

Sebuah versi tidak bersaing secara sepele lebih pendek 2 byte jika Anda mengganti kedua kemunculan G$dengan L, yang seharusnya sama tetapi memiliki bug.

Penjelasan:

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"
DJMcMayhem
sumber
2

05AB1E , 51 50 48 44 42 byte

Disimpan dua byte, terima kasih carusocomputing

Kode:

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

Cobalah online!

Penjelasan

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
Emigna
sumber
codegolf.stackexchange.com/questions/103242/... ;). Sekarang apakah atau tidak itu dapat dioptimalkan di bawah 50 adalah untuk pertanyaan haha.
Magic Gurita Guci
23Ýbukannya 24L<untuk 1 byte. Dan sudah berapa lama ë? Saya merasa sangat bodoh tidak tahu tentang pernyataan lain di 05AB1E sampai sekarang.
Magic Gurita Guci
@carusocomputing: Terima kasih! lain sudah ada untuk sementara waktu, tapi kadang-kadang sudah bermasalah. Apalagi saat bersarang seandainya.
Emigna
1

PowerShell v2 +, 76 byte

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

Loop dari 0..23dan setiap loop menetapkan string dengan -foperator. Yang pertama {0:D2}memastikan kami memiliki nol di depan, yang kedua {1,3}memastikan kami memiliki ruang empuk untuk kolom tengah. The {0}satu berkorespondensi dengan $_para -foperator, sedangkan {1}berkorespondensi dengan pseudo-ternary yang memilih antara $_%12atau 12berdasarkan apakah $_%12non-nol atau tidak (yaitu, jika kita berada di $_=13, ini akan memilih 1untuk 1:00). Kami kemudian menggabungkannya dengan pseudo-ternary lain yang memilih yang sesuai am/ pm.


Berlawanan dengan jawaban saya pada Daftar sepanjang hari dengan kecepatan setengah jam , sebenarnya lebih pendek di sini untuk memaksa angka karena kita mendapatkan lapisan yang jauh lebih murah. Inilah jawabannya menggunakan fungsi tanggal, pada 78 byte

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

C ++, 81 79 byte

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

Kode ini membutuhkan using namespace stdtempat sebelumnya.

Itu loop pada nilai 0 ... 23. Ini mengalikan setiap nilai dengan 3600, mengkonversi ke sebuah tmstruct dan mencetaknya. Format cetak %Rmenghasilkan 24 jam dan menit; format cetak %ldan %Poutput bagian 12 jam yang tepat; mereka membutuhkan GNU .

Versi online yang berfungsi ada di sini .

anatolyg
sumber
1

Ruby, 66 62 byte

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

Versi baru

24.times{|i|puts"%02d:00%3d:00#{'ap'[i/12]}m"%[i,(i-1)%12+1]}
Gosha U.
sumber
1
24.timeslebih pendek. Tidak perlu ruang di sekitar puts.
manatwork
Anda dapat mengganti (i-1)dengan ~-iuntuk 2 byte.
Jordan
1

JavaScript (ES6), 119 116 byte

_=>Array(24).fill().map((_,i)=>`${`0${i}`.slice(-2)}:00 ${` ${(i+11)%12+1}`.slice(-2)}:00${'ap'[+(i>11)]}m`).join`
`
Khusus ASCII
sumber
1

Sclipting, 76 byte

Program mengasumsikan bahwa input kosong ( '0'atau apapun yang dikonversi ke integer 0).

Hitungan byte mengasumsikan pengkodean UTF-16.

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

Tidak Disatukan:

군 // 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

Setiap iterasi dari loop meninggalkan banyak string kecil di stack; pada akhirnya mereka semua digabungkan secara otomatis.

Timwi
sumber
1

JavaScript, 97 95 byte

Ini didasarkan dari jawaban starcorder . Terima kasih kepada George Reith untuk peningkatan 2 byte.

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')

Tidak Disatukan:

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')
Timwi
sumber
Anda dapat menyimpan 2 byte dengan menulis ulang n < 10sebagai 9 < ndan menukar kasus ternary
George Reith
1

Batch, 167 byte

@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
Neil
sumber
1

Kotlin , 95 byte

Ini bisa diperbaiki pasti.

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

PHP, 110 107 byte

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";}
tampilan meledak
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";
}

Agak terkejut, mencoba mengubah ($i < 10 ? $s : "") . "$i:00"bit menjadi fungsi, tetapi akhirnya menambahkan ~ 25 karakter. Tidak usah kesana.

ricdesi
sumber
0

Swift, 85 byte

for x in 0...23{print(String(format:"%02d:00 %2d:00\(x<12 ?"a":"p")m",x,12+x % -12))}
GoatInTheMachine
sumber
Ini tidak berhasil, setidaknya tidak bagi saya di Swift 2.2. Output
JAL
Saya harus mengubah string format Anda:String(format: "%02d:00 %2d:00\(x<12 ?"a":"p")m", x, x%12 != 0 ? x%12 : 12)
JAL
0

Fungsi C, 82 byte

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

Penggunaan, 94 Byte

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();}

Tidak Digubah, 337 Bytes

#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();
}

ini bekerja pada Windows:

dalam peringatan Anda dapat menemukan seluruh program

Program C, 85 byte

main(i){for(;i<24;printf("%02d:00 %2d:00%cm\n",i,i%12==0?12:i%12,i>11?'p':'a'),i++);}
Giacomo Garabello
sumber
Anda mungkin perlu inisialisasi i=0untuk versi fungsi. Dan untuk versi program, Anda dapat memasukkan kode secara langsung main- tidak perlu mendefinisikan fungsi di sana!
anatolyg
Terima kasih! diedit !! FYI: Dalam versi funcion jika Anda menggunakannya tanpa params itu diinisialisasi sendiri ke 0!
Giacomo Garabello
i%12==0?12:i%12->i%12?i%12:12
chux - Reinstate Monica
"Dalam versi funcion jika Anda menggunakannya tanpa params itu sendiri diinisialisasi ke 0!" Ini sepertinya bukan standar C. Adakah referensi untuk mendukung ini?
chux - Reinstate Monica
Saya perhatikan ini hanya berfungsi pada gcc yang telah saya instal pada sistem windows saya .. seorang teman saya dengan linux mengatakan kepada saya bahwa itu tidak berfungsi pada pc-nya tetapi saya tidak tahu bagaimana cara memperbaikinya untuk linux ...
Giacomo Garabello
0

Foo, 163 byte

Pendekatan yang cukup kasar; tidak ada yang pintar di sini (saya mencoba di beberapa tempat tetapi akhirnya menjadi lebih pendek untuk tidak), hanya ingin memberikan Foo kesempatan. Foo secara otomatis mencetak apa pun di dalam tanda kutip. $c10mencetak jeda baris. (## ... )loop sampai sel saat ini sama ##.

"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)

Tidak digabungkan sedikit:

"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)

Cobalah online

SnoringFrog
sumber
0

Javascript (menggunakan perpustakaan eksternal - Dihitung) (107 byte)

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

Tautan ke perpustakaan: https://github.com/mvegh1/Enumerable/

Penjelasan kode: Buat array bilangan bulat dari 0 hingga 23, untuk setiap baris tulis sesuai dengan predikat. Predikat itu memeriksa apakah val saat ini kurang dari 10, dan membalutnya dengan 0, yang lain menggunakan val saat ini sebagaimana adanya. Kemudian tambahkan string menit ke sana. Kemudian pada dasarnya melakukan sedikit tipu daya untuk mengubah militer menjadi waktu am / pm, dan menangani bantalan untuk waktu am / pm kurang dari 10.

masukkan deskripsi gambar di sini

applejacks01
sumber
0

SmileBASIC, 73 byte

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

Seseorang menemukan formula 24-> 12 jam lebih baik daripada yang lama, yang menyimpan 3 byte, dan 5 byte di program lain

12Me21
sumber
0

PHP, 67 65 64 byte

Ini menggunakan pengkodean IBM-850.

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

Dengan string yang tidak dilodekan (66 byte):

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

Jalankan seperti ini:

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

Tweaks

  • Disimpan 2 byte dengan meningkatkan format sprintf
  • Menyimpan byte dengan menghilangkan ruang yang tidak perlu (thx @Titus)
aross
sumber
Anda bisa menggunakan -nbukan -d error_reporting=30709. Seharusnya tidak ada ruang sebelum am/ pm. Simpan satu byte pada versi tanpa kode dengan linebreak fisik.
Titus
0

tcl, 93

set i 0;time {puts [format %02d:00%3d:00[expr $i<12?"a":"p"]m $i [expr $i%-12+12]];incr i} 24

demo

sergiol
sumber