Memasukkan
Bilangan bulat negatif n
, dan string kosong s
yang hanya berisi karakter alfanumerik dan garis bawah _
. Karakter pertama s
tidak _
. Garis bawah s
ditafsirkan sebagai ruang kosong yang dapat diisi dengan karakter lain.
Kami mendefinisikan urutan "string tak terbatas" sebagai berikut. Tali hanya diulang berkali-kali. Untuk semua , string diperoleh dari dengan mengisi ruang kosong dengan karakter , sehingga yang pertama dari diganti dengan , yang kedua dengan , dan sebagainya. Karena huruf pertama tidak , setiap ruang kosong akhirnya terisi, dan kami menyatakan dengan string tak terbatas di mana setiap telah digantikan oleh nilai akhirnya.s1 = s s s...
s
k > 1
sk+1
sk
s1
_
sk
s1[0]
s1[1]
s
_
s∞
_
Keluaran
n
Karakter pertama sebagai string.s∞
Contoh
Pertimbangkan input n = 30
dan s = ab_c_
. Kita punya
s1 = ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_...
Mengganti dengan kekosongan , kita milikis1
s1
s2 = abacbab_ccab_caabbc_abcc_abacbab_cc...
Kami kembali mengganti dengan yang kosong, yang menghasilkans1
s3 = abacbabaccabbcaabbc_abcccabacbab_cc...
Satu lagi penggantian:
s4 = abacbabaccabbcaabbcaabcccabacbabbcc...
Dari sini kita sudah dapat menyimpulkan 30 karakter pertama , yaitus∞
abacbabaccabbcaabbcaabcccabacb
Ini adalah output yang benar.
Aturan
Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan. Menabrak input yang salah dapat diterima.
Uji Kasus
0 "ab__" -> ""
1 "ab__" -> "a"
3 "ab__" -> "aba"
20 "ab" -> "abababababababababab"
20 "ab__" -> "abababababababababab"
20 "ab_" -> "abaabbabaabaabbabbab"
30 "ab_c_" -> "abacbabaccabbcaabbcaabcccabacb"
50 "ab_a_cc" -> "abaabccabaaaccabbacccabcaaccabbaaccabaaaccabcaccca"
50 "abc____" -> "abcabcaabcbcaaabcbcbcabcaaababccbcbabccabcabcaaaba"
Jawaban:
Pyth, 17
Input harus diberikan dengan string pada baris pertama, dan panjang pada baris kedua, pada STDIN. Sebagai contoh:
Coba di sini.
Penjelasan:
sumber
APL
2928digunakan seperti ini:
Penjelasan:
Tryapl.org
sumber
⍣≡
adalah ide bagus. Mungkin saya harus mencoba untuk port ini ke ...CJam,
262420 byte4 byte disimpan berkat Peter.
Uji di sini. Mengambil string pertama dan
n
kedua di STDIN.Anda dapat menjalankan semua test case dengan menempelkannya ke input apa adanya (termasuk
-> output
jika Anda mau), dan menggunakan test harness berikut (yang membalik urutan kode):Penjelasan
Hasilnya dicetak secara otomatis di akhir program.
Catatan tentang
[\]
: Pada prinsipnya,[
mengingat ukuran stack saat ini dan]
mengumpulkan semuanya ke ukuran yang terakhir diingat dalam sebuah array. Namun, jika ukuran array berada di bawah ukuran yang diingat di antaranya, maka awal array akan disesuaikan. Sekarang Anda mungkin berpikir bahwa menukar dua elemen array teratas tidak mempengaruhi ukuran array sama sekali, tetapi\
sebenarnya muncul dua nilai dan kemudian mendorongnya dalam urutan terbalik. Inilah yang mendorong awal array turun dua. Oleh karena itu,[\]
adalah cara terpendek untuk membungkus dua elemen tumpukan teratas dalam sebuah array. Kadang-kadang, efek samping dari mengumpulkan mereka dalam urutan terbalik cukup mengganggu, tetapi dalam kasus ini, itulah yang saya butuhkan.sumber
_'_#)
g
denganI*
. Bekerja untuk saya di GolfScript.Python 3, 110 byte
Perlu sedikit lebih banyak bermain golf, tetapi ini adalah kegilaan belaka. Dibaca
n
kemudians
dari STDIN.Bagian yang menyenangkan adalah, dalam tugas loop yang kita salin
b
, kemudian mulai muncul darib
saat pemahaman daftar . Jika tugasnya sebaliknya, itu tidak akan berhasil!sumber
k, 30
sumber
Jawa - 162
174Tidak setiap hari saya bisa menggunakan do / while saat bermain golf di Jawa: D
Ini hanya mengulang dan mengisi saat mereka datang. Itu terus berjalan sampai tidak ada lagi
_
hasilnya.Dengan jeda baris:
sumber
Java 8, 238
Kurang golf:
sumber
Ruby, 60
Menyatukan waktu
s
sendirin
, lalu menghasilkann
salinan kode yang menggantikan garis bawah dengans
, mengevaluasi salinan itu, dan mengembalikann
karakter pertama dari hasilnya. Karena setidaknya satu garis bawah dihapus di setiap loop, ini dijamin untuk memberi kamin
karakter bebas garis bawah.sumber
f
dan menjalankanputs f[10,"ab_"]
, saya mendapatkan error berikut:in 'eval': undefined method 'next' for #<Array:...
. Itu tampaknya berfungsi ketika tidak ada garis bawah dalam string.String#chars
berubah antara Ruby 1.9.3 dan Ruby 2.0; di Ruby 1 mengembalikan enumerator ketika tidak ada blok, di Ruby 2 sebuah array. Dapat dibuat versi-tidak sensitif dengan mengubahchars
keeach_char
, dengan biaya lebih dari 4 byte kode.Python 2, 75
Ini mengharapkan input seperti
(30,"ab_c_")
.Dengan Python, string tidak mengizinkan tugas. Jadi, mengganti yang kosong dengan karakter yang diinginkan itu sulit. Seseorang dapat menyiasatinya dengan mengonversi ke daftar dan kembali, tetapi saya merasa lebih pendek untuk hanya menghasilkan string keluaran dari awal, menambahkan karakter yang diinginkan satu per satu.
Output yang sedang dibangun adalah
S
, yang mulai kosong. Kami mengulang-ulang karakter input yangs
disalin berkali-kali untuk mensimulasikan sebuah lingkaran. Kami memeriksa apakah itu kosong melalui Booleanb
. Kami memeriksa kesetaraanx=='_'
daripada perbandingan karena garis bawah terletak di antara huruf kapital dan huruf kecil.Jika karakternya bukan kosong, kita tambahkan saja
S
. Jika kosong, kami menambahkan huruf keluaran yang tidak digunakan berikutnya sejauh iniS
. Kami melacak huruf yang digunakan oleh penunjuk indeksc
yang dimulai dari 0 dan bertambah setiap kali kami menemukan tanda kosong.Pada akhirnya, kami mencetak
n
karakter pertama dari string yang dihasilkanS
.Kita harus menggunakan
S[c:c+b]
pengganti yang lebih pendekb*S[c]
karena yang terakhir memberikan kesalahan di luar batas ketikaS
mulai kosong danc
bernilai 0. Tidak pernah masalah karena kami dijamin karakter pertamas
non-kosong, jadi iniS[c]
tidak pernah diperlukan, tetapi kode tidak mengetahuinya. Membalikkanor
ke hubungan arus pendek juga bisa menyelesaikan masalah ini, tetapi membutuhkan lebih banyak karakter.Python 2, 83
Port Pyth-to-Python dari solusi isaacg , yang menggunakan
split
danzip
untuk melakukan penggantian:Ternyata lebih lama karena, mengejutkan, metode bernama panjang dalam python. Tetapi mungkin bisa ditingkatkan dengan riffling
s
dans.split('_')
bersama - sama dengan cara yang lebih pendek.sumber
Haskell
(93)67Saya belum menulis Haskell dalam beberapa saat,
jadi ini mungkin bisa disingkat banyak.tapi itu sangat bagus, kami harus mempersingkat dan membuatnya lebih baik!Pemakaian:
sumber
Gelombang - 425
Apakah saya kalah?
Batch memiliki batasan - Saya menerima ini. Sebagai contoh; Saya harus menggunakan for for untuk mendapatkan variabel tunggal dalam format yang dapat digunakan karena keterbatasan sintaks parsing variabel.
for %%b in (!c!)do...
hanya ada sehingga saya bisa menggunakan%%b
alih-alih!c!
jadi saya benar-benar dapat melakukan manipulasi string!s:~%%b,1!
dan memiliki variabel yang berkembang pada waktu yang tepat.Ada beberapa hal mendasar yang bisa saya lakukan untuk bermain golf lebih jauh, tetapi mungkin tidak di bawah 400 byte. Saya akan memiliki celah lain segera.
sumber
ECMASkrip 6, 78
Mulai dengan string kosong dan untuk setiap kemunculan garis bawah, ganti dengan karakter di indeks berikutnya dari string saat ini.
sumber
Python 2 -
9997 byteKarena 4 pengajuan berbasis python tidak cukup ...
Contoh:
sumber
ECMASkrip 6,
9391Memotong 2 karakter dari versi pertama.
sumber
C # - 162
Saya mencuri solusi Geobits dan mengubahnya ke C #
1 char lebih baik, jadi kamu bisa meningkatkan Geobits;)
sumber