FizzBuzz sangat sederhana, bertaruh Anda bisa melakukannya mundur. Dalam tantangan ini, Anda akan diberikan panjang string FizzBuzz dan harus memberikan bilangan bulat positif yang menghasilkan string itu.
Deskripsi
Untuk memecah ini, string FizzBuzz untuk n
dihasilkan oleh algoritma berikut.
Mulai dengan string kosong dan, untuk setiap i=1..n
(inklusif):
- Jika
i
dibagi oleh3
dan oleh5
, tambahkanFizzBuzz
ke string. - Jika
i
hanya dapat dibagi oleh3
appendFizz
. - Jika
i
hanya dapat dibagi oleh5
appendBuzz
. - Jika
i
tidak dapat dibagi oleh keduanya, tambahkan representasi desimal darii
.
Jadi misalnya FizzBuzz(15)
adalah sebagai berikut:
12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz
Anda akan diberikan Length(FizzBuzz(n))
dan harus menentukan n
. Anda dapat mengasumsikan bahwa inputnya positif dan akan selalu menjadi panjang dari beberapa string FizzBuzz.
Aturan
Solusi Anda dapat berupa program lengkap atau definisi fungsi dalam bahasa apa pun yang dapat diterima secara standar. Program / fungsi Anda dapat menerima argumen dan mengembalikan jawaban dengan cara apa pun yang diterima secara standar . Celah standar dilarang.
Anda dapat mengasumsikan bahwa inputnya positif dan valid (menggambarkan panjang beberapa string FizzBuzz) dan lebih kecil dari integer terbesar yang dapat diwakili secara asli dalam bahasa Anda.
Ini adalah kode golf, jadi byte-count paling pendek menang.
Contohnya
Berikut adalah beberapa contoh kasus
Length(FizzBuzz(n)) -> n
1 -> 1
6 -> 3
15 -> 6
313 -> 100
3677 -> 1001
Edit
Memperbaiki kasus tes terakhir. Terima kasih @SteadyBox.
Jawaban:
Jelly ,
1614 byte2 byte disimpan menggunakan lebih banyak fitur bahasa terbaru
)
untukµ€
danÄ
untuk+\
Cobalah online! atau lihat kasus uji .
Bagaimana?
Buat daftar panjang setiap item mulai
1
dari input, kurangi dengan penambahan, lalu temukan indeks berbasis-satu dari input dalam daftar. (Ini juga berarti input yang tidak valid menghasilkan0
, "tidak ada dalam daftar").sumber
C,
8178 byte68 byte jika Anda tidak keberatan mengonversi ke
double
dan kembali:sumber
return i;
Diperlukan, karena itu adalah cara yang diterima secara standar untuk menghasilkan kode golf sedangkan hanya memodifikasi variabel global tidak. Saya mempertimbangkan untuk menggunakanlog10(i)+1
, tetapi saya pikir itu mungkin menyebabkan beberapa masalah karena konversi menjadi ganda dan kembali (misalnyapow(i)
tidak dapat diandalkan dengan bilangan bulat). Tampaknya sekarang berfungsi dengan baik untuk semua nilai positif yangint
dapat diwakili, jadi saya mungkin bisa menggunakannya. (Dengan nilai-nilai yang lebih besar dari yangint
bisa ditahan, kadang-kadang gagal, tapi itu tidak masalah di sini.)n
sebagai penunjuk dan kemudian hanya mengubah nilai yang ditunjuknya di akhir, tetapi itu akan membutuhkan lebih banyak kode di situs panggilan agar dapat mencetak nilai, jadi rasanya sedikit seperti menipu saya.MATL ,
312827 byteCobalah online!
Penjelasan
sumber
Mathematica, 67 byte
Ini lebih cepat dan lebih pendek dari solusi awal saya:
atau upaya putus asa saya untuk mempersingkat:
Penjelasan
For
Loop standar yang bertambahn
hinggas := Length(FizzBuzz(n))
setidaknya sama dengan input#
. Satu-satunya hal yang menarik adalah bagaimana saya menghitung panjang(n+1)
jangka waktu -th dari urutan FizzBuzzsumber
MATL,
31 3028 byteMenggunakan ide yang sama dengan solusi Jelly Jonathan Allen.
Cobalah di matl.suever.net !
sumber
Java 8,
10097 byteGolf:
Tidak Disatukan:
Keluaran:
sumber
JavaScript (ES6),
6257 byteUji kasus
Tampilkan cuplikan kode
sumber
(!(++k%3)+!(k%5)<<2||`${k}`.length)
.Javascript (ES6), 56 byte
sumber
Python 3, 78 byte
Fungsi rekursif. Perlu batas rekursi ditingkatkan untuk hasil di atas 1000.
Penjelasan:
sumber
Python, 93 byte
sumber
k, 33 byte
Penjelasan singkat (python-ish):
Contoh menggunakan kmac 2016.06.28:
sumber
dc ,
7670 byteCobalah online!
sumber
Ruby,
6966 byteAwalnya, saya menghindari monstrositas operator ternary bersarang dan turun ke 69 byte:
sumber
Java 8,
9593 byteIni adalah versi optimal dari jawaban Snowman
sumber
Groovy, 76 byte
def f(n){i=0;for(s='';s.size()<n;)s+=++i%15<1?"1"*8:i%5<1||i%3<1?"1"*4:i;i;}
Sebagian besar sama dengan jawaban @ Snowman , tetapi menggunakan beberapa sihir / perbedaan Groovy untuk mengurangi jumlah byte.
sumber
Perl 6 ,
5552 byteCobalah online!
Bagaimana itu bekerja
sumber
Japt , 20 byte
Cobalah
sumber
Perl 5
-p
, 48 byteCobalah online!
sumber
C (gcc) , 68 byte,
stdout
-pammingCobalah online!
C (gcc) , 74 byte
Cobalah online!
sumber
05AB1E , 17 byte
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber