Program harus mengambil string sebagai input dan membalikkan konsonan di dalamnya, sambil menjaga urutan vokal. Semua huruf akan menjadi huruf kecil, jadi Anda tidak perlu khawatir tentang casing. Contohnya ikuti.
Input:
a test case
.
Konsonan di sini adalaht,s,t,c,s
. Mereka harus datang dalam urutan terbalik, yaitus,c,t,s,t
dan dimasukkan kembali ke dalam string untuk posisi yang sama di mana karakter pra-dibalik berada:a sect sate
.Input:
well-done
. Output:nedl-lowe
.- Input:
reverse the consonants
. Output:setenne sne cohtosarvr
.
Ini adalah kode golf, solusi terpendek yang menang.
Y
harus dianggap vokal terlepas dari apa itu dan tidak terbalik.
Apa pun, serta angka, tanda baca, tanda kutip, dan simbol lainnya ( @#$%^&*(){}[]\|/<>~-_+=`
), berpotensi muncul di input.
-[...]
khusus untuk retina, atau khusus untuk .net regexes atau apakah itu fitur umum regex yang saya abaikan sampai sekarang?[...&&[^...]]
.<[b..z] - [eiouy]>
atau<:Ll - [aeiouy]>
untuk melakukan set perbedaanPython 2, 86 byte
Mengambil input sebagai string dalam tanda kutip. Iterasi melalui input, ganti setiap konsonan dengan
%s
ins
. Tuplec
menyimpan konsonan yang ditemui dalam urutan terbalik. Kemudian, pemformatan string menggantikan%s
'ss
dengan konsonan dic
.Terima kasih kepada Sp3000 untuk cek konsonan, yang menghemat 4 byte dari daftar konsonan.
sumber
Jelly ,
2220 byteCobalah online!
Bagaimana itu bekerja
sumber
JavaScript ES6,
82818078 byteMenyimpan satu byte berkat masing-masing Martin dan Leaky Nun, dan 2 byte ke Neil!
Pengujian
sumber
/(?![aeiouy])[a-z]/g
/(?[_aeiouy])\w/g
bekerja_
, yang merupakan simbol OP ingin tetap di tempatnya.q.onchange=q.onkeydown=q.onkeyup=
menjadi hanyaq.oninput=
...Python 2, 106 byte
Mengharapkan input
"quotes"
, yang saya pikir diizinkan.sumber
Pyke, 18 byte
Coba di sini!
atau 16 byte dengan versi baru:
(Ubah jadi jika untuk mengembalikan semua output string dan memiliki input string, kembalikan string daripada daftar)
Coba di sini!
~c
mengandung konsonan:bcdfghjklmnpqrstvwxz
sumber
GNU sed, 73
Skor termasuk +1 untuk
-r
bendera yang diteruskan ke sed.Ideone.
Berganti-ganti mengubah konsonan huruf kecil pertama dan terakhir dan mengubahnya menjadi huruf besar, sampai tidak ada lagi kecocokan. Kemudian konversi seluruh string kembali menjadi huruf kecil.
sumber
J, 53 byte
Mungkin bukan cara terbaik tapi saya ingin menggunakan
C.
karena ini dapat diselesaikan menggunakan permutasi.Pemakaian
Penjelasan
sumber
MATL,
182221 byte1 byte disimpan berkat @Luis
Sayangnya bagian terpanjang dari ini adalah mendapatkan daftar konsonan (
2Y211Y2'y'hX-
).Cobalah secara Online!
Penjelasan
sumber
tt2Y211Y2'y'hX-m)P5M(
Perl 5 (58 + 4 = 62 byte)
+4 penalti untuk berlari dengan
-0777
flag, yang mengatur Perl ke mode slurp untuk menangani baris baru dengan benar.Menerima input melalui STDIN dan mencetak ke STDOUT.
Penjelasan
sumber
JavaScript (ES6), 72 byte
Memisahkan
/([^\W\d_aeiouy])/
hasil dalam konsonan yang jatuh di entri bernomor ganjil dalam array. Kemudian cukup untuk mengganti entri-entri itu dengan entri yang setara menghitung kembali dari akhir array dan menggabungkan hasilnya bersama-sama.sumber
JavaScript (ES6), 57
70Edit Hebat, 20% hemat thx @Neil
Terlambat ke pesta, tetapi tampaknya semua orang javascript melewatkan sesuatu
Uji
sumber
c.pop()
.Perl 5,
926855 byteDisimpan 37 byte berkat bantuan @manatwork . ;-)
Terjemahan dari solusi Python @Lynn ke Perl.
sumber
g
kekuatan " " akan membantu di sana:@s=split//;
→@s=/./g;
danfor(@s){push@a,$_ if(/[^\Waeiou]/);}
→@a=/[^\Waeiou]/g;
. Maksud saya,m//
dengang
modifier mengembalikan array semua pertandingan.@b=@a=…
. Jugafor
memiliki satu pernyataan di blok tersebut (dalam hal ini;
tidak diperlukan setelah itu), Anda bisa mengubahnya menjadi pernyataan pengubah dan cadangan pembatas:print$_~~@b?pop@a:$_ for/./g
. (Yepp, maaf, ketinggalan bahwa: tidak perlu menyimpan@s
nilai dalam variabel.)Pyth,
26252423 byteSuite uji.
sumber
Julia, 53 byte
Ini mengambil array karakter sebagai input dan membalikkan konsonan di tempat. Cobalah online!
Kredit jatuh ke @ Sp3000 untuk cek konsonan huruf kecil.
Bagaimana itu bekerja
i=find(...,s)
menghasilkan semua indeks s yang predikatnya ... mengembalikan true dan menyimpannya sebagai variabel i .c->'}'>c∉"aeiouy"<"$c"
melakukan tiga tes dan mengembalikan true jika dan hanya jika semuanya positif.'}'>c
memeriksa apakah karakter c muncul sebelum { ."aeiou"
memeriksa apakah string c muncul setelah a .c∉"aeiouy"
memverifikasi bahwa c bukan vokal.Akhirnya,
s[i]
berikan semua konsonan dans[flipud(i)]=s[i]
tetapkan ke posisi dalam s yang sesuai dengan indeks terbalik di i .sumber
∉
)?Java,
319305261188 bytePenghargaan untuk @ Leaky Nun karena membantu dengan ini :-)
Tua:
Inspirasi diambil dari sini ❤
Tidak disatukan
sumber
0
sebagai karakter khusus (null
dijamin tidak berada di String), dan Anda dapat memeriksanya dengans[i]<1
(tidak ada karakter negatif)char
Anda berkeping-keping. :)Ruby,
5350 byte-3 byte dari @manatwork
Coba di sini
sumber
Python 2,
10398100 bytePort jawaban JavaScript saya. Sunting: Disimpan 5 byte berkat @ Dennis, yang saya segera harus menghabiskan dua digit memperbaiki.
sumber
R, 120 byte
Jawaban baru:
mengambil string karakter sebagai x
Respons lama di bawah (110 byte) adalah bentuk yang buruk di pihak saya, yang hanya membalikkan konsonan:
sumber
APLX, 31 byte
⎕a~'aeoiuy'
alfabet huruf kecil tanpa vokalt←⍞
menyimpan input karakter sebagai tc←(
...)∊
menyimpan Boolean "konsonan?" sebagai ct/⍨
ekstrak (konsonan) dari t⌽
terbalik(c/t)←
ganti konsonan dengan (yang terbalik)t
mengembalikan string yang dimodifikasisumber
Python 2.7, 144 byte
Ini pertama membangun daftar terbalik dari konsonan, kemudian memasukkan masing-masing karakter lain kembali pada indeks aslinya.
Tidak golf:
https://repl.it/C30O
sumber
Mathematica 216 byte
sumber
Haskell,
157131 byteMemperbarui
Solusi @ atlasologist membuat saya sadar bahwa saya hanya perlu daftar konsonan alih-alih pasangan (tidak perlu membalikkannya karena saya menggunakan lipatan kanan.)
Tidak disatukan
Tua
Buat daftar pasangan konsonan, kemudian berjalan melalui string menggantikan masing-masing konsonan menggunakan daftar kata.
Agak primitif, tapi saya ingin mencari tahu tanpa melihat jawabannya terlebih dahulu. :)
sumber
if ... then ... else
. b)f
lebih baik ditulis sebagai operator infiks, katakanlah%
. c) tidak perlu untuk pasangan bagian()
dalam((r:q),s)
. d) ganti""
dengan_
pada baris ke-2f
. Semua dalam semua (k
tetap sama):c%(r:q,s)|c`elem`k=(q,r:s)|1<2=(r:q,c:s);c%(_,s)=("",c:s);g s=snd$foldr(%)(filter(`elem`k)s,"")s
.s-lang ,
1716 byte (tidak bersaing)Disimpan satu byte karena s-lang tidak lagi membutuhkan braket argumen terakhir
Cobalah online!
Saya mulai mengerjakan bahasa manipulasi string golf (saya sudah lama ingin melakukan ini), dan saya pikir ini akan menjadi pertanyaan yang menyenangkan untuk dikerjakan.
Penjelasan:
r
membalikkan string dengan pencocokan karakter regex yang diberikan (jika tidak ada argumen regex yang diberikan, maka akan default ke.
)[
memulai argumen regex opsional untukr
(?![aeiouy])\w
regex yang cocok dengan karakter konsonan apa pun kecuali y (sayangnya JavaScript tidak mengizinkan pengurangan kelas karakter)]
biasanya mengakhiri argumen regex opsional untukr
, tetapi kita tidak memerlukannya karena ini adalah fungsi terakhir dan argumen terakhirsumber
Matlab, 67 karakter
Untuk input
'this is a string of- stuff.'
menghasilkan
s = ffit is a fgnirt os- ssuht.
si
adalah indeks dari konsonan dalam string input. Pernyataan akhir menggantikan karakter tersebut dengan karakter yang sama tetapi dalam urutan terbalik dengan mengindeks.sumber
-
. Pertanyaannya mengatakan bahwa tanda baca apa pun adalah input yang valid dan harus diabaikan. Selain itu, Anda harus menggunakaninput('')
untuk mengambil input atau menulis fungsi anonim karena kami tidak dapat menerima variabel sebagai input seperti ini.flip
untuk membalikkan string.ans
, karena itulah input default untuk konsol Matlab ditugaskan?s=input('')
atau entah bagaimana membuat ini menjadi fungsi anonim@(s)
PowerShell , 81 byte
Cobalah online!
Kurang bermain golf:
PowerShell , 88 byte, -f
Cobalah online!
sumber
q / kdb +, 45 byte
Larutan:
Penjelasan:
Temukan indeks konsonan, dan gantilah dengan konsonan terbalik:
Catatan:
Saya punya 3 cara untuk membangun daftar konsonan, yang ada dalam solusi sedikit lebih baik daripada alternatif:
"bcdfghjklmnpqrstvwxz"
untuk 22 karakter (paling membosankan).Q.a _/0 3 6 11 16 19
selama 21 karakter (agak keren, letakkan setiap indeks).Q.a except"aeiouy"
selama 19 karakter (paling membosankan kedua)sumber
Jq 1.5 ,
289263 bytePenjelasan
Contoh dijalankan
Cobalah online
sumber
Java 8, 157 byte
Cobalah online!
Catatan: mencetak peringatan kompiler ke stderr.
Penjelasan:
Tidak akan berbohong, satu-satunya tujuan saya adalah mengalahkan jawaban ini
sumber
APL (Dyalog Extended) , 22 byte
Cobalah online!
sumber