Gunakan bahasa pemrograman apa pun untuk menampilkan angka antara 1 dan 99 (termasuk keduanya) sedemikian rupa, sehingga:
- jumlahnya dipisahkan oleh ruang tunggal,
- jika angka dapat dibagi 3, itu harus dalam tanda kurung,
- jika angka dapat dibagi 4, itu harus dalam tanda kurung,
- jika angka dapat dibagi dengan 3 dan 4, itu harus dalam kurung dan kurung kotak (dengan kurung kotak lebih dekat ke nomor).
Program Anda harus menampilkan dengan tepat:
1 2 (3) [4] 5 (6) 7 [8] (9) 10 11 ([12]) 13 14 (15) [16] 17 (18) 19 [20] (21) 22 23 ([24]) 25 26 (27) [28] 29 (30) 31 [32] (33) 34 35 ([36]) 37 38 (39) [40] 41 (42) 43 [44] (45) 46 47 ([48]) 49 50 (51) [52] 53 (54) 55 [56] (57) 58 59 ([60]) 61 62 (63) [64] 65 (66) 67 [68] (69) 70 71 ([72]) 73 74 (75) [76] 77 (78) 79 [80] (81) 82 83 ([84]) 85 86 (87) [88] 89 (90) 91 [92] (93) 94 95 ([96]) 97 98 (99)
code-golf
kolmogorov-complexity
Monolica
sumber
sumber
Jawaban:
05AB1E , 23 byte
-1 byte terima kasih kepada Kevin Cruijssen
Cobalah online!
sumber
}?ð?
menjadi]ðý
(tutup if dan loop, dan gabungkan seluruh stack dengan spasi)Å€
Python 2 ,
686560 byteCobalah online!
sumber
R , 61 byte
Cobalah online!
sumber
Jelly ,
2120 byteCobalah online!
Bagaimana itu bekerja
sumber
D , 110 byte
Cobalah online!
Porting dari jawaban C ++ @ HatsuPointerKun.
sumber
Arang , 30 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
J ,
5453 byte1 byte lebih sedikit berkat @Jonah
Cobalah online!
sumber
stdout
sini ... Saya belum pernah melihat itu sebelumnya. @FrownyFrog#
. Saya telah memperkenalkan tambahan kata kerja untuk surround dengan()
dan[]
:g=. {.@[ , ":@] , {:@[
. ugh verboseness!LF
alih-alih_
. yang terakhir tampaknya bekerja juga.C, C ++,
136133131129128124 byte-5 byte terima kasih kepada Zacharý dan terinspirasi oleh fungsi write () dalam bahasa D (lihat jawaban Zacharý)
-2 byte terima kasih kepada mriklojn
-12 byte untuk versi C berkat mriklojn
-4 bytes berkat ceilingcat
C Pengoptimalan Khusus: 115 byte
sumber
inf f()
hal itu? Maaf tentang menghapus komentar saya, pikir saya memiliki sesuatu yang lebih pendek (saya tidak)printf
sesuatu. Tidak bisakah kamu menggunakan C stdio kalau begitu?int i
fungsi di luar (dalam lingkup global) maka nilainya default ke 0 dan tipe data default keint
. Ini akan menghasilkan loop Anda mulai dari 0, dan untuk memperbaikinya Anda bisa memindahkan kenaikan ke ekspresi kondisi di loop Anda, membuatnya terlihat sepertii;f(){for(;++i<=99;)
")\0"+i%3
alih-alihi%3?"":")"
. Juga, saya pikir Anda perlu menambahkani=0
di awal loop.Powershell, 60 byte
Penjelasan:
$_, "($_)", "[$_]", "([$_])"
[!($_%3)+2*!($_%4)]
Skrip Tes yang kurang golf:
Keluaran:
sumber
MathGolf ,
41403429 byteCATATAN: Ini memiliki ruang tambahan
Hanya jawaban MathGolf kedua saya ..
-5 byte berkat @ JoKing .
Cobalah online.
Penjelasan:
sumber
q
bisa dihilangkan dan itu dilakukan secara implisit dalam loop. Juga, tidak tahu ada builtin 2/3/4-string. Sayang sekali trik rotate tidak bekerja dengan array yang dibungkus.Haskell , 77 byte
Cobalah online!
Saya ingin tahu apakah
show[n]
dapat digunakan untuk mempersingkat segalanya, sejauh ini tidak berhasil .sumber
Lua,
161123 byteCobalah online!
Tidak Disatukan:
sumber
Python 2 ,
1059788868584 byteCobalah online!
sumber
C (gcc) , 84 byte
Ada byte nol di awal setiap "string braket".
Cobalah online!
sumber
PowerShell ,
6762 byteCobalah online!
Pada dasarnya sebuah FizzBuzz menggunakan perkalian string kali variabel Boolean (secara implisit dilemparkan ke 1 atau 0). String-string itu ditinggalkan di jalur pipa dan dikumpulkan di dalam blok skrip di dalam tanda kutip. Karena default
$OutputFieldSeparator
untuk array adalah spasi, ini secara implisit memberi kita elemen array yang dibatasi ruang.sumber
C #,
124117123 byte-5 byte terima kasih kepada Kevin Cruijssen
Uji dengan:
sumber
x
alih-alihi
, sehingga tidak perlu khawatir tentang C #int
? (Anda masih harus mengaturnya, tentu saja).i
dan fakta bahwa saya dapat menginisialisasi pada 0 ketika sayaInvoke
. Tapi bukankah itu berarti saya harus memasukkan deklarasi t (Action<int>
) dan panggilan (t.Invoke(0)
) dalam bytecount?x=>{for(x=0;x++<99;)Console.Write((x%3==0?"(":"")+(x%4==0?"[":"")+x+(x%4==0?"]":"")+(x%3==0?")":"")+(x%99==0?"":" "));};
akan berhasil.==0
bisa<1
.Merah ,
9997 byteCobalah online!
sumber
Ruby ,
7266 byteTerima kasih kepada @ jonathan-frech dan @ conor-obrien untuk pemangkasan tambahan.
sumber
a.join b
untuk arraya
dan stringb
setara dengana*b
PowerShell,
988274676362 byte-31 byte berkat @Veskah -5 byte berkat @ ASCII saja
Cobalah online!
Saya masih tidak yakin apa yang telah saya lakukan di sini.
sumber
"$a"
masih akan mengganti nilainya. (Catatan: Kutipan tunggal tidak menggantikan$foo
, hanya tanda kutip ganda). Trik lain adalah seandainya hanya peduli 0 atau 1 sehingga Anda dapat menggunakan logika boolean untuk menyimpan byteperl -E, 60 byte
Beberapa byte dapat disimpan jika kita dapat menggunakan baris baru di antara angka-angka: dalam hal ini, kita dapat menghapus
$,=$";
, mengubahmap
ke dalamfor
loop, sambil memindahkansay
ke dalam loop.sumber
/^1$|^(11+?)\1+$/
?Perl 6 ,
5148 byteCobalah online!
sumber
Batch, 145 byte
Kode jatuh ke dalam subrutin tetapi string sudah dicetak pada titik ini sehingga kode dieksekusi tanpa berbahaya.
sumber
PHP 103
for(;$i<1e2;$i++)$a.=$i%12==0?"([$i]) ":($i%3==0?"($i) ":($i%4==0?"[$i] ":"$i "));echo substr($a,5,-1);
https://www.ideone.com/SBAuWp
sumber
Bersihkan , 100 byte
Cobalah online!
sumber
sfk , 225 byte
Cobalah online!
sumber
Bash, 61 byte
-14 byte, terima kasih kepada Dennis
penjelasan
Cukup mudah:
seq
menghasilkan 1..99awk
dengan pemisah catatan keluaran (ORS
) diatur ke ruang sehingga output adalah satu baris.Cobalah online!
sumber
JavaScript (Node.js) , 57 byte
Cobalah online!
Berubah ke komunitas karena pengoptimalan terlalu mengandalkannya
sumber
${n%4?n:`[${n}]`}
PHP, 65 byte
atau
(membutuhkan PHP 5.5 atau yang lebih baru)
Jalankan dengan
-nr
atau coba online .sumber
Python 2 , 78 byte
Cobalah online!
Saya membayangkan pendekatan keren ini mengiris
'([%0d])'
tetapi saya tidak bisa mendapatkan ekspresi yang lebih pendek.sumber
Java 8,
9291 byte-1 byte terima kasih kepada @Dana
i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}
Cobalah online!
Solusi alternatif, 82 byte (dengan ruang tambahan di keluaran - tidak yakin apakah itu diizinkan):
i->{for(;i++<99;)out.printf((i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)+" ",i);}
Penjelasan:
for(;i++<99;)
- a for loop yang berjalan dari nilaii
(digunakan kembali sebagai input, diambil menjadi 0 dalam kasus ini) menjadi 99out.printf(<part1>+<part2>,i);
- memformat string sebelum segera mencetaknya ke stdout dengan nilaii
di mana
<part1>
adalah(i>1?" ":"")
- mencetak ruang sebelum mencetak angka kecuali nomor itu adalah 1, dalam hal ini menghilangkan spasidan
<part2>
adalah(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)
- jikai
habis dibagi oleh kedua 3 dan 4,i
memiliki kedua persegi dan kurung bulat di sekitarnya; lain jikai
dapat dibagi 3,i
memiliki kurung bundar; lain jikai
habis dibagi 4,i
memiliki tanda kurung siku; lain,i
tidak punya tanda kurung.sumber
(i>1:" ":"")
i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}
?