var QUESTION_ID=78569,OVERRIDE_USER=31716;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}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="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <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><div id="language-list"> <h2>Winners 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><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>
o
bahkan paritas.str(int(s, 2)).count('1')
? Tidak, saya tidak akan menganggap itu sebagai fungsi builtin tunggal yang melanggar aturan itu. Apakah hasil edit saya membuatnya lebih jelas?char == single_char_string
. Saya juga mengeditnya di posting.Jawaban:
MATL ,
87 byteCobalah online! Atau verifikasi semua kasus uji sekaligus .
sumber
Java, 97 byte
Karena, Anda tahu, Jawa.
Ini adalah lambda untuk a
BiFunction<String, Character, Boolean>
.e
dano
tampaknya dibalik dalam pernyataan pengembalian karena ternyata logika saya terbalik.sumber
Python 2, 51 byte
Ini didasarkan pada ide Sp3000 untuk menghitung 1 dalam representasi string dari daftar kode karakter dalam biner daripada menjumlahkan untuk setiap karakter.
Trik baru adalah menangani
e
dano
dalam hal ini juga. Jikae
ganjil dano
genap, kita bisa menambahkan bit paritas ke string sebelum melakukan penghitungan (membalikkannya karena '1' adalah Truthy). Sayangnya tidak. Tetapi, jika kita menghapus semua kecuali dua bit terakhir mereka, sekarang benar.Ini dilakukan dengan menghapus
9
karakter pertama dari representasi string.sumber
eo
!Jelly,
98 byteCobalah online!
Terima kasih kepada Dennis untuk satu byte!
sumber
V}
... yang itu sangat keren !!! (Dennis adalah pegolf sejati) +1 Ini mengalahkan setiap upaya saya.C, 62 byte
XOR memiliki properti bagus yang dapat digunakan untuk mengurangi string menjadi satu char, sekaligus menjaga paritas.
Ideone.
sumber
27030>>((p^p>>4)&15)&1
harus menghitung paritas p dan bahkan 1 byte lebih pendekchar *s
tidakf(s,p)char*s;{for(p/=8;*s;)p^=*s>>4^*s++;p^=p/4;return p%4%3;}
The%3
akan selalu kembali 0 untuk 0, tetapi bisa kembali 1 atau 2 untuk 1. Hal ini dapat diterima di bawah aturan:truthy if it's a 1
27030>>((p^p>>4)&15)&1
. Ya, tentu saja, err. ;-)Python,
5857 bytesumber
lambda s,p:`map(bin,map(ord,s))`.count('1')%2^(p>'e')
!=p>'e'
.lambda s,p:`map(bin,map(ord,p+s))`[8:].count('1')%2
Pyth, 12 byte
Suite uji.
sumber
JavaScript (ES6),
8472 byteSedikit twiddling ternyata lebih pendek daripada mengkonversi ke basis 2 dan menghitung
1
s.sumber
Perl, 29 byte
Termasuk +2 untuk
-p
Jalankan dengan input pada STDIN sebagai string spasi karakter paritas, mis
parity.pl
sumber
J, 27 byte
Pemakaian
sumber
JavaScript (ES6), 69 byte
sumber
PowerShell v2 +, 91 byte
Saya menangis di sudut
Ya ... jadi, konversi basis tidak cocok untuk PowerShell. Konversi dari string input ke representasi biner
$a|%{[convert]::toString(+$_,2)}
adalah 32 byte dalam dan dari dirinya sendiri ...Mengambil input
$a
dan$b
, secara eksplisit melakukan casting$a
sebagai char-array dalam proses. Kami kemudian memeriksa apakah$b
adalah-eq
UAL untuko
, dan-xor
bahwa dengan bagian lain dari program tersebut. Untuk bagian itu, kita ambil string input$a
, pipa itu melalui loop untuk mengubah setiap huruf menjadi biner,-join
semua itu bersama-sama membentuk satu string yang solid, dan-replace
semua0
itu tanpa apa-apa. Kami kemudian menghitung.length
string itu dan mengambilnya mod-2 untuk menentukan apakah itu genap atau ganjil, yang akan mudah0
atau tidak1
sempurna untuk-xor
.Akan kembali
True
atauFalse
sesuai. Lihat uji kasus di bawah ini:sumber
Faktor, 85 byte
Untuk beberapa alasan saya tidak dapat membungkus kepala saya dengan yang ini sampai beberapa menit yang lalu, ketika saya menyederhanakan (dan mungkin mempersingkat?) Kodenya.
?
seperti operator ternary: ia menguji kebenaran item tumpukan ketiga, dan memilihtrue
nilai ataufalse
nilainya.Ini kira-kira sama dengan pseduocode mirip-C berikut:
Sisa kode ini cukup sederhana:
sumber
Kode mesin IA-32, 15 byte
Hexdump:
Kode perakitan:
Ini adalah fungsi yang menerima argumen pertama (string) di
ecx
dan argumen kedua (char) didl
. Ini mengembalikan hasilnyaeax
, jadi itu kompatibel denganfastcall
konvensi pemanggilan.Kode ini membengkokkan aturan ketika menggunakan
setpo
instruksi:Instruksi ini diatur
al
ke bit paritas yang dihitung oleh instruksi sebelumnya - jadi saya punya dua nitpicks ini pada aturan:xor
) yang menghitung bit paritas. Thesetpo
instruksi hanya bergerak keal
mendaftar.Rincian semantik ini tidak ada artinya, berikut adalah penjelasan tentang apa yang dilakukan kode.
Representasi karakter adalah:
Jika kita menambahkan 1 padanya, mereka memiliki paritas yang tepat:
Jadi kita
XOR
semua karakter string, menginisialisasial
nilai-nilai ini, yang memberikan jawabannya.Instruksi pertama
movzx eax, dl
bukannya yang lebih jelas (dan lebih pendek)mov al, dl
, karena saya ingin memiliki angka 0 dalam register (ah
dalam hal ini) agar dapat membandingkannya dengan urutan yang benar (0, [ecx]
bukan[ecx], 0
).sumber
Julia,
58474540 byteIni adalah fungsi yang menerima string dan karakter dan mengembalikan integer.
Untuk mendapatkan jumlah yang ada dalam representasi biner, pertama-tama kita menerapkan
bin
fungsi ke setiap karakter dalam string, yang memberi kita array dari string biner. Kemudian kurangi menjadi satu menggunakanprod
(karena*
merupakan rangkaian string dalam Julia) dan ambil persimpangan set string itu dan kode karakter untuk1
, yang memberi kita string yang. Indeks terakhir dari string itu adalah jumlah. Kami XOR ini dengan 1 jika karakter yang disediakan adalah o dan 0 sebaliknya, maka dapatkan paritas menggunakan bitwise AND 1.Cobalah online!(termasuk semua kasus uji)
Disimpan 18 byte berkat Dennis!
sumber
05AB1E ,
15, 13 byteKode:
Input Contoh:
Contoh Output:
Penjelasan:
Terima kasih kepada Adnan karena telah menghemat 2 byte.
sumber
²
perintah. Ini secara otomatis mendorong input kedua di atas tumpukan. Juga, string dua-char dapat disingkat menggunakan„
. Jadi"oe"
setara dengan„
. Untuk 13 byte:€ÇbSOÈ„oe²k<^
:)Ruby, 57 byte
Jika
0
itu falsey di Ruby,==
mungkin bisa dialihkan ke adil-
, atau mungkin ada optimasi lain, tetapi tidak.sumber
Retina , 102 byte
Mengambil string di baris pertama, dan huruf di baris kedua. Menggunakan penyandian ISO 8859-1.
Cobalah online
Kelas karakter pada baris pertama cocok dengan karakter apa pun dengan jumlah ganjil dalam representasi biner.
Deskripsi tentang deteksi genap / ganjil dengan regex bekerja di sini .
sumber
Oktaf, 56 byte
Itu
bitunpack
fungsi, untuk karakter ASCII, mengembalikan mereka dalam rangka little-endian. Jadi dengan meletakkan bendera paritas di akhir string kita, membongkar semuanya, dan menjatuhkan 5 bit terakhir, kita kemudian dapat meringkas seluruh hal mod 2 untuk jawaban akhir kita.Pemakaian:
sumber
Common Lisp, 87
s
.p
dalam string"oe"
(0 atau 1). Misalnya, jika ada 4 yang, sisanya adalah nol. Jika po
, maka tidak ada bit tambahan yang harus ditambahkan, dan tes kembali salah.Dicetak cantik
sumber
Java, 91 byte
Saya melakukan hal yang sama seperti @ CAT97, tetapi menelanjangi beberapa karakter dengan menggunakan modulo 8 dan menggabungkan @Luis Mendo dan penggunaan int bukan boolean.
Ini adalah lambda untuk a
BiFunction<String, Character, Boolean>
.sumber
Matlab, 49 byte
dimana:
Sebagai contoh:
sumber
Alat Bash dan unix (72 byte)
Kecuali
s
sebagai argumen pertama danp
kedua. Untungnya terakhir 3 bito
dane
memiliki paritas ganjil dan genap masing-masing.Memasok input melalui
<<<
menambahkan karakter umpan baris, tetapi paritasnya\n
genap, jadi itu bukan masalah.sumber