Tulis program / fungsi yang mengambil dua bilangan bulat dalam kisaran hingga inklusif, dan mengembalikan apakah bentuk biner dari angka-angka itu persis berbeda satu bit.
Sebagai contoh, dan memiliki bentuk biner dan , yang terpisah satu bit. Demikian pula, dan adalah dan , jadi mereka mengembalikan true.00000001
00000000
010011000
000011000
Namun , kode Anda harus asli , sehingga jika ada satu bit dalam program Anda dibalik, itu akan menimbulkan kesalahan. Misalnya, jika program Anda adalah byte tunggala
(01100001
), maka semua 8 program yang mungkin dimodifikasi:
á ! A q i e c `
harus melempar kesalahan. Pastikan Anda memodifikasi dengan byte (misalnya di á
sana sebenarnya mewakili byte , bukan karakter dua byte yang sebenarnya ).á
Kasus uji:
0,1 => Truthy
1,0 => Truthy
152,24 => Truthy
10,10 => Falsey
10,11 => Truthy
11,12 => Falsey
255,0 => Falsey
Aturan:
- Berikan kerangka pengujian yang dapat memverifikasi bahwa program Anda benar-benar murni, karena akan ada banyak program yang mungkin (jumlah byte * 8), atau bukti lengkap tentang keaslian.
- Harap pastikan program Anda berlaku sebelum Anda posting.
- Output harus benar-benar benar / salah (baik jalan baik-baik saja), atau dua nilai non-error yang berbeda
- Kesalahan dapat berupa runtime, compiler, interpreter dll.
+1
dari sebagian besar solusi terbaru saya! : \Jawaban:
Python 2 , 35 byte
Cobalah online!
Menggunakan kekuatan dari dua cek
n&-n==n
, menghilangkann==0
false positive.Sebagai referensi, ini adalah pasangan dari operator biner satu char yang terpisah satu sama lain, sehingga sulit digunakan:
Untungnya,
&
dan^
tidak ada di antara ini.Perhatikan juga yang
==
bisa menjadi<=
, dan+
bisa menjadi karakter komentar#
.Python 2 , 41 byte
Cobalah online!
Mengambil TFeld's
lambda a,b:bin(a^b).count('1')==1
dan menjadikannya asli dengan mengubah 1's ke+True
dan==
keis
. Terima kasih kepada Jo King untuk 1 byte.sumber
Python 2 ,
726750 byteCobalah online!
-5 byte, terima kasih kepada Jo King
Pengembalian
True
/False
untuk untuk kebenaran / falsey.Program ini pada dasarnya sama dengan
lambda a,b:bin(a^b).count('1')==1
, tetapi tanpa angka dan karakter lain yang berfungsi saat dibalik.Bekerja dengan memastikan bahwa hampir semuanya adalah fungsi bernama (yang semuanya cukup murni)
Tes murni pada akhirnya membalik bit tunggal (untuk setiap bit), dan mencoba fungsi pada input. Jika itu berhasil (benar atau tidak), variasi itu dicetak. Tidak ada program yang dicetak = fungsi asli.
sumber
Java 8,
68615645 byte-11 byte terima kasih kepada @EmbodimentOfIgnorance , ganti dengan konstan .
java.awt.Font.BOLD
-~(a^a)
Cobalah online.
Penjelasan:
Fungsi basis terpendek adalah:
Cobalah online.
Ini dimodifikasi sehingga tidak ada digit,,
=
atau salah satu+/*
operan di dalamnya untuk perhitungan numerik (jadi+
untuk rangkaian-string baik-baik saja):The
+""
dan.equals
yang untuk membandingkan denganString.equals(String)
bukanint==int
.CATATAN:
Integer.equals(int)
bisa digunakan di sini, tapi akan lebih byte, karena kedua.bitCount
danjava.awt.Font.BOLD
primitifint
bukanInteger
-objects, sehingga tambahannew Integer(...)
akan diperlukan untuk mengubah salah satu dari dua keInteger
-object, sebelum kita bisa menggunakan.equals
.sumber
java.awt.Font.BOLD
, tetapiObjects.equals
golf Anda bagus, terima kasih!Objects
adalah bagian darijava.util.
impor, jadi saya harus menambahkan itu ke byte-count aku takut, membuatnya menjadi 69 byte .. :(-~(a^a)
bekerja untuk 1?C (gcc) , 56 byte
Cobalah online!
Mengembalikan
0
jika pasangan berbeda dengan 1, bukan nol sebaliknya. Agak tidak biasa untuk C, kecuali jika Anda menganggapnya kembaliEXIT_SUCCESS
jika pasangan berbeda dengan 1, nilai lainnya sebaliknya.Menggunakan
sizeof((char)d))
untuk menghasilkan konstanta1
dengan cara yang murni sementara juga memaksa nama fungsi menjadi murni.Kemudian XOR 1 dengan popcount XOR dari argumen. Untungnya
^
simbolnya mudah disimpan, seperti pengenal yang sangat panjang__builtin_popcount
.Sementara itu, berikut ini skrip yang digunakan untuk menguji solusinya:
Yang menggunakan
./flipbit
alat yang saya tulis sumbernya adalah:Bit yang rumit adalah:
=
tidak berfungsi dengan baik, karena bisa menjadi perbandingan dalam setiap kasus itu bisa muncul. Demikian pula-
tidak bekerja dengan baik. Dengan demikian^
digunakan untuk menegaskan kesetaraan dengan 1.sumber
^
operator tetap asli? Jika bit pada itu diubah, apa yang menghentikannya dari menjadi operator yang berbeda? Ini masih akan dikompilasi, tetapi hanya akan memberi Anda jawaban yang salah. Apakah saya salah paham tentang arti kata "murni" di sini?^
hanya dapat diubah menjadi salah satu dari_\ZVN~Þ
atau karakter yang tidak diinginkan pada codepoint 30.~
adalah satu-satunya dari mereka yang merupakan operator, tetapi itu hanya operator unary.__LINE__
sebagai gantinyasizeof(char)
. Saya pikir tidak apa-apa untuk menganggap bahwa fungsi Anda akan ada pada baris 1 dari file .c Anda. Atau bahkanunix
didefinisikan sebagai 1 pada TIO, dan mungkin sebagian besar Linux lainnya.d
dimasukkan ke dalam sumber dalam byte sesedikit mungkin. Kalau tidakd
(atau apa pun nama Anda fungsinya) hanya dapat diubah dan kode masih akan berfungsi. Bahkan(__LINE__)
dengand();
tidak berfungsi karenad();
dapat diubah ke huruf lain dan masih akan dikompilasi karena fungsi tidak pernah harus dipanggil, dengan demikian tidak ditautkan.R ,
3837 byte-1 byte terima kasih kepada Nick Kennedy.
Cobalah online! (Terima kasih kepada Giuseppe karena mengatur TIO dengan benar.)
Bukti bahwa itu asli (menggunakan checker Nick Kennedy ).
Keluaran 0 untuk falsey, dan nilai positif untuk kebenaran, yang saya mengerti dapat diterima karena R akan menafsirkan ini sebagai False dan True.
Penjelasan:
bitwXor(a,b)
memberikan (sebagai bilangan bulat) XOR bitwise antaraa
danb
. Untuk memeriksa apakah kekuatan 2, periksa apakah basis 2 masuknya adalah bilangan bulat. Fungsi inidpois
memberikan fungsi kerapatan probabilitas dari distribusi Poisson: nilainya 0 untuk nilai non-integer, dan sesuatu yang positif untuk integer non-negatif. ItuT
ada karenadpois
memerlukan argumen kedua (setiap karya nyata positif, danT
ditafsirkan sebagai 1).Jika kami bersikeras untuk menghasilkan nilai yang berbeda, versi berikut ini menghasilkan SALAH atau BENAR dalam 42 byte (terima kasih kepada Giuseppe untuk -8 byte):
dan juga murni . Cobalah online!
sumber
pi
denganT
untuk menyimpan byte (masih asli). TIO Anda juga tidak sesuai dengan jawaban Anda saat ini.scan()
; apakah kamu punya ide? (Kode berfungsi baik di komputer.)F
sebagai gantiexp(-Inf)
, di sepanjang baris yang sama dengan NickT
:-)R , 83 byte
Cobalah online!
Bukti bahwa ini asli
Mengatasi kenyataan bahwa
as.integer
,as.double
dll. Hanya berjarak sedikit dariis.integer
,is.double
dll. Adalah bagian yang paling sulit. Pada akhirnya, menggunakansum(T^el(.[-T])
sebagai cara menghasilkan satu dan memeriksa yangas.double
telah mengembalikan vektor> 1 panjang adalah yang terbaik yang bisa saya lakukan. Bungkusnyat
adalah untuk menangani fakta bahwa kalau tidakidentical
bisa jadiide~tical
.sumber
Julia 0.7 , 20 byte
Cobalah online!
Berikut ini adalah validator murni yang mencoba menjalankan setiap fungsi anonim yang dimodifikasi terhadap beberapa input, dan keduanya tidak berhasil. Perhatikan bahwa kode tersebut memiliki karakter unicode multi-byte, dan beberapa kemungkinan keluaran dari bit flipping bahkan tidak disertakan, karena kode tersebut menghasilkan string UTF-8 yang tidak valid.
sumber
x
dany
agak terpisah, jadi saya percaya ini adalah contoh balasan.y
danx
juga 1 bit off9
dan6
masing - masing.C # (Visual C # Interactive Compiler) , 37 byte
Bagian
a=>b=>
tidak dapat diubah, atau fungsi tersebut tidak valid.Di
a!=b
,=
tidak dapat diubah karenaint
tidak dapat dikonversi kebool
.Cobalah online!
sumber
C # (Visual C # Interactive Compiler) ,
12810177706174 byte-27 byte berkat Ascii-Only
Cobalah online!
Anda harus cukup kreatif untuk mendapatkan angka dalam C # tanpa menggunakan literal. Hanya menggunakan operator ^. Variabel a, b semuanya lebih dari 1 bit dari satu sama lain dan yang lainnya adalah kata kunci / nama.
sumber
+/*=
untuk operasi matematika atau memvalidasi. ;)+
JavaScript (ES6 dalam mode ketat), 61 byte
Cobalah online! atau Pastikan semua program yang diubah salah
sumber
Groovy ,
4736 byteCobalah online!
Versi adaptasi dari jawaban Java Kevin Cruijssen .
sumber
MATLAB, 37 byte
Maaf, tidak ada tautan TIO, karena saya tidak bisa menjalankan test suite di bawah Octave. Terima kasih @ExpiredData untuk beberapa komentar bermanfaat.
Test suite:
sumber
numel
, karena test suite saya sepertinya tidak berfungsi di Octave.eye
!Perl 6 ,
7743 byteTerima kasih kepada Jo King untuk -33 byte.
Ini setara dengan
1
ditulis ulang sebagaielems([""])
.2
ditulis ulang sebagaisum(elems([""]),elems([""]))
;elems(["",""])
mungkin tampak berfungsi tetapielems([""-""])
juga valid dan tampaknya menggantung tester.Cobalah online!
sumber
JavaScript (Node.js) , 20 byte
Cobalah online!
validator oleh Arnauld, dimodifikasi (tidak digunakan dengan ketat)
sumber