Untuk sementara waktu sekarang, saya telah mengalami masalah ketika menghitung dengan jari saya, khususnya, bahwa saya hanya bisa menghitung sampai sepuluh. Solusi saya untuk masalah itu adalah menghitung dalam biner pada jari-jari saya, mengacungkan ibu jari saya untuk satu, jari telunjuk saya untuk dua, baik ibu jari dan telunjuk untuk tiga, dll. Namun, kami mengalami sedikit masalah ketika kami sampai ke angka empat. Secara khusus, itu mengharuskan kita untuk mengangkat jari tengah kita, yang menghasilkan gerakan yang agak disayangkan, yang biasanya tidak diterima di masyarakat. Jenis angka ini adalah angka kasar . Kita sampai pada angka kasar berikutnya di 36, ketika kita mengangkat ibu jari di tangan kedua dan jari tengah tangan pertama kita. Definisi dari sejumlah kasar adalah nomor yang, di bawah sistem ini penghitungan, hasil dalam diri kita memasang hanyajari tengah tangan apa pun. Setelah kami melewati 1023 (jumlah maksimum yang dapat dicapai pada satu orang, dengan masing-masing dua tangan lima jari), anggaplah kami melanjutkan dengan tangan ketiga, dengan tambahan tangan yang ditambahkan sesuai kebutuhan.
Tugas Anda:
Tulis program atau fungsi yang menerima input dan mengeluarkan nilai kebenaran / kepalsuan berdasarkan apakah input tersebut angka yang kasar.
Memasukkan:
Integer antara 0 dan 10 9 (inklusif).
Keluaran:
Nilai kebenaran / kepalsuan yang menunjukkan apakah input adalah angka kasar.
Kasus uji:
Input: Output:
0 ---> falsy
3 ---> falsy
4 ---> truthy
25 ---> falsy
36 ---> truthy
127 ---> falsy
131 ---> truthy
Mencetak:
Ini adalah kode-golf , sehingga skor terendah dalam byte menang.
sumber
assume we continue with a third hand
, Ketika berbicara tentang bersikap kasar, kerja tim membuat mimpi itu berhasil.Jawaban:
APL (dzaima / APL) , 5 byte
Cobalah online!
4∊
adalah 4 anggota dari32⊤
ke-base-32?sumber
Regex (ECMAScript), 37 byte
Input dalam bentuk unary, dengan panjang string
x
s.^((?=(x+)(\2{31}x*))\3)*(x{32})*x{4}$
Cobalah online!
sumber
JavaScript (SpiderMonkey) , 23 byte
Cobalah online!
Ini adalah solusi sepele, Anda hanya ingin mengonversi ke basis 32 dan memeriksa apakah ada 4 di dalamnya.
JavaScript (SpiderMonkey) , 26 byte
Cobalah online!
Sangat menarik bahwa
/4/.test(...)
biaya satu byte lebih banyak daripada....match(4)
.sumber
Japt , 5 byte
Cobalah online!
Penjelasan
sumber
Ruby,
3619 byteCobalah online!
Disimpan 17 byte dengan metode @tsh .
sumber
100010011111
00100
.->n{n.to_s(32)=~/4/}
?10001
, yang kedua00111
, dan yang ketiga11
? Tak satu pun dari mereka yang hanya memiliki jari tengahAPL + WIN, 10 byte
Meminta input integer
Memperhatikan enam tangan diperlukan untuk mewakili 10 ^ 9 konversi ke vektor 6 elemen dari representasi 32 dasar dan memeriksa apakah 4 ada di elemen apa pun.
sumber
Perl 6 , 16 byte
Cobalah online!
Cek apakah ada
4
representasi di nomor 32 di pangkalan. Mengembalikan Nil sebagai salah atau Cocok yang mengandung a4
.Anda dapat membuktikan ini dengan fakta bahwa sehingga setiap digit adalah keadaan masing-masing tangan.25=32
sumber
Python 2 ,
3432 byteCobalah online!
2 byte berkat tsh
sumber
Kode Mesin x86, 17 byte
Byte di atas mendefinisikan fungsi yang mengambil angka sebagai input dalam
EAX
register, dan mengembalikan hasilnya sebagai nilai Boolean dalamEAX
register (EAX
== 0 jika input bukan angka kasar;!EAX
= 0 jika input adalah angka kasar ).Dalam mnemonik perakitan yang dapat dibaca manusia:
Cobalah online!
sumber
idiv
. Saya tidak melihat peningkatan tambahan untuk ini. Tetapi lihat jawaban saya : 14 byte untuk loop shift yang menggunakan MOV / AND / SUB / JZ untuk memeriksa 5 bit rendah untuk kekasaran.Julia 1.0 , 25 byte
Cobalah online!
Julia 1.0 , 26 byte
Alternatif yaitu 1 karakter lebih pendek, tetapi 1 byte lebih lama, terlalu buruk yang
∈
membutuhkan 3 byte di unicode.Cobalah online!
sumber
n->n%32...
untuk jawaban pertama Anda lebih pendek 2 byte?05AB1E , 5 byte
Port of @ Adám 's APL (dzaima / APL) answer .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
₆
adalah 36, bukan 32.Catholicon , 4 byte
Mengambil nomor sebagai string basis-256.
Cobalah online!
Suite uji
sumber
<<
dan>>
dan memungkinkan angka-angka yang lebih besar dari 255 di dalamnya, seperti yang ditunjukkan dalam suite tes.C # (Visual C # Interactive Compiler) , 31 byte
Keluaran dengan melemparkan pengecualian. Cara Anda mengonversi satu angka dari desimal ke basis lain adalah dengan membagi angka desimal dengan basis itu berulang kali dan mengambil sisanya sebagai digit. Itulah yang kami lakukan, dan kami memeriksa apakah ada angka yang memiliki nilai 4 di basis-32;
Cobalah online!
sumber
n>31
->n>0
J , 12 byte
Cobalah online!
sumber
R ,
5048 byteCobalah online!
Menggunakan pendekatan berbasis matriks yang rapi sekarang (milik @Giueseppe). Ini menghasilkan matriks bit 5x7, mengubahnya menjadi serangkaian bilangan bulat 32, dan memeriksa 4s.
sumber
intToBits
tapi kemudian kita dapat bekerja denganints
bukannyaraw
yang berakhir menyimpan byte - lihat misalnya denganintToBits
4
dalam nomor basis-32 adalah, oh, 29 byte .Python 3 , 43 byte
Periksa setiap potongan 5-bit untuk melihat apakah itu kasar (sama dengan 4).
Cobalah online!
sumber
C (gcc) , 34 byte
Cobalah online!
sumber
Arang , 6 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Keluaran
-
berdasarkan seberapa kasar angkanya. Penjelasan:Saya menggunakan konversi basis string untuk menghindari keharusan memisahkan literal angka untuk
32
dan4
.sumber
Tidy , 18 byte
Cobalah online! Memeriksa apakah
4
merupakan elemenbase(32,x)
(konversi basis).sumber
Haskell , 31 byte
Cobalah online!
sumber
Cubix , 26 byte
Cobalah online!
Bungkus ke sebuah kubus dengan panjang tepi 3 sebagai berikut
Lihat saja
Implementasi yang cukup mendasar, tanpa semua pengalihan yang dilakukannya:
IS
memulai program dengan menekan input dan 32 ke stack%4-!
mendapatkan sisanya dan memeriksa apakah 4 dengan pengurangan1O@
Output 1 jika 4 dan berhenti;;,
bersihkan tumpukan dan lakukan pembagian integerp;?
bersihkan bagian bawah tumpukan dan periksa hasil div untuk 0O@
jika div menghasilkan output nol dan berhentis
tukar bagian atas tumpukan dan mulai kembali pada langkah 2 di atassumber
MATL , 8 byte
Cobalah online!
sumber
G
(tidak yakin mengapa saya memasukkannya di tempat pertama) tapi itu hanya satu byte (terima kasih untuk melihat itu!). Mengubah32YA52
ke32_YA4
adalah jumlah byte yang sama bukan?'32_YA4'n'32YA52'n-
Batch,
7745 byteBerdasarkan hacks twiddling bit ini . Penjelasan: Hanya 6 tangan yang perlu diperiksa karena jangkauan terbatas (30 bit) dari input yang harus didukung. Angka ajaib
m
setara dengan111111
di basis 32, sehingga operasi pertama matikan bit kasar di nomor input. Kemudian tetap menemukan yang mana dari 6 tangan sekarang nol.sumber
kode mesin x86, 14 byte
(kode mesin yang sama berfungsi dalam 16-bit, 32-bit, dan 64-bit. Dalam mode 16-bit, ia menggunakan AX dan DI alih-alih EAX dan EDI dalam mode 32 dan 64-bit.)
Algoritma: periksa 5 bit dengan rendah
x & 31 == 4
, lalu geser ke kanan sebanyak 5 bit, dan ulangi jika hasil shiftnya bukan nol.Callable from C dengan
char isrude(unsigned n);
sesuai dengan konvensi pemanggilan System V x86-64. 0 adalah benar, bukan-0 adalah palsu (ini asm, bukan C 1 ).Ini mengambil keuntungan dari
op al, imm8
pengkodean formulir pendek untuk AND dan SUB. Saya bisa digunakanXOR al,4
untuk menghasilkan 0 pada kesetaraan, tetapi SUB lebih cepat karena dapat makro-sekering dengan JZ menjadi satu sub-dan-cabang uop pada keluarga Sandybridge.Fakta menyenangkan: menggunakan flag-hasil pergeseran oleh lebih dari 1 akan lambat pada keluarga P6 (kios front-end sampai shift berhenti), tapi itu bagus.
Catatan Kaki 1: Ini adalah fungsi bahasa assembly, dan x86 asm memiliki keduanya
jz
danjnz
, jadi sesuai meta saya dapat memilih salah satu dari keduanya. Saya tidak bermaksud ini untuk mencocokkan C kebenaran / kepalsuan.Itu kebetulan lebih nyaman untuk kembali dalam AL daripada EFLAGS, sehingga kita dapat menggambarkan fungsi ke kompiler C tanpa pembungkus, tetapi pilihan saya benar / salah tidak dibatasi dengan menggunakan penelepon C untuk mengujinya.
sumber
ES6,
313026 byteJangan ragu untuk mengatakan ide tentang cara mengurangi ini lebih jauh, jika ada.
sumber
test
, Anda sebenarnya dapat menyimpan dua byte dengan mencocokkannya4
dengan angka dan membiarkanmatch
mengubahnya menjadi string dan kemudian RegExp untuk Anda .Retina 0.8.2 , 31 byte
Cobalah online! Tautan termasuk kasus uji. Output nol kecuali angkanya tidak sopan. Bekerja dengan mengonversi input ke unary dan kemudian ke unary-encoded base 32 dan menghitung jumlah
4
s dalam hasilnya.sumber
Java 8,
4033 bytePort of @ Adám 's APL (dzaima / APL) answer .
Cobalah online.
Penjelasan:
sumber
> <> , 28 byte
Output 4 untuk nomor kasar melempar pengecualian untuk nomor tidak kasar.
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) ,
37 byte36 byte,29 byte-2 byte oleh Jonathan Frech
Cobalah online!
Solusi 31-byte:
Cobalah online!
sumber
...#...&
sering digunakan dalam Mathematica).[n]
pada akhirnya, hanya saja&
. Juga karena postingan memiliki riwayat edit, tidak apa-apa untuk meninggalkan entri sebelumnya, dan konvensi untuk skor lama adalah<s>40</s> <s>36</s>
Java 8,
282221 byteTerinspirasi oleh jawaban @ kevin-cruijssen . Hanya berfungsi untuk 2 tangan.
Cobalah online!
Penjelasan:
sumber