Diberi nomor menentukan apakah itu nomor lipat.
Angka lipat adalah angka sedemikian rupa sehingga jika Anda mengambilnya representasi biner dan "melipatnya" menjadi dua, yaitu mengambil hasil perkalian XNOR dari bagian pertama dari angka dan bagian kedua dengan angka-angka secara terbalik, Anda akan mendapatkan nol.
Jika angka tersebut memiliki angka ganjil dalam biner, digit tengahnya harus 1 dan diabaikan saat dilipat.
Karena itu mungkin agak membingungkan saya akan memberikan beberapa contoh:
178
Representasi biner dari 178 adalah
10110010
Untuk melipat ini kita pertama membaginya menjadi dua
1011 0010
Kami membalikkan babak kedua
1011
0100
Dan kami XNOR dua bagian:
0000
Ini nol jadi ini adalah angka lipat.
1644
Representasi biner 1644 adalah
11001101100
Untuk melipat ini kita pertama membaginya menjadi dua
11001 1 01100
Bit tengah adalah 1 jadi kami membuangnya.
11001 01100
Kami membalikkan babak kedua
11001
00110
Dan kami XNOR dua bagian:
00000
Ini nol jadi ini adalah angka lipat.
4254
Representasi biner dari 4254 adalah
1000010011110
Untuk melipat ini kita pertama membaginya menjadi dua
100001 0 011110
Bit tengah adalah 0 jadi ini bukan angka lipat.
Tugas
Tugas Anda adalah mengambil angka positif dan mengembalikan kebenaran jika angka itu lipat dan palsu jika bukan. Ini adalah kode golf jadi cobalah untuk menjaga hitungan byte tetap rendah.
Uji Kasus
Berikut adalah 99 nomor lipat pertama:
[1, 2, 6, 10, 12, 22, 28, 38, 42, 52, 56, 78, 90, 108, 120, 142, 150, 170, 178, 204, 212, 232, 240, 286, 310, 346, 370, 412, 436, 472, 496, 542, 558, 598, 614, 666, 682, 722, 738, 796, 812, 852, 868, 920, 936, 976, 992, 1086, 1134, 1206, 1254, 1338, 1386, 1458, 1506, 1596, 1644, 1716, 1764, 1848, 1896, 1968, 2016, 2110, 2142, 2222, 2254, 2358, 2390, 2470, 2502, 2618, 2650, 2730, 2762, 2866, 2898, 2978, 3010, 3132, 3164, 3244, 3276, 3380, 3412, 3492, 3524, 3640, 3672, 3752, 3784, 3888, 3920, 4000, 4032, 4222, 4318, 4462, 4558]
0
, jadi tidak. (Mungkin patut memiliki contoh ketiga yang bekerja seperti ini.) Sama berlaku untuk 18.Jawaban:
Jelly , 9 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
05AB1E ,
1312 byteKode:
Menggunakan pengkodean CP-1252 . Cobalah online!
Penjelasan:
Pertama, kami mengonversi angka menjadi biner menggunakan
b
. 1644 menjadi 11001101100 . Kami membagi ini menjadi dua bagian dengan2ä
. Misalnya, 11001101100 akan menjadi:Jika ada jumlah bit yang tidak merata, bagian pertama akan menerima bit tambahan. Kami
R
membalik string terakhir dan menambahkan nol menggunakan0¸«
. Alasan untuk ini adalah hanya memberikan hasil yang benar ketika bit tengah adalah 1 ( 1 XOR 0 = 1 dan 0 XOR 0 = 0 ). Jika tidak ada bit tengah, 05AB1E hanya akan mengabaikan bit terakhir (nol yang ditambahkan):Hal terakhir yang perlu kita lakukan adalah melakukan XOR elemen-bijaksana dan mengambil produk dari hasilnya. Jika ada satu elemen terlalu banyak, program hanya akan meninggalkan elemen terakhir (
[1, 0, 0] XOR [0, 1] = [1, 1]
) Misalnya:Menjadi:
Dan produk dari itu adalah 1 , yang benar.
sumber
s
diperlukan.bÐg;ô
adalah sejauh yang saya dapatkan sebelum menyegarkan dan melihat Anda berhasil. Jawaban yang bagus, membantu saya belajar!Java 7,
152 145 142 138134 byteLoops di atas tali seperti itu untuk palindrome, mencari nol. Terus melacak dengan mengalikan berulang kali, jadi yang harus Anda lakukan adalah memastikan bahwa itu bukan nol pada akhirnya.
Tanpa bilah gulir:
sumber
byte[]b=(a+"").getBytes();
lebih pendek darichar[]b=a.toString(a,2).toCharArray();
dan tampaknya masih berfungsi (-12 byte).getBytes
mungkin masih bisa digunakan pada char []. Terima kasih :)z
sebagai int (0
untuk falsy, yang lainnya untuk truthy) - akan menghemat beberapa byte.JavaScript (ES6),
615752 byteMenghitung secara rekursif:
di mana
N
pangkat bit tertinggi ditetapkan dalam input.Jika input memiliki jumlah bit ganjil, bit tengah XOR'ed dengan undefined (nilai dikembalikan oleh
pop()
pada array kosong), yang memungkinkannya tidak berubah. Jadi,0
bit tengah membersihkan output dan1
bit tengah tidak mengubah hasil operasi lain - yang konsisten dengan definisi tantangan nomor lipat.sumber
Python 2, 57 byte
Keluaran melalui kode keluar : kesalahan untuk Falsey, dan tidak ada kesalahan untuk Truthy.
Mengubah input menjadi biner. Cek apakah karakter pertama dan terakhir tidak sama, simpan dan ulangi ini setelah menghapus karakter tersebut.
Perbandingan
s[-1]==s[0]<_
memberikan kesalahan jika karakter pertama dan terakhir tidak sama dengan mencoba mengevaluasi variabel yang belum ditetapkan namanya_
. Jika mereka sama, rantai ketidaksetaraan akan mengalami hubungan pendek. Ketika kita sampai ke elemen tengah1
,while
loop diakhiri dengan huruf besar-kecil sebagai OK.Saya menduga pendekatan aritmatika murni akan lebih pendek dengan rekursi seperti
f=lambda n,r=0:...f(n/2,2*r+~n%2)...
mengunyah digit biner dari ujungnya terbalik dan dibalik, dan mendeteksi kapann
danr
sama hingga pusat1
. Ada kehalusan meskipun dengan nol terkemuka dan pusat.sumber
Python 2,
94 79 7267 byteDisimpan 12 byte berkat @xnor
Menentukan fungsi yang tidak disebutkan namanya pada baris kedua.
Penjelasan (dengan beberapa spasi putih ditambahkan):
Coba di sini!
sumber
s==''or s=='1'
dapats in'1'
and
dapat aritmatika*
. Juga,f
diizinkan untuk tidak disebutkan namanya.Haskell,
898886 byteBekerja dengan menjumlahkan bitwise representasi bit dengan kebalikannya dan mengambil produk. Jika 1 atau 2, angkanya adalah angka lipat (1 jika ada bit yang terlipat, 2 jika ada bit aneh dan satu di tengah).
sumber
Python 2,
100999594 BytesIni terasa agak lama, tapi saya akan terus bekerja :) Mencetak
1
jika angkanya bisa dilipat,0
jika tidak.Uji di sini!
terima kasih kepada Wheat Wizard untuk save 1-byte :)
terima kasih kepada Rod untuk save 5-byte! :)
sumber
b-1
dengan~b
[1,a[b]>'0'][len(a)%2]
dengan(a[b]>=`len(a)%2`)
e=len(a)
untuk mengubahb=e/2
`e%2
`, menghemat 1 byte. Dan kemudian kedua jawaban python akan diikat c:> <> , 37 + 3 = 40 byte
Input diharapkan ada pada stack pada awal program, jadi +3 byte untuk
-v
flag.Cobalah online!
sumber
Jelly , 13 byte
TryItOnline
Atau ketentuan yang cocok hingga 4558
Bagaimana?
sumber
Perl, 46 byte
Termasuk +1 untuk
-p
Jalankan dengan nomor di STDIN
folding.pl
:Saya menganggapnya sebagai bug perl yang ini bahkan berfungsi. Internal
$_
seharusnya tidak mendapatkan pembaruan posisi pertandingan setelah diubah. Dalam program ini posisi pertandingan benar-benar bergerak melampaui akhir$_
sumber
perl -pe '$_=sprintf("%b",$_)=~/^(.*)1?(??{reverse$^N=~y%01%10%r})$/'
:: /Brachylog , 16 byte
Ini tidak berfungsi secara online ...
Membawa input melalui variabel input dan output melalui keberhasilan atau kegagalan. Ini sangat bergantung pada
z₂
, yang telah ada dalam bahasa tersebut sejak 30 April, tetapi kami lupa untuk memintanya menggunakan TIO sehingga untuk sementara ini ini hanya bekerja pada pemasangan lokal bahasa tersebut. Apa pun itu, itu mungkin pendekatan yang terlalu naif.Brachylog (di TIO), 19 byte
Cobalah online!
lᵛ↖Lz
secara fungsional setara denganz₂
(jika Anda tidak menggunakan variabel L di tempat lain), tetapi juga tiga byte lebih lama.sumber
Python 2,
76 7169 byte-5 byte terima kasih kepada @Dennis (
''
hadir'1'
, jadi gantiin('','1')
denganin'1'
)-2 byte terima kasih kepada @xnor (gunakan multiplikasi,
(...)*
sebagai penggantiand
)Ideone
Fungsi rekursif, pada panggilan pertama
n
adalah angka sehingga mengevaluasi sebagai kurang dari string kosong, denganif n<''
, dan fungsi dipanggil lagi tetapi dengann
dilemparkan ke string biner; ekornya adalah string kosong (bahkan bit-panjang) atau bit tengah, yang mengembalikan true untuk kosong atau a'1'
; pada jalan turun itu menguji bit luar untuk ketidaksetaraan (setara dengan XOR) dan berulang pada bit dalamn[1:-1]
,.sumber
n in'1'
berhasil.''
hadir'blah'
, tapi ya itu :)and
dapat aritmatika*
.Python 2, 63 byte
Cetakan
True
atauFalse
. Mengambil representasi biners
dan berulang kali menghapus karakter pertama dan terakhir selama mereka tidak setara. Cek apakah yang tersisa adalah string kosong atau pusat1
. Hal ini dilakukan dengan mengkonversi''
ke'1'
dan memeriksa jika hasilnya sama'1'
, yang juga menghindari kesalahan indeks pada string kosong.sumber
PowerShell v2 +, 143 byte
Dua pendekatan yang mungkin, keduanya jumlah byte yang sama.
Metode 1:
Dibutuhkan input
$n
, jika itu adalah-eq
untuk1
(kasus khusus untuk algoritma ini), tambahkan itu. Tetapkan$o
utput menjadi1
(yaitu, asumsikan benar), lalu loop dari0
ke titik tengah nomor input yang telah[convert]
diedit ke biner. Perhatikan-!($b%2)
untuk menghitung angka biner panjang ganjil.Setiap iterasi, kami membandingkan digit saat ini
$n[$_]
dengan digit yang sama panjang dari ujung$n[$b-$_]
, dan mengalikan hasil Boolean menjadi$o
(pada dasarnya melakukan-and
semua itu). Setelah loop selesai, kita perlu memperhitungkan digit biner tengah, itulah pseudo-ternary di akhir (array diindeks via$b%2
). Itu1
atau0
ditinggalkan di pipa, dan output tersirat.Metode 2:
Mengambil input dan melakukan proses yang sama ke
[convert]
nomor ke biner. Lalu kita berada dalam satufor
lingkaran selama.length
string biner adalah-g
reatert
han2
. Ketika kita berada di loop, jika digit pertama$n[0]
dan terakhir$n[-1]
adalah-n
ote
qual, potong dua digit dari$n
dan simpan kembali$n
. Kalau tidak, output0
danexit
. Begitu kita keluar dari loop, kita juga harus (array1
,1,0
,0,1
,1,1
, atau0,0
), atau string biner untuk dua10
, atau 311
. Jadi, kita perlu menguji dua kemungkinan itu. Untuk yang pertama, kami-join
$n
bersama-sama dengan+
dan mengevaluasi hasil dan menguji apakah itu1
(ini berlaku untuk array1
,,1,0
dan0,1
, tetapi$false
untuk array0,0
dan1,1
atau string10
atau11
). Setengah lainnya dari-or
pengujian$n
adalah apakah-eq
ual to10
(yaitu, input2
). Boolean itu ditinggalkan di jalur pipa, dan hasilnya tersirat.sumber
CJam , 13 byte
Cobalah online! atau buat daftar nomor lipat hingga nomor yang diberikan.
sumber
MATL , 16 byte
Truthy adalah array dengan semua yang ada. Periksa kriteria kebenaran / kepalsuan di sini .
Cobalah online! Atau Verifikasi 20 kasus uji pertama .
Penjelasan
Mari kita gunakan input
1644
sebagai contoh.sumber
PHP, 101 Bytes
atau dengan log
108 Bytes dengan array
Nilai sebenarnya <10000
sumber
Julia , 66 byte
Golf pertamaku! bekerja dengan cara yang sama dengan solusi Python dengan panjang yang sama, perbedaan kecil karena bahasa (saya memang membuatnya sendiri, meskipun ...).
Penjelasan:
sumber
C,
223201189194178 BytesAlgoritma brute force. Mari kita lihat sejauh mana golf itu bisa.
Perbaikan bug pengaturan penyiapan yang lebih baik ...
sumber
MATL , 13 byte
Truthy adalah array dengan semua yang ada. Periksa kriteria kebenaran / kepalsuan di sini .
Cobalah online!Atau verifikasi 20 kasus uji pertama .
Penjelasan
Menggunakan input
1644
sebagai contoh:sumber
JavaScript, 71 byte
Menentukan fungsi anonim.
Metode ini mungkin bukan yang terpendek, tetapi sejauh yang saya tahu, ini unik Itu menambahkan angka dalam biner untuk dirinya sendiri terbalik, memperlakukan mereka sebagai desimal, kemudian memeriksa apakah hasilnya valid menggunakan regex.
sumber
Retina, 92 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online
Konversikan ke unary. Ubah itu menjadi biner. Potong jumlahnya menjadi dua dan lepaskan tengah
1
jika ada. Membalik babak pertama. Ganti satu dan nol. Cocokkan jika kedua bagiannya sama.sumber
Retina,
717060 byteSaya mungkin masih harus banyak belajar tentang Retina (misalnya regex rekursif?). Penjelasan: Langkah 1 mengkonversi dari desimal ke unary. Langkah 2 mengkonversi dari unary ke pseudo-binary. Langkah 3 menghapus digit dari kedua ujungnya selama tidak cocok. Langkah empat cocok dengan final central 1 opsional jika perlu. Sunting: Disimpan 1 byte berkat @ mbomb007. Disimpan 10 byte dengan meningkatkan konversi unary ke binary saya.
sumber
.*
atau.+
.Python 2,
6159 byteMenyimpan dua byte untuk mengubah shift menjadi multiplikasi
Pengembalian
0
untuk nomor lipat dan apa pun untuk non-lipat. Menggunakan pendekatan bit-twiddling.sumber
C,
6563 byteDua byte untuk mengubah shift menjadi multiplikasi
Spasi sudah dikecualikan dari bytecount, menghasilkan 0 untuk nomor lipat dan apa pun untuk non-lipat. Menggunakan pendekatan bit-twiddling.
sumber
k, 77 byte
melalui penjelasan, terjemahan ke
q
sumber