Saya tidak suka string dengan lebih dari tiga vokal berturut-turut. Bisakah Anda menulis program yang menghapus semua vokal yang tidak saya inginkan dari kata-kata?
Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter function (out).
Input adalah string yang hanya berisi karakter ASCII yang dapat dicetak (0x20 hingga 0x7E, inklusif).
Output adalah string yang hanya mengandung paling banyak 3 vokal berturut-turut. Jika ada aliran lebih dari 3 vokal berturut-turut dalam string input, program Anda harus menghasilkan string output termasuk tiga vokal pertama yang ditemukan dalam menjalankan itu, membuang vokal berturut-turut selanjutnya.
Y bukan vokal untuk tujuan tantangan ini.
Ini adalah kode golf, jadi kode terpendek (dalam byte) menang.
Uji Kasus
"Aeiou" => "Aei"
"screeeen" => "screeen"
"We're queueing up for the Hawaiian movie." => "We're queung up for the Hawaiin movie."
"Spaces break runs: aei iou." => "Spaces break runs: aei iou."
aaYYAAaaaAERGH
.Jawaban:
Pyth, 21 byte
Cobalah online: Demonstrasi atau Test Suite
Penjelasan:
Saya beralih melalui semua karakter dan melacak berapa banyak vokal yang saya lewati menggunakan penghitung. Setiap kali saya melewati char, yang bukan vokal, saya mereset penghitung ke 0. Saya mengembalikan chars, setiap kali penghitungnya> 4.
sumber
Tidak dapat dibaca , 1647 byte
Penjelasan
Program ini setara dengan pseudocode seperti ini:
dengan tugas variabel berikut:
Seperti yang Anda lihat, saya menghindari slot variabel 0 karena
0
konstanta yang panjang untuk menulis.Jadi kami membaca setiap karakter dan menyimpan nilai di keduanya
cp
danch
. Kami akan memodifikasicp
tetapi tetap menggunakannyach
sehingga kami dapat mencetaknya jika perlu. Kami berturut-turut mengurangi angka 65, 4, 4, 6, dll. Daricp
untuk memeriksa apakah masing-masing dari 10 karakter vokal yang mungkin di ASCII (perhatikan yang terakhir tidak perlu menjadi tugas).vs
selalu mengandung 3 kurang dari jumlah vokal yang masih diperbolehkan untuk dicetak. Ini dimulai pada0
, sehingga 3 vokal dapat dicetak. Ketika itu mencapai-3
, kami berhenti mencetak vokal.Jika kita menemukan non-vokal (termasuk spasi), kita jalankan
print(ch)
diikuti olehvs = 0
. Seperti yang mungkin sudah Anda duga, ini akan mengatur ulang penghitung vokal.Jika kita menemukan vokal , kita mengeksekusi
((--vs)+4) ? print(ch) : (++vs)
. Mari kita uraikan ini:vs
;-4
, kita sudah melangkah terlalu jauh, jadi jangan cetak apa pun, tetapi naikkanvs
kembali-3
sehingga kita akan terus menolak untuk mencetak vokal;sumber
Retina , 25 byte
Cobalah online.
Substitusi regex yang cukup mudah. Ini juga berfungsi untuk jumlah byte yang sama:
sumber
JavaScript (ES6), 42
Sebagai fungsi anonim
sumber
Perl, 27 karakter
(26 karakter kode + 1 opsi baris perintah karakter)
Bukan masalah besar, hanya kesempatan langka yang saya ingat
\K
ada.Contoh dijalankan:
sumber
\K
". :)s/([aeiou]{1,3})(?1)+/$1/gi
.Serius, 34 byte
Hex Dump:
Cobalah online
Ia menggunakan algoritme yang sama dengan jawaban Pyth, memetakan di atas string sambil melacak panjangnya arus vokal dalam register, menambahkannya kapan pun karakter saat ini adalah vokal, dan memeriksa apakah telah melebihi panjang yang diizinkan, mengembalikan 0 jika demikian, dan kemudian memfilter string asli dengan filter yang dihasilkan ini. Ini akan menjadi jauh lebih singkat setelah kita bisa menggunakan set pengurangan pada string. (
Ok
Dapat dihapus danOkd
bisa diganti dengan adil@
). Saya mendengar fitur ini akan muncul di pembaruan berikutnya ....sumber
C, 166 byte
bukan jawaban terpendek sejauh ini tapi baik golf saya pikir ..
Kasus cobaan:
sumber
Mathematica, 68 byte
Jawaban regex akan memiliki panjang yang sama, tetapi siapa yang menggunakan regex?
sumber
Java, 115 byte
Diharapkan input sebagai parameter program.
Output tes unit:
sumber
String[]
dana
.String[]a
print
daripadaprintln
. Saya tidak percaya spek membutuhkan baris baru.APL, 40 karakter
Dalam Bahasa Inggris:
'aeiouAEIOU'∊⍨' ',⍵
: temukan vokal (dan beri spasi untuk memecah rotasi);(1-⍳4)⌽¨⊂
: putar 0, 1, 2, 3 kali (dengan lilitan) mendorong ke kanan vektor boolean;⊃+/ sum
: rotasi dan unbox1↓4≠
: temukan yang berbeda dari 4, dan hapus yang pertama (untuk mengumpulkan ruang yang kita tambahkan)⍵/⍨
: dalam argumen, simpan hanya elemen yang jumlahnya berbeda dari 4.sumber
Perl 6 ,
3635 bytepemakaian:
sumber
C (205 byte)
(Satu baris ditambahkan untuk kejelasan)
sumber
Scala, 107 byte
sumber
Javascript ES6, 43 karakter
Uji:
sumber
x86 file MS-DOS .COM ,
44 byte36 byteFile .COM secara luas didukung dari MS-DOS 1 hingga sekarang --- Saya menjalankan dalam dosemu, hanya menggunakan 8086 perintah.
Mengurangi 44-36 byte dengan menggunakan REPNE SCASB untuk menguji vokal alih-alih menggunakan perintah terpisah untuk menguji setiap vokal.
sumber
Matlab / Oktaf, 54 byte
Contoh:
Cobalah di ideone .
sumber
V , 21 byte (tidak bersaing)
Cobalah online!
Penjelasan:
Ini hanya lebih pendek dari solusi yang lebih mudah:
(22 byte)
sumber
Ruby, 44 byte
Contoh:
sumber
$<.read
untuk membuatnya menangani input multiline (dengan demikian mengandung karakter 0x0a di luar jangkauan) alih-alihgets
?