Diberikan string ASCII, mengeluarkan sufiks yang meledak itu. Misalnya, jika string itu abcde
, ada 5 sufiks, yang dipesan terpanjang hingga terpendek:
abcde
bcde
cde
de
e
Setiap sufiks kemudian meledak , artinya setiap karakter disalin sebanyak lokasi yang diindeks dalam sufiks tersebut. Misalnya, meledak sufiks abcde
,
abcde
12345
abbcccddddeeeee
bcde
1234
bccdddeeee
cde
123
cddeee
de
12
dee
e
1
e
Secara keseluruhan, sufiks meledak abcde
adalah
abbcccddddeeeee
bccdddeeee
cddeee
dee
e
Aturan
- Ini adalah kode-golf sehingga kode terpendek menang.
- Input akan terdiri dari karakter ASCII yang dapat dicetak. (Ini tidak termasuk baris baru tetapi termasuk spasi.)
- Output akan memiliki setiap string pada baris yang terpisah.
- Ruang tambahan diperbolehkan di setiap baris dan mungkin ada baris baru tambahan di akhir baris.
Uji Kasus
''
'a'
a
'bc'
bcc
c
'xyz'
xyyzzz
yzz
z
'code-golf'
coodddeeee-----ggggggooooooollllllllfffffffff
oddeee----gggggoooooolllllllffffffff
dee---ggggooooollllllfffffff
e--gggoooolllllffffff
-ggooollllfffff
goolllffff
ollfff
lff
f
's p a c e'
s ppp aaaaa ccccccc eeeeeeeee
pp aaaa cccccc eeeeeeee
p aaa ccccc eeeeeee
aa cccc eeeeee
a ccc eeeee
cc eeee
c eee
ee
e
Jawaban:
Jelly , 5 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
J,
22128 byteBerkat miles untuk menghemat 14 byte!
Sekarang ini solusi yang sangat bagus. Cukup ringkas juga.
Ini adalah pengait yang
#~#\
diterapkan pada sufiks (\.
) dari input. Pengait, saat dipanggil pada inputy
, didekomposisi sebagai berikut:Berikut adalah beberapa hasil antara:
Uji kasus
sumber
Python, 61 byte
Alternatif 63:
sumber
Python 3,
916865 byteBerakhir dengan kesalahan setelah mencetak output yang diinginkan. Uji di Ideone .
Bagaimana itu bekerja
Sebelum f dapat menyebut dirinya secara rekursif, indeks
s[1:...]
harus dihitung.Pertama
enumerate(s[0]+s)
menghasilkan semua pasangan (i, c) karakter c dari s - dengan karakter pertamanya digandakan - dan indeks yang sesuai i . Prependings[0]
melayani dua tujuan di sini.Karakter pertama s harus diulangi sekali, tetapi indeks pertama adalah 0 .
Setelah semua karakter diproses,
s[0]
akan menaikkan IndexError , menyebabkan f untuk berakhir dengan kesalahan daripada mencetak baris baru sampai batas rekursi tercapai.''.join(i*c for i,c in ...)
membangun string datar masing-masing c diulang i kali, yangprint
gema untuk STDOUT.Akhirnya, karena
print
mengembalikan None dans[1:None]
sederhananyas[1:]
, panggilan rekursiff(s[1:...])
mengulangi proses di atas untuk s tanpa karakter pertama.sumber
Perl 6 , 38 byte
37 byte + 1 untuk
-n
sakelar baris perintahContoh:
Diperluas:
sumber
Brachylog , 17 byte
Cobalah online!
Penjelasan
sumber
05AB1E , 13 byte
Cobalah online!
Penjelasan
sumber
CJam , 14 byte
Cobalah online!
Penjelasan
sumber
C #, 101 byte
Fungsi anonim rekursif, yang juga mencetak baris baru. Jika baris baru terkemuka tidak diizinkan, 3 byte tambahan mengubahnya menjadi baris tambahan:
Program lengkap dengan metode ungolfed dan uji kasus:
sumber
Haskell, 48 byte
dihubungkan oleh salah satu dari
sumber
putStr.
, kami menerima sebagai fungsi output. Anda memang perluimport Data.List
menggunakannyatails
.uncurry ... zip
denganzipWith
:unlines.map(concat.zipWith replicate[1..]).tails
.zipWith replicate
mempersingkat juga terjadi kepada saya ketika saya terbangun. Kasihan yangtails
tidak ada di dalamPrelude
saya dapat mengambiltails
dariData.List
secara implisit tanpa penuhimport
dan masih tanpa melebihi yangfoldr
setara. Mengenai kemurnian tanpaIO
boiler-plate saya juga akan meninggalkanmapM_ putStrLn
bumbu sesuai selera pembaca dan tidak melakukanunlines
keduanya. Mendefinisikan sebuah bloke=
akan membutuhkan hitungan byte.imports
bukanlah standar Haskell, tetapi fitur darighci
repl. Bergantung pada hal-hal seperti itu dianggap sebagai bahasa yang terpisah, jadi saya sarankan untuk mengubah judul jawaban Anda menjadi sesuatu sepertiHaskell (ghci)
. ( Lihat juga diskusi meta ini ).Perl, 36 +1 (
-n
) = 37 byteKebutuhan
-n
dan-E
(atau-M5.010
) untuk dijalankan:Perhatikan bahwa ini hanya berfungsi pada satu instance setiap kali Anda menjalankannya (karena ia menggunakan variabel
$.
yang bertambah setiap kali sebuah baris dibaca, jadi ia1
hanya memegang pertama kali sebuah baris dibaca). (Tapi tidak ada masalah di sini,^D
jalankan saja dan jalankan kembali!)sumber
Retina , 31 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
sumber
Jawa,
150127 byteEdit:
Snipet:
Tidak Terkumpul:
sumber
f->{String s[]=f.split(""),o="";int i=-1,j,l=s.length;for(;++i<l;)for(j=-2;++j<i;o+=s[i]);return l<1?o:o+"\n"+f.substring(1);}
Racket 184 byte
Tidak Terkumpul:
Keluaran:
sumber
JavaScript (ES6), 65 byte
Upaya sebelumnya:
sumber
PHP, 103 byte (99 dengan tag pendek)
Saya cukup yakin ini bukan jawaban sesingkat mungkin.
sumber
MATL , 12 byte
Saya suka ketika tanda kutip datang bersamaan!
Cobalah online!
Penjelasan
Ini bekerja dengan membangun matriks yang kolomnya digunakan, satu per satu, untuk menjalankan-panjang mendekode input. Sebagai contoh, untuk input
'abcde'
matriks adalahKode:
sumber
Python 3, 95 byte
Ini secara mengejutkan lebih sulit daripada yang saya harapkan. Saya redid seluruh fungsi saya mungkin 4 kali.
sumber
Java 7.140 byte
Tidak disatukan
Baris berikut memberi saya sangat sakit. Saya tidak tahu bagaimana saya bisa golf itu (karena ada dua loop untuk mematahkan kondisi untuk dimasukkan ke
"\n"
dalam pernyataan cetak).System.out.println();
sumber
Pyke, 12 byte
Coba di sini!
sumber
Ruby, 51 byte
Menggunakan
-n
bendera untuk +1 byte.sumber
R, 108 byte
Baca input dari stdin dan cetak ke stdout
Saya merasa penggunaannya
do.call
sesuai di sini. Pada dasarnya dibutuhkan dua input: 1. nama fungsi dalam bentuk string (direp
sini) dan daftar argumen dan 2. berulang-ulang menerapkan panggilan fungsi menggunakan argumen dalam daftar.Misalnya:
rep("c",3)
menghasilkan vektor"c" "c" "c"
do.call("rep",list(c("a","b","c"),1:3))
menghasilkan vektor"a" "b" "b" "c" "c" "c"
rep("a",1)
,rep("b",2)
danrep("c",3)
sumber
Vim, 43 byte
qqYlpx@qq@qqr0<C-H><C-V>{$:s/\v%V(.)\1*/&\1/g<CR>@rq@r
Makro pertama memisahkan akhiran, makro kedua "meledak" mereka. Mungkin bisa dikalahkan. Ruang menjengkelkan.
sumber
C, 186 Bytes
Ini mungkin dapat dipersingkat sedikit, tetapi saya hanya ingin mencobanya. Ini percobaan kedua saya di golf, jadi beri saya petunjuk (* lol) yang Anda bisa. Dibutuhkan string sebagai parameter dan melakukan peledakan dari sana. u digunakan sebagai penyangga yang menyimpan string yang meledak.
Tidak Terkumpul:
sumber
Acc !!, 150 byte
Diharapkan input pada stdin, diakhiri dengan karakter tab.
Penjelasan
Ini sebenarnya tugas yang cukup bagus untuk Acc !! , karena hanya perlu membaca string dan mengulanginya dengan beberapa loop bersarang. Kami membaca string ke akumulator, memperlakukannya sebagai urutan basis-128 digit, dengan karakter pertama di ujung orde rendah. Setelah
Count c
loop pembukaan , nilai akumulator dapat dikonseptualisasikan seperti ini (menggunakanxyz
input sebagai contoh):(Nilai akumulator aktual untuk contoh ini adalah
9*128^3 + 122*128^2 + 121*128 + 120
=20888824
.)Kita kemudian dapat mengulangi string dengan mengulangi peningkatan kekuatan 128. Dan kita bisa mengulangi sufiks dengan membagi akumulator dengan 128 setelah setiap iterasi, memotong karakter.
Dengan lekukan dan komentar:
sumber