/* Configuration */
var QUESTION_ID = 169724; // Obtain this from the url
// It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 81420; // This should be the user ID of the challenge author.
/* App */
var answers = [],
answers_hash, answer_ids, answer_page = 1,
more_answers = true,
comment_page;
function answersUrl(index) {
return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function(data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function(data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if (OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
});
//else console.log(body);
});
valid.sort(function(a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function(a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
lang = jQuery('<a>' + lang + '</a>').text();
languages[lang] = languages[lang] || {
lang: a.language,
lang_raw: lang,
user: a.user,
size: a.size,
link: a.link
};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function(a, b) {
if (a.lang_raw.toLowerCase() > b.lang_raw.toLowerCase()) return 1;
if (a.lang_raw.toLowerCase() < b.lang_raw.toLowerCase()) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i) {
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body {
text-align: left !important;
display: block !important;
}
#answer-list {
padding: 10px;
width: 290px;
float: left;
}
#language-list {
padding: 10px;
width: 500px;
float: left;
}
table thead {
font-weight: bold;
}
table td {
padding: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/codegolf/all.css?v=ffb5d0584c5f">
<div id="language-list">
<h2>Shortest Solution by Language</h2>
<table class="language-list">
<thead>
<tr>
<td>Language</td>
<td>User</td>
<td>Score</td>
</tr>
</thead>
<tbody id="languages">
</tbody>
</table>
</div>
<div id="answer-list">
<h2>Leaderboard</h2>
<table class="answer-list">
<thead>
<tr>
<td></td>
<td>Author</td>
<td>Language</td>
<td>Size</td>
</tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr>
<td>{{PLACE}}</td>
<td>{{NAME}}</td>
<td>{{LANGUAGE}}</td>
<td>{{SIZE}}</td>
<td><a href="{{LINK}}">Link</a></td>
</tr>
</tbody>
</table>
<table style="display: none">
<tbody id="language-template">
<tr>
<td>{{LANGUAGE}}</td>
<td>{{NAME}}</td>
<td>{{SIZE}}</td>
<td><a href="{{LINK}}">Link</a></td>
</tr>
</tbody>
</table>
666 => False
harus menjadi ujian.Jawaban:
Z80 Assembly (8-bit), 2 byte
Kode berikut hanya berfungsi dengan nilai hingga 255:
Versi 16-bit (bekerja pada semua test case), 3 byte
Ini bekerja dengan nilai hingga 65535.
Jika Anda merasa ingin bertualang, Anda dapat mencukur 1 byte dengan menyimpan input
A
danC
seperti itudan kemudian berlari
Namun, ini menempatkan beban pada penelepon, sehingga mungkin dua byte (
push BC
danpop AF
) harus dihitung juga.sumber
or
s bitwise dengan 2 operanor
mnemonik adalah akumulator A. Dalam hal ini, perintah tidak berubah A. Hanya menyegarkan register status (dan khususnya, bendera paritas) ke mencerminkan isi A.P
diizinkan sesuai codegolf.meta.stackexchange.com/a/8509/29560 ? Ini sedikit dalamF
register (bendera) yang hanya memiliki tiga pasang instruksi yang terpengaruh olehnya. Juga, jawaban ini tidak menyebutkan bahwa hanya bersaing untuk nilai 8-bit, karenaA
merupakan register 8-bit. Ini berarti tidak dapat memberikan jawaban untuk777
, atau nilai yang tidak ditandatangani lainnya di atas 255.:P
A
dipasangkan denganF
, jadi saya tidak akan menerimaAB
atauBA
sebagai nilai 16-bit.BC
adalah 16-bit, tetapi kemudian Anda memerlukan instruksi tambahan untuk memuat salah satu dari merekaA
sebelum XORing yang lain. Saya selalu menyebutkan bahwa jawaban Z80 saya berfungsi hingga 255 atau 65535, tergantung pada pertanyaannya. Mungkin menambahkan versi 16-bit juga? Jadi 2 byte untuk nilai 8-bit, 3 byte untuk nilai 16-bit.JavaScript (ES6), 18 byte
Cobalah online!
Penjelasan
Logika bitwise seperti ini:
~-n
sama dengan-(-n)-1
, sehingga hanya cara lain untuk melakukannyan-1
. Dalam kasus khusus itu, kita sebenarnya bisa menggunakannyan-1
.n & (n-1)
menghapus bit paling tidak penting yang ditetapkan ke 1 dalam n karena pengurangan n mengubah semua trailing 0 's menjadi 1 's dan menghapus 1 yang segera mengikuti (dengan membawa propagasi), sementara meninggalkan yang lainnya tidak berubah.Contoh untuk n = 24 (11000 dalam biner):
Oleh karena itu, kami memproses sebanyak panggilan rekursif karena ada 1 dalam representasi biner dari n , membalikkan hasilnya setiap kali
!
. Panggilan terakhir selalu kembali 1 .Contoh:
sumber
Python 2 , 25 byte
Cobalah online!
bin(n)
memberikan hasil seperti'0b10101'
. Membaca ini sebagai bilangan bulat basis-13, kita dapatkanJadi
int(bin(n),13)%2
sama dengan 1 + (jumlah yang ada dibin(n)
) modulo 2.Jika
n
itu jahat, maka hasilnya adalah 1; selain itu 0.Saya mengambil trik ini dari Noodle9 .
sumber
lambda n:int(`n`,13)%2
. Cobalah online!Japt
-h!
,543 byteCobalah
Penjelasan
sumber
¤¬x v
ini jawaban KevinC # (Visual C # Interactive Compiler) ,
4338 byteGolf Cobalah secara online!
Tidak disatukan
Kode lengkap dengan tes
Rilis
-5 bytes
- DigantiCount
menjadiSum
43 bytes
- Solusi awal.Catatan
sumber
Bash (tidak ada utilitas eksternal),
5644 bytewhile(($1));do set $(($1/2)) $(($2+$1%2));done;!(($2%2))
Ini mengasumsikan bahwa nomor ditemukan dalam
$1
, yang telah dilewati sebagai argumen baris perintah pertama. Itu juga mengasumsikan bahwa ini adalah skrip shell (sehingga ia bisaexec
sendiri).Itu berulang, setelah mode, menggunakan
exec $0
, sampai angka (dalam$1
) mencapai nol, membaginya dengan dua di setiap iterasi. Itu juga menjumlahkan (dalam$2
) berapa kali kita mendapatkan angka yang ganjil. Pada akhirnya, nomor aslinya adalah "jahat" jika jumlah$2
dalam tidak aneh.Contoh doa:
Untuk
0
:Hasil yang benar, dengan sedikit tambahan di samping.
sumber
R ,
3726 byteCobalah online!
Sebagai alternatif dari jawaban Robert S. , ini menjauhkan dari sedikit built-in
tapi berakhir kurang golfdan terima kasih kepada JayCe dan digEmAll akhirnya datang sedikit lebih golf.Hanya berfungsi untuk bilangan bulat positif kurang dari .231−1
sumber
%/%
%%
05AB1E , 4 byte
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Stax , 4 byte
Jalankan dan debug itu
sumber
R ,
9998443428 byte-1 terima kasih kepada Kevin Cruijssen! -54 terima kasih untuk ngm! -10 Terima kasih kepada Giuseppe! -6 terima kasih kepada JayCe!
Cobalah online!
Atau, menggunakan
binaryLogic
paket (39 byte):sumber
==0
bisa<1
:)C (gcc) , 36 byte
Cobalah online!
Metode dari K&R https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan
Harus dikompilasi dengan level pengoptimalan 0
sumber
error: expected constructor, destructor, or type conversion before '(' token
(panah menunjuk kef
dalam pada nama fungsi). Bendera kompiler apa yang saya butuhkan?-O
.-O0
flag kompiler.Bahasa Wolfram (Mathematica) ,
2422 byteCobalah online!
sumber
2∣
merupakan peningkatan padaEvenQ
. Cobalah online!PHP,
3736 byteUntuk menjalankannya:
Atau Coba online!
Cetakan
1
untuk benar, dan0
untuk salah.-1 byte terima kasih kepada Benoit Esnard !
sumber
<?=1&~substr_count(decbin($argn),1);
. Yang ini juga mencetak 0 untuk false.Brachylog , 4 byte
Cobalah online!
Dengan beberapa test case (😈 jahat dan 👼 tidak.)
Menggunakan sesuatu yang saya temukan baru-baru ini tentang
-
predikat: dokumentasinya hanya mengatakan "perbedaan elemen [input]", tetapi apa yang sebenarnya dilakukannya adalah "jumlah elemen yang diindeks (mulai dari 0) input, dikurangi jumlah ganjil elemen input terindeks ".Sini,
ḃ
mengubah angka menjadi array angka biner,o
macam mereka untuk menyatukan semua 1s.Sekarang, jika ada angka genap 1s, akan ada angka 1s yang sama dalam indeks genap dan indeks ganjil. Jadi
-
setelah itu akan memberikan 0. Tapi jika ada angka ganjil dari 1s, akan ada tambahan 1 mencuat, menghasilkan perbedaan antara -1 atau 1.Jadi, akhirnya, kami menyatakan bahwa perbedaannya adalah
0
, dan mendapatkan hasil yang benar atau salah sesuai dengan itu. Dengan persyaratan output yang lebih fleksibel , ini bisa dihilangkan untuk jawaban 3 byte, dengan 0 sebagai output yang sebenarnya dan -1 dan 1 sebagai keduanya output palsu.sumber
INTERCAL ,
906563 byteCobalah online!
Tidak digabungkan dan diperluas (sesuai nilainya) dengan komentar gaya C
Saya harus membuat beberapa konsesi untuk membuatnya layak di INTERCAL. Yang pertama adalah, seperti semua program INTERCAL, input numerik harus dituliskan. Jadi, jika Anda ingin memasukkan,
707
Anda akan memberikanSEVEN OH SEVEN
.Yang kedua adalah bahwa INTERCAL tidak benar-benar memiliki nilai kebenaran atau kepalsuan yang tepat. Sebagai gantinya, ini akan menampilkan Angka Romawi
I
(1) jika jumlahnya tidak jahat, atau 0 (biasanya diwakili-
karena Angka Romawi biasanya tidak dapat mewakili 0).Jika Anda ingin membaliknya sehingga angka jahat mengembalikan 1 dan angka non-jahat mengembalikan 0, Anda dapat mengubah baris 4 dan 5 dari versi yang tidak diklik sebagai berikut, meskipun itu menambah 3 byte.
sumber
Attache ,
1312 byteCobalah online!
(Old 13 bytes:
Even@1&`~@Bin
)Ini adalah komposisi dari tiga fungsi:
Bin
Sum
Even
Cek ini bahwa
Sum
dariBin
ekspansi ary dari inputEven
.sumber
dc ,
1816 byteMengembalikan (ke tumpukan) 0 untuk kejahatan dan 1 untuk tidak jahat
Cobalah online!
Cukup mudah - secara rekursif menerapkan operator hasil bagi / sisa gabungan
~
ke hasil bagi baru dan menambahkan semua sisanya bersama-sama, kemudian mod dengan 2(setelah menghabiskan dua byte untuk beralih ke standar kebenaran / kepalsuan).Diedit untuk mencerminkan konsensus bahwa 0 untuk kebenaran dan 1 untuk falsy boleh-boleh saja, terutama dalam bahasa yang tidak memiliki
if(boolean)
konstruksi.sumber
Python 2, 29 byte
Cobalah online!
Mengembalikan 1 jika Benar, kalau tidak 0.
Mengonversi angka menjadi string biner seperti '0b11', menghitung jumlah 1s, mendapatkan komplemen hasil, dan mengembalikan bit komplemen terakhir (terima kasih, https://codegolf.stackexchange.com/users/53560/cdlane !) (1 jika nomor aslinya genap, 0 jika ganjil).
sumber
lambda n:~bin(n).count('1')&1
menggantikan divisi modular dengan sesuatu yang berpotensi lebih murah.x86-16, 3 byte
Daftar NASM:
Fungsi integer 16-bit arg di AX (yang dihancurkan), mengembalikan nilai dalam PF.
Perangkat keras menghitung paritas hasilnya bagi kita, di Bendera Paritas x86 . Penelepon dapat menggunakan
jp
/jnp
ke cabang, atau apa pun yang mereka suka.Bekerja persis seperti jawaban Z80 / 8080 @ cschultz ; sebenarnya 8086 dirancang untuk membuat porting sumber mekanis dari 8080 menjadi mudah .
Perhatikan bahwa PF hanya diatur dari byte rendah dari hasil yang lebih luas, jadi
test edi,edi
tidak akan berfungsi untuk versi x86-64. Anda harus horizontal-xor ke 16 bit, ataupopcnt eax, edi
/and al,1
(di mana 0 benar).sumber
C ++ (gcc) (-O0),
3631 byteCobalah online!
C ++ (dentang) , 35 byte
Cobalah online!
Ini adalah usaha pertama saya dalam kode golf, saya harap saya tidak melanggar aturan yang mungkin saya lewatkan.
Sunting:
- Disimpan 5 byte berkat @Jonathan Frech: digantikan
!=
oleh-
danreturn
olehi=
(pengganti terakhir tampaknya tidak bekerja dengan dentang sekalipun)- Karena tampaknya ada perdebatan apakah saya harus menggunakan penyalahgunaan gcc -O0, saya pikir saya bisa berikan saja kedua versi
sumber
!=
ke-
dan empat lainnya dengan golfreturn
kei=
.gcc -O0
hack bodoh itu ? Ini tidak seperti panjang total boilerplate suatu bahasa sangat berarti ketika membandingkan implementasi. Selain itu, membuatnya lebih menarik untuk memilih antarareturn
vs panggilan-oleh-referensi (memperbarui*i
di tempat). Saya lebih suka menulis jawaban C atau C ++, bukan jawaban un-dioptimalkan-gcc-only, karena un-dioptimalkan-gcc bukan bahasa yang sangat berguna.SML , 32 Bytes
Penjelasan:
%
adalah nama fungsin
adalah input, return (n +% (n // 2))% 2Dibuat oleh 2 Siswa Carnegie Mellon yang bosan
sumber
Keempat (gforth) , 53 byte
Cobalah online!
Penjelasan
Mengambil xor-jumlah digit dari bentuk biner nomor tersebut. (berulang kali dibagi 2 dan xor sisanya dengan nilai "jumlah")
Penjelasan Kode
sumber
Java 8,
4036 byte-4 byte terima kasih kepada @Okx untuk sesuatu yang seharusnya tidak saya lupakan sendiri ..
Cobalah online.
Penjelasan:
Perhatikan bahwa pengkodean karakter untuk
0
dan1
adalah48
dan49
, tetapi menjumlahkannya dan mengambil modulo-2 masih memiliki hasil yang benar karena48%2 = 0
dan49%2 = 1
.sumber
n.toString(n,2)
menghemat 4 byte.~n.toString(n,2).chars().sum()%2
untuk menyimpan satu byte.0
dan1
tidak benar / falsey di Jawa, hanyabooleans
/Booleans
sedang. Jika sebuah tantangan akan menyatakan dua output berbeda diizinkan,<1
bisa saja telah dihapus untuk menghemat 2 byte. :)Perl 6 , 21 byte
Menguji
Diperluas:
sumber
*.base(2)%9%%2
{:3(.base(2))%%2}
Retina 0.8.2 , 28 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Konversikan ke unary.
Konversi biner parsial (meninggalkan angka nol ekstra).
Hapus semua nol.
Modulo satu per dua.
Uji apakah hasilnya nol.
sumber
x86 Assembly,
1211 byte-1 byte terima kasih atas saran @ ceilingcat
sumber
inc eax
alih-alihnot eax
. Mungkin juga ingin menyebutkan bahwa ini membutuhkan prosesor dengan dukungan untukpopcnt
instruksi.Utilitas Bash + GNU, 33
Cobalah online!
Membaca input dari STDIN. Output 1 untuk Benar dan 0 untuk Salah.
dc
mengkonversi input ke string binertr
menghapus nolwc
menghitung yang tersisa (dan mengikuti baris baru, yang mengoreksi rasa logikadc
menghitung hitungan mod 2 dan menampilkan jawabannyasumber
Python 2,
2827 byteCobalah online!
Mengembalikan nilai kebenaran jika tepat salah satu dari
the ones-bit is a 1
danthe result of calling this function on n/2 is truthy
itu benar (ataun==0
). Ia bekerja karenan/2
setara dengan bithift kanan dengan pembagian lantai (jadi hanya Python 2).Versi alternatif, juga
2827 byteCobalah online!
Berdasarkan metode K&R menghitung bit set yang dirujuk oleh vazt.
Kedua hal ini bisa dua byte lebih pendek jika output memungkinkan falsey berarti jahat.
Sunting: Berkat Amphibological karena telah menghemat satu byte!
sumber
1
danor
untuk menyimpan +1 byte. Solusi bagus!APL (Dyalog Unicode) , 10 byte SBCS
Fungsi diam-diam anonim. Dapat mengambil array bilangan bulat apa pun sebagai argumen.
Cobalah online!
2∘⊥⍣¯1
konversikan ke biner, gunakan sebanyak mungkin digit yang dibutuhkan oleh angka terbesar, pisahkan digit di sepanjang sumbu primer1⍪
tambahkan yang di sepanjang sumbu utama≠⌿
Pengurangan XOR sepanjang sumbu utamasumber
J , 9 byte
Fungsi diam-diam anonim. Dapat mengambil array integer sebagai argumen.
Cobalah online!
1-
satu minus (yaitu negasi logis dari)2|
mod-2 dari1#.
jumlah (lit. evaluasi base-1) dari#:
representasi binersumber
2|1+1#.#: