Bergantian , adalah tindakan mengambil string dan bersarang di kurung bergantian. Inilah cara Anda mengganti string.
Untuk string dengan panjang N , ambil karakter tengah N , dan mengelilingi mereka dalam tanda kurung. Jadi jika string kami adalah
Hello world!
(12 karakter), kami akan berakhir dengan(Hello world!)
Kemudian, ambil
n-2
karakter tengah yang tersisa , dan mengelilinginya dalam tanda kurung. Dalam hal ini, 10 karakter tengah adalahello world
, jadi iterasi berikutnya adalah:(H[ello world]!)
Selama masih ada lebih dari dua karakter di tengah-tengah string, ulangi dua langkah terakhir, bergantian antara
()
dan[]
. Inilah langkah terakhir:(Hello world!) (H[ello world]!) (H[e(llo worl)d]!) (H[e(l[l(o[ w]o)r]l)d]!)
Karena hanya ada dua karakter yang tersisa di tengah pada iterasi terakhir, kami berhenti. String terakhir kami adalah
(H[e(l[l(o[ w]o)r]l)d]!)
Perhatikan bagaimana ada dua karakter di tanda kurung tengah. Ini terjadi ketika input panjangnya genap. Jika input panjangnya aneh (misalnya,
Hello, world!
dengan koma ditambahkan), kami hanya akan memiliki satu karakter di tengah:(H[e(l[l(o[,( )w]o)r]l)d]!)
Untuk tantangan hari ini, Anda harus menulis sebuah program atau fungsi yang mengambil string sebagai input, dan memundangnya, menghasilkan string baru. Anda dapat mengambil input dan output dalam format wajar apa pun yang Anda suka. Input akan selalu setidaknya sepanjang satu karakter, dan hanya akan berisi ASCII yang dapat dicetak. Anda juga dapat mengasumsikan bahwa input tidak akan mengandung tanda kurung atau tanda kurung. Untuk bahasa tradisional, ini seharusnya tidak terlalu penting, tetapi mungkin membuatnya lebih mudah untuk beberapa bahasa esoterik.
Seperti biasa, ini adalah kompetisi kode-golf , jadi cobalah membuat jawaban sesingkat mungkin dalam bahasa pilihan Anda. Selamat bersenang-senang!
Tes IO
#Input #Output
"Alternesting is fun!" --> (A[l(t[e(r[n(e[s(t[in]g) ]i)s] )f]u)n]!)
"PPCG" --> (P[PC]G)
"Code-golf" --> (C[o(d[e(-)g]o)l]f)
"4 8 15 16 23 42" --> (4[ (8[ (1[5( [1]6) ]2)3] )4]2)
"a" --> (a)
"ab" --> (ab)
"abc" --> (a[b]c)
sumber
()
) atau bisakah kita mulai dengan tanda kurung ([]
)?()
HelloWorld
.Jawaban:
Python 3 ,
706965 byte-1 byte terima kasih kepada @Uriel
-4 byte terima kasih kepada @xnor
Cobalah online!
sumber
C,
143137135 byteCobalah online!
Penjelasan:
sumber
0
. Jadi, Anda tidak perluk=i=0,
. Saya mungkin salah. Lihat jawaban SO iniRetina , 52 byte
Cobalah online! Tahap pertama memasukkan pasangan tanda kurung di antara masing-masing pasangan karakter input, sedangkan tahap kedua dan ketiga mengoreksi tanda kurung alternatif ke tanda kurung.
sumber
Sed, 78
Skor termasuk +1 untuk
-r
opsi yang diteruskan ke sed.Cobalah online .
sumber
JavaScript (ES6),
6968 byteUji kasus
Tampilkan cuplikan kode
sumber
V ,
252625 byte12 byte mati berkat @DJMcMayhemCobalah online!
Meminjam beberapa ide @ udioca.
Juga akhirnya menggunakan plugin surround yang disertakan dalam V untuk jawaban, meskipun mungkin bukan cara terbaik, siapa tahu.Plugin TIDAK ingin digunakan.Hexdump:
Penjelasan:
sumber
;
alih-alih yang terakhirf)
Cobalah online!()
dan[]
satu byte lebih pendek tapi jauh lebih tidak kerenHaskell ,
9691817977 byteCobalah online!
sumber
(x:y)
dan(init y)
.k==""=""
lebih pendek sebagaik==""=k
.cycle["()","[]"]
menjadi"()[]"
: Coba online!cycle
bahkan lebih pendek. Anda masih dapat menghapus tanda kurung di sekitar(init y)
.k==""=k
ke ujung dan mengubahnya ke0<1=k
.Ruby ,
7977 byte-2 byte berkat @Nilai Tinta
Cobalah online!
sumber
s.insert k=i*2,'(['[i%2];s[~k]+=')]'[i%2]
untuk menyimpan 2 byte. Cobalah online!Javascript (ES6)
110105 byteTerima kasih kepada @powelles untuk mengingatkan saya tentang
x%y<1
.Terima kasih @ Lukas untuk
a-b?y:x
Tampilkan cuplikan kode
Hal pertama dalam memahami binatang buas ini adalah ungolfing:
Hampir setiap baris adalah bagian dari versi golf, jadi melangkahlah melalui:
Baris 1: Pernyataan fungsi menjadi fungsi panah , berganti nama
input
menjadii
. Menjadii=>
.Baris 2:
Array.from
adalah cara baru yang tepat untuk mengubah string menjadi sebuah array, dan apa yang kita gunakan pada baris ini. Namun seiring dengan itu, operator penyebaran adalah cara yang lebih murah daripada.split('')
cara lama , untuk melakukannya, yang digunakan dalam versi golf. Berakhir sebagai[...i]
.Line 3:
.map
loop melalui array, memberikan Anda tiga argumen:item
(a
di golfed),index
; golf sebagaib
, danbaseArray
atauc
. Sementara kami hanya peduliitem
danindex
, kami terusbaseArray
(lihat baris 4 untuk alasannya). Golf untuk.map((a,b,c,...)=>...
.Baris 4: Variabel
middle
, atau argumend
dalam versi golf dibuat untuk menyimpan beberapa byte ketika diulang. Argumenc
harus disimpan untuk argumen yangd
akan dibuat. Dikonversi menjadi(...,d=i.length/2-1,...)
.Baris 5 : Variabel
alternate
, atau argumene
digunakan untuk memeriksa karakter apa yang ada di "(" atau "[" atau jika melewati tengah, ")" dan "]".b%2<1
sama denganb%2==0
karena tidak boleh kurang dari 1, tetapi 0 dalam hal ini. Sama dengan(...,e=b%2<1)
.Baris 6: Variabel pembantu untuk memungkinkan saya mengonversi
ternary operators
keif
pernyataan. Bukan apa-apa dalam codegolf yang sebenarnya.Baris 7-8 : Jika indeks kurang dari tengah string, atur simbol ke pergantian "[" dan "(". Setara dengan
d>b?e?'[':'(':...
.Baris 9-12 : Lain-lain (jika indeks lebih besar dari tengah), periksa apakah tengah adalah bilangan bulat, jika demikian alihkan pergantian. Kemudian atur simbol ke pergantian ')' dan ']'. Dikacaukan untuk
(d%1==0?!e:e)?')':']'
.Baris 13-15 : Jika di tengah atur simbol ke string kosong. Ini tidak berlaku untuk alternester ganjil, karena tengah memiliki desimal. Menjadi:
d==b?'':...
.Baris 16 : Bergabung dengan array karakter kembali menjadi string. Setara dengan
.join``
.Baris 17 : Mengembalikan simbol awal "(" dan hasilnya. Berkorelasi dengan
'('+...
.sumber
%2==0
ke%2<1
dan menggunakan[...i]
bukannyai.split
[..i] idea
, tetapi saya lupa tentang%2<1
terima kasih.b%2<1
dapat digantikan oleh!b%2
d==b?x:y
bisa menjadid-b?y:x
dand%1==0
bisa menjadi!d%1
.!d%1
hanya berfungsi dengan tanda kurung:,!(d%1)
dan tidak memotong byte. Saya lupa bahwa 0 adalah satu-satunya angka palsu, untuk beberapa alasan saya pikir -1 adalah yang salah. Perbaiki saya jika saya mendapatkan kesalahan tentang yang kedua.Jelly ,
2321 byteCobalah online!
-2 byte berkat @EricTheOutgolfer
sumber
ị
ke helper untuk -2, seperti ini:LHĊRị¶ç⁾)]żUFUż@ç⁾([$
SCALA,
140138 karakter,140138 byteMaaf saya tidak bisa berbuat lebih baik ... Saya yakin ada banyak cara untuk memperbaikinya. Masih:
Cobalah online!
Terima kasih atas tantangan ini, itu cukup sulit bagi saya.
EDIT: -2 byte terima kasih kepada Mar Dev.
PS: Tapi saya akan menanyakan sesuatu. Saya mengerti mengapa KODE INI terus menduplikasi karakter pusat string saya jika saya memiliki panjang yang aneh (saya hanya tidak memeriksa dan menambahkannya dua kali, dalam keduanya
l
danr
string). Tetapi mengapa saya mendapatkan sepasang tanda kurung ketika saya mencoba memperbaikinya seperti ITU ? Saya tidak mengerti sama sekali.sumber
i%2==0
toi%2<1
untuk menyimpan dua byte.Perl,
7774 (73 +1) byteEkspresi reguler adalah hal yang mulia. Jalankan dengan
-p
bendera baris perintah.sumber
05AB1E , 31 byte
Cobalah online!
Penjelasan
Dengan contoh untuk input:
abcd
/abcde
sumber
C ++ 14,
154145 byte[Rekursif]
C ++ 14, 177 byte
[Berulang]
sumber
Pyth , 42 (!) Byte
Uji secara online! Masukan harus dikutip.
Penjelasan
Jadi pada dasarnya saya secara progresif menghapus kepala dan akhir H (menjadi string input di awal) sambil menyatukan tanda kurung / kurung. G hanyalah boolean yang mengingat jika saya harus menggunakan tanda kurung atau tanda kurung.
sumber
05AB1E ,
4942 byteCobalah online!
sumber
PowerShell,
125119111 byteCobalah online!
Versi sebelumnya*
* Terima kasih @Digital Trauma.
sumber
QuadR , 82 byte
(81 byte +1 untuk
≡
bendera)Cobalah online!
sumber
AWK, 118 byte
Diuji dengan gawk, tetapi harus bekerja dengan penerjemah awk yang memenuhi syarat
sumber
JavaScript, 101 byte
Bukan pemenang, tetapi menarik untuk mencoba
replace
pendekatan itu. Ini pasti bisa diperbaiki, tetapi cepat hilang ...sumber
Java (OpenJDK 8) , 124 byte
Cobalah online!
Kredit
sumber