var QUESTION_ID=190819;
var OVERRIDE_USER=8478;
var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;function answersUrl(d){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+d+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(d,e){return"https://api.stackexchange.com/2.2/answers/"+e.join(";")+"/comments?page="+d+"&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(d){answers.push.apply(answers,d.items),answers_hash=[],answer_ids=[],d.items.forEach(function(e){e.comments=[];var f=+e.share_link.match(/\d+/);answer_ids.push(f),answers_hash[f]=e}),d.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(d){d.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),d.has_more?getComments():more_answers?getAnswers():process()}})}getAnswers();var SCORE_REG=function(){var d=String.raw`h\d`,e=String.raw`\-?\d+\.?\d*`,f=String.raw`[^\n<>]*`,g=String.raw`<s>${f}</s>|<strike>${f}</strike>|<del>${f}</del>`,h=String.raw`[^\n\d<>]*`,j=String.raw`<[^\n<>]+>`;return new RegExp(String.raw`<${d}>`+String.raw`\s*([^\n,]*[^\s,]),.*?`+String.raw`(${e})`+String.raw`(?=`+String.raw`${h}`+String.raw`(?:(?:${g}|${j})${h})*`+String.raw`</${d}>`+String.raw`)`)}(),OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(d){return d.owner.display_name}function process(){var d=[];answers.forEach(function(n){var o=n.body;n.comments.forEach(function(q){OVERRIDE_REG.test(q.body)&&(o="<h1>"+q.body.replace(OVERRIDE_REG,"")+"</h1>")});var p=o.match(SCORE_REG);p&&d.push({user:getAuthorName(n),size:+p[2],language:p[1],link:n.share_link})}),d.sort(function(n,o){var p=n.size,q=o.size;return p-q});var e={},f=1,g=null,h=1;d.forEach(function(n){n.size!=g&&(h=f),g=n.size,++f;var o=jQuery("#answer-template").html();o=o.replace("{{PLACE}}",h+".").replace("{{NAME}}",n.user).replace("{{LANGUAGE}}",n.language).replace("{{SIZE}}",n.size).replace("{{LINK}}",n.link),o=jQuery(o),jQuery("#answers").append(o);var p=n.language;p=jQuery("<i>"+n.language+"</i>").text().toLowerCase(),e[p]=e[p]||{lang:n.language,user:n.user,size:n.size,link:n.link,uniq:p}});var j=[];for(var k in e)e.hasOwnProperty(k)&&j.push(e[k]);j.sort(function(n,o){return n.uniq>o.uniq?1:n.uniq<o.uniq?-1:0});for(var l=0;l<j.length;++l){var m=jQuery("#language-template").html(),k=j[l];m=m.replace("{{LANGUAGE}}",k.lang).replace("{{NAME}}",k.user).replace("{{SIZE}}",k.size).replace("{{LINK}}",k.link),m=jQuery(m),jQuery("#languages").append(m)}}
body{text-align:left!important}#answer-list{padding:10px;float:left}#language-list{padding:10px;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="https://cdn.sstatic.net/Sites/codegolf/primary.css?v=f52df912b654"> <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><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><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table>
lang.tryitonline.net
(teraz jesttio.run/#lang
). Tak więc język o nazwie Talk spowodowałby zamieszanie w adresie URL niedawno utworzonego pokoju rozmów, którym jesttalk.tryitonline.net
Odpowiedzi:
Galaretka , 3 bajty
Dane wejściowe to jedna lista: akumulator, a po nim pary.
Wypróbuj online!
Jak to działa
y
Transliteration atom wykonuje; [a, b]y
c zastępuje z b i wraca b jeśli A = C i C czy ≠ C .y@/
folds / zmniejsza dane wejściowe zay
pomocą zamienionych argumentów, wykonując jedną transliterację na parę.źródło
Python 3 , 43 bajty
Wypróbuj online!
Funkcja przyjmuje jako ciąg pojedynczy ciąg znaków, gdzie pierwszym znakiem jest stan początkowy, a reszta ciągu reprezentuje polecenia. To rozwiązanie można łatwo przenieść na inne języki, które lepiej obsługują wyrażenia regularne.
Trudność polega na udowodnieniu, że rozwiązanie daje właściwy wynik. Aby to zobaczyć, potrzebujemy dogłębnej analizy poleceń. Po pierwsze, widzimy, że polecenia mają następujące właściwości:
00
i11
zachowuje stan akumulatora.01
i10
ustawia stan akumulatora na taki sam jak drugi bit, niezależnie od jego pierwotnego stanu.Dlatego końcowy stan akumulatora to:
01
lub10
komendy, stan końcowy jest taki sam jak stan początkowy.10
lub01
polecenia.Następnie pokażemy, że rozwiązanie daje poprawny wynik w obu przypadkach. Udowodnimy stwierdzenie stanu końcowego,
0
a stan końcowy1
można udowodnić analogicznie. Jeśli stanem końcowym jest0
dane wejściowe, ma jedną z następujących postaci:^0{2k+1}11(11|00)*
W przypadku 1 ciąg wejściowy
s
musi zaczynać się od2k+1
0, a następnie poleceń11
i00
. Wyeliminowanie00
s i11
s daje pojedynczy0
, który jest stanem końcowym..+10{2k+1}11(11|00)*
W przypadku 2 ciąg wejściowy kończy się
10
poleceniem, po którym następuje zero lub więcej00
i11
s. Ten wzorzec jest równoważny1
następującym po nim2k+1
0, a następnie zero lub więcej11
s i00
s. Eliminacja00
si11
s pozostawia ostatnią z2k+1
zer na końcu łańcucha, która reprezentuje stan końcowy.W oparciu o powyższe, po wyeliminowaniu
00
s i11
s jednocześnie w jednym pojedynczym przejściu (01001
jest przeciw-przykładem, jeśli00
zostanie wyeliminowany w jednym przejściu, a następnie11
w drugim przejściu) z wejścias
, ostatni znak jest stanem końcowym. Dlatego udowodniono poprawność rozwiązania.źródło
Perl 6 , 17 bajtów
Wypróbuj online!
Wykorzystuje „Można połączyć te dwa wejścia do jednego wejścia, jeśli lubisz” poprzez wejście jako wartość akumulatora połączonego z polecenia np
1,[00,11]
jest10011
. Jeśli to nie jest w porządku, to tylko 5 dodatkowych bajtów, aby wziąć to jakof(accumulator, commands)
. Zwraca dopasowany obiekt, który można przymusić do łańcucha.Wyjaśnienie:
Zasadniczo prace bo
00
i11
polecenia zrobić dosłownie nic, podczas gdy01
i10
poleceń wystarczy ustawić akumulator do drugiej cyfry polecenia. Jeśli nie ma żadnych poleceń, zamiast tego przyjmuje początkową wartość akumulatora.źródło
Zsh , 33 bajty
Lista znaków jest przekazywana jako argumenty, wartość początkowa akumulatora jest przekazywana jako stdin.
Wypróbuj online!
39 bajtów : jeśli polecenia muszą być pojedynczym ciągiem
Dane wejściowe są
accumulator
commands
argumentami.Wypróbuj online!
Dla zabawy, oto 50 bajtowa rekurencyjna jedna linijka ( TIO ):
źródło
Python 3 , 52 bajty
Wypróbuj online!
Naprawiono niespójny typ zwrotu dzięki Chas Brown
Pobiera dane wejściowe jako dwa ciągi; akumulator i kod.
źródło
f(1,'11')==f(1,'01')
jestFalse
; czasami zwracaint
a czasem astr
. Więc może sprecyzować, że pobiera dane wejściowe jako ciąg?Brachylog ,
119 bajtówWypróbuj online!
Ponieważ minęło już tyle czasu, że mogłem zapomnieć o drukowaniu akumulatora po każdym poleceniu , sformułowałem znacznie mniej naiwne rozwiązanie z pewną inspiracją z odpowiedzi Joela Perla.
Stare rozwiązanie:
Brachylog ,
1816 bajtówWypróbuj online!
-2 bajty od zmiany formatu wejściowego.
źródło
JavaScript (ES6), 27 bajtów
Pobiera dane wejściowe jako
(a)(code)
, gdzie kod jest listą 2-bitowych liczb całkowitych.Wypróbuj online!
JavaScript (ES6),
4740 bajtówPobiera dane wejściowe jako
(a)(code)
, gdzie kod jest łańcuchem.Wypróbuj online!
W jaki sposób?
Wszystkie możliwe przypadki zostały podsumowane poniżej. Są tylko dwa przypadki, w których musimy przełączyć akumulator( a = 0 , x =012)) i ( a = 1 , x =102)) .
źródło
sed -E,
2619 bajtówAż -7 bajtów z @Cowsquack realizując usunięcie wszystkich par działa tak samo.
Pobiera dane wejściowe konkatenowane razem na standardowe wejście. Zainspirowany odpowiedzią Jo Kinga Perla . Usuń
końcowe paryUsuń wszystkie pary, a następnie uzyskaj ostatnią cyfrę.Wypróbuj online!Wypróbuj online!źródło
s/.*\B//
, ale i tak zmiana podejścia nieco daje jeszcze krótsze 19 bajtów Wypróbuj online!s/(.)\1//g
to zadziała, ponieważ może usunąć koniec jednej pary i początek następnej, ale nadal działa. Świetny!s/(.)\1//g
jest równoważne zs/00|11//g
pokazanym w moim rozwiązaniu.Retina 0.8.2 ,
1811 bajtówWypróbuj online! Link zawiera przypadki testowe. Pobiera dane wejściowe skonkatenowane. Zaoszczędzono 6 bajtów dzięki @CowsQuack za zwrócenie uwagi na to, że usunięcie wszystkich podwójnych znaków, a następnie pobranie ostatniej pozostałej postaci działa, chociaż w rzeczywistości port oryginalnej odpowiedzi @ JoKing mógł zostać golfowany o 3 bajty nawet bez tej sztuczki.
źródło
!`.$
, a następnie kolejne 4 bajty, ponieważ nie musisz ograniczać się do par końcowych ...Python 3 , 38 bajtów
Wypróbuj online!
Na podstawie rozwiązania Joela . Pobiera dane wejściowe jako listę początkowej wartości akumulatora (długość jeden ciąg), a następnie polecenia (długość dwa ciągi). Znajduje ostatnie polecenie o dwóch nierównych wartościach i wyświetla jego drugi znak.
Aby spadła do początkowej wartości akumulatora, gdy nie ma takich poleceń, robimy to, aby ciąg wartości początkowej o jednym znaku przeszedł test. Robimy to, sprawdzając, czy lista singletonów z ostatnim znakiem nie jest równa liście wszystkich poprzedzających znaków, która jest przekazywana przez dowolny ciąg długości-jeden lub długość-dwa ciąg z dwoma różnymi znakami.
źródło
Perl 5
-p
,3733 bajtówWypróbuj online!
Dane wejściowe to dwa wiersze: pierwszy wiersz to sekwencja poleceń, drugi to akumulator.
źródło
Python 2 , 56 bajtów
Wypróbuj online!
źródło
Galaretka ,
86 bajtówWypróbuj online!
-2 bajty dzięki Nickowi Kennedy'emu, który poinformował mnie o zmianie zasad. (Jego proponowany golf
EÐḟFȯṪ
wydaje się nieco mądrzejszy, ale ma taką samą długość jak moje poprzednie rozwiązanie minuss2
.) Format wejściowy przyjmuje teraz polecenia jako listę dwuznakowych ciągów, ale stopka testowa tłumaczy dla wygody stary format.Przetłumaczone z mojego nowszego rozwiązania Brachylog.
Stara wersja:
Galaretka , 13 bajtów
Wypróbuj online!
Nie jestem w 100% pewien, że jest to poprawne, ale udaje się to we wszystkich trzech przypadkach testowych. Traktuje polecenia jako lewy argument, a początkowy akumulator jako prawy argument.
źródło
EÐḟFȯṪ
dane wejściowe takie jak np[[0,0],[0,1],[1,1],[1,1],[0,1]]
.Haskell , 29 bajtów
Definiuje nienazwaną funkcję w pierwszym wierszu z typem
(Foldable t, Eq b) => b -> t [b] -> b
. Na potrzeby tego kodu golfa możemy utworzyć jego instancję, gdyChar -> [String] -> Char
pierwszym argumentem jest akumulator, a drugim listą ciągów, przy czym każdy ciąg jest pojedynczą komendą.Wypróbuj online!
źródło
Python, 111 bajtów
Nie golfił. EDYCJA: AHHH Ktoś mnie pobił!
źródło
Haskell , 36 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako miejsce, w
f(string)(char)
którym znak jest akumulatorem, a ciąg znaków jest listą poleceń.źródło
05AB1E , 3 bajty
Wypróbuj online!
Zip, zrzuć na stos, wymień.
źródło
Stax , 3 bajty
Uruchom i debuguj
Dla każdej instrukcji wykonaj tłumaczenie znaków.
źródło
Keg ,
-ir
, 16 bajtówWypróbuj online!
Wyjaśnione:
Pobiera niejawne dane wejściowe i przesuwa wartość akumulatorów na dół
Powtórz następujące czynności (długość stosu - 1 podzielona przez 2) razy
2.1 Przesuń akumulator z powrotem na górę
2.2 Porównaj pod kątem równości z pierwszą częścią polecenia
2.2.1 Jeśli to prawda, wymień akumulator, w przeciwnym razie pop zastąp
Dane wejściowe są pobierane jako początkowa wartość acc połączona ze źródłem. Na przykład
źródło
Bash ,
5840 bajtówDodaj jeden bajt dla pełnego programu: zmień
f
na$0
.58 bajtówWypróbuj online!Trójka zwróci false, gdy
$1
jest ustawiona na0
, ale,1
na końcu zapewnia, że całość((expression))
zwróci true, z wyjątkiem błędu składniowego.Po zużyciu wszystkich argumentów występuje błąd składniowy i rekurencja się kończy.
źródło
Węgiel drzewny , 16 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Bierze osobne argumenty. Wyjaśnienie:
Podziel instrukcje na pary cyfr i nałóż na nie pętlę.
Jeśli akumulator jest równy pierwszej cyfrze ...
... następnie przypisz do niej drugą cyfrę.
Wydrukuj akumulator na końcu pętli.
źródło
MATL ,
1312 bajtówPobiera dane wejściowe jako macierz 2-kolumnową, gdzie każdy wiersz jest poleceniem i liczbą
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe
źródło
Galaretka , 7 bajtów
Dyadic Link akceptujący program jako listę liczb całkowitych po lewej stronie i początkowy akumulator po prawej stronie, który daje liczbę całkowitą.
Wypróbuj online! Lub zobacz zestaw testowy
źródło
PHP , 38 bajtów
Wypróbuj online!
Zasadniczo port pomysł Jo Kinga .
źródło
Runiczne Zaklęcia , 28 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako ciąg bajtów oddzielonych spacjami (Runiczna nie rozumie list). Pierwszy bajt to stan początkowy, a co drugi bajt to program. Walidacja nie jest przeprowadzana (tzn. Zakłada, że tylko prawidłowe programy są podawane jako dane wejściowe i nie ma znaczenia, jaką wartość stosuje się do reprezentowania
0
i1
).źródło
Montaż x86, 33 bajtów
Przyjmuje początkowy stan akumulatora w
CL
(liczba całkowita0
lub1
) i adres poleceń jako łańcuch ASCII zakończony zeremESI
. Pozostawia końcowy stan akumulatora wCL
.Skieruj instrukcję wywołania na offset
0x1B
(etykietainterpret
w Objaśnieniu).Objaśnienie (Korzystanie ze składni Intel):
źródło
C (gcc) ,
4541 bajtówWypróbuj online!
Ogolono 4 bajty dzięki @ErikF!
źródło
Kryształ , 46 bajtów
Z poleceniami w
Array(Tuple(Int32,Int32))
, takimi jak[{0,0}, {0,1}, {0,0}]
.def f(s,i);i.map{|c,v|s+=~(s^c)&(s^v)%2};s;end
Wypróbuj online!
Jest to dość proste do zrozumienia w bardziej czytelnej formie:
Funkcja zapętla każde polecenie, automatycznie rozpakowując wartości krotek do
c
iv
. Następnie ustawiastate
według wzorudo czego doszedłem głównie metodą prób i błędów. Po przetworzeniu wszystkich poleceń zwraca wartość stanu.
źródło
C (clang) ,
6862 bajtówWypróbuj online!
Pobiera wskaźnik na początek ciągu źródłowego, wskaźnik na koniec ciągu źródłowego (start + strlen (start)) i początkową wartość akumulatora.
Stara wersja (drukuje ASCII 48/49 dla 0/1):
źródło
Java (JDK) , 38 bajtów
Wypróbuj online!
Wejścia są
int
iIntStream
z0
,1
,2
i3
, które odpowiadają00
,01
,10
,11
z binarnym.źródło