Tujuan Anda adalah untuk menentukan apakah angka dapat dibagi oleh 3 tanpa menggunakan persyaratan. Masukan akan berupa angka 8 bit yang tidak ditandatangani dari 0 hingga 255. Kreativitas didorong!
Anda HANYA diizinkan untuk menggunakan
Kesetaraan / Ketimpangan (
==
,!=
,>
,<
,>=
,<=
)Aritmatika (
+
,-
,x
)Operator Logis (
!
bukan,&&
dan,||
atau)Bitwise Operator (
~
tidak,&
dan,|
atau,^
xor,<<
,>>
,>>>
aritmatika dan logis kiri dan pergeseran kanan)Konstanta (akan lebih baik jika Anda menyimpan ini kecil)
Tugas variabel
Keluaran 0
jika salah, 1
jika benar.
Aturan golf-atom standar berlaku. Jika Anda memiliki pertanyaan, silakan tinggalkan di komentar. Contoh metode di sini . Token adalah salah satu dari konstanta dan variabel tidak termasuk di atas.
Jawaban:
C - 2 token
Tampaknya bekerja hingga 2 31 -1.
Kredit untuk
zalgo("nhahtdh")
untuk ide terbalik multiplikatif.sumber
<=
kerjanya, dan ingat bahwa 0xAAAAAAAB diambil menjadiunsigned int
tipe, sehingga hasil perkalian tidak ditandatangani.Python,
32 tokenSolusi brute force, tetapi berhasil.
Terima kasih kepada Howard untuk pengurangan 1 token.
sumber
0x9......>>x&1
.C -
54 (?) TokenBerfungsi untuk nomor 32-bit yang tidak ditandatangani .
Kode ini menggunakan modulo 2 32 invers multiplicative dari pembagi untuk mengubah operasi divisi menjadi operasi multiplikasi.
Edit
Solusi saya (diposting 2 menit setelahnya) memiliki semangat yang sama dengan solusi aditsu. Kredit kepadanya untuk penggunaan
==
yang meningkatkan solusi saya dengan 1 token.Referensi
sumber
Bull
: PC - 15 (?) Token
Sejak 4 ≡ 1 (mod 3), kami memiliki 4 n ≡ 1 (mod 3). Aturan penjumlahan digit tidak terbatas pada penjumlahan angka, tetapi juga memungkinkan kita untuk secara acak memecah angka menjadi urutan angka dan menjumlahkan semuanya sambil mempertahankan kesesuaian.
Contoh dalam basis 10, pembagi = 9:
1234 ≡ 12 + 34 ≡ 1 + 2 + 3 + 4 ≡ 123 + 4 ≡ 1 (mod 9)
Semua pernyataan dalam program memanfaatkan properti ini. Ini sebenarnya dapat disederhanakan menjadi loop yang menjalankan pernyataan
n = (n & 0x3) + (n >> 2);
sampain < 4
, karena pernyataan hanya memecah angka di basis-4 pada digit paling tidak signifikan dan menambahkan 2 bagian ke atas.sumber
n = (n & 0x3) + (n >> 2);
hasilnya dikurangi menjadi 3 bit dan pengulangan menyebabkannya tetap hanya 2 bit stackoverflow.com/a/3421654/995714Python (2 token?)
Atau
Atau
sumber
JavaScript - 3 token
Ini menyalahgunakan fakta bahwa menggunakan operator bitwise pada angka memotongnya menjadi integer dalam JavaScript.
sumber
=
,*
,|
,==
C - 4 token
Bekerja hingga 383.
Versi sebelumnya (konstanta yang lebih besar):
Berfungsi hingga 1535
sumber
bash - ???
Tidak yakin bagaimana cara mencetak ini.
misalnya
sumber
Befunge 93 - 5 token
Divisi tetap dihapus.
Dapatkan input, terus kurangi 3 hingga lebih kecil dari 0, arahkan pointer ke atas ('|'), lalu tambahkan 3. Jika nilainya 0 maka pointer bergerak ke kanan (" 1. @" menghasilkan '1') yang lain bergerak ke kiri ("@. " menampilkan '0'). '@' mengakhiri program.
sumber
Gelombang - 7 Token
kupikir
Mengembalikan
1
jika nomor yang diberikan (seperti stdin) dapat dibagi tiga.sumber
Ruby, 6 (?) Token
Saya benar-benar tidak yakin bagaimana cara menghitung token. OP, dapatkah Anda mencetak saya?
Saya pikir itu 6 ...
1
,0
,0
,*
,255
,x
Perhatikan bahwa
*
ini bukan perkalian bilangan bulat.sumber
Python 0
Saya memposting eariler tetapi saya menggunakan conditional. Ini untuk menggunakan tanpa syarat dan tidak ada token, hanya kata kunci
menggunakan trik yang kelipatan 3s memiliki angka yang menambah 3
Sunting: Menghapus lambda yang tidak perlu
Sunting: Lebih lanjut golf (117 karakter) masih belum ada token
Membunuh akses langsung untuk getitem bagus python Lebih lama di 132 char
http://www.codeskulptor.org/#user34_uUl7SwOBJb_0.py
sumber
[]
tidak diizinkan.only
.Python - 25 token
Untuk memulai, saya punya solusi panjang yang merupakan implementasi dari salah satu jawaban di tautan di posting pertama saya.
n
adalah input.or
setara dengan||
.sumber
JavaScript - 3 Token
Uji di konsol browser Anda:
sumber
JavaScript
tidak yakin tentang token #
function mod3 (i) { return {'undefined':'100','0':'0'}[[0][i]][i.toString (3).split('').pop ()]}
atau jika output untuk 0 diizinkan menjadi 1;
function mod3 (i) { return '100'[i.toString (3).split('').pop ()]}
sumber
Tcl , 83 byte
Cobalah online!
sumber
proc T n {set n [expr [join [split [expr [join [split $n ""] +]] ""] +]];expr {$n in {0 3 6 9}}}
Cobalah online!proc T n {expr {[expr [join [split [expr [join [split $n ""] +]] ""] +]] in {0 3 6 9}}}
Cobalah online!