Wyzwanie
Biorąc pod uwagę dwie liczby całkowite A
i B
jako dane wejściowe, musisz napisać program, który wyprowadza if A>B
, A==B
lub A<B
.
Liczby całkowite będą w dowolnym rozsądnym zakresie obsługiwanym przez Twój język, który zawiera co najmniej 256 wartości.
Twój program może być pełnym programem lub funkcją, przyjmując dane wejściowe przez STDIN lub argumenty funkcji.
Wyjścia
Jeśli A>B
wyjście
A is greater than B
Jeśli A==B
wyjście
A is equal to B
Jeśli A<B
wyjście
A is less than B
Gdzie zamieniasz A
i B
dla ich wartości całkowitych.
Zwycięski
Najkrótszy program w bajtach wygrywa.
Tabela liderów
var QUESTION_ID=55693,OVERRIDE_USER=8478;function answersUrl(e){return"http://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"http://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>
Odpowiedzi:
CJam, 47 lat
Wypróbuj online
Wyjaśnienie:
źródło
[A B]
i usunąć je]
ze swojego kodu.~_~
...Python 2,
959476 bajtówDane wejściowe muszą być oddzielone przecinkami.
źródło
cmp(A,B)
jest i co robi? :)Labirynt ,
180152149 bajtówEdycja: Udało się ogolić 3 bajty przez ponowne użycie
10
pomiędzy101
,103
a108
(kody znakówe
,g
il
). Poniższe wyjaśnienie tego nie odzwierciedla, ale nie jest to istotna zmiana.Wyjaśnienie
Niewiele możemy zrobić, aby zaoszczędzić bajty na wydrukowaniu ciągów, będą to po prostu długie odcinki liniowe. Zatem głównym wyzwaniem w golfie jest unikanie dużych ilości niepotrzebnych białych znaków. Oznacza to, że chcemy, aby części liniowe „promieniowały” z lewej kolumny. Możemy również zyskać trochę więcej oszczędności, ponownie wykorzystując drukowany kod
than B
. Spójrzmy więc na przepływ sterowania tutaj:Program rozpoczyna się od polecenia obrotu siatki
<
. To przesuwa bieżący wiersz cyklicznie w lewo z adresem IP, więc otrzymujemy:Teraz adres IP znajduje się w izolowanej komórce, więc wykonuje to samo polecenie raz po raz, podczas gdy
<
podróżuje dalej w lewo, aż ...W tym momencie adres IP musi gdzieś iść i wykonuje pierwszą sekcję liniową (drugi rząd) od prawej do lewej. Czyta
A
, kopiuje, drukuje. Użyj znaku oddzielającego między liczbami, drukiemis
(i spacjami). Potem przeczytajB
, skopiuj i odejmijA
od niego na-
.W tym momencie uderzamy pierwszy „widelec w drodze”. Jeśli uzyskana różnica
0
, adres IP przesuwa się prosto w kierunku dolnej gałęzi. Ta gałąź po prostu drukujeequal to
a następnieB
.W przeciwnym razie adres IP skręca w lewo w kierunku dwóch no-ops
""
. Potem jest kolejny widelec. Jeśli różnica była ujemna, IP skręca w lewo w kierunku długiej górnej gałęzi. Ta gałąź po prostu drukuje,greater than
a następnieB
.Jeśli różnica była dodatnia, adres IP ma prawo do dolnej gałęzi, która drukuje
less
. Teraz chcemy ponownie wykorzystaćthan
drugą gałąź. Ale jednocześnie nie chcemy później łączyć dwóch gałęzi, ponieważ potrzebowalibyśmy całą masę niepotrzebnych miejsc. Zamiast tego używamy kilku zakazów, aby wyrównać dolną gałąź z miejscem, w którymthan
zaczyna się na górnej gałęzi, a następnie ponownie zacząć manipulować źródłem za pomocą^
:Znów jest to izolacja adresu IP, więc
^
jest wykonywana ponownie i otrzymujemyTeraz IP może kontynuować ruch w prawo i drukowania
than
iB
wymagane.źródło
JavaScript (ES6), 66 bajtów
Definiuje anonimową funkcję. Przetestuj, dodając
f=
przed nim i nazwij to takalert(f(4, 5))
Niestety nie ma oszczędności z powtarzalnego „niż”.
źródło
than
.public void c(int a,int b){System.out.print(a+" is "+(a==b?"equal to ":a>b?"greater than ":"smaller than ")+b);}
alert()
należy dodać do wyniku.alert()
jako część kodu i liczby bajtówJava,
114113 bajtów lub74 7267, jeśli zastosowaliśmy notację lambdaPodziękowania dla Kevina Cruijssena za rozwiązanie oparte na curry:
a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"less")+" than ")+b
Stare rozwiązanie przed lambda
jako znaczenie użytkownika hjk w komentarzu, jeśli użyjemy lambda, możemy znacznie zmniejszyć do 74 bajtów.
źródło
than
:)public
jeśli chcesz. Proponuję zrobić z tego lambda. Możesz usunąć jedno miejsce przed{
.a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"smaller" )+" than ")+b
Tak, wiem, że minęły prawie dwa lata. ;) I rzeczywiście możesz użyćless
zamiast nasmaller
podstawie opisu wyzwania, jak wspomniano w dwóch komentarzach powyżej. Wypróbuj tutaj, aby zobaczyć, jak odbywa się curry.R, 80 bajtów
źródło
function(A,B)cat(A,"is",if(A==B)"equal to"else c(if(A>B)"greater"else"less","than"),B)
.Pyth,
5249 bajtówźródło
Julia,
6966 bajtówTen ciąg używa interpolacji do osadzenia
A
,B
i trójskładnikowego wewnątrz pojedynczego łańcucha.Oszczędność 3 bajtów dzięki Glenowi O.
źródło
Perl,
6463 bajtów62 bajty + 1 bajt na
-p
. Pobiera dane wejściowe ze STDIN, z dwoma liczbami oddzielonymi pojedynczym odstępem:Jak to działa:
The
<=>
powroty operator -1, 0 lub 1 zależnie od tego, czy pierwszy argument jest mniejszy, równy lub większy niż drugi. Dogodnie Perl zezwala na ujemne indeksy dolne z tablicami i plasterkami, gdzie ostatni element znajduje się w pozycji -1, drugi do ostatniego elementu w pozycji -2 i tak dalej.W kodzie
używamy wartości zwracanej
<=>
jako indeksu dolnego w wycinku listy, aby uzyskać odpowiedni ciąg, gdzie$`
jest pierwszą liczbą, a$'
drugą.Aby uniknąć powtarzania
than
,x
jest używany jako symbol zastępczy i zastępowany w drugiej zamianie na końcu.Alternatywne rozwiązanie, 63 bajty
62 bajty + 1 bajt na
-p
. Pobiera oddzielone spacjami dane wejściowe ze STDIN, podobnie jak pierwsze rozwiązanie.Jak to działa:
To rozwiązanie wykorzystuje również wycinek, ale wykorzystuje fakt, że w przeciwieństwie do wycinków listy, wycinki tablicowe można interpolować na ciągi znaków (i RHS podstawień). To pozwala nam upuścić
/e
modyfikator i cudzysłowy w operatorze podstawienia.Prawdziwa sztuczka polega na indeksie plastra:
Dla różnych wartości
<=>
daje to:Kiedy tablica lub wycinek tablicy jest interpolowany w ciąg, elementy są automatycznie łączone przez
$"
(domyślnie pojedynczą spację).źródło
Mysz , 79 bajtów
Kiedy napotkane są łańcuchy, są one natychmiast zapisywane w STDOUT, zamiast umieszczane na stosie. Stos może zawierać tylko liczby całkowite.
Nie golfowany:
źródło
GolfScript, 61 bajtów
Oczekuje 2 liczb całkowitych na stosie. Wypróbuj online .
Jak to działa:
\.@.@
- A i B są już na stosie, a ten kawałek kodu sprawia, że wygląd stosu tak:ABBA
.\
zamienia dwa górne elementy na stosie,.
duplikuje górny element i@
obraca 3 górne elementy (1 2 3
->2 3 1
).Następnie trzy przedmioty są wypychane na stos:
=
znak"equal to "
i blok pomiędzy{}
.if
Sprawozdanie robi to: jeśli pierwszy argument wartość true, wykonuje pierwszy blok kodu (drugi argument), w przeciwnym razie, drugi blok kodu (trzeci argument). Więc jeśli A i B są równe, przesunie „stos równy” na stosie. Jeśli nie są równe, wykona kod między blokami. Zauważ, że=
wyskakują dwa górne elementy ze stosu, więc teraz wygląda stosAB
.Wewnątrz bloku po raz pierwszy widzisz
.@.@
. Przed tymi poleceniami stos wyglądaAB
, a potem stosBAAB
. Polecenia są podobne do tych wymienionych powyżej.Potem jest kolejne
if
oświadczenie. Tym razem sprawdza, czy A> B, a jeśli to prawda, wypycha „większy” na stosie. W przeciwnym razie przesuwa „mniej” na stosie. Po pchnięciu jednego z tych dwóch, pcha on „niż” na stosie i łączy go z poprzednim popchniętym łańcuchem.>
wyskakuje również dwa górne elementy stosu, więc teraz wygląda stosBA"string"
.Kolejne trzy polecenia:
" is "\+
." is "
przesuwa ten ciąg na stosie (wygląda na stosBA"string"" is "
),\
zamienia dwa górne elementy (stos wyglądaBA" is ""string"
) i+
konkatenuje dwa górne elementy (stos wyglądaBA" is string"
).Ostatnie polecenie,
@
obraca elementy stosu trzy, więc stos wygląda teraz tak:A" is string"B
. GolfScript automatycznie drukuje wartości stosu na STDOUT po zakończeniu programu, więc otrzymujesz pożądany wynik.źródło
MATLAB, 105 bajtów
Dodano podział linii przed sprintfem, aby ułatwić czytelność. Działa zarówno z podziałem wiersza, jak i bez niego, więc nie jest uwzględniany w liczbie bajtów. Musisz nacisnąć Enter między dwiema liczbami wejściowymi.
źródło
sprintf
!Bash, 76
źródło
Fortran, 129
Arytmetyka Fortrana, jeśli jest idealna do tego wyzwania
Test: ideone
źródło
Bash,
9486 bajtów (zapisane osiem bajtów dzięki Digital Trauma)Test (w systemie Linux):
Użycie parametru
[ ]
afterp=greater
ma zapobiec||
ocenie operatora przed=
wyrażeniem...&&p=greater||(($1<$2))...
(pierwszeństwo operatora!).Alternatywą byłoby użycie nawiasów wokół
(($1>$2))&&p=greater
i(($1<$2))&&p=less
, ale uchwyty sprawiają wewnętrzny zakres zmiennych, takp
by pozostawić niezmienione.źródło
p=equal;q=than;(($1>$2))&&p=greater&&[ ]||(($1<$2))&&p=less||q=to;echo $1 is $p $q $2
Kod maszynowy IA-32 + Linux, 107 bajtów
Hexdump kodu:
Ze względu na ograniczenia sprzętowe kod działa z liczbami z zakresu 0 ... 255.
Kod źródłowy (można skompletować za pomocą gcc):
To poważne nadużycie stosu! Kod buduje komunikat wyjściowy na stosie, od końca do początku. Aby zapisać 4 bajty, używa jednej
push
instrukcji. Aby zapisać 1 bajt, używa dwóch instrukcji:Na szczęście większość fragmentów do napisania ma 4 bajty. Jeden z nich („gre” w „większym”) ma 3 bajty; jest obsługiwany przez naciśnięcie 4 bajtów i usunięcie jednego później:
Procedura, która zapisuje liczby w postaci dziesiętnej, używa
aam
instrukcji do wielokrotnego dzieleniaax
przez10
. Korzystne jest, że oblicza cyfry od prawej do lewej!Ponieważ do zapisania są dwie liczby, kod używa podprogramu, który jest wywoływany dwukrotnie. Ponieważ jednak podprogram zapisuje wyniki na stosie, używa rejestru do przechowywania adresu zwrotnego.
Kod C wywołujący powyższy kod maszynowy:
Wydajność:
źródło
ShortScript , 98 bajtów
Ta odpowiedź nie jest konkurencyjna, ponieważ po tym wyzwaniu opublikowano ShortScript.
źródło
Fourier ,
14774 bajtówNiekonkurencyjny, ponieważ drukowanie ciągów jest nowsze niż to wyzwanie
Wypróbuj na FourIDE!
Nie wiem, dlaczego wcześniej nie pozwalałem na drukowanie ... To sprawia, że kod jest czytelny i jest świetny do gry w golfa
źródło
101
i116
do zmiennych, prawda? Nie jestem pewien, jak / jeśli obsługiwany jest zakres zmienny.C,
15513612783 bajtówźródło
Haskell, 87 bytes
One byte shorter than Otomo's approach.
źródło
Lua, 118 bytes
I don't see enough Lua answers here so...
Ungolfed:
źródło
Python 2, 78 bytes
I love how
cmp()
is really useful, but it was removed in Python 3.Using an anonymous function:
Not using a function (79 bytes):
źródło
JavaScript,
151 104 100 9592 bytesI managed to shorten with help of edc65
źródło
var a
is declaring the variable a. You have to use it in real code for a lot of good reasons. But it's optional in javascript and avoidingvar
you save 4 charactesC# 6,
11310310095 bytesThanks to edc65 for saving 13 bytes and to cell001uk for saving 5 bytes using C# 6's interpolated strings!
źródło
void C(int a,int b){System.Console.Write("A is {0} B",a==b?"equal to":a>b?"greater than":"less than");}
Write("{0} is {1:greater than;less than;equal to} {2}",a,a-b,b)
rs, 105 bytes
The trailing and preceding whitespace is very important!
Live demo and all test cases.
źródło
Pyth,
575553 bytesThis basically does:
Saved 2 bytes thanks to @AlexA.'s suggestion of using
A
instead ofJ
andK
and another 2 bytes by replacing the whole addition mess with a simpler subtraction.Live demo and test cases.
55-byte version
Live demo and test cases.
57-byte version:
Live demo and test cases.
źródło
AQs[Gd"is"d?<GH"less than"?>GH"greater than""equal to"dH
A
instead ofJ
andK
, which saved 2 bytes.O, 67 bytes
Live demo.
źródło
SWI-Prolog, 94 bytes
źródło
Swift,
10592 byteeven shorter with Swift 2.0 (
10390 byte)źródło
Processing, 92 bytes
źródło