Dalam bahasa Inggris, kata benda dapat mengambil dua bentuk yang berbeda tergantung pada apakah mereka tunggal (jamak) atau jamak (apa pun). Sebagai contoh, kita akan mengatakan "1 anjing" tetapi "2 anjing", "0 anjing", "57 anjing" dan sebagainya.
Di Rusia, ada tiga kategori. Alih-alih "1 anjing, 2 anjing, 5 anjing", dalam bahasa Rusia itu akan menjadi "1 собака, 2 собаки, 5 собак".
Kategori dibagi menurut logika berikut:
- "Singular": digunakan untuk 1 dan angka apa pun yang berakhir dengan 1, kecuali untuk angka yang berakhir dengan 11.
- Contoh: 1 собака, 21 собака, 101 собака
- "Sedikit": digunakan untuk 2, 3, dan 4, dan angka apa pun yang berakhiran 2, 3, atau 4 kecuali untuk angka yang diakhiri dengan 12, 13, dan 14.
- Contoh: 2 собаки, 3 собаки, 4 собаки, 32 собаки, 43 собаки, 104 собаки, 104 собаки
- "Many": apa pun yang tidak dianggap "Singular" atau "Few".
- Contoh: 0 собак, 5 собак, 11 собак, 13 собак, 25 собак, 111 собак, 114 собак, 114 собак
Tantangan
Diberikan input integer dalam rentang [0, 1000], kembalikan 1
jika itu termasuk dalam kategori "tunggal", 2
jika itu termasuk dalam kategori "beberapa", dan 5
jika itu termasuk dalam kategori "banyak".
Program Anda mungkin sebuah fungsi atau dapat menggunakan STDIN. Anda dapat mencetak ke STDOUT atau mengembalikan nilai dari fungsi
Ini adalah tantangan kode golf , jadi solusi dengan jumlah byte paling sedikit menang.
sumber
1
,,2
dan5
khususnya? Juga, mengapa saya tidak bisa menggunakan kode keluar?Jawaban:
Python 2 , 36 byte
Cobalah online!
Panjang yang sama secara hitung:
Pertama mari kita lihat kode sederhana yang tidak memperhitungkan remaja.
Di sini, kami ingin pemetaan digit seseorang ke output yang berfungsi seperti
Tapi, daripada mengambil
n
modulo 10 (%10
), kita bisa melakukannyan%-10
, yang memetakan pada interval[-9..0]
untuk memberikan sisa:Ini menjanjikan karena dua entri pertama
0
dan-9
berjauhan, dan mereka perlu dikirim ke output yang berbeda. Juga,-10
bisa disingkat menjadi~9
.Dari sini, lantai-membagi dengan
/-3
memberikan potongan 3 dengan titik awal yang tepatUntuk mendapatkan hasil yang diinginkan, kita sekarang hanya perlu memetakan
0->5, 1->5, 2->2, 1->1
, yang kita lakukan dengan pemilihan string'5521'[_]
.Sekarang, kita juga membutuhkan angka yang diakhiri dengan 11 hingga 15 untuk selalu memberi
5
. Kami pertama-tama melakukan ini dengan mendeteksi apakah kemudian puluhan digit1
. Mengambiln/10
untuk menghapus digit terakhir, kami kemudian menerapkan%~9
seperti sebelumnya untuk mendapatkan hasilnyauntuk masing-masing digit akhir. Angka 1 yang ingin kita deteksi dipetakan ke nilai ekstrem
-9
. Pembagian lantai dengan-9
mengubahnya menjadi 1 dan yang lainnya menjadi 0.Akhirnya, kami membuat indikator ini
1
selalu memberikan output 5. Hal ini dilakukan dengan menggeser-bit hasil yangn%~9/-3
benar oleh indikator. Hasil0,1,2,3
selalu bit-shift ke kanan ke 0 atau 1, yang memberikan output 5 seperti yang diinginkan.sumber
Python 2 , 45 byte
Cobalah online!
sumber
(s+'5'*10+s*9)
110 karakter?Perl 5 , 26 byte
25 byte kode +
-p
bendera.Cobalah online!
Untuk satu byte lagi, ada
$_=/(?<!1)[1-4]$/?2-/1$/:5
.Penjelasan: (pada versi 27 byte; angka 26 cukup simetris)
Baik "tunggal" dan "sedikit" diakhiri dengan "bukan angka 1 diikuti dengan angka dari 1 hingga 4" (diuji dengan
(?<!1)[1-4]$/
). Dalam kasus tersebut, hasilnya adalah 2, minus 1 jika angka berakhir dengan 1 (2-/1$/
). Kalau tidak, hasilnya jika 5.sumber
JavaScript (ES6),
5349484039383737 byteCobalah
sumber
1[1-4]
bisa1.
dan/1$/.test(s)
bisa+s%10==1
. Jangan lupakan unary+
!+
sama sekali,s%10
harus mengonversis
ke nomor.n%10
->n%5
menyimpan byteJelly ,
1918 byteTautan monadik yang mengambil dan mengembalikan bilangan bulat non-negatif.
Cobalah online! atau lihat ketiga grup dari 0 hingga 1000 inklusif dalam test suite ini .
Bagaimana?
sumber
05AB1E ,
3819 byteMenggunakan trik indeks dari jawaban python Rod
Cobalah online!
Penjelasan
sumber
PHP> = 7.1, 44 Bytes
Versi Online
sumber
<?=$argn[-2]!=1&($m=($argn+9)%10)<4?2-!$m:5;
.Majelis MCxxxx , 123 Bytes
catatan:
TiO tidak mendukung bahasa ini, yang digunakan dalam game Zachtronics, Shenzhen I / O , jadi tidak ada tautan untuk menguji ini.
Penjelasan:
Ini adalah fungsi yang mengambil input melalui port XBus x0, dan output melalui port x1. Ini terlalu lama untuk dieksekusi pada MC4000, tetapi cocok dengan baik ke dalam memori MC6000. Port XBus, bagi mereka yang tidak terbiasa, memungkinkan pengiriman paket data digital diskrit.
Sepotong informasi yang dapat membantu dalam membaca ini: dalam perakitan MCxxxx, instruksi tes menetapkan bendera yang menunjukkan cabang mana yang harus diambil. Baris yang dimulai dengan
+
hanya dieksekusi jika tes terbaru dikembalikan benar, dan garis yang dimulai dengan-
hanya dieksekusi jika tes itu salah.Baris demi baris:
Catatan tentang penilaian: Perakitan MCxxxx tidak memiliki fungsi per se, tapi ini sedekat fungsi yang bisa Anda dapatkan - ini adalah program yang cocok dalam satu simpul eksekusi, mengambil input melalui satu port dan output melalui yang lain. Sebagai hasilnya, saya telah mencetak ini seperti fungsi (yaitu tanpa menghitung byte yang diperlukan untuk membuat file emulator MCxxxx yang valid).
sumber
Retina ,
2521 byteCobalah online! -4 byte terima kasih kepada Neil.
sumber
!`.$
untuk mengekstrak digit terakhir. Cobalah online!Haskell ,
6258 byteCobalah online!
Penjelasan
Ini membangun string berikut:
5122255555555555555551222555555122255555512225555551222555555122255555512225555551222555555122255555 ...
Yang merupakan tabel di mana sel
n
berisi jawaban untuknth
nomor tersebut. Tabel hanya benar untuk 100 elemen pertama, karenanyamod
.sumber
f n|s<-"5122255555"=(s++('5'<$[0..9])++cycle s)!!mod n 100
Scala, 110 byte
sumber
Turtlèd, 35 byte
Cobalah online!
Fungsi ini mensyaratkan bahwa input dimulai dengan>, yang saya kira tidak masalah karena python2 menggunakan input semi secara teratur, dan itu membutuhkan tanda kutip.
Penjelasan:
sumber
>
melayani tujuan dalam Turtled atau itu karakter sewenang-wenang yang telah Anda tambahkan ke input?