Urutan "Lihat dan katakan" atau "Katakan apa yang Anda lihat" adalah serangkaian angka di mana masing-masing menggambarkan yang terakhir.
1
11 (one one)
21 (two ones)
1211 (one two, one one)
111221 (one one, one two, two ones)
312211 (three ones, two twos, one one)
dan terus dan terus ... https://oeis.org/A005150
Bagaimanapun, ini adalah tantangan golf kode biasa (paling tidak jumlah byte yang menang) untuk membuat program yang membutuhkan dua argumen, angka awal dan jumlah iterasi. Misalnya, jika Anda memasang "1" dan "2" hasilnya adalah "21". Jika Anda memasang "2" dan "4" hasilnya adalah "132112". Selamat bersenang-senang!
Jawaban:
Pyth,
108 byte-2 byte oleh @FryAmTheEggman
Penjelasan:
Coba di sini .
sumber
ussrG8Qz
CJam, 8 byte
Format input adalah angka awal pertama, iterasi kedua, dipisahkan oleh spasi putih.
Uji di sini.
Penjelasan
Array juga diratakan sebelum dicetak sehingga hasilnya hanya angka yang diperlukan.
sumber
JavaScript, 57 byte
Rekursi bekerja dengan baik untuk masalah ini. Parameter pertama adalah angka awal sebagai string, dan yang kedua adalah jumlah iterasi.
sumber
b=>F=a=>b--?F(a.replace(/(.)\1*/g,c=>c.length+c[0])):a
Menemukan itu saat bermain golf jawaban saya sebelum saya menyadari itu hampir identik dengan Anda;)MATL , 9 byte
Input adalah: jumlah iterasi, angka awal.
Cobalah online!
sumber
R, 87 byte
Tidak digabungkan & dijelaskan
sumber
Perl 6, 63 byte
Ini sesingkat yang saya bisa dapatkan untuk saat ini, mungkin ada beberapa bendera rumit yang dapat menguranginya, saya tidak yakin
sumber
Ruby, 63 byte
Program penuh, karena pertanyaannya sepertinya menanyakan hal itu. Mengambil input sebagai argumen baris perintah.
Tidak,
gsub!
tidak dapat digunakan, karena string$*
dibekukan: /sumber
-p
flag untuk menyimpan byte? Jika Anda menggunakannya,gsub
beroperasi pada garis STDIN seolah-olah itu$_.gsub!
. Kemudian argumen baris perintah adalah iterasi, jadin,=$*
, dan input lainnya dibaca dari STDIN.Retina ,
464527 byteMartin melakukan banyak hal untuk membantu golf ini.
Cobalah online
Mengambil input dalam format:
<start>
adalah angka awal.<count>
berada di unary, semua garis bawah, dan berapa banyak iterasi yang dilakukan.Iterasi tunggal,
2016 byte:sumber
Haskell , 62 byte
Cobalah online!
sumber
JavaScript ES6, 71 byte
Mengambil input sebagai string dan angka.
sumber
('1',2)
memberi saya12
, padahal seharusnya21
. Panjang Anda harus ada sebelum karakter di ganti.Perl 5, 50 byte
Argumen dalam urutan terbalik (jumlah iterasi kemudian seed). Contoh:
sumber
$_
bukansay
, saya kira, tapi saya belum mengujinya. Solusi saat ini adalah sebuah program.05AB1E , 9 byte (Tidak bersaing)
Diperbaiki karena komentar Emigna, lihat di bawah / suntingan.
Cobalah online!
sumber
F
di awal dan mengambil argumen sebagaiiterations,initialNo
Dgs
dengangy
.y
dilakukan dalam konteks itu?R ,
6157 byte-4 Terima kasih kepada @JayCe, tepat ketika saya yakin itu tidak bisa dilakukan dengan mudah!
Cobalah online!
sumber
t(sapply(z,c))
panggilan pintar.Mathematica,
8173 bytesumber
Jelly , 6 byte (tidak bersaing)
Cobalah online!
sumber
Stax , 10 byte
Jalankan dan debug online!
Terlalu banyak byte pada format IO yang tepat ...
Penjelasan
Gunakan versi yang belum dibongkar untuk menjelaskan.
Bagian yang penting adalah
D|R{rm:f
(8 byte).Jika input pertama dapat diambil sebagai array angka, seluruh program dapat ditulis dalam 9 byte: Jalankan dan debug online!
sumber
Python 3, 138 byte
Saya menggunakan pendekatan rekursif.
Fungsi menerima dua int,
a
danb
seperti yang dijelaskan.Saya kagum dengan betapa singkat entri di sini! Mungkin seseorang akan datang dengan metode Python yang lebih baik juga.
sumber
Perl, 38 + 2 byte
Membutuhkan
-p
bendera:Input adalah string multi baris:
Jika semua langkah diperlukan juga maka kita bisa mengubahnya menjadi yang berikut, yaitu 44 + 2 byte:
sumber
Pylons , 11
Bagaimana itu bekerja:
sumber
SmileBASIC,
10098 byteMencetak semua langkah.
T/T
ada di sana untuk mengakhiri program ketika T adalah 0.sumber
APL (Dyalog Classic) , 22 byte
Cobalah online!
sumber
Retina , 27 byte
Cobalah online!
sumber
K (ngn / k) , 30 byte
Cobalah online!
sumber
Python 3.6,
1009893 byteCobalah online!
Catatan ini menciptakan lambda yang mengambil string dan integer, dan mengembalikan string. Contoh:
f('1', 5) == '312211'
Temukan semua karakter yang berulang (
((.)\2*)
regex), buat f-string dari panjangnya dan karakter itu sendiri (r'{len("\1")}\2'
), lalu evaluasi. Menggunakan rekursi pada penghitung (n and ...f(s,n-1)... or s
) untuk menghindari keharusan mendefinisikan fungsi dan loop yang tepat.sumber