Input adalah kata dari huruf kecil yang tidak dipisahkan oleh spasi. Baris baru di bagian akhir adalah opsional.
Kata yang sama harus berupa keluaran dalam versi yang dimodifikasi: Untuk setiap karakter, gandakan itu saat kedua kali muncul dalam kata aslinya, lipat tiga kali untuk yang ketiga kali, dll.
Input contoh:
bonobo
Contoh output:
bonoobbooo
Aturan I / O standar berlaku. Kode terpendek dalam byte menang.
Tes disediakan oleh @Neil:
tutu -> tuttuu
queue -> queuuee
bookkeeper -> boookkkeeepeeer
repetitive -> repeetittiiveee
uncopyrightables -> uncopyrightables
abracadabra -> abraacaaadaaaabbrraaaaa
mississippi -> misssiisssssssiiipppiiii
Pyth, 6 byte
Terima kasih kepada @Doorknob untuk melepas 1 byte.
Terima kasih kepada @Maltysen untuk melepas 5 byte.
Cobalah online!
Bagaimana itu bekerja
Misalnya, ambil senarnya
"bonobo"
.._
membuat daftar:['b', 'bo', 'bon', 'bono', 'bonob', 'bonobo']
VQ._
berarti "fungsi sebelumnya di-vectorized (diterapkan secara paralel) berulangQ
dan._
", yang berartiQ
(input dievaluasi) akan diperlakukan sebagai daftar:,['b', 'o', 'n', 'o', 'b', 'o']
dan kemudian mereka akan dipasangkan dengan@
seperti ini:Karena itu,
@VQ._
akan menghasilkan['b', 'o', 'n', 'oo', 'bb', 'ooo']
.The
s
kemudian bergabung dengan mereka semua bersama-sama, menciptakan string'bonoobbooo'
, yang kemudian secara implisit dicetak menjadibonoobbooo
.sumber
VQ
hanya berartifor N in Q
saat itu tidak di dalam suatu fungsi. Dalam hal ini, apa yang sebenarnya terjadi adalah itu@V
berarti@
fungsi vektor (diterapkan secara paralel) selama dua argumen berikutnya,Q
dan._
. Ini tidak ada dalam dokumen, jadi saya akan memperbaikinya.Retina ,
3419 byteDisimpan 15 byte dengan mengambil beberapa inspirasi dari solusi isaacg.
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Baris kosong yang mengarah dan tertinggal signifikan.
Cobalah online!
Penjelasan
Ini adalah tahap penggantian yang cocok dengan regex kosong (yaitu setiap posisi nol-lebar dalam string) dan menggantinya
$`¶
, di mana$`
awalan pertandingan dan¶
memasukkan baris baris. Ini pada dasarnya menghitung semua awalan dan menempatkannya pada baris yang terpisah bersama dengan karakter terakhir dari awalan itu:Akan ada beberapa baris baris terkemuka dan akhir, tetapi kita bisa mengabaikannya.
Dari masing-masing awalan ini kami ingin mempertahankan karakter yang sama dengan karakter terakhir. Untuk itu kami menggunakan tahap penggantian lain:
Ini cocok dengan semua yang kami tidak ingin simpan dan gantikan dengan apa-apa. Kami cocok dengan karakter apa pun (menggunakan
\D
karena kami tahu tidak akan ada digit di input) dan kemudian memastikan bahwa tidak ada salinan karakter yang lain di akhir baris.sumber
Python, 56 byte
Saya sepertinya terjebak dengan dua jawaban dengan panjang yang sama:
Sunting: Lihat jawaban @ pacholik untuk pendekatan Python alternatif yang lebih pendek.
sumber
+1
dengan prioritas yang cukup tinggi sehinggaHaskell, 39 byte
Contoh penggunaan:
f "bonobo"
->"bonoobbooo"
.Cukup berbeda dari jawaban @ Damien . Bangun string dari kanan dengan mengekstraksi semua kemunculan karakter terakhir dari string dan mengawali panggilan rekursif dengan semua kecuali karakter terakhir.
sumber
> <> , 27 byte
Membutuhkan juru bahasa resmi yang keluar dengan kesalahan ketika mencoba untuk mencetak kode titik -1. Cobalah online!
Kode membaca input satu karakter sekaligus dan menggunakan baris pertama codebox sebagai array besar yang menyimpan berapa kali masing-masing karakter terlihat sejauh ini (> <> menginisialisasi sel non-program menjadi 0). Baris kedua adalah loop untuk menghasilkan char beberapa kali.
Atau, inilah versi yang keluar dengan bersih (37 byte, tidak di-golf dengan benar):
sumber
chr(-1)
. Penerjemah animasi sangat bagus untuk visualisasi, tetapi sayangnya beberapa perbedaan dengan penerjemah resmi agak menyebalkan: /JavaScript (ES6),
4845 byteSunting: Disimpan 3 byte berkat @ user81655.
sumber
Haskell,
504241 byteDisimpan 8 byte berkat Lynn
sumber
f t=[c|(i,c)<-zip[0..]t,j<-[0..i],c==t!!j]
MATL , 8 byte
Cobalah online! Atau verifikasi semua kasus uji sekaligus .
Penjelasan
sumber
Labirin ,
5425 byteCollab lain dengan @ MartinBüttner, yang benar-benar melakukan
sebagian besarhampir semua golf untuk yang satu ini. Dengan pembenahan algoritma, kami telah berhasil mengurangi ukuran program dengan cukup banyak!Cobalah online!
Penjelasan
Primer Labrinth cepat:
Labyrinth adalah bahasa 2D berbasis stack. Ada dua tumpukan, tumpukan utama dan tambahan, dan muncul dari tumpukan kosong menghasilkan nol.
Di setiap persimpangan, di mana ada beberapa jalur untuk penunjuk instruksi bergerak ke bawah, bagian atas tumpukan utama diperiksa untuk melihat ke mana harus pergi berikutnya. Negatif belok kiri, nol lurus ke depan dan positif belok kanan.
Dua tumpukan bilangan bulat presisi sewenang-wenang tidak banyak fleksibilitas dalam hal opsi memori. Untuk melakukan penghitungan, program ini sebenarnya menggunakan dua tumpukan sebagai rekaman, dengan menggeser nilai dari satu tumpukan ke tumpukan lainnya seperti memindahkan penunjuk memori ke kiri / kanan oleh sel. Itu tidak persis sama dengan itu, karena kita perlu menyeret penghitung lingkaran dengan kami di atas.
Pertama, tombol
<
dan>
di kedua ujung pop offset dan memutar baris kode yang diimbangi oleh salah satu kiri atau kanan. Mekanisme ini digunakan untuk membuat kode berjalan dalam satu lingkaran -<
muncul nol dan memutar baris saat ini ke kiri, menempatkan IP di sebelah kanan kode, dan>
muncul nol lagi dan memperbaiki baris kembali.Inilah yang terjadi setiap iterasi, sehubungan dengan diagram di atas:
sumber
Perl, 17
(16 byte kode, +1 untuk -p)
Pemakaian:
sumber
Pyth, 7 byte
Suite uji
Test suite berkat DenkerAffe
Penjelasan:
sumber
Python 3, 52
sumber
f=lambda s:s and f(s[:-1])+s[-1]*s.count(s[-1])
PowerShell v2 +,
5247 byteBuat hashtable kosong, simpan di
$b
. Ini adalah "counter" kami dari surat-surat apa yang telah kami lihat. Kami kemudian mengambil input$args[0]
, melemparkannya sebagai char-array, dan mengirimkannya melalui loop. Setiap iterasi, kita mengambil karakter saat ini"$_"
dan mengalikannya dengan penghitung pre-incremented pada nilai yang diberikan, yang akan membuat kejadian pertama dikalikan dengan1
, yang kedua dengan2
dan seterusnya. Kami merangkum bahwa dengan-join
jadi itu semua kata menjadi output.Disimpan 5 byte berkat TessellatingHeckler dengan menggunakan hashtable alih-alih array, jadi kami tidak perlu mengurangi karakter ASCII dengan
97
mencapai indeks yang sesuai. Ini berfungsi karena pra-penambahan indeks hash secara implisit memanggil.Add()
di latar belakang jika indeks itu tidak ada, karena hashtable bisa berubah.sumber
Dyalog APL , 6 byte
TryAPL!
4 fungsi adalah puncak (2-kereta) dari garpu (3-kereta):
Pertama
⊢
(kanan - no-op) pada string yang diberikan, memberi'bonobo'
Kemudian
,\
(scan concatenation) pada string, memberi'b' 'bo' 'bon' 'bono' 'bonob' 'bonobo'
Keduanya bercabang bersama dengan (diberikan sebagai argumen kanan dan kiri untuk)
∩¨
(masing-masing persimpangan), yaitu('b'∩'b') ('bo'∩'o') ('bon'∩'n') ('bono'∩'o') ('bonob'∩'b') ('bonobo'∩'o')
, yaitu'b' 'o' 'n' 'oo' 'bb' 'ooo'
Akhirnya,
∊
(minta) diterapkan pada hasil untuk meratakannya, memberi'bonoobbooo'
Hei, setidaknya itu cocok dengan Pyth ! Jelas Jelly lebih pendek karena ini adalah versi golf J, yang pada gilirannya adalah dialek 2-karakter-per-fungsi lanjutan dari APL.
sumber
Pyth, 11 byte
Coba di sini!
Penjelasan
sumber
J, 11 byte
Ini adalah kata kerja monadik. Coba di sini. Pemakaian:
Penjelasan
sumber
05AB1E , 10 byte
Kode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
CJam, 14
Cobalah online
Penjelasan:
sumber
Perl 6, 37 byte
sumber
> <> , 52 byte
Ini menumpuk setiap huruf yang dibaca, mencetaknya sekali dan sekali lagi untuk setiap huruf yang sama dalam tumpukan.
Ia menggunakan
&
register, karena harus menangani 3 variabel pada stack (huruf baca saat ini, posisi di stack, huruf pada posisi ini) sangat merepotkan.Anda bisa mencobanya di sini !
sumber
Rust, 176 Bytes
Ini menggunakan peta untuk menyimpan string untuk setiap karakter dalam input. Untuk setiap karakter, string akan dihapus dari peta, digabungkan dengan karakter, dimasukkan kembali ke peta dan ditambahkan ke output.
Saya lebih suka menggunakan
get(...)
daripadaremove(...)
, tetapi pemeriksa pinjaman membuat saya berubah pikiran.sumber
Mathcad, 66 byte
Sayangnya, Mathcad tidak memiliki penanganan string yang sangat baik, jadi saya telah mengonversi string input ke vektor dan kemudian menggunakan vektor (kode karakter yang diindeks) untuk melacak berapa kali karakter ditemui, menambahkan karakter yang beberapa kali ke vektor hasil. Akhirnya, vektor hasil dikonversi kembali ke string. Sayangnya, cukup panjang.
Perhatikan bahwa Mathcad menggunakan antarmuka "papan tulis" 2D, dengan campuran teks dan operator normal; operator biasanya dimasukkan melalui toolbar atau pintasan keyboard; misalnya, ctl- memasuki operator for loop, yang terdiri dari kata kunci untuk, elemen-simbol dan 3 "placeholder" kosong untuk masing-masing variabel iterasi, rentang, dan ekspresi tubuh. Mengetik [setelah nama variabel memasuki mode indeks larik, Mengetik 'memasuki sepasang tanda kurung yang cocok ( kebanyakan ... ada pengecualian tergantung pada apa lagi yang ada di ekspresi sekitarnya )
sumber
Javascript ES6 44 byte
jawaban lama
Javascript ES6 46 byte
sumber
x
ke array input ->q=>(x=[...q]).map(a=>x[a]=(x[a]||'')+a).join``
Julia,
3835 byteI / O berasal dari array karakter. Cobalah online!
Bagaimana itu bekerja
Kami (kembali) mendefinisikan operator monadik ! untuk tujuan kita.
Kapan ! disebut, itu akan memeriksa apakah argumen s kosong. Jika ya, ia mengembalikan argumennya.
Jika s adalah non-kosong, kita memotong s dengan karakter terakhirnya (
s[end]
), yang menghasilkan semua kemunculan karakter itu di s . Hasil ini digabungkan dengan nilai balik dari panggilan rekursif ke ! dengan s minus karakter terakhirnya (s[1:end-1]
) sebagai argumen.sumber
PHP,
54515047 byteJalankan seperti ini:
Tweaks
null
keint
untuk string offset, karena string offset dilemparkan ke int$argn
bukan$argv
(thx Titus)sumber
$argn
dengan-R
untuk menyimpan tiga byte lagi.-n
harus melakukan hal yang sama seperti Anda-d error_reporting
:n
kependekanno config file
, dan pemberitahuan dimatikan dalam konfigurasi default; jadi-nr
(masing-masing-nR
) harus cukup.Mathematica, 57 byte
Kami menggunakan
c[x]
sebagai tabel pencarian seberapa sering karakterx
telah terjadi. Ini bertambah setiap kali itu diambil dix~StringRepeat~++c[x]
. Sayangnya, untuk membuat fungsi ini dapat digunakan kembali, kita perlu mengatur ulang tabel pencarian setiap kaliClear@c;c@_=0;
, yang cukup mahal.sumber
awk, 72 byte
Idenya adalah untuk menyimpan hitungan karakter yang muncul dalam array asosiatif dan mencetak karakter kali ini.
sumber
Beam, 32
3342byteSeharusnya ini lebih kecil, tapi saya kehilangan beberapa byte yang menginisialisasi slot memori ke 0. Menukar beberapa arah aliran berhasil menghilangkan banyak ruang kosong.
Cobalah di cuplikan ini
Penjelasan umum.
sumber
Python,
6662 byteCoba di sini
Golf
Tidak disatukan
sumber