Anda semua harus terbiasa dengan urutan Conway (alias 'look-and-say'-sequence) sekarang:
1
11
21
1211
111221
312211
etc
Anda juga dapat memulai dengan nomor acak sebagai titik awal. Membiarkan f(s)
menjadi elemen berikutnya dari urutan. Sekarang untuk setiap yang s
kita dapat temukan f(s)
. Kebalikannya tidak sepele: tidak untuk setiap y
kemungkinan menemukan pendahulunya s
seperti itu f(s) = y
. Misalnya untuk y = 1
kita tidak dapat menemukan pendahulunya. Tetapi jika y
memiliki panjang genap, Anda dapat membaginya menjadi pasangan digit yang menggambarkan masing-masing bagian dari pendahulunya:
513211 divides in 51,32,11
so: 51 comes from 11111
32 comes from 222
11 comes from 1
put together: 111112221
Jadi dengan cara ini kita dapat mendefinisikan pendahulu unik untuk setiap y
panjang genap.
Catatan : 'Pendahulu' yang s
didefinisikan dengan cara ini umumnya TIDAK memuaskan f(s) = y
.
Tujuan
Tuliskan potongan fungsi / program yang menerima serangkaian digit sebagai inputnya
- menghitung elemen berikutnya dari urutan Conway jika panjang string input ganjil
- menghitung pendahulu dari string input seperti yang didefinisikan di atas jika panjang string input adalah genap .
Kode terpendek dalam byte menang.
Pertanyaan terbaru berdasarkan urutan tampilan dan katakan:
513111
membaginya menjadi51
,32
dan11
?11111111111111
? Menurut spec Anda, itu akan menjadi1111111
. Anda harus memodifikasi spesifikasi Anda untuk menentukan jawaban yang masuk akal untuk ini.11111111111111
tidak memiliki pendahulu. Ini input ilegal.Jawaban:
CJam,
4645444342 byteUji di sini. Dibutuhkan nomor pada STDIN dan mencetak hasilnya ke STDOUT.
sumber
si
->~
= 45Rubi,
125 120 119101 byteInput string diambil melalui fungsi
f
:Diperluas dengan catatan:
sumber
Prolog - 170 byte
Potongan ini mendefinisikan fungsi
(-)/2
. Anda bisa memintanya sepertiTampaknya hanya ada satu panjang dalam urutan ini dengan paritas aneh: awal
[1]
.Dapat dibaca:
sumber
Python: 139 karakter
kasus uji tunggal
sumber
s)] if
hinggas)]if
.2 else
Haskell,
134 128115Jika perlu dari stdin / stdout, menambahkan
main=interact l
untuk150 144131 Total chars. Fungsi ini disebutl
.sumber
l "11"
bekerja, saya mendapatkan pengecualian denganl "111"
ataul "1111111111111"
Perl - 98 byte
Ukuran semua pernyataan kontrol ini mengganggu saya, tapi saya cukup senang dengan bagaimana regex bekerja.
Terkompresi:
sumber
Erlang, 205
Fungsi utamanya adalah f, mengambil input sebagai string Erlang dan mengembalikan output sebagai string juga.
Fungsi ini dapat dibuat lebih pendek 15 byte (190) dengan menjatuhkan lebih dari 9 persyaratan huruf identik.
f
panggilang
yang menghitung pendahulunya secara rekursif, dan jika jumlah karakter ganjil (ditemukan pada saat perhitungan berakhir), ia memanggil fungsii
yang, dipasangkan denganh
, menghitung elemen berikutnya.sumber
Haskell, 105
Saya pikir itu bagus ternyata tidak menggunakan fungsi pembantu :-).
sumber
|x:y:z<-r
- Saya benar-benar tidak tahu Anda bisa melakukan itu. Itu sangat keren!APL (45)
Ya, itu definisi fungsi yang valid, bahkan dengan
∊
di luar.sumber
Java 7, Skor =
252235 byteYap, ini java lagi; bahasa golf terburuk di dunia. Pendekatan ini menggunakan string. Bilangan bulat yang sewenang-wenang didukung di java tetapi akan membutuhkan lebih banyak ruang untuk kode
Panggil dengan
f(intputString)
. Mengembalikan string yang sesuai.Golf:
Golf Diperluas dengan kode struktur:
Golf Sebagian:
Benar-benar diperluas:
Untuk menjalankan, kompilasi pertama entri kedua dengan:
javac LookAndSayExpandedGolfed.java
Kemudian jalankan dengan:
java LookAndSayExpandedGolfed
Sunting: Memperbaiki kesalahan.
sumber
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 at java.lang.String.charAt(String.java:658)
--1
seharusnya begitu--i
?513211
->11111
.Javascript (di browser, ES5, IE8 +), 152
Dapat diperpendek oleh 4 karakter jika Anda melewatkan var, atau beberapa karakter lagi dengan global yang tidak terdidik menengah lainnya juga, tapi mari kita berpura-pura kita bukan programmer yang buruk selama satu menit.
Beralih ke fungsi sintaks pendek ES6 dengan argumen dan mengembalikan nilai alih-alih menggunakan prompt, peringatan untuk IO dapat menyimpan lebih banyak.
JSFiddle di sini: http://jsfiddle.net/86L1w6Lk/
sumber
var
itu ... kita semua "programmer buruk" di sini. ;)Python 3 - 159 byte
sumber
Cobra - 217
(186 jika saya dapat menganggap
use
pernyataanSystem.Text.RegularExpressions
ada di tempat lain)sumber
JavaScript (ES6) 85
Menggunakan ekspresi reguler ganti dengan fungsi. Regexp berbeda dan fungsi berbeda tergantung pada panjang input yang genap atau ganjil.
sumber