Ada sedikit permainan pemanasan improvisasi di mana Anda mengatur diri Anda dalam lingkaran dan mengirim ritsleting, zaps, dan zops dengan menunjuk ke seseorang dan mengucapkan kata berikutnya dalam urutan, kemudian mereka melakukan hal yang sama sampai Anda semua melakukan pemanasan atau terserah.
Tugas Anda adalah membuat program yang memberikan kata berikutnya dalam urutan yang diberikan kata input. (Zip -> Zap -> Zop -> Zip) Karena ada banyak cara berbeda untuk mengatakan tiga kata dan kata-kata yang dapat ditambahkan ini, program Anda harus meniru duplikasi huruf dan huruf serta membawa sufiks.
Untuk menguraikan, input Anda akan menjadi satu atau lebih Z
s, kemudian satu atau lebih I
s, A
s, atau O
s (semua huruf yang sama), lalu satu atau lebih P
s, (semua huruf hingga titik ini mungkin dalam kasus campuran) diikuti oleh beberapa akhiran yang berubah-ubah (yang mungkin kosong). Anda harus membiarkan run Z
s dan P
s, serta sufiks persis seperti yang diterima, tetapi kemudian mengubah I
s ke A
s, A
s ke O
s, atau O
s ke I
s, menjaga case pada setiap langkah.
Contoh Kasus Uji
zip ==> zap
zAp ==> zOp
ZOP ==> ZIP
ZiiP ==> ZaaP
ZZaapp ==> ZZoopp
zzzzOoOPppP ==> zzzzIiIPppP
Zipperoni ==> Zapperoni
ZAPsky ==> ZOPsky
ZoPtOn ==> ZiPtOn
zipzip ==> zapzip
zapzopzip ==> zopzopzip
zoopzaap ==> ziipzaap
Aturan dan Catatan
- Anda dapat menggunakan pengkodean karakter yang mudah untuk input dan output, asalkan mendukung semua huruf ASCII dan dibuat sebelum tantangan ini.
- Anda dapat menganggap kata input adalah beberapa varian Zip, Zap, atau Zop. Semua input lainnya menghasilkan perilaku yang tidak terdefinisi.
- Input yang valid akan sepenuhnya cocok dengan regex
Z+(I+|A+|O+)P+.*
(dalam kasus campuran)
- Input yang valid akan sepenuhnya cocok dengan regex
Selamat Golf!
z
yang pertama dan yang pertamap
. Akhiran bisa berisi apa saja.Jawaban:
JavaScript (Node.js) ,
69 63 5754 byteCobalah online!
Bagaimana?
"p"
"P"
"z"
"Z"
dan vokal) tidak.z
Z
Berkomentar
sumber
C (gcc) ,
81 ... 61 4846 byteDisimpan 2 byte berkat @Grimy
Port jawaban JS saya . Output dengan memodifikasi string input.
Cobalah online!
Berkomentar
sumber
*++s%4
di beberapa titik tetapi mengabaikan optimasi yang dihasilkan ...)Stax , 19 byte
Jalankan dan debug itu
sumber
Retina 0.8.2 , 21 byte
Cobalah online! Menerjemahkan surat hingga dan termasuk yang pertama
p
, meskipunz
danp
tidak ada di bagian transliterasi sehingga tidak terpengaruh. Yang pertamaO
dikutip karena biasanya mengembang13567
dan yang keduao
dikutip karena itu juga sihir; di bagian pertama transliterasi ia meluas ke string lain. Oleh karena itu transliterasi yang dihasilkan dariIAOIiaoi
untukAOIiaoi
kemudian menghapus duplikat sumber suratIAOiao
keAOIaoi
.sumber
C, 43 byte
Cobalah online!
Berdasarkan jawaban Arnauld . Saya melakukan pencarian brute-force untuk menemukan rumus terpendek yang mengubah a => o, o => i, i => a, z => z.
sumber
Japt ,
2220 byte-2 byte terima kasih kepada Oliver
Cobalah online!
sumber
R ,
11076 byte-36 bytes terima kasih kepada Krill
Fungsi ini mengambil input dari satu string.
Cobalah online!
sumber
s
yang akan kami terjemahkan, dan kemudian menggantinya dengan salinan terjemahan: 76 bytePerl 6 ,
4133 byteCobalah online!
Substitusi case-insensitive sederhana untuk menggeser bagian vokal.
sumber
Python 3.8 (pra-rilis) ,
8178 byteCobalah online!
Python 2 , 98 byte
Cobalah online!
sumber
Java (JDK) , 52 byte
Cobalah online!
sumber
s->{for(int i=0;s[++i]%4>0;)s[i]^=s[i]%16*36%98%22;}
52 byte .Perl 5, 31 byte
TIO
sumber
SNOBOL4 (CSNOBOL4) , 183 byte
Cobalah online!
sumber
Python 2 , 84 byte
Cobalah online!
sumber
C # (Visual C # Interactive Compiler) , 60 byte
Didasarkan atas jawaban Grimy C.
Cobalah online!
sumber
aoi
vokal, bukan hanya yang sebelump
/ pertamaP
. Namun satu hal untuk golf:("iao".IndexOf((char)(c|32))+1)%4
bisa-~"iao".IndexOf((char)(c|32))%4
C / C ++ (VC ++ compiler) 192bytes
ini adalah upaya yang agak naif tetapi tetap
beberapa Versi yang sedikit lebih mudah dibaca adalah ini
sumber
Ruby , 40 byte
Cobalah online!
sumber
05AB1E (warisan) , 22 byte
Cobalah secara online atau verifikasi semua kasus uji .
Pasti bisa bermain golf sedikit lebih ..
Menggunakan versi lawas 05AB1E alih-alih penulisan ulang Elixir, karena
+
menggabungkan bidang dalam daftar dengan panjang yang sama, sedangkan versi baru akan membutuhkan pair-zip-join‚øJ
sebagai gantinya.Penjelasan:
sumber
PHP, 30 byte
terlalu sederhana untuk TiO:
Jalankan sebagai pipa dengan
-nF
. Untuk PHP 7.2, masukkan string literal ke dalam tanda kutip.sumber
oia
vokal bukan hanya yang sebelump
/P
, bukan?