Kata Garland
Sebuah kata karangan bunga adalah kata yang dapat dirangkai seperti karangan bunga, karena berakhir dengan huruf yang sama dimulai dengan. Kelompok-kelompok surat ini bahkan dapat tumpang tindih!
Misalnya, underground
adalah kata urutan karangan bunga 3
, karena dimulai dan diakhiri dengan 3 karakter yang sama und
,. Ini berarti bisa dirangkai seperti undergroundergrounderground...
.
alfalfa
adalah kata karangan bunga juga! Ini urutan 4. Dimulai dan diakhiri dengan alfa
. Hal ini dapat dirangkai seperti: alfalfalfalfa
.
Sebuah proses yang saya sebut garlandifying adalah di mana begitu Anda menentukan urutan n
kata garland, Anda mengambil kata aslinya dan menambahkan segmen yang diperlukan untuk memilikinya loop sebagai n
kali garland . Jadi, karena onion
merupakan perintah 2
kata karangan bunga, Anda akan mengambil onion
, memotong 2
huruf pertama untuk mendapatkan ion
dan menambahkannya ke waktu akhir 2
untuk mendapatkan onionionion
.
Objektif
Buat program atau fungsi yang mengambil input dari input standar atau argumen fungsi dan mencetak atau mengembalikan kata, dikalibrasi.
Semua kata akan menjadi huruf kecil, dan urutan tertinggi untuk sebuah kata adalah length(word) - 1
.
Contoh I / O
"onion" --> "onionionion"
"jackhammer" --> "jackhammer"
"abracadabra" --> "abracadabracadabracadabracadabracadabra"
"" --> ""
"zvioz" --> "zviozvioz"
"alfalfa" --> "alfalfalfalfalfalfa"
"aaaa" --> "aaaaaaa"
Ini adalah kode-golf , jadi paling tidak jumlah byte yang menang.
Jawaban:
Pyth,
1918 byteCobalah secara online: Demonstrasi atau Uji harness
Penjelasan:
sumber
Python, 60 byte
Berharap lebih baik, tapi oh well.
s.find
bekerja dengan rapi di sini dinot s.startswith
.sumber
Retina , 58 byte
Setiap baris harus menuju ke file sendiri tetapi Anda dapat menjalankan kode sebagai satu file dengan
-s
bendera.Keempat pasangan substitusi melakukan hal berikut:
order
jumlah karakter.order
waktu terakhir .Status string untuk contoh
onion
:sumber
Haskell, 64 byte
Tes:
sumber
Java,
160157 byteInput output:
Spasi dan tab untuk dibaca:
Saran diterima.
sumber
i=0;
?Sed:
8784 karakter(83 karakter kode + 1 opsi baris perintah karakter.)
Contoh dijalankan:
sumber
CJam,
2423 byteHanya memulainya dengan sesuatu ..
Cobalah online di sini
sumber
Matlab:
978982 byteFungsi yang menggunakan ekspresi reguler dengan tampilan di belakang dan grup tangkap:
Itu
sum
diperlukan untuk menangani input string kosong (konversi[]
ke0
).Contoh:
sumber
REGXY,
5349 byteMenggunakan REGXY , bahasa berbasis pengganti regex
Tinjauan Umum: Sejumlah ekspresi reguler diterapkan. Contoh run akan terlihat seperti:
Penjelasan terperinci Berikut ini adalah rincian baris demi baris dari regex:
Ini adalah pengganti regex yang cocok dengan string kosong pertama (yaitu awal string) dan menggantinya dengan segala yang ada di kanan pertandingan (
$'
) diikuti oleh hash. Misalnya, itu akan berubahonion
menjadionion#onion
.Baris ini menemukan bagian yang tumpang tindih dengan mencari sekelompok karakter tepat sebelum # (
(.+)
) yang sama di sisi lain dari # (\1
). \ K hanya berarti 'lupa bahwa saya cocok dengan apa pun', artinya itu tidak akan benar-benar diganti dalam substitusi. Ini secara efektif, ini berarti kita hanya menambahkan # ke posisi setelah tumpang tindih ditemukan, berubahonion#onion
menjadionion#on#ion
.Inisial 'a' hanyalah label untuk regex. Setelah ini, kami menemukan # pertama diikuti oleh satu karakter (
.
) dan menangkap semuanya setelah ini sampai # berikutnya (.*#
). Kami mengganti ini dengan semua yang ada di kanan pertandingan, yaitu token terakhir ($ '), diikuti oleh # ($1
), diikuti oleh token kedua kurang dari karakter (kami memperlakukan ini sebagai penghitung, mengurangi setiap iterasi). Dalam kasus bawang # di # ion, dua token kita backreference pada ditunjukkan dalam tanda kurung, dan bagian seluruh pertandingan regex adalah antara pipa:onion|(#)o(n#)|ion
. Kami kemudian mengganti bit yang kami cocokkan (antara pipa) dengan$'
(semua yang ada di kanan pertandingan, yaitu 'ion'), kemudian $ 1 (the #), kemudian $ 2 (n #), artinya kami berakhir denganonion|(ion)(#)(n#)|ion
(tanda kurung menunjukkan tiga token dalam string pengganti).Jika regex gagal mencocokkan pada pergantian pertama (semuanya sebelum pipa), kita harus menurunkan penghitung kita menjadi nol, artinya tidak ada karakter di dalam token kedua. Sebagai gantinya, kita melihat bagian kedua dari pola
#.*
,. Ini hanya menggantikan semuanya setelah # pertama dengan$'$1$2
. Karena tidak ada referensi yang dibuat oleh pergantian ini, dan tidak ada apa-apa di sebelah kanan pertandingan (.*
cocok sampai akhir string), kami mengakhiri pertandingan dan mengembalikan hasilnya.Ini hanya sebuah penunjuk ke baris sebelumnya, memastikan kami terus menjalankan penggantian regex hingga gagal mencocokkan lagi.
sumber
jq 1,5: 91 karakter
(87 karakter kode + 4 opsi opsi baris perintah.)
Contoh dijalankan:
sumber
rs ,
5148 byteBAWA BAHWA, RETINA DAN SED !!!!! ;)
Potong 3 byte berkat @randomra.
Demo langsung dan uji kasus.
Perhatikan bahwa
jackhammer
test case tidak ada. Ada bug dalam penanganan spasi di antarmuka web yang menyebabkannya mencetak hasil yang salah. Versi offliners
menanganinya dengan benar.Versi 51-byte:
Demo langsung dan uji kasus untuk yang asli.
sumber
JavaScript (ES6), 95 byte
Demo
Firefox hanya untuk saat ini:
sumber
JavaScript (ES6), 82 byte
[Menghapus jawaban asli saya, karena saya sekarang telah belajar ES6 dan tertarik untuk menemukan solusi rekursif untuk tantangan ini]
Contoh
sumber
CoffeeScript + ES6, 77 byte
Pendekatan yang sama dengan jawaban JavaScript saya.
sumber
C
Golfed: 195 byte - GCC
sumber
int
tersirat dalam (versi cukup lama) C?Groovy
755755 byteLuar biasa bagaimana kembali ke sesuatu yang terjadi sehari setelahnya dapat membantu
Tidak Disatukan:
sumber
Dalam kasus seseorang membutuhkan kode di JS untuk mengujinya. Catatan: Saya melintasi string dari ujung untuk meningkatkan efisiensi:
sumber