Tantangan
Diberi kata tunggal sebagai input, tentukan apakah kata itu ganjil atau genap.
Kata-kata ganjil dan genap
Asumsikan aturan umum:
odd + odd = even
even + odd = odd
odd + even = odd
even + even = even
Dalam alfabet, huruf anehnya adalah:
aeiou
Dan huruf genapnya adalah:
bcdfghjklmnpqrstvwxyz
Hal yang sama berlaku untuk huruf kapital ( AEIOU
ganjil dan BCDFGHJKLMNPQRSTVWXYZ
genap).
Anda kemudian 'menambahkan' masing-masing huruf dalam kata bersama. Misalnya, kata cats
tersebut setara dengan:
even + odd + even + even
Yang disederhanakan menjadi:
odd + even
Yang menyederhanakan lebih lanjut ke:
odd
Jadi kata cats
itu aneh.
Contohnya
Input: trees
Output: even
Input: brush
Output: odd
Input: CAts
Output: odd
Input: Savoie
Output: even
Input: rhythm
Output: even
Aturan
Semua input akan menjadi satu kata yang hanya akan berisi karakter alfabet.
Jika kata tersebut ganjil, berikan nilai yang benar. Jika kata tersebut genap, berikan nilai falsey.
Kemenangan
Kode terpendek dalam byte menang.
code-golf
string
decision-problem
Peluruhan Beta
sumber
sumber
Jawaban:
05AB1E , 6 byte
Penjelasan
Cobalah online!
sumber
EXCEL, 79 byte:
input:
Fungsi ini dapat ditempatkan di mana saja KECUALI A1
Masukkan kata Anda ke dalam A1.
Output: 0 jika genap, 1 jika ganjil.
sumber
JavaScript (ES6),
34413332 byteDisimpan 1 byte berkat Arnauld:
1
0
Solusi sebelumnya:
33 byte berkat Arnauld:
1
0
Cara lain tanpa operator bitwise:
41 byte:
1
0
null
42 byte untuk dikembalikan,
0
bukannull
:34 byte, istirahat kata-kata tanpa huruf aneh:
Disimpan 2 byte berkat Shaun H
sumber
f=
tidak diperlukan, dan memanggil exec pada objek regex lebih pendek.s=>/[aeiou]/ig.exec(s).length%2
exec
dengang
bendera.s=>s.split(/[aeiou]/i).length&1^1
?s=>~s.split(/[aeiou]/i).length&1
sebenarnya satu byte lebih pendek.Brain-Flak
206196192178 + 3 = 181 byteCobalah secara Online!
Ini membutuhkan
-c
bendera untuk berjalan dalam mode ASCII menambahkan 3 byte tambahan ke panjang program.Tidak disatukan
Penjelasan
Pertama-tama simpan tinggi tumpukan untuk tujuan di masa mendatang
Kemudian sementara tumpukan tidak kosong (mengasumsikan bahwa tidak ada karakter yang nol)
Kurangi sembilan puluh tujuh (dan simpan 3 untuk optimasi nanti)
Jika bukan nol (yaitu bukan a)
Kurangi 4 (dan simpan 4 untuk optimisasi nanti)
Jika bukan nol (yaitu bukan e)
Kurangi 4 (dan simpan 4 untuk optimisasi nanti)
Jika bukan nol (yaitu bukan saya)
Kurangi 6 (dan simpan 6 untuk optimisasi nanti)
Jika bukan nol (yaitu bukan o)
Kurangi 6 (simpan 6 karena program mengharapkannya nanti)
Jika bukan nol (yaitu bukan u)
Pindahkan sisanya ke tumpukan lain dan beri angka nol pada tumpukan aktif untuk menghindari semua seandainya
Setelah semua ifs telah lolos, lepaskan nol dan enam
Setelah semua karakter diproses, kurangi tinggi offset dari ketinggian yang disimpan sebelumnya.
Mod oleh dua
sumber
-c
hanya +1 byte karena jawaban Perl juga hanya menambahkan 1 byte / flag.perl -pe'code'
hanya satu byte lebih panjang dariperl -e'code'
.C, 42 byte
Ini bekerja dengan GCC 4.x pada CPU x86-64. Hasil dapat bervariasi dengan pengaturan berbeda.
Mengujinya pada repl.it .
Dengan biaya 5 byte lebih, perilaku yang tidak terdefinisi dapat dihindari, sehingga kode harus bekerja selama int setidaknya 32 bit.
Bagaimana itu bekerja
Modulo 32 , kode karakter dari semua huruf aneh adalah 1 , 5 , 9 , 15 , dan 21 . 2130466 adalah integer 32-bit yang telah menetapkan bit pada posisi ini dan menghapus bit pada yang lainnya.
Ketika f dipanggil pada sebuah string, ia pertama-tama memeriksa apakah karakter pertama dari string tersebut adalah byte nol (string terminator). Jika ya,
*s
hasilkan 0 dan f mengembalikan 0 . Kalau tidak,*s
hasilkan kode karakter huruf dan argumen yang benar dari logika AND (&&
) dieksekusi.Sebab
>>
, GCC menghasilkan instruksi shift. Pada CPU x86-64, instruksi yang sesuai untuk integer 32-bit mengabaikan semua kecuali 5 bit yang lebih rendah dari argumen yang benar, yang menghindari pengurangan*s
modulo 32 . Pergeseran kanan dan bitwise berikut DAN dengan 1 mengekstrak bit 2130466 yang sesuai dengan huruf, yang akan menjadi 1 jika dan hanya jika hurufnya ganjil.Setelah itu, kami kenaikan pointer s (efektif membuang huruf pertama), panggilan f rekursif pada string dipenggal, dan mengambil XOR bitwise hasil dari atas dan hasil dari panggilan rekursif.
sumber
sed
44(42 +1 untuk -n) 43-1 Terima kasih kepada Neil
Mencetak
o
untuk yang aneh dan tidak ada yang genapsumber
s/[aeiou][^aeiou]*[aeiou]//gi
mungkin menghemat satu byte, jika saya sudah menghitung dengan benar.Python, 41 byte
sumber
Python, 42 byte
Tidak banyak yang bisa dijelaskan di sini. Fungsi tanpa nama yang mengembalikan 0 atau 1.
sumber
Brain-Flak ,
524, 446, 422 byteCobalah online!
Versi tidak disatukan dan lebih mudah dibaca:
sumber
Jelly ,
13 1211 byte-1 byte terima kasih kepada @Luis Mendo (gunakan
Ḃ
untuk mengganti%2
)-1 byte terima kasih kepada @Dennis (gunakan kompresi string)
Semua test case ada di TryItOnline
Bagaimana?
Non-bersaing, 5 byte (karena saya baru saja menambahkan fungsi
Øc
)Uji kasus juga di TryItOnline
Sama seperti di atas, tetapi
Øc
menghasilkan vokal alfabet Latin,'AEIOUaeiou'
sumber
%2
denganḂ
“¡ẎṢɱ»
.“”«»‘’
(ada juga⁾
yang untuk string dua-karakter, tetapi yang digunakan dalam string terkompresi).Haskell,
3837 byteTerima kasih kepada Angs untuk satu byte!
sumber
odd
bukaneven
. Menghemat satu byte!Python 3, 53 Bytes
Ini mungkin bisa di-golf lebih lanjut:
sumber
in
dan'aeiou'
danfor
, dan gunakansum
untuk menyimpan 8 byte:lambda n:sum(x in'aeiou'for x in n.lower())&1
(walaupun seperti yang Anda lihat dari pos DJMcMayhem menggunakan kesepuluh vokal juga lebih pendek)sum()
perintah sebelum golf ini jadi sekali lagi saya belajar sesuatu! Semoga harimu menyenangkan :)Jawa, 73
melihat beberapa jawaban java lainnya, jika tidak tidak akan dibagikan. Terima kasih kepada Phaeze karena telah menghemat satu byte.
sumber
%2>0
C 52 byte
utama dan hasilnya:
sumber
h(o){return~-o?1^h(1+strpbrk(o,"aeiouAEIOU")):1;}
menghemat 3 byte.Pyth, 14 byte
Cobalah secara Online!
Penjelasan:
sumber
Ruby, 30 byte
sumber
Vim,
32, 31, 29 penekanan tombolKarena penerjemah V kompatibel dari belakang, Anda dapat mencobanya secara online! disini.
SatuTiga byte disimpan berkat m-chrzan!sumber
s/.../gi
bukans/\c.../g
?'<C-r>"'
->@"
.@"
15 menit yang lalu. Tip vim terbaik yang saya miliki adalah menggunakan:help foo
dan/
dokumentasi: P.:h foo
lebih pendek. : PJava 7, 88
Tidak Terkumpul:
sumber
dimwit , 14 byte (tidak bersaing)
Saya pikir ini akan menjadi tantangan yang menyenangkan dan sederhana untuk memulai dengan bahasa baru.
Penjelasan
a
- dorong array baru ke matriksr[aeiou]}
- hitung kemunculan semua nilai yang cocok dengan regex "[aeiou]" dalam array pertama (karena array pertama berisi input), abaikan case, dan dorong nilai itu ke akhir array terakhir.e
- jika angka terakhir dalam array terakhir adalah genap (yang kami atur ke jumlah kemunculan), lakukan operasi berikutnya hingga braket penutup ("}")t
- hentikan eksekusi, kosongkan matriks, dan atur nilai pertama menjadi false}
- akhire
blok kodeT
- hentikan eksekusi, hapus matriks, dan tetapkan nilai pertama menjadi benarCobalah online!
Gunakan bidang Input untuk memasukkan kata.
Saya akan segera menambahkan dokumentasi ...
sumber
PowerShell v2 +,
4542 byteMengambil input
$args[0]
, mengirimkannya-replace
untuk menghapus semua karakter non-vokal, mengambil hasilnya.length
, dan%2
untuk memeriksa apakah itu aneh / genap.Contohnya
sumber
J, 20 byte
Pendekatan lurus ke depan
Penjelasan
sumber
Japt, 7 byte
Uji secara online! Output 1 untuk ganjil, 0 untuk genap.
Bagaimana itu bekerja
sumber
Oktaf, 34 byte
Ini adalah 6 byte lebih pendek dibandingkan dengan pendekatan tradisional yang menggunakan
ismember
,@(s)mod(sum(ismember(s,'aeiouAEIOU')),2)
dan dua byte lebih pendek dibandingkan dengan pendekatan regex:@(s)mod(nnz(regexpi(s,'[aeiou]')),2)
.Uji di sini .
sumber
PHP, 41 byte
Ini menghasilkan -1 untuk kebenaran dan 0 untuk falsey.
sumber
Mathematica, 44 byte
Memberikan True untuk string aneh dan False untuk string genap.
sumber
q, 29 byte
sumber
C #
64625650 BytesKami sudah menggunakan LINQ, jadi Berisi menyimpan 2 byte lebih dari IndexOfMenggunakan metode overload Count menghemat 6 byteFungsi anonim yang mengambil string dan menghitung huruf ganjil kemudian mengembalikan true jika ada angka ganjil atau salah jika tidak ada.
Solusi baru ini membagi string pada salah satu karakter dalam array char yang diberikan. Mekanisme ini membalikkan makna
%2
hasilnya; 0 sekarang aneh dan 1 bahkan karenanya1>
.Coba online di sini!
sumber
string.Split()
untuk menghitung vokal dan Anda tidak perlu LINQ.s=>1>s.Split("aeiouAEIOU".ToCharArray()).Length%2;
Retina , 19 byte
Cobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)
Baris pertama menghitung vokal dalam input. Baris kedua memeriksa apakah hasilnya aneh.
sumber
MATL ,
8, 7 byteCobalah online!
Penjelasan:
sumber
Pyke, 10 byte
Coba di sini!
sumber