Misalkan kita menggunakan aturan berikut untuk menarik satu string dari string lain, satu berisi hanya karakter ASCII yang dapat dicetak dan disebut *
-string. Jika string habis sebelum proses berhenti, itu adalah kesalahan, dan hasil dari proses tidak ditentukan dalam kasus itu:
- Dimulai dari
d=1, s=""
- Setiap kali Anda menemukan
*
, kalikand
dengan 2. Setiap kali Anda menemukan karakter lain, gabungkan hingga akhirs
dan kurangi 1 darid
. Jika sekarangd=0
, berhenti dan kembalis
Contoh yang Ditentukan :
d->d
769->7
abcd56->a
*abcd56->ab
**abcd56->abcd
*7*690->769
***abcdefghij->abcdefgh
Contoh tidak terdefinisi : (perhatikan bahwa string kosong juga akan menjadi salah satu dari ini)
*7
**769
*7*
*a*b
*
Tugas Anda adalah mengambil string dan mengembalikan *
-string terpendek yang menghasilkan string itu.
Contoh Program :
7->7
a->a
ab->*ab
abcd->**abcd
769->*7*69
Program Anda harus menangani string yang mengandung setidaknya satu karakter dan hanya karakter yang tidak *
dapat dicetak ASCII. Anda tidak pernah dapat mengembalikan string yang prosesnya tidak terdefinisi, karena menurut definisi mereka tidak dapat menghasilkan string APA PUN.
Berlaku celah standar dan aturan I / O.
*
?Jawaban:
Pyth (
3627 bytes)Terima kasih kepada Jakube untuk peningkatan 9 byte! Saat ini jawabannya tidak sebagus muddyfish , tapi terserahlah
Test Suite
Terjemahan ke python:
sumber
JavaScript (ES6), 61 byte
Fungsi rekursif yang melakukan hal berikut:
Jika
d
kurang dari atau sama dengan panjang string yang tersisa dibagi 2:Tambahkan
*
ke keluaran dan kalikand
dengan 2Lain:
Geser string dan tambahkan ke output, kurangi 1 dari
d
.Lihat dalam aksi:
sumber
f=(s,d=2)=>s?d>s.length?s[0]+f(s.slice(1),d-2):'*'+f(s,d*2):s
Pyth,
2927( Pemberitahuan rusak)272625 bytePenjelasan yang akan datang.
Test Suite
sumber
C, 125 byte
Ini mengambil keuntungan dari pola posisi bintang yang sangat teratur untuk menghasilkan penyandian yang benar. Awalnya saya mencoba solusi rekursif bruteforce, tetapi dalam retrospeksi seharusnya sudah jelas bahwa ada solusi matematika yang lebih sederhana.
Pada dasarnya Anda akan selalu memiliki
2^floor(log_2(length))
bintang pada awal output Anda, dan bintang akhir setelah2^ceil(log_2(length)) - length
karakter (jika itu berhasil setidaknya 1 karakter).Versi (sedikit) tidak diubah adalah sebagai berikut
sumber
JavaScript (ES6),
8877 bytePada awalnya saya pikir itu
abcde
harus terjadi*a**bcde
tetapi ternyata**abc*de
bekerja dengan baik. Ini berarti bahwa output siap dibangun menggunakan lantai (log₂ (s.length) terkemuka), ditambah bintang tambahan untuk string yang panjangnya bukan kekuatan dua.Sunting: Disimpan 8 byte dengan menghitung jumlah bintang terkemuka secara rekursif. Menyelamatkan 3 byte lebih lanjut dengan string casing khusus panjang 1, sehingga saya dapat memperlakukan string yang panjangnya kekuatan 2 sebagai memiliki bintang tambahan.
sumber
Haskell, 68 byte
Sama seperti jawaban lainnya, sungguh. Jika EOF, output string kosong. Jika panjang yang tersisa lebih dari dua kali
d
, output bintang dan gandad
. Jika tidak, keluarkan karakter berikutnya dan kurangi satu darid
.Tidak Disatukan:
sumber