Saya baru-baru ini memanjakan diri dalam beberapa nostalgia dalam bentuk Kutu Buku Deluxe:
Jika Anda belum pernah melihatnya, ini adalah permainan kata yang tujuannya adalah untuk menghubungkan ubin yang berdekatan untuk membentuk kata-kata. Untuk menentukan apakah string adalah kata yang valid, string akan diperiksa terhadap kamus internalnya, yang disimpan dalam format terkompresi yang terlihat seperti ini:
aa
2h
3ed
ing
s
2l
3iis
s
2rdvark
8s
4wolf
7ves
Aturan untuk membongkar kamus sederhana:
Baca angka di awal baris, dan salin banyak karakter dari awal kata sebelumnya. (Jika tidak ada nomor, salin karakter sebanyak yang Anda lakukan terakhir kali.)
Tambahkan huruf-huruf berikut ke kata.
Jadi, kata pertama kami adalah aa
, diikuti oleh 2h
, yang berarti "menyalin dua huruf pertama aa
dan menambahkan h
," membentuk aah
. Kemudian 3ed
menjadi aahed
, dan karena baris berikutnya tidak memiliki angka, kami menyalin 3 karakter lagi untuk membentuk aahing
. Proses ini berlanjut di seluruh kamus. Kata-kata yang dihasilkan dari input sampel kecil adalah:
aa
aah
aahed
aahing
aahs
aal
aaliis
aals
aardvark
aardvarks
aardwolf
aardwolves
Tantangan Anda adalah melakukan pembongkaran ini dalam sesedikit mungkin byte.
Setiap baris input akan berisi nol atau lebih digit 0-9
diikuti oleh satu atau lebih huruf kecil a-z
. Anda dapat mengambil input dan memberikan output sebagai daftar string, atau sebagai string tunggal dengan kata-kata yang dipisahkan oleh karakter selain 0-9
/ a-z
.
Berikut ini adalah test case kecil lainnya dengan beberapa case edge yang tidak dicakup dalam contoh:
abc cba 1de fg hi 0jkl mno abcdefghijk 10l
=> abc cba cde cfg chi jkl mno abcdefghijk abcdefghijl
Anda juga dapat menguji kode Anda pada kamus lengkap: input , output .
0
akan memiliki nomor0
s?locate
Program menggunakan jenis encoding pada nama path.Jawaban:
Vim, 57 byte
Cobalah online!
sumber
<H<G
alih-alih penggantian yang terakhir akan berhasil?<
solusi akan mengurangi waktu yang cukup.:%s/ *
alih - alih penggantian terakhir untuk menghemat dua byte.JavaScript (ES6),
66 6261 byteCobalah online!
Berkomentar
sumber
Perl 6 ,
5048 byte-2 byte terima kasih kepada nwellnhof
Cobalah online!
Port solusi Arnauld . Sobat,
R||
trik itu adalah rollercoaster dari 'Saya pikir ini bisa mungkin', untuk 'nah, itu tidak mungkin', untuk 'agak mungkin mungkin' dan akhirnya 'aha!'Penjelasan:
Bagian yang
$l [R||]=~$/
diterjemahkan secara kasar$l= ~$/||+$l
tetapi ... memiliki jumlah byte yang sama:(
. Awalnya, ini menyimpan byte menggunakan variabel anonim sehinggamy$l
hilang tapi itu tidak berfungsi karena ruang lingkup sekarang substitusi, bukan kode kuncimap
. Baiklah. Bagaimanapun,R
adalah metaoperator terbalik, sehingga membalik argumen||
, sehingga$l
variabel akhirnya diberi nomor baru (~$/
) jika ada, jika tidak, itu sendiri lagi.Itu bisa menjadi 47 byte jika Perl 6 tidak melempar kesalahan kompiler agak berlebihan untuk
=~
.sumber
Ruby ,
494543 byteCobalah online!
Penjelasan
sumber
C,
6557 byteCobalah online!
Penjelasan:
sumber
brainfuck , 201 byte
Cobalah online!
Membutuhkan baris tambahan di akhir input. Versi tanpa persyaratan ini lebih panjang 6 byte:
brainfuck , 207 byte
Cobalah online!
Kedua versi menganggap semua angka benar-benar kurang dari 255.
Penjelasan
Rekaman itu ditata sebagai berikut:
Sel "angka" sama dengan 0 jika tidak ada digit yang dimasukkan, dan n +1 jika angka n yang dimasukkan. Input diambil di sel bertanda "85".
sumber
Python 3.6+,
172195156123122121104 byteCobalah online!
Penjelasan
Saya menyerah, dan menggunakan Ekspresi Reguler. Ini menyimpan setidaknya 17 byte. :
Ketika string tidak dimulai dengan angka sama sekali, panjang string ini akan menjadi
0
. Ini berarti:akan menjadi
n
jikat
kosong, danint(t)
sebaliknya.menghapus angka dari ekspresi reguler yang ditemukan
s
(jika tidak ada angka yang ditemukan, itu akan menghapus0
karakter, meninggalkan tidaks
dikunci) dan menggantikan semua kecualin
karakter pertama dari kata sebelumnya dengan fragmen kata saat ini; dan:menampilkan kata saat ini.
sumber
Haskell,
8281 byteMengambil dan mengembalikan daftar string.
Cobalah online!
Sunting: -1 byte berkat @Nitrodon.
sumber
Japt,
191817 bytesAwalnya terinspirasi oleh solusi JS Arnauld .
Cobalah
sumber
Jelly , 16 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Python 2 , 118 byte
Cobalah online!
sumber
Retina 0.8.2 , 69 byte
Cobalah online! Tautan termasuk kasus uji yang lebih sulit. Penjelasan:
Untuk semua baris yang dimulai dengan huruf, salin nomor dari baris sebelumnya, putar sampai semua baris dimulai dengan angka.
Ubah nomornya menjadi unary.
Gunakan grup penyeimbang untuk mengganti semua
1
dengan huruf yang sesuai dari baris sebelumnya. (Ini ternyata menjadi sedikit lebih golf daripada mengganti semua jalur1
s.)sumber
Merah , 143 byte
Cobalah online!
sumber
Java (JDK) , 150 byte
Cobalah online!
sumber
Groovy , 74 byte
Cobalah online!
Penjelasan:
sumber
Jelly , 27 byte
Cobalah online!
sumber
Perl 5
-p
,4541 byteCobalah online!
Penjelasan:
sumber
Groovy ,
10399 byteCobalah online!
sumber
05AB1E ,
201917 byteCobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Common Lisp, 181 byte
Cobalah online!
Tidak Disatukan:
Seperti biasa, pengidentifikasi panjang Common Lisp membuatnya sangat tidak cocok untuk PPCG.
sumber
Python 2 ,
10110099 byteCobalah online!
sumber
C # (Visual C # Interactive Compiler) , 134 byte
Cobalah online!
-9 byte terima kasih kepada @ASCIIHanya!
Kurang bermain golf ...
sumber
l=n>0?n:l
menjadil=m>0?n:l
karena tidak mengambil kasing ketika garis dimulai dengan nol (0jkl
). Terima kasih atas tipnya!Scala ,
226129102 byteTerima kasih @ ASCII-hanya untuk pekerjaan mereka di sini (dan untuk jawaban Groovy).
Cobalah online!
sumber