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.
code-golf
string
kolmogorov-complexity
arithmetic
date
Hobi Calvin
sumber
sumber
Jawaban:
Bash + coreutils,
4330seq
menghasilkan bilangan bulat 0-23, satu per baris.date
menginterpretasikan setiap baris sebagai datetime. Bare integer tampaknya cukup untuk dikenali sebagai jam dalam seharidate
.date
kemudian output setiap kali dengan format yang diperlukan menggunakan penentu format waktu yang tersedia .Asumsikan
LANG=C
lokal, sesuai jawaban meta ini .Ideone.
sumber
seq 0 23
dan menyimpan 7 byte%H:00
→%R
menyimpan 3 lainnya.%R
memasukkan nol di depan, tidak diinginkan oleh OP.Python 2, 66 byte
sumber
i=0;exec"print'%02d:00%3d:00%cm'%(i,~-i%12+1,97+i/12*15);i+=1;"*24
mengubah kode dalam tiga cara berbeda, tetapi setiap perubahan memiliki panjang yang sama.C, 73 byte
mIllIbyte menemukan cara yang sangat rapi untuk menulis ulang jawaban ini. Terima kasih!
sumber
?:
?:
sebenarnya setara dengan Perl||
, saya percaya. C||
lebih mirip(a || b) ? 1 : 0
.i++,i%12?:12,"ap"[i/12])
tidak memiliki titik urutan. Tidak bisa memastikan kapani++
terjadi. Mungkinfor(i=0;i<24;i++) ...i,i%12?:12,"ap"[i/12]...
i++<24
lebih baik - tidak menambahkan lebih banyak byte ke kode sumberMATL,
464234 byteSebelumnya, 42 byte
12tEt:q2M/736330+t15XObZ"!b16XOhhkw14:X~Z)
,, dan 46 byte736330 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
.datestr
mengambil 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
Untuk menunjukkannya berfungsi di Matlab, berikut adalah tangkapan layar
sumber
/// , 160 byte
Cobalah online!
Tidak disatukan
sumber
:00
penggantian menjadi satu byte lebih lama ... TIO:00
adalah 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.MarioLANG,
965834 byteCobalah 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:
Jadi hal pertama yang harus dilakukan adalah mengatur memori:
dengan ini, memori terlihat seperti:
kami akan mengubah sebuah ke p selama sisa program
maka kami melakukan output aktual:
sumber
Julia,
88716664 byteIni adalah program lengkap yang mencetak string dengan satu baris baru.
Cobalah online!
Disimpan 5 byte berkat Sp3000 dan 2 berkat Dennis!
sumber
Fungsi C #, 100 byte
Versi tidak disatukan:
Console.Write()
terlalu banyak karakter!sumber
$
dilakukan pemimpin ke string?JavaScript (ES2015),
147138137134133 byteDalam versi ini saya memanfaatkan metode String.repeat () untuk menghilangkan .slice () dan .join () yang panjang dan memindahkan penambahan di dalam loop.
Versi sebelumnya:
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! :)
sumber
TSQL (SQLServer 2012)
146124121Cobalah online!
Upaya pertama, sedikit lebih lama, tetapi hanya satu kalimat:
Cobalah online!
sumber
Perl 5, 58
sumber
Javascript,
122 Bytes, 120 BytesSunting: Bug kecil diperbaiki + keluaran:
sumber
V ,
5653 byteCobalah online!
Karena ini sulit untuk dimasukkan, berikut adalah hexdump yang dapat dibalik:
Sebuah versi tidak bersaing secara sepele lebih pendek 2 byte jika Anda mengganti kedua kemunculan
G$
denganL
, yang seharusnya sama tetapi memiliki bug.Penjelasan:
sumber
05AB1E ,
5150484442 byteDisimpan dua byte, terima kasih carusocomputing
Kode:
Cobalah online!
Penjelasan
sumber
23Ý
bukannya24L<
untuk 1 byte. Dan sudah berapa lamaë
? Saya merasa sangat bodoh tidak tahu tentang pernyataan lain di 05AB1E sampai sekarang.PowerShell v2 +, 76 byte
Loop dari
0..23
dan setiap loop menetapkan string dengan-f
operator. 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-f
operator, sedangkan{1}
berkorespondensi dengan pseudo-ternary yang memilih antara$_%12
atau12
berdasarkan apakah$_%12
non-nol atau tidak (yaitu, jika kita berada di$_=13
, ini akan memilih1
untuk 1:00). Kami kemudian menggabungkannya dengan pseudo-ternary lain yang memilih yang sesuaiam
/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
sumber
C ++,
8179 byteKode ini membutuhkan
using namespace std
tempat sebelumnya.Itu loop pada nilai 0 ... 23. Ini mengalikan setiap nilai dengan 3600, mengkonversi ke sebuah
tm
struct dan mencetaknya. Format cetak%R
menghasilkan 24 jam dan menit; format cetak%l
dan%P
output bagian 12 jam yang tepat; mereka membutuhkan GNU .Versi online yang berfungsi ada di sini .
sumber
Ruby,
6662 byteVersi baru
sumber
24.times
lebih pendek. Tidak perlu ruang di sekitarputs
.(i-1)
dengan~-i
untuk 2 byte.JavaScript (ES6),
119116 bytesumber
Sclipting, 76 byte
Program mengasumsikan bahwa input kosong (
'0'
atau apapun yang dikonversi ke integer0
).Hitungan byte mengasumsikan pengkodean UTF-16.
Tidak Disatukan:
Setiap iterasi dari loop meninggalkan banyak string kecil di stack; pada akhirnya mereka semua digabungkan secara otomatis.
sumber
JavaScript,
9795 byteIni didasarkan dari jawaban starcorder . Terima kasih kepada George Reith untuk peningkatan 2 byte.
Tidak Disatukan:
sumber
n < 10
sebagai9 < n
dan menukar kasus ternaryBatch, 167 byte
sumber
Kotlin , 95 byte
Ini bisa diperbaiki pasti.
sumber
PHP,
tampilan meledak110107 byteAgak terkejut, mencoba mengubah
($i < 10 ? $s : "") . "$i:00"
bit menjadi fungsi, tetapi akhirnya menambahkan ~ 25 karakter. Tidak usah kesana.sumber
Swift, 85 byte
sumber
String(format: "%02d:00 %2d:00\(x<12 ?"a":"p")m", x, x%12 != 0 ? x%12 : 12)
Fungsi C, 82 byte
Penggunaan, 94 Byte
Tidak Digubah, 337 Bytes
ini bekerja pada Windows:
Program C, 85 byte
sumber
i=0
untuk versi fungsi. Dan untuk versi program, Anda dapat memasukkan kode secara langsungmain
- tidak perlu mendefinisikan fungsi di sana!i%12==0?12:i%12
->i%12?i%12:12
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.
$c10
mencetak jeda baris.(## ... )
loop sampai sel saat ini sama##
.Tidak digabungkan sedikit:
Cobalah online
sumber
Javascript (menggunakan perpustakaan eksternal - Dihitung) (107 byte)
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.
sumber
SmileBASIC, 73 byte
Seseorang menemukan formula 24-> 12 jam lebih baik daripada yang lama, yang menyimpan 3 byte, dan 5 byte di program lain
sumber
PHP,
676564 byteIni menggunakan pengkodean IBM-850.
Dengan string yang tidak dilodekan (66 byte):
Jalankan seperti ini:
Tweaks
sumber
-n
bukan-d error_reporting=30709
. Seharusnya tidak ada ruang sebelumam
/pm
. Simpan satu byte pada versi tanpa kode dengan linebreak fisik.tcl, 93
demo
sumber