var QUESTION_ID=124242,OVERRIDE_USER=61474;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:+r.match(SCORE_REG)[0],language:r.match(LANG_REG)[0].replace(/<\/?[^>]*>/g,"").trim(),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=/\d+((?=$)|(?= Bytes))/i,OVERRIDE_REG=/^Override\s*header:\s*/i;LANG_REG=/^[^,(\n\r]+/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/Sites/codegolf/all.css?v=617d0685f6f3"> <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>
42
w nim dwa razy.Odpowiedzi:
Mathematica, 15 bajtów
Liczba bajtów zakłada kodowanie ANSI systemu Windows (CP-1252).
Definiuje operator binarny,
±
który rozwiązuje problem. Po prostu definiujemy6±9=42
jako szczególny przypadek, który ma pierwszeństwo, a następnie dodajemy rezerwową definicję, która±
równa się mnożeniu. Ten drugi wykorzystuje dość interesującą sztuczkę golfową. Powód, dla którego to działa, jest w rzeczywistości dość skomplikowany i musimy przyjrzeć się sekwencjom . Sekwencja jest podobna do znanej jako ikona w innych językach. Zasadniczo jest to „lista” bez żadnego opakowania. Np.f[1, Sequence[2, 3, 4], 5]
Jest naprawdę sprawiedliwyf[1, 2, 3, 4, 5]
. Inną ważną koncepcją jest to, że wszyscy operatorzy to tylko cukier syntaktyczny. W szczególności±
może być stosowany jako operator jednoargumentowy lub binarny i reprezentuje głowęPlusMinus
. Tak±x
jestPlusMinus[x]
ia±b
jestPlusMinus[a,b]
.Teraz mamy definicję
±n__
. Jest to skrót do definiowaniaPlusMinus[n__]
. Alen__
reprezentuje dowolną sekwencję argumentów. To faktycznie dodaje definicję binarnego (i n-aryjskiego) użyciaPlusMinus
. Wartość tej definicji to1n
. Jak to zwielokrotnia argumenty? Cóż,1n
używa niejawnego mnożenia przez Mathematica przez zestawienie, więc jest to równoważne z1*n
. Ale*
jest też po prostu skrótemTimes[1,n]
. Terazn
jest sekwencja argumentów. Jeśli więc przywołamy,a±b
stanie się toTimes[1,a,b]
. I to jest po prostua*b
.Myślę, że to całkiem fajne, w jaki sposób to nadużycie składni pozwala nam zdefiniować operator binarny przy użyciu składni jednoargumentowej. Mogliśmy teraz jeszcze zrobić
PlusMinus[2,3,4]
, aby obliczyć24
(który można również zapisać jako±##&[2,3,4]
albo2±Sequence[3,4]
ale to jest po prostu coraz szalony w tym punkcie).źródło
*
jest wbudowanym operatorem, więc musiszUnprotect
go dodać, aby dodać kolejne definicje, aleUnprotect[Times];6*9=42
powinien działać (choć nie można teraz testować).Haskell , 14 bajtów
Wypróbuj online!
źródło
C,
32312928 bajtów-2 dzięki Digital Trauma
-1 dzięki musicman523
Dość proste. Deklaruje funkcję makra,
f
która przyjmuje dwa argumenty,a
orazb
.Jeśli
a
jest6
ib
jest9
, wróć42
. W przeciwnym razie zwróća
xb
.Wypróbuj online!
źródło
^
zamiast==
i trochę dostosuj logikę:#define f(a,b)a^6||b^9?a*b:42
- zapisuje 2 bajty.|
zamiast||
zapisać kolejny bajt, ponieważ nadal ma on mniejszy priorytet niż^
JavaScript (ES6), 20 bajtów
Wyjaśnienie:
Iff x == 6 iy == 9,
x-6|y-9
będzie 0 (fałsz), a 42 będzie wynikiem.Skrawek:
źródło
Python 2 ,
3029 bajtówDzięki Jonathan Allan za uratowanie bajtu!
Wypróbuj online!
źródło
lambda x,y:x*[y,7][6==x==y-3]
05AB1E ,
15119 bajtów-4 bajty dzięki @Emigna
-2 bajty dzięki @Adnan
Wypróbuj online!
Jak to działa
źródło
‚D96SQi42ëP
,
na początku?6Qs9Q*
, że działałby również dla tej samej liczby bajtów.P¹69SQi42
Java (OpenJDK 8) ,
2422 bajty-2 bajty dzięki @ OlivierGrégoire
Wypróbuj online!
źródło
System.out.println()
wywołanie i pozwolić funkcji zwrócić wynik?(a^6|b^9)==0
ponieważ nie ma niejawnego porównania „różnego od 0”. Powstały fragment kodu miałby długość 27 bajtów. W każdym razie, dziękuję za sugestię i proszę powiedz mi, czy źle zrozumiałem twoją wskazówkę.int a = 5; if (a) do_some_stuff(); else do_other_stuff();
powodujeType mismatch: cannot convert from int to boolean
błąd kompilacji. Muszą być wykonane jawnie z wartościami logicznymi; odnoszą się do SO i ORACLE .a->b->a==6&b==9?42:a*b
.Ruby, 24 bajty
źródło
a^6|b^9<1
może działać jako boolean. Trudno przetestować na moim smartfonie.(((a^6)|b)^9)
, tzn.a.^(6).|(b).^(9)
Dlatego nie będzie działać poprawnie.a-6|b-9==0
działałoby, ale to nie jest krótsze.a,b==6,9
byłoby miło, ale to też nie działa.Brain-Flak ,
158154148140138126 bajtówWypróbuj online!
Wyjaśnienie
Ten kod jest dość prosty. Tworzymy kopie dwóch najlepszych przedmiotów na stosie, odejmujemy 6 od jednego i 9 od drugiego. Następnie przyjmujemy
not
dwie z tych wartości. Myand
te wartości, pomnóż wynik przez 12. Pomnóż dane wejściowe i odejmij dwa wyniki.źródło
not
iand
(lub ponownie zaznaczyć), czytając twój opis, raczej mnie potknął.Factorio, 661 bajtów, 6 kombinacji z 9 połączeniami
Jest jeden stały kombinator, ustawiony na wyjście A i B. Zmień je, aby ustawić wejście.
Łańcuch planu (0.15.18):
Sygnał wyjściowy jest sygnałem Z i należy go pobierać z górnego i dolnego decytera.
źródło
Galaretka ,
87 bajtówDane wejściowe są w postaci dwóch liczb całkowitych: najpierw prawego operandu, a następnie lewego.
Wypróbuj online!
Jak to działa
źródło
Factorio, 581 bajtów, 3 kombinatory z 4 połączeniami
Łańcuch planu (0.16.36):
Stały lewy dolny kombinator powinien być ustawiony na wyjście A i B jako wejście. Wyjściem jest sygnał Z z prawego dolnego kombinatora arytmetycznego.
źródło
MATL , 11 bajtów
Dane wejściowe to tablica z dwiema liczbami.
Wypróbuj online!
Wyjaśnienie
źródło
GW-BASIC , 55 bajtów
Wynik:
Pierwsza maszyna w pcjs ma IBM BASIC, co jest praktycznie tym samym. Aby to przetestować, przejdź tam, uderz Runw maszynę, naciśnij Enter- Enteri wpisz,
BASICA
aby przejść do trybu BASIC. Następnie wprowadź kod źródłowy (automatycznie wydrukuje się za Ciebie), wpiszRUN
, wprowadź dwie liczby całkowite i gotowe!źródło
INPUT
, są kodowane w mniejszej liczbie bajtów niż sugerują to znaki, które je tworzą. Liczba ta wydaje mi się zatem wysoka.wc
i otrzymałem 55 ... Wkleiłem do mojego emulatora i zachowywałem się zgodnie z oczekiwaniami.OUT.BAS
: i.stack.imgur.com/32eH1.png Liczba bajtów to średnia wartość.R , 33 bajty
Zwraca funkcję.
Wypróbuj online!
źródło
Sprawdź ,
3433 bajtyCheck to mój nowy esolang. Wykorzystuje kombinację semantyki 2D i 1D.
Dane wejściowe to dwie liczby przekazywane przez argumenty wiersza poleceń.
Wyjaśnienie
Stos zaczyna się od argumentów wiersza poleceń. Nazwijmy argumenty
a
ib
.Pierwsza część
.:+&
zasadniczo powiela stos, pozostawiając go jakoa, b, a, b
.>
wypycha 0 na stos (jest to część literału numerycznego uzupełnionego przez9
).#
przełącza na semantykę 2D iv
przekierowuje adres IP w dół. IP natychmiast przechodzi w a#
, które ponownie przełącza się na semantykę 1D.9-!
sprawdza, czyb
jest równe 9 (odejmując 9 i przyjmując logiczne NOT).\>6-!
następnie sprawdza, czya
jest równy 6. Stos zawiera teraz „a, b, 1, 1
i” tylko wtedy, gdyb==9
ia==6
. Mnożenie przez*
przyjmuje logiczne AND tych dwóch wartości, dając,a, b, 1
czy dane wejściowe były6
i9
, ia, b, 0
inaczej.Następnie adres IP biegnie do
?
. Spowoduje to przejście do trybu 2D, jeśli najwyższy stos jest niezerowy, a w przeciwnym razie będzie kontynuowany w trybie 1D.Jeśli górna wartość stosu było
1
, to znaczy, że są inne wartości stos6
i9
, więc popchnąć 42 do stosu z>42
, a następnie przenieść się do drugiego#
w ostatnim wierszu.Jeśli najwyższą wartością stosu była
0
, to wykonanie przechodzi do następnego wiersza.d
usuwa0
(jak?
tego nie robi), a następnie mnożymy dwa wejścia przez*
. Te##
przełączniki i wyjść z trybu 2D, nic nie robiąc.Oddziały ponownie dołączyły. Stos zawiera albo
6, 9, 1, 42
, alboa*b
.p
wypisuje górną wartość stosu, a następnie program się kończy, odrzucając resztę stosu.źródło
JavaScript (ES6), 25 bajtów
źródło
Python 3 ,
3633 bajtówWypróbuj online!
źródło
lambda x:x[0]*x[1]if x!=(6,9)else 42
. Jedyną różnicą jest typ wejścia.f=lambda x,y:42if6==x==y-3else x*y
APL (Dyalog) , 10 bajtów
Wypróbuj online!
×
produkt (argumentów)-
minus12×
dwanaście razy6 9≡
czy (6,9) jest identyczne z,
konkatenacja (argumentów)źródło
R, 41 Chyba nie wiem, jak liczyć bajty Jestem nowy: D
Definiuję funkcję, której argumentami są aib w tej kolejności . Jeśli a równa się 6, a b równa się 9, zwraca 42, w przeciwnym razie razy b
źródło
ifelse(a==6&b==9,42,a*b)
function(a,b)`if`(a-6|b-9,a*b,42)
.SPL , 356 bajtów
Z nowymi liniami i spacjami:
źródło
Japt ,
131112 bajtówWypróbuj online
21 bajty zapisane dzięki obarakon.źródło
N¬¥69?42:N×
dla 11 bajtówStandardowy ML (MLton) ,
2220 bajtówZaoszczędź 2 bajty dzięki @Laikoni!
Wypróbuj online!
Właśnie do tego służy SML, dlatego pokonuje shortC i Python.
Stara wersja wyglądała o wiele ładniej. : P
źródło
$
jako identyfikatora! Dlaczego to się nie kompiluje, jeśli usuniesz spację między|
i$
?|$
jest analizowany jako pojedynczy symboliczny identyfikator, więc wszystko się psuje. Planuję wkrótce napisać pytanie do SML i dodać odpowiedź na temat tych dwóch rodzajów identyfikatorów.Pyth, 12 bajtów
Wypróbuj online
Wyjaśnienie
źródło
AQ?&q6Gq9G42*GH
Siatkówka , 36 bajtów
Wypróbuj online! Standardowe mnożenie jednoargumentowe, po prostu zmienia dane wejściowe, aby obsłużyć specjalny przypadek.
źródło
Galaretka , 10 bajtów
Monadyczny link zawierający listę dwóch liczb.
Wypróbuj online!
W jaki sposób?
źródło
?
, tak jak ja. ;),
jest wyjątkowy, ponieważ jest częścią dosłownego wzorca wyrażenia regularnego, więc6,9
jest analizowany jako pojedynczy token i szybcy$
mogą go łączyć⁼
. Czy rozumowałeś to, czy po prostu wypróbowałeś i zauważyłeś, że zadziałało?Galaretka , 9 bajtów
Wypróbuj online!
Pobiera na wejściu listę liczb.
źródło
SILOS ,
8167 bajtówWypróbuj online!
W pewnym sensie dodawanie działa jako interesująca bramka NAND w SILOSACH.
-14 bajtów dzięki @Leaky Nun
Zasadniczo tworzymy liczbę „a”, która wynosi 0 (fałsz) iff j wynosi 6 i i = 9, a następnie dzielimy ją samą odejmując jedną i mnożąc przez 12, aby dodać do naszego produktu.
Jeśli „a” wynosił 1 po odjęciu jednego i pomnożeniu, staje się brakiem operacji, jednak w przypadku, gdy a wynosi 0, 0/0 cicho generuje błąd (który jest automatycznie wychwytywany) a staje się 0, a następnie staje się -1 i odejmujemy 12 od naszego produktu.
źródło
0/0
staje się0
.Wypukły ,
161413 bajtówWypróbuj online!
źródło
shortC , 23 bajty
Wypróbuj online!
źródło