Ini adalah tantangan yang agak mudah.
Tantangan
Input akan berisi string (bukan null
atau kosong) dengan panjang maksimum 100. Keluarkan jumlah vokal di setiap kata string, dipisahkan dengan spasi.
Aturan
- Panjang string tidak akan lebih dari 100 karakter.
- String hanya akan berisi huruf
A-Z
,a-z
dan juga bisa berisi spasi. - Input harus dikonsumsi dari
stdin
argumen baris perintah atau. - Output harus dikeluarkan dalam
stdout
. - Anda dapat menulis program lengkap, atau fungsi yang mengambil input dari
stdin
dan menampilkan hasilnya. - Vokal yang perlu dihitung oleh program / fungsi Anda adalah
aeiou
danAEIOU
.
Uji Kasus
This is the first test case --> 1 1 1 1 1 2
one plus two equals three --> 2 1 1 3 2
aeiou AEIOU --> 5 5
psst --> 0
the quick brown fox jumped over the lazy dog --> 1 2 1 1 2 2 1 1 1
Mencetak gol
Ini adalah kode-golf , jadi pengiriman terpendek (dalam byte) menang.
stdin
denganstdout
. Saya tidak suka "mendapatkan input" melalui argumen fungsi. argumen baris perintah sepertinya ok. Saya telah menambahkannya ke dalam pos.The name "vowel" is often used for the symbols that represent vowel sounds in a language's writing system, particularly if the language uses an alphabet. In writing systems based on the Latin alphabet, the letters A, E, I, O, U, and sometimes Y are all used to represent vowels. However, not all of these letters represent vowels in all languages.
Apa yang ANDA maksudkan dengan vokal?Jawaban:
Pyth, 17 byte
Solusi mudah. Cobalah online: Demonstrasi atau Uji harness
Penjelasan:
sumber
C,
113 108 10396 byteTerima kasih @ andrea-biondo untuk penghematan 5 byte yang sangat bagus.
Ini masih terasa agak membengkak jadi mudah-mudahan saya bisa menurunkannya beberapa byte nanti malam.
Bagian yang menarik mungkin itu
akan menjadi
1
apakahc
ASCII vokal (huruf besar atau kecil), dan0
untuk karakter laina-zA-Z
. Subekspressionc-65&31
memetakan'a'
dan'A'
ke0
,'b'
dan'B'
ke2
, dll. Ketika kita menambahkan masing33
-masing vokal sesuai dengan angka33, 37, 41, 47, 53
, semuanya adalah (mudah) prima. Dalam rentang kami hanya angka-angka seperti itu yang akan membelah124701951 = 33*37*41*47*53
, yaitu hanya untuk vokal yang akan124701951%(...)
menjadi nol.EDIT: Dengan cara ini orang dapat mempertimbangkan ekspresi di
!(n%((c-65&31)+s))
mana(n,s) = (124701951, 33)
sebagai menentukan apakah karakterc
itu vokal. Dalam komentar @ andrea-biondo menunjukkan bahwa pasangan(n,s) = (2016,28)
juga dapat digunakan dalam ungkapan ini untuk menentukan vokal. Saya akan meninggalkan penjelasan saat ini dalam hal bilangan prima di atas, tetapi alasan pemasangan yang lebih pendek ini berfungsi lagi karena di kisaran 28--53 satu-satunya angka dengan faktor prima seluruhnya dalam rangkaian faktor prima 2016 adalah 28, 32, 36, 42, 48, yang bersesuaian dengan vokal.EDIT2: 5 byte lainnya disimpan karena
(c-65&31)+28
dapat disingkat menjadic%32+27
.EDIT3: Dikonversi menjadi do-while untuk akhirnya mendapatkan di bawah 100 byte.
Kasus uji:
sumber
a;
luarmain
. Dengan cara ini, Anda mengurangi beberapa byte karena Anda tidak perlu declarea
dimain(...)
dan juga, tidak perlu menginisialisasia
dari loop.a
diinisialisasi ulang di setiap loop, sehingga Anda tidak dapat menginisialisasi sekali ke nol dengan mendeklarasikan global. Saya menulis bruteforcer kecil untuk menemukan(n, s)
pasangan terkecil sehinggan%((c-65&31)+s)
nol untuk vokal dan non-nol untuk konsonan (az, AZ). Saya menemukan(2016, 28)
dan tampaknya berfungsi dengan baik:!(2016%((c-65&31)+28))
5 karakter lebih pendek. Lagi pula, solusi yang sangat bagus :)CJam,
2119 byteCara kerjanya :
Cobalah online di sini
sumber
R,
4443 bytePenjelasan + tidak dikumpulkan:
sumber
Perl,
35343130
karakter+1
untuk-n
.Seperti banyak kode Perl, ini berfungsi dari kanan ke kiri.
split
akan membagi garis yang dimasukkan pada spasi putih.map
akan menjalankan kode antara{}
pada setiap kata yang dipisah.lc
membuat kata huruf kecil.=~y/aeiou//
akan memberi kita hitungan vokal..$"
akan menambahkan spasi ke kata.say
lalu cetak semua kata!Jalankan dengan:
sumber
Python 3, 65 byte
Sangat mudah, cukup mudah dibaca.
w
singkatan kata,c
singkatan karakter.sumber
Perl: 30 karakter
(Jenis memaksa aturan: angka-angka dalam output dipisahkan dengan spasi sebanyak kata-kata input.)
Contoh dijalankan:
Perl: 27 karakter
(Hanya untuk menunjukkan betapa singkat akan jika saya tidak melupakan
y///
's nilai kembali. Sekali lagi. Sekarang pergi dan upvote chilemagic ' s jawaban yang mengingatkan saya tentangy///
's nilai kembali. Lagi.)sumber
s!\w+!lc($&)=~y/aeiou//!ge
membuatnya menjadi27
byte (26 karakter +1 untuk-p
.y///
. :(Ruby, 38 byte
Pemakaian:
sumber
JavaScript ( ES6 ), 68
I / O melalui sembulan. Jalankan cuplikan di Firefox untuk menguji.
sumber
Rebol - 70
sumber
PowerShell, 35 byte
Agak membosankan, tapi sebenarnya berlomba sekali? (PowerShell tidak peka huruf besar-kecil, woo)
sumber
echo <word> | code
, di mana <word> adalah kata atau frasa AndaBash - 85
Penjelasan
read l
baca satu baris dari inputfor w in l
memisahkan garis menjadi kata-kata menggunakan pemisah spasi putihx=${w//[^aouieAOUIE]/}
menghapus semua kecuali vokal dari kata${#x}
adalah panjang string yang dihasilkan === jumlah vokalsumber
while
..do
..done
akan lebih pendek. Juga tidak diperlukan yang terakhir/
dalam substitusi pola. Dan satu ruang literal lebih pendek dari yang dikutip.read l;for w in $l;do x=${w//[^aouieAOUIE]};echo -n ${#x}\ ;done;echo
Julia,
76726965 bytePenjelasan + tidak dikumpulkan:
Ini akan mencakup satu ruang tambahan, yang menurut saya sah.
sumber
Mathematica, 95 byte
Tidak akan memenangkan kontes apa pun, tapi ...
sumber
InputString
ada di antarmuka web, ini adalah dialog di Mathematica.)InputString
mengambil baris input berikutnya.golflua, 55 byte
Pencocokan pola dasar vokal setelah huruf kecil paksa. Setara Lua (ungolfed) akan menjadi
sumber
gsub('[aeiouAEIOU]','')
dan dilewatilower()
.R , 139 byte
Baca / tulis stdout () mengerikan
sumber
cat()
daripadawrite(..., stdout())
.Python 3, 72 byte
Terinspirasi oleh @randomra 's jawaban . Panjangnya
samasedikit lebih lama, tetapi menggunakan regex bukannya daftar pemahaman. Ini juga kurang mudah dibaca.sumber
import re;print(*map(len,re.sub("[^aeiou ]","",input()).split()))
. (Gunakan baris baru alih-alih;
jika Anda mau.)2
flag case case-insensitive) dan dipisah" "
sehingga dapat ada 0 barang panjangPHP - 94
Versi tidak disatukan
sumber
Objective-C, 223 byte
Bukan bahasa yang paling ringkas, tetapi berhasil.
Versi tidak terkompresi:
sumber
Matlab, 73 byte
Tantangan Anda tidak terlalu jelas (tetapi menarik). Saya berasumsi
a
,e
,i
,o
,u
.Kode:
sumber
rs , 50 byte
Ini tidak masuk hitungan; rs diunggah sekitar 2 minggu setelah ini diposting. Namun, ternyata ini tidak akan memenangkan apa pun, jadi tetap saja keren.
Demo langsung.
Implementasinya agak mudah:
sumber
Perl,
6045Berkat kirbyfan64sos karena telah menyelamatkan saya 15 byte - itu sangat membantu!
Perhatikan ada ruang ekstra di akhir output.
sumber
split
dengan mengatur penambahan$/=" ";
, dan Anda dapat mempersingkat awalan loop menjadiwhile(<>)
. Dengan dua perubahan itu, kode menjadi$/=" ";while(<>){$n=()=/[aeiou]/gi;print"$n "}
, menghemat 14 byte!Haskell,
7668 byteImplementasi langsung, tidak yakin apakah ada golf di sini.
sumber
KDB (Q), 30 byte
Penjelasan
Uji
sumber
Smalltalk - 66
72Ini di Smalltalk / X; nama untuk stdin dan stdout mungkin berbeda dalam mencicit / pharo.
Dalam Smalltalk / X (dan banyak dialek lainnya), simbol memahami #value :, sehingga dapat disingkat menjadi 66 karakter:
Jika dikodekan sebagai fungsi yang mendapatkan string sebagai argumen "s":
Tentu saja, dalam kode nyata, seseorang akan menggunakan fungsi utilitas "f", yang mengembalikan vektor hitungan, dan mencetaknya. Namun, format output tidak sesuai dengan tantangan yang diminta:
sumber
Python 2, 76 byte
Saya membuat ini sebelum saya melihat solusi lain, kemudian memeriksa untuk menemukan dua solusi P3 yang lebih pendek :( Darn keterbatasan P2.
sumber
PowerShell, 65 byte
uji dengan menggunakan pola di bawah ini setelah menyimpan sebagai
vowels.ps1
Dengan cara ini, ini adalah skrip aktual dan bukan hanya cuplikan kode yang dengan demikian memuaskan batasan:
"Input harus dikonsumsi dari argumen stdin atau baris perintah."
sumber
Jelly , 7 byte
Cobalah online!
Ditemukan dengan bantuan dari Mr. Xcoder dalam obrolan
Penjelasan
Jika output harus dipisahkan dengan spasi, maka tambahkan a
K
sampai akhirsumber
SAS, 72
Format I / O terbatas untuk yang satu ini benar-benar sakit karena ini bertanggung jawab atas 25 byte di sini.
sumber
C # 186
sumber
AEIOU
.