Pemenang: Jawaban CJam Aditsu ! 25 byte kekalahan! Bagus!
Anda dapat terus mengirimkan jawaban Anda, namun Anda tidak bisa lagi menang. Pos asli disimpan untuk anak cucu:
Gim "Bzzt" adalah gim di mana Anda harus menghitung angka (dalam hal ini 500). Namun, jika angka tersebut memiliki angka 3 di dalamnya, atau dapat dibagi dengan angka 3, Anda tidak mengatakan angka tersebut. Sebaliknya, Anda mengatakan "Bzzt".
Aturan:
- Anda tidak dapat membuat kode dengan angka-angka.
- Jumlahnya hanya harus memenuhi setidaknya 1 dari persyaratan berikut
- Dibagi dengan 3
- Angka berisi 3
- Beberapa jenis pemisah adalah wajib (12bzzt14 tidak masuk hitungan)
- Skor diukur dalam byte.
- Anda harus menghitung tepat hingga 500, mulai dari 1 atau 0 (Anda memilih).
- Angka-angka harus berupa keluaran, tetapi tidak masalah bagaimana (misalnya, stdout, menulis ke file teks, dll.).
- 0 dapat dibagi 3 atau tidak habis dibagi. Kamu bisa memilih.
- Anda dapat menampilkan angka satu per satu (ex, output 1, lalu 2, lalu bzzt, lalu 4, dll) atau sekaligus (misalnya, output 1 2 bzzt 4 5).
- Anda harus mengganti huruf 3 dengan kata "bzzt". Ini tidak peka huruf besar-kecil (bZzt, Bzzt, bzzt semuanya oke).
- Ini adalah tantangan kode-golf , sehingga kode terpendek menang.
- Kontes ini berakhir 30 Juni 2014 (7 hari sejak posting).
buzz
ataubzzt
jika kedua persyaratan berlaku? Apakah saya harus output12bzzt4
ataubzzt
untuk1234
?bzzt
untuk1234
. Ini adalah permainan minum 'umum' di sini (hanya saja kita sering melakukannya dengan 7)Jawaban:
CJam - 25
Terima kasih Howard :)
Cobalah di http://cjam.aditsu.net/
Penjelasan:
501{…}fI
pada dasarnyafor(int I=0; I<501; ++I) {…}
3s
mengkonversi 3 ke string, yaitu "3"I3%
adalahI
% 3<
mendapat substring kiri -"3".substring(0, I % 3)
- yang "" untukI
% 3 == 0 dan "3" jikaIs
dikonversiI
ke string-
dengan 2 string membuat perbedaan set, menghasilkan kosong string iffI
% 3 == 0 (string pertama kosong) atauI
memiliki 3 digit di dalamnya…I"bzzt"?
adalah seperti… ? I : "bzzt"
; string sebelumnya diperlakukan sebagai nilai boolean, di mana "" salah dan string lainnya benarN
menambahkan baris barusumber
501{3sI3%<Is-I"bzzt"?N}fI
.Ruby, 43
Cukup mudah.
Sunting: Disimpan satu byte, terima kasih Howard!
sumber
"#{a}"[?3]||a%3<1
."#{a}"[?3[0,a%3]]
.puts
denganp
dan tabungan 3 karakter?p
mencetak hasil dari memanggilinspect
argumennya (dibandingkan dengan menempatkan, yang memanggilto_s
). Jadi alih-alih mencetakBzzt
(yang:Bzzt.to_s
), itu akan mencetak:Bzzt
, yang tidak cocok dengan spesifikasi keluaran.seq dan GNU sed -
42333130Berfungsi langsung di dasbor, beberapa shell lain mungkin perlu menonaktifkan ekspansi sejarah, misalnya dengan bash
set +H
:sumber
0~3!
menjalankan{/3/!b}
dan bersama-sama ungkapan-ungkapan ini meninggalkan garis seolah-olah tidak dapat dibagi oleh dan tidak mengandung 3. Bit terakhir "mengoreksi" garis menjadi bzzt.kode mesin x86 pada DOS (file .com) - 71 byte
Mencetak output yang diperlukan ke stdout dengan spasi sebagai pembatas; dapat dijalankan tanpa masalah di DosBox.
Majelis yang dikomentari:
sumber
Perl - 35
4042sumber
PHP, tanpa pemisah -
62, 61,59,58,52,4947Tidak dikatakan harus ada spasi / baris baru / pemisah di antara mereka, tanpa:
Dengan pemisah,
68,67,65,64,58 / 55,53 / 5251/50echo
, menyelamatkan saya sedikit.~õ
menciptakan baris baruJavascript -
54,5150Prinsip yang sama, tetapi fungsi javascript:
sumber
console.log()
jelas, tetapi ini lebih pendek.<?for(;500>$i++;)echo$i%3*!strpbrk($i,3)?$i:bzzt,~õ;
Iniõ
adalah char 245, sedikit terbalik\n
.!strpbrk($1,3)
dengantrim(3,$i)
untuk menyimpan 4 byteJavascript
5049-1 byte berkat core1024
sumber
&&
operator boolean . Sebagai contoh:497 % 3 = 2
=>2 & true = 0
=>bzzt
for(i=0;++i<501;)alert(!/3/.test(i)*i%3?i:'bzzt')
- 49: PGolfScript,
3029 karakterImplementasi yang tidak begitu mudah dalam GolfScript, dapat diuji di sini .
sumber
Perl, 36
Sunting: Saya bukan seorang biksu Perl, jadi core1024 tampaknya telah berhasil memainkan byte lain dari ini dalam jawabannya .
sumber
say
untuk menyimpan 4 byte:say$_%3&&!/3/?$_:bzzt for 1..5e2
C # (71)
Dapat langsung dieksekusi di LinqPad.
sumber
|
) alih-alih logis-atau.Python (52)
Terima kasih grc!
Versi lama:
sumber
for i in range(501):print[i,'Bzzt'][i%3<1or'3'in`i`]
['3'[:i%3]in`i`]
Haskell:
88828079sumber
==0
dengan<1
elem'3'$show n
, yang lebih pendek. Atau tidak. Saya tidak memeriksa.elem
notasi awalan tidak menyimpan karakter apa pun karena harus ada spasi sebelum tanda kutip; kalau tidak Anda akan mendapatkanNot in scope: elem'3'
. Baik mata dengan<1
, meskipun!JavaScript
666360Terima kasih kepada edc65 untuk saran penggunaan array. Output sekarang akan dipisahkan oleh koma.
versi lama
Versi 1a - 66
Cetak dari 1 hingga 500 dalam kotak peringatan sesuai aturan. Outputnya dipisahkan oleh ruang.
Versi 1b - 65
Jika kami menganggap 0 tidak dapat dibagi dengan 3, kami dapat mempersingkat solusi menjadi 65 karakter:
Versi 2 - 63
Terima kasih kepada grc atas sarannya untuk mengurangi panjangnya.
sumber
for(a=i="";i<500;)a+=++i ...
PowerShell, 42
Sebagian besar karya Ventero, dengan sedikit bantuan tentang sintaks oleh saya ;-)
sumber
R, 49 karakter
Dijelaskan:
Pemakaian:
sumber
Cobra - 70
Gelombang - 222
Karena saya benar-benar menyukai bahasa ini ... karena suatu alasan ...
sumber
if
karena Anda tahu bahwa setidaknya ada satu digit. Juga menyatukan blok lengkap dalamfor
dengan&
mungkin bekerja untuk menyelamatkan tanda kurung.==
sebagai gantiEQU
dan mungkin menjatuhkan beberapa spasi di sana-sini.TI-BASIC - 31
(32) (34) (35) (36) (43)Perhatikan bahwa sebagian besar perintah pada TI-BASIC direpresentasikan sebagai entitas byte tunggal.
Kode membutuhkan X untuk diinisialisasi ke 0 sebelumnya (jika tidak, ini merupakan tambahan 3 byte).
Saya telah melakukan beberapa upaya untuk mencukur beberapa byte, jadi saya tidak merinci semua yang telah saya lakukan di sini, agar tidak mengacaukan postingan. Mereka sebagian besar diarahkan untuk memperpendek loop, yang telah saya lakukan dalam versi ini oleh loop Sementara dan dengan memperpendek kondisi If dengan bantuan
Ans
variabel.sumber
bzzt
angka yang mengandung angka 3, mis. 13.bzzt
hanya angka-angka yang dapat dibagi oleh 3. Menambahkan cara lain mungkin saja, tetapi akan membutuhkan lebih banyak instruksi.C, 93
Persetan ...
sumber
i = 0
Julia 64 byte
sumber
[println(a%3==0||3 in digits(a)?"bzzt":a) for a=1:500]
adalah 54 byte. Juga mengembalikan array tidak mencetak seluruh array, jadi saya tidak yakin apakah itu dianggap sebagai "output". Jika mengembalikan jumlah array maka[a%3==0||3 in digits(a)?"bzzt":a for a=1:500]
mungkin menghitung dan skor 45.cmd.exe - 91
... karena mengapa menggunakan file batch ketika ada satu-liner yang sangat mudah ... :-)
sumber
asyik - 51
sunting: menggunakan
times
versi pencetakan sekarang sependek "menampilkan". terima kasih @ will-psumber
(1..500).each
untuk500.times
C, 80
Menggunakan spasi sebagai pemisah alih-alih pemisah baris.
sumber
1 bzzt 3 4 bzzt 6 7 bzzt 9 10 bzzt bzzt 13 bzzt
... Ada yang salah di sini.Mathematica, 54 Karakter
Ini terasa terlalu mudah. Solusi yang lebih pendek harus dimungkinkan.
sumber
T-SQL 2008 - 80
Tidak akan menang atau apa pun selain kesenangan: Tweaked berkat @domager:
Fakta yang sedikit diketahui, @ adalah nama yang valid untuk suatu variabel. Rasanya aneh karena kode berbasis set adalah varian SQL yang lebih banyak, tetapi lebih pendek lebih pendek! Versi ini berfungsi pada basis data apa pun. Sunting: Saya dapat menghapus dua semifinal karena tidak diperlukan. Saya cukup yakin ini seoptimal mungkin.
Sunting2: Tidak pernah mengatakan tidak pernah. Di sini sekarang bahkan lebih kotor menggunakan goto, tetapi memungkinkan kita untuk menghindari blokir. Kita dapat Mengganti sementara, mulai, akhiri dengan yang lebih pendek jika, t:, menghemat 6 karakter. Kami juga mengatur ulang pernyataan dengan menulis ulang loop sebagai do-while pseudo, setara secara semantik. Sunting3: Ya, entah bagaimana jika sekarang lebih pendek. Asli:
Harus dijalankan di master database. Saya suka T-SQL meskipun berisik dan jelek. Mungkin ada cara untuk membuat ini lebih sederhana, tetapi sayangnya,
iif
built-in membutuhkan kedua belah pihak menyetujui jenis. Aturan prioritas server Sql memberikan prioritas lebih tinggi daripada string. Angka juga sangat panjang, tetapi aliasing lebih banyak karakter daripada nilainya. Mungkin ada cara yang lebih baik untuk mengubah angka menjadi string. Sunting: str juga berfungsi. 2 karakter lebih sedikit dari ltrimsumber
declare @i int=1;while(@i<501)begin;if(@i)like'%3%'or @i%3=0 print'bzzt'else print @i;set @i=@i+1 end
@
. Kemudian menggunakan iif () masih lebih pendek dari if (...) cetak yang lain cetak jadi kami mendapatkan sedikit dengan menggunakaniif
ekspresi. Kita juga bisa menggunakan yang lebih pendek@+=1
untuk menyimpan char+=
. Saya tidak memiliki itu berguna untuk menguji, tetapi saya cukup yakin itu mendukung''+@
untuk konversi string menggunakan lokal invarian.+=
telah ditambahkan pada tahun 2008. Ini mendukung '' + @, tetapi tidak melakukan apa yang Anda inginkan. Seperti yang saya katakan, aturan didahulukan dilemparkan ke int pertama sehingga gips''
untuk int, sehingga nol sehingga''+@
yang@
masih diketik sebagaiint
.str
bekerja dan itu tidak jauh lebih mahal daripada yang lain (2 karakter tambahan untuk parens). Saya memilih t-sql 2012 di sini karenaIIF
operator, siapa tahu mungkin rilis 2016 sql akan menghilangkan beberapa kebisingan dan mulai menjadi kompetitif (tidak mungkin).VBA: 54
Buka program Office favorit Anda, tekan alt + F11 untuk membuka VBA IDE dan tempel kode ke panel langsung dan tekan enter.
Dalam VBA,: apakah garis pemisah,? adalah singkatan untuk cetak, iif berarti inline if (think x? "Y": "N"), x / 3 melakukan pembagian titik mengambang dan x \ 3 melakukan pembagian bilangan bulat, instr mengembalikan posisi char dalam sebuah string, atau 0 jika tidak, true = -1 dan false = 0.
Kode pada dasarnya menambah x dan menghasilkan x jika x / 3 = x \ 3 = instr (1, x, 3) benar dan "Bzzt" sebaliknya. x / 3 = x \ 3 membandingkan (float) (x / 3) hingga (int) (x / 3) dan mengembalikan boolean (0 salah dan -1 benar). instr (1, x, 3) mengembalikan 0 jika "3" tidak ada dalam angka, dan bilangan bulat positif sebaliknya. Satu-satunya saat ekspresi mengembalikan true adalah ketika (x / 3 = x \ 3) salah (0) dan instr (1, x, 3) adalah 0, atau dengan kata lain, ketika x tidak dapat dibagi oleh 3 dan tidak mengandung digit "3", yang persis seperti yang kita cari.
sumber
k4
(37)(35)k4
tidak memiliki perintah modulo bawaan, dan menggunakannyaq
akan membutuhkan karakter tambahan; versi ini (ab) menggunakan format keluaran bawaan untuk memeriksa apakah string hasil pembagianx
oleh 3 memiliki titik desimal di dalamnya.SUNTING:
Pintar seperti mencocokkan titik desimal mungkin, saya bisa mencukur dua byte dengan memeriksa yang
3*floor x%3
masihx
.sumber
h1
danh2
cukup penting untuk mendapatkan suntingan di tempat pertama.)Pesta,
53 52 4846Membutuhkan GNU sed (menggunakan
c
ekstensi).sumber
Java,
142131 terima kasih atas saran WozzeCsumber
class A{public static void main(String[]a){for(int i=0;++i<501;System.out.println(i%3>0&(""+i).indexOf(51)<0?i:"bzzt"));}}
R
(40)(36)Ini pada dasarnya jawaban plannapus sedikit disingkat, tapi saya belum bisa berkomentar
Perbarui: -4 karakter (lihat komentar plannapus)
Keluaran:
sumber
strsplit
) melempar kesalahan ketika diumpankan dengan non-karakter saya berasumsigrepl
juga. Tangkapan bagus! +1b
sebelum itu:a=1:500;a[grepl(3,a)|!a%%3]='bzzt';a
Fortran -
118 114111Kandidat yang sangat tidak mungkin, meskipun awalnya dikembangkan agar sesuai dengan kartu punch. Dengan menggunakan semua konstruksi yang tidak jelas dari masa lalu, beberapa kode pendek mungkin masih ditulis:
Cabang "computed goto"
goto(L1,L2,...,Ln) x
ke salah satu label L jika dan hanya jika 1 <= x <= n.Sunting: Berhasil mencukur 4 byte dengan mengatur ulang loop yang memeriksa angka 3. Sebagai bonus, kode sekarang juga berisi aritmatika if-statement
if(x) a,b,c
, yang selalu bercabang ke salah satu dari tiga label: a jika x <0, b jika x == 0 atau c jika x> 0.Sayangnya, dua versi pertama tidak menghasilkan output yang benar. Digit-3 loop sekarang berfungsi dengan benar, dan kode sekarang juga menyertakan pernyataan if logis logis modern. Tiga byte lagi hilang, karena siapa yang butuh
enddo
pernyataan? Outputnya dapat diverifikasi di sini .sumber