Di Vim, Anda bisa mengulangi perintah dengan mendahului dengan angka, seperti 3dd
setara dengan dd dd dd
. Nah, pola berulang ini tidak terbatas pada perintah Vim. String juga dapat direplikasi dengan cara ini.
Spesifikasi:
Diberikan string, yang hanya terdiri dari digit, karakter alfabet (huruf besar dan kecil) dan spasi, dengan baris tambahan opsional, sebagai input, tulis sebuah program yang melakukan pekerjaan berikut:
Setiap "kata" terdiri dari angka dan huruf. Jika huruf didahului dengan angka (mungkin ada lebih dari satu digit dalam angka, atau angka itu nol), ulangi huruf itu untuk waktu yang diberikan. Sebagai contoh:
a2bc -> abbc 3xx1yz -> xxxxyz 10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero 2A2a2A2a -> AAaaAAaa
Kata-kata dipisahkan oleh spasi. Ada maksimum satu ruang antara setiap dua kata yang berdekatan.
Mudah kan? Inilah hal-hal tambahan:
Jika ada angka sebelum spasi, ulangi kata berikutnya untuk waktu yang diberikan. Nomor akan selalu dilampirkan di akhir kata sebelumnya, atau di awal string. Contoh:
a2bc3 2d -> abbc dd dd dd 3 3a -> aaa aaa aaa 33a -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 abcd0 efgh3 2x -> xx xx xx a3 0xc b -> a c c c b
Jika kata kosong harus diulangi, jangan tampilkan banyak spasi secara berurutan. Remas mereka:
a3 0x2 b -> a b b # NOT 'a b b'
Dengan kata lain, program Anda seharusnya tidak menghasilkan dua spasi secara bersamaan.
Input tidak pernah kosong, tetapi output tidak perlu kosong:
0 3x -> (empty)
Input dan output dapat diambil dengan cara apa pun yang disukai. Fungsi mengambil input dari argumen dan memberikan output melalui nilai kembali juga dapat diterima.
Jika itu sebuah program, ia tidak boleh keluar dengan kesalahan (yaitu nilai balik adalah nol).
Angka selalu desimal, dan tidak pernah dimulai dengan nol, kecuali jika angka itu sendiri nol, dalam hal ini hanya ada satu nol. Yaitu Anda tidak perlu mempertimbangkan
077a
atau000a
diberikan sebagai masukan.Semua angka di bawah 2 ^ 31 (2.147.483.648). Panjang output maksimum adalah di bawah 2 ^ 32 (4.294.967.296) byte.
Program opsional dapat menghasilkan satu spasi tambahan dan / atau satu spasi tambahan. Ruang dan baris baru tidak memengaruhi validitas output. Bahkan jika output yang benar harus kosong, output spasi diikuti oleh baris baru akan memenuhi syarat.
Singkatnya, input yang valid cocok dengan ekspresi reguler ini:
([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)
Dan untuk hasil yang valid:
([A-Za-z]+)( [A-Za-z]+)*( ?\n?)
Contoh uji kasus:
abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc
Ini adalah kode-golf , jadi program terpendek dalam byte di setiap bahasa menang!
a3 0xc b
->a c c c b
harus ditambahkan, karena saya awalnya memiliki kode yang bekerja untuk semua kasus uji di atas, tetapi tidak berfungsi dengan benar untuk itu.Jawaban:
JavaScript (Node.js) ,
102129110106 byteCobalah online!
Terima kasih atas @Arnauld untuk -4 byte.
sumber
Perl 6, 88 byte
Menguji
Diperluas:
The
~(…).words
Kombinasi menghapus spasi asing, yang berguna jika sebuah “kata” akan dihapus.sumber
Python 2,
286275260257238 byte-19 byte berkat ovs
f
mengambil string sebagai argumen dan mencetak string yang diformat.Ini adalah repl.it dengan kasus uji.
Kode tidak dikunci:
Masih bekerja pada perbaikan.
sumber
exec
, karena itu satu-satunya baris dalam fungsi.Perl 5 , 77 + 1 (
-p
) = 78 byteCobalah online!
sumber
Bersih ,
443... 306 byteCobalah online!
sumber
Lua , 113 byte
Cobalah online!
sumber