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
ma nawet parzystość.str(int(s, 2)).count('1')
? Nie, nie uważałbym tego za pojedynczą wbudowaną funkcję, która narusza tę zasadę. Czy moja edycja jest bardziej przejrzysta?char == single_char_string
. Zredagowałem to również w poście.Odpowiedzi:
MATL ,
87 bajtówWypróbuj online! Lub zweryfikuj wszystkie przypadki testowe jednocześnie .
źródło
Java, 97 bajtów
Ponieważ, wiesz, Java.
To jest lambda dla
BiFunction<String, Character, Boolean>
.e
io
wydają się być odwrócone w instrukcji return, ponieważ najwyraźniej moja logika była wsteczna.źródło
Python 2, 51 bajtów
Jest to oparte na pomyśle Sp3000, aby liczyć jedynki w reprezentacji ciągu listy kodów znaków w postaci binarnej zamiast sumowania dla każdego znaku.
Nową sztuczką jest poradzenie sobie
e
równieżo
w tym. Jeślie
było nieparzyste io
parzyste, moglibyśmy po prostu wstawić bit parzystości do łańcucha przed wykonaniem liczenia (odwracanie ich, ponieważ „1” jest Prawdą). Niestety nie są. Ale jeśli usuniemy wszystkie oprócz ostatnich dwóch bitów, teraz jest to prawdą.Odbywa się to poprzez usunięcie pierwszego
9
znaku reprezentacji ciągu.źródło
eo
!Galaretka,
98 bajtówWypróbuj online!
Dzięki Dennis za bajt!
źródło
V}
... ten był naprawdę fajny !!! (Dennis jest prawdziwym golfistą) +1 Pokonał każdą moją próbę.C, 62 bajty
XOR ma niezłą właściwość, którą można wykorzystać do zmniejszenia ciągów znaków do jednego znaku, przy jednoczesnym zachowaniu parzystości.
Ideone.
źródło
27030>>((p^p>>4)&15)&1
powinien obliczyć parzystość p, a jest nawet 1 bajt krótszychar *s
środku jest niepotrzebnaf(s,p)char*s;{for(p/=8;*s;)p^=*s>>4^*s++;p^=p/4;return p%4%3;}
%3
truthy if it's a 1
27030>>((p^p>>4)&15)&1
. Cóż, oczywiście. ;-)Python,
5857 bajtówźródło
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 bajtów
Zestaw testowy.
źródło
JavaScript (ES6),
8472 bajtówKręcenie bitów okazało się krótsze niż konwersja do bazy 2 i liczenie
1
s.źródło
Perl, 29 bajtów
Obejmuje +2 za
-p
Uruchom z danymi wejściowymi STDIN jako ciągiem znaków parzystości, np
parity.pl
źródło
J, 27 bajtów
Stosowanie
źródło
JavaScript (ES6), 69 bajtów
źródło
PowerShell v2 +, 91 bajtów
/ ja płacze w kącie
Tak ... więc konwersja bazy nie jest silnym atutem dla PowerShell. Konwersja ciągu wejściowego na reprezentację binarną
$a|%{[convert]::toString(+$_,2)}
ma 32 bajty sama w sobie ...Pobiera dane wejściowe
$a
i$b
jawnie rzutuje$a
jako tablicę znaków w procesie. Następnie sprawdzamy, czy$b
jest to-eq
przydatneo
, i-xor
to z drugą połową programu. W tej części bierzemy ciąg wejściowy$a
, przepuszczamy go przez pętlę, aby przekonwertować każdą literę na binarną,-join
wszystkie razem, tworząc jeden ciąg ciągły, i-replace
wszystkie0
s bez niczego. Następnie liczymy.length
ten ciąg i bierzemy mod-2, aby ustalić, czy jest parzysty czy nieparzysty, co dogodnie będzie albo,0
albo1
idealne dla-xor
.Wróci
True
lubFalse
odpowiednio. Zobacz przypadki testowe poniżej:źródło
Współczynnik, 85 bajtów
Z jakiegoś powodu nie mogłem owinąć głowy nim jeszcze kilka minut temu, kiedy uprościłem (a może skróciłem?) Kod.
?
jest jak trójskładnikowy: sprawdza prawdziwość trzeciego elementu stosu i wybieratrue
wartość lub wartośćfalse
wartość.Jest to w przybliżeniu odpowiednik następującego pseduokodu typu C:
Reszta kodu jest dość prosta:
źródło
Kod maszynowy IA-32, 15 bajtów
Hexdump:
Kod zestawu:
Jest to funkcja, która odbiera swój pierwszy argument (ciąg)
ecx
i drugi argument (char) wdl
. Zwraca wynikeax
, więc jest zgodny zfastcall
konwencją wywoływania.Ten kod zgina reguły, gdy używa
setpo
instrukcji:Ta instrukcja ustawia
al
bit parzystości obliczony przez poprzednią instrukcję - więc mam te dwa nitpicks na regułach:xor
) oblicza bit parzystości.setpo
Instrukcja tylko przenosi go doal
rejestru.Te szczegóły semantyczne na marginesie, oto wyjaśnienie, co robi kod.
Reprezentacje postaci to:
Jeśli dodamy do nich 1, będą one miały odpowiednią parzystość:
Więc my
XOR
wszyscy znaki ciągu, inicjując sięal
do tych wartości, co daje odpowiedź.Pierwsza instrukcja jest
movzx eax, dl
bardziej oczywista (i krótsza)mov al, dl
, ponieważ chcę mieć liczbę 0 w rejestrze (ah
w tym przypadku), aby móc porównać ją w odpowiedniej kolejności (0, [ecx]
zamiast[ecx], 0
).źródło
Julia,
58474540 bajtówJest to funkcja, która akceptuje ciąg i znak i zwraca liczbę całkowitą.
Aby uzyskać liczbę jedynek w reprezentacji binarnej, najpierw stosujemy
bin
funkcję do każdego znaku w ciągu, co daje nam tablicę ciągów binarnych. Następnie zredukuj je do jednego za pomocąprod
(ponieważ*
Julia jest konkatenacją łańcucha) i weź ustawione przecięcie tego łańcucha i kod znaku1
, co daje nam ciąg jednych. Ostatni indeks tego ciągu to liczba jedynek. XOR to 1, jeśli podana postać to o i 0 w przeciwnym razie, to uzyskać za pomocą bitowego parzystości i 1.Wypróbuj online!(obejmuje wszystkie przypadki testowe)
Zaoszczędź 18 bajtów dzięki Dennisowi!
źródło
05AB1E ,
15, 13 bajtówKod:
Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
Wyjaśnienie:
Dzięki Adnan za oszczędność 2 bajtów.
źródło
²
polecenia. To automatycznie wypycha drugie wejście na wierzch stosu. Również ciągi dwuznakowe można skracać za pomocą„
. Więc"oe"
jest równoważna„
. Dla 13 bajtów:€ÇbSOÈ„oe²k<^
:)Rubinowy, 57 bajtów
Jeśli
0
w Ruby był falsey,==
prawdopodobnie można go zmienić na just-
, lub mogą istnieć inne optymalizacje, ale tak nie jest.źródło
Siatkówka , 102 bajty
Bierze ciąg w pierwszym wierszu, a litera w drugim wierszu. Wykorzystuje kodowanie ISO 8859-1.
Wypróbuj online
Klasa znaków w pierwszym wierszu odpowiada dowolnemu znakowi z nieparzystą liczbą jedności w reprezentacji binarnej.
Opis działania detekcji parzystej / nieparzystej z wyrażeniem regularnym tutaj .
źródło
Oktawa, 56 bajtów
bitunpack
Funkcja, dla znaków ASCII, zwraca je w ostrokońcej kolejności. Tak więc, umieszczając flagę parzystości na końcu naszego ciągu, rozpakowując całość i upuszczając ostatnie 5 bitów, możemy następnie podsumować cały mod 2 dla naszej ostatecznej odpowiedzi.Stosowanie:
źródło
Common Lisp, 87
s
.p
w ciągu"oe"
(0 lub 1). Na przykład, jeśli są 4, reszta to zero. Jeśli p jesto
, to nie należy dodawać żadnego dodatkowego bitu, a test zwraca false.Dość drukowane
źródło
Java, 91 bajtów
Zrobiłem to samo co @ CAT97, ale usunąłem niektóre postacie, używając modulo 8 i konkatenacji @Luis Mendo i użycia int zamiast boolean.
To jest lambda dla
BiFunction<String, Character, Boolean>
.źródło
Matlab, 49 bajtów
gdzie:
Na przykład:
źródło
Narzędzia Bash i Unix (72 bajty)
Z wyjątkiem
s
pierwszego ip
drugiego argumentu. Na szczęście ostatnie 3 bityo
ie
posiada parzyste i nieparzyste parytetu odpowiednio.Podanie danych wejściowych przez
<<<
dodaje znak przesunięcia wiersza, ale parzystość\n
jest parzysta, więc nie stanowi problemu.źródło