Tugas:
Diberikan input integer, cari tahu apakah itu adalah Nomor Cyclops atau tidak.
Berapa nomor Cyclops, Anda mungkin bertanya? Ya, itu nomor yang representasi binernya hanya ada 0
di tengah!
Kasus uji:
Input | Output | Binary | Explanation
--------------------------------------
0 | truthy | 0 | only one zero at "center"
1 | falsy | 1 | contains no zeroes
5 | truthy | 101 | only one zero at center
9 | falsy | 1001 | contains two zeroes (even though both are at the center)
10 | falsy | 1010 | contains two zeroes
27 | truthy | 11011 | only one zero at center
85 | falsy | 1010101 | contains three zeroes
101 | falsy | 1100101 | contains three zeroes
111 | falsy | 1101111 | only one zero, not at center
119 | truthy | 1110111 | only one zero at center
Memasukkan:
Jenis bilangan bulat atau setara. (
int
,long
,decimal
, Dll)Asumsikan bahwa jika mengevaluasi input menghasilkan integer overflow atau masalah lain yang tidak diinginkan, maka input tersebut tidak harus dievaluasi.
Keluaran:
Benar atau salah.
Keluaran kebenaran / kepalsuan harus memenuhi spesifikasi bahasa yang digunakan untuk kebenaran / kepalsuan. (mis. C memiliki
0
false, non-zero true)
Aturan Tantangan:
Input yang kurang dari 0 diasumsikan palsu dan dengan demikian tidak perlu dievaluasi.
Jika panjang representasi biner dari angka itu genap, maka angka itu tidak bisa menjadi angka Cyclops.
Aturan umum:
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang !.
Celah default dilarang.
Aturan standar berlaku untuk jawaban Anda dengan aturan I / O standar .
Ini tantangan Pemrograman & Golf Code saya yang pertama , jadi umpan balik tentang bagaimana saya harus meningkatkan akan sangat dihargai!
Jawaban:
Japt, 8 byte
Jalankan secara online
Penjelasan:
Idenya adalah untuk membagi string biner di
0
, yang akan menghasilkan dua item jika hanya ada satu0
. Kemudian kita melihat apakah item pertama cocok dengan item kedua untuk memastikan palindromik. Jika string biner berisi banyak0
s, maka pengurangan akan mengembalikan array multi-item dan itu akan gagal==1
kondisinya. Jika string biner memang mengandung satu0
, tetapi bukan palindromik,äè
akan kembali0
karenab
berisi0
kecocokana
.sumber
r¶
juga harus bekerja.¤
= convert to binary;q0
= berpisah pada 0s;äè
Saya tidak sepenuhnya yakin ..; dan bendera-N
mengubah daftar menjadiNaN
, tetapi pergi0
dan1
sama. Untukäè
bagian saya dapat melihat bahwa119
adalah[111,111]
setelah split, yangäè
berubah menjadi1
; dan85
adalah[1,1,1,1]
setelah split, yangäè
berubah menjadi[1,1,1]
. Bisakah Anda menjelaskan cara.ä("è")
kerjanya?NaN
falsey ada di Japt? (Yaitu jika Anda melakukan if-else dengan itu sebagai syarat apakah jika dieksekusi? "Keluaran kebenaran / palsu harus memenuhi spesifikasi bahasa yang digunakan untuk kebenaran / kepalsuan") Juga2
menghasilkan2
yang saya ragu adalah falsey (tetapi mungkin jika Japt seperti 05AB1E).0
dianggap benar ... namun, jika2
dikembalikan2
sebagai benar, maka pengajuan ini mungkin perlu dikerjakan ulang.Python 2 , 30 byte
Cobalah online!
Perhatikan bahwa itu
2*n^2*n+3
adalah bitwise xor dari2*n
dan2*n+3
, karena itulah operator Python yang diutamakan.sumber
lambda n:(2*n^2*n+3)**2-8*n-9
, dengan nilai balik0
untuk nomor cyclop?TRUE
untukn = -1
>1
.Kode Mesin x86, 17 byte
Byte di atas mendefinisikan fungsi yang menerima nilai input integer 32-bit (dalam
EDI
register untuk contoh ini, mengikuti konvensi pemanggilan System V yang umum, tetapi Anda benar-benar dapat memilih hampir semua register input yang Anda inginkan tanpa mempengaruhi ukuran hasil yang dihasilkan kode), dan mengembalikan hasil (dalamEAX
register) yang menunjukkan apakah nilai input adalah nomor Cyclops.Input diasumsikan bilangan bulat yang tidak ditandatangani, karena tantangannya menyatakan bahwa kita dapat mengabaikan nilai negatif.
Logika keputusan dipinjam dari jawaban Neil : karena nomor Cyclops memiliki bentuk , kita dapat menggunakan serangkaian operasi bit-twiddling untuk memeriksa memasukkan.n = ( 2k+ 1 ) ( 2k - 1- 1 )
Catatan: Nilai kembalinya adalah true / falsy, tetapi semantiknya terbalik, sehingga fungsinya akan mengembalikan falsy untuk nomor Cyclops. Saya mengklaim ini sah karena kode mesin tidak memiliki "spesifikasi untuk kebenaran / kepalsuan", yang merupakan persyaratan dalam pertanyaan. (Lihat di bawah untuk versi alternatif jika Anda pikir ini curang.)
Dalam mnemonik bahasa assembly, ini adalah:
Cobalah online!
Seperti yang dijanjikan, jika Anda pikir itu curang untuk membalikkan semantik kebenaran / kepalsuan bahkan dalam kode mesin di mana tidak ada standar atau konvensi yang sebenarnya, maka tambahkan tiga byte lagi, dengan total 21 byte :
Bagian pertama dari kode ini sama dengan yang asli (turun melalui
imul
instruksi). Inilea
hampir sama, tetapi alih-alih menambahkan konstanta 2, itu hanya menambahkan konstanta 1. Itu karenainc
instruksi berikut ini menambah nilai dalamEAX
register dengan 1 untuk mengatur flag. Jika bendera "nol" disetel,setz
instruksi akan ditetapkanAL
ke 1; jika tidak,AL
akan ditetapkan ke 0. Ini adalah cara standar bahwa kompiler C akan menghasilkan kode mesin untuk mengembalikan abool
.Mengubah konstanta yang ditambahkan dalam
lea
instruksi jelas tidak mengubah ukuran kode, daninc
instruksinya sangat kecil (hanya 1 byte), tetapisetz
instruksinya agak 3 kekalahan. Sayangnya, saya tidak bisa memikirkan cara penulisan yang lebih pendek.sumber
Regex (ECMAScript),
6058576058 byteInput adalah unary, sebagai panjang string s.n
x
PERINGATAN SPOILER : Untuk akar kuadrat, regex ini menggunakan varian dari algoritma multiplikasi umum, yang tidak jelas dan bisa menjadi teka-teki yang bermanfaat untuk Anda kerjakan sendiri. Untuk informasi lebih lanjut, lihat penjelasan untuk bentuk algoritma ini di Temukan nomor Rocco .
-2 byte dengan membolehkan penelusuran dalam pencarianz -1 byte berkat Grimy , dengan mencari dari yang terkecil hingga terbesar dan bukan sebaliknya +3 byte untuk menangani nol -2 byte dengan memindahkan tangkapan akar kuadrat di luar lookaheadz
z
Ini bekerja dengan menemukan , kekuatan kuadrat sempurna dari 2 di mana . Hanya kekuatan kuadrat sempurna terbesar 2 yang tidak melebihi dapat memenuhi ini, tetapi karena optimalisasi golf, regex mencoba semuanya dimulai dengan yang terkecil. Karena masing-masing sesuai dengan nomor cyclop, hanya yang terbesar yang dapat menghasilkan pertandingan.z n=2(n−z)+z√+1 n
^(x*)(?!(x(xx)+)\2*$)(x(x*))(?=(?=(\4*)\5+$)\4*$\6)x\1$|^$
Cobalah online!
sumber
^(1*)0\1$
cukup sederhana ?JavaScript (Node.js) , 20 byte
Cobalah online!
Mungkin ini benar, mungkin.
Terima kasih Grimy, 1 byte disimpan.
JavaScript (Node.js) , 32 byte
Cobalah online!
JavaScript (Node.js) , 34 byte
Cobalah online!
sumber
.test
not.match
Perl 6 , 23 byte
Cobalah online!
Solusi berbasis Regex
sumber
Japt ,
2519109 byteTerima kasih kepada @Shaggy untuk -1 byte
Cobalah online!
sumber
Mathematica (Bahasa Wolfram),
3231 byte1 byte disimpan berkat J42161217!
Cobalah online!
Fungsi murni mengambil integer sebagai input dan return
True
atauFalse
. Berdasarkan fakta (asyik untuk membuktikan!) Bahwa angkan
adalah Cyclops jika dan hanya jikan
ditambah akar kuadrat darin/2
plus2
membulatkan ke kekuatan ganjil 2. (Seseorang dapat menggantiFloor
dengan salah satuCeiling
atauRound
selama seseorang juga menggantikan+2
dengan+1
.) PengembalianTrue
input0
.sumber
Log2[#+Floor@Sqrt...
√()
bukannyaSqrt[]
Ruby , 24 byte
Cobalah online!
sumber
Japt, 8 byte
Terima kasih kepada Luis felipe de Jesus Munoz karena telah memperbaiki kiriman saya!
Cobalah secara Online!
Solusi berbasis regex lama, 15 byte
Mengembalikan 1 untuk true, 0 untuk false.
Cobalah secara Online!
sumber
==
operator!Jelly ,
87 byte-1 berkat Erik the Outgolfer (gunakan isPalindrome bawaan
ŒḂ
,, bukan⁼Ṛ$
)Tautan monadik yang menerima bilangan bulat yang menghasilkan
1
(kebenaran) atau0
(falsey).Cobalah online!
Bagaimana?
sumber
Bċ0⁼1ȧŒḂ
juga 8 byte),⁼Ṛ$
sama denganŒḂ
-1. Juga, Anda tidak perlu menangani angka negatif.ṚƑ
di tempatnya saat ini, jadi Anda mungkin ingin mengingatnya seperti itu (yang paling pentingƑ
).Haskell , 32 byte
Cobalah online!
sumber
Regex (ECMAScript),
5347 byte-6 byte berkat Deadcode dan Grimy
Cobalah online!
sumber
^((?=(x(x*?))(\3((x+)(?=\6$))+xx$))(?!\2{6})x\4)*$
( Coba online! )Brachylog , 8 byte
Ini adalah predikat yang berhasil jika inputnya adalah nomor Cyclops dan gagal jika inputnya bukan nomor Cyclops. Keberhasilan / kegagalan adalah konsep kebenaran / falsey yang paling mendasar di Brachylog.
Cobalah online! Atau, temukan semua keluaran yang benar hingga 10.000 .
Penjelasan
Ini hanya berhasil ketika diberi nomor Cyclops, karena:
D↔D
akan gagal; dalam apa yang berikut, kita dapat menganggap itu sebuah palindrom.×ᵐ≠
akan gagal.×ᵐ≠
akan gagal.×ᵐ≠
berhasil, dan keseluruhan predikat berhasil.sumber
Ruby ,
2724 byteKonversikan ke biner dan periksa dengan regex. Mengembalikan
0
jika benar,nil
jika salah.-3 byte berkat GB .
Cobalah online!
Untuk dua byte lebih, ada port langsung dari solusi Python:
sumber
05AB1E , 8 (atau 9) byte
Cobalah secara online atau verifikasi semua kasus uji .
Kembali
1
jika benar;0
atau bilangan bulat positif selain1
sebagai falsey. Di 05AB1E hanya1
benar dan yang lainnya falsey, tapi saya tidak yakin apakah ini adalah output yang diperbolehkan, atau apakah output harus dua nilai yang konsisten dan unik. Jika yang kedua, sebuah trailingΘ
dapat ditambahkan sehingga semua output selain1
menjadi0
:Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Pendekatan aritmatika akan 10 byte:
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
1
kebenaran dan semua angka lain sebagai kepalsuan dapat diterima untuk tantangan ini, karena bahasa lain (misalnya C dan TI-BASIC) memiliki definisi kebenaran / kepalsuan yang sama (0 / tidak nol untuk keduanya). Selama apa yang dianggap benar atau salah cocok dengan spesifikasi bahasa, maka itu adalah permainan yang adil.Excel,
9763 BytesMenghitung 2 angka:
Kemudian kurangi angka kedua dari yang pertama:
Dan bandingkan hasil ini dengan nomor aslinya
Metode lama
Mulai dengan Log-base-2 dari A1 dan bulatkan ke bawah dengan nomor genap terdekat, kemudian tambahkan 1.
Selanjutnya buat string sebanyak itu
"1"
s, dan ganti karakter tengah dengan a"0"
untuk membuat nomor Cyclops dengan panjang biner yang selalu ganjil, dan sama dengan atau 1 kurang dari panjang biner A1Kemudian, bandingkan dengan representasi Biner dari A1
sumber
R ,
3733 byteCobalah online!
R tidak memiliki bawaan untuk mengonversi ke biner, jadi saya cukup menggunakan salah satu rumus dari OEIS untuk menghitung daftar istilah dari urutan.
n<-0:x
menghasilkan daftar nilai awal yang murah hati.2*4^(n<-0:x^2)-2^n-1)
adalah rumus dari OEIS, dan kemudian memeriksa apakah input muncul dalam urutan itu menggunakan%in%
.-2 byte dengan tidak harus menangani input negatif. -2 byte dengan mengingat saya bisa berubah
<-
menjadi=
.sumber
C (gcc), 26 byte
Cobalah online!
Jawaban Port of Neil . Bergantung pada pemesanan operasi yang ditentukan implementasi.
C ++ (dentang), 38 byte
Cobalah online!
Tidak bisa menghilangkan tipe dalam C ++, tidak bisa menghilangkan kembalinya di dentang, jika tidak identik.
sumber
return
alih-alih eksploitasi nilai kembali akumulator implisit yang rapuh dan bergantung platform.C (gcc) ,
29 2827 byteDisimpan 1 byte berkat @ceilingcat
Port jawaban JS 21-byte oleh @tsh .
Cobalah online!
sumber
J ,
2219171514 byte-3 byte terima kasih kepada BolceBussiere!
-4 byte terima kasih kepada ngn!
-1 byte berkat Traws!
J , 14 byte
Cobalah online!
sumber
#=1++/
(#=1++/)@(*|.)@#:
1=1#.1-(*|.)@#:
1=1#.(*:|.)@#:
Jelly , 9 byte
Cobalah online!
sumber
Attache , 22 byte
Cobalah online!
Alternatif
27 byte:
{BitXor[2*_,2*_+3]^2=8*_+9}
27 byte:
{BitXor@@(2*_+0'3)^2=8*_+9}
27 byte:
{Palindromic@_∧1=0~_}@Bin
28 byte:
{BitXor[...2*_+0'3]^2=8*_+9}
28 byte:
{BitXor[…2*_+0'3]^2=8*_+9}
28 byte:
{Same@@Bisect@_∧1=0~_}@Bin
29 byte:
{_[#_/2|Floor]=0∧1=0~_}@Bin
30 byte:
Same@Bin@{_+2^Floor[Log2@_/2]}
30 byte:
{_[#_/2|Floor]=0and 1=0~_}@Bin
sumber
Retina 0.8.2 ,
3837 byteCobalah online! Tautan termasuk kasus uji. Sunting: Setelah klarifikasi, solusi sebelumnya tidak menangani nol dengan benar. Penjelasan:
Konversi dari desimal ke unary.
Konversi dari unary ke binary, menggunakan metode dari wiki Retina.
Periksa jumlah
1
s yang sama sebelum dan sesudah0
, atau string kosong (yang merupakan bagaimana konversi di atas menangani nol).sumber
Batch,
3937 bytesumber
Excel, 101
107byte-6 byte terima kasih kepada @Chronocidal.
Melakukan 3 pemeriksaan:
0
0
sumber
ISODD(LEN(DEC2BIN(A1)))
keISEVEN(LOG(A1,2))
Regex (ECMAScript),
65595758 byte+1 byte untuk menangani 0 dengan benar
Cobalah online!
sumber
VBA,
4136 BytesJalankan di jendela Immediate, dengan Deklarasi eksplisit dimatikan. Input adalah sel
A1
dari lembar aktif. Output Benar / Salah ke jendela langsung.Menggunakan logika yang sama dengan Jawaban Excel saya untuk menemukan nomor Cyclops dari jumlah bit yang sama (atau 1 bit lebih pendek jika ada nomor genap!) Dan kemudian membandingkannya dengan input.
Menghemat beberapa byte saat menghitung angka Cyclops dengan menguranginya ke dalam form
y = 2x^2 - x - 1
(di manax = n-1
untuk nomor Cyclops ke - n , ataux = 2^Int(Log([A1])/Log(4))
untuk menemukan nomor Cyclops terbesar dengan jumlah bit yang lebih sedikit atau sama) dan menyimpan x dalam variabel(-5 Bytes berkat Taylor Scott !)
sumber
[...]
notasi sebagai[(Log(A1,4)]
PHP , 74 byte
Cobalah online!
Benar-benar naif pendekatan non-matematika, hanya string.
Atau 60 byte berdasarkan algoritma @ Chronocidal di atas .
Cobalah online!
sumber
Haskell, 82 byte
Dan port solusi Python xnor:
Haskell, 47 byte
sumber