Wymagania:
- Wejdź na stdin, w tym nowe wiersze / zwroty karetki o nieograniczonej długości (ograniczone tylko pamięcią systemową; to znaczy, że program nie ma żadnych ograniczeń).
- Wyjście odwrotne wejścia na standardowe wyjście.
Przykład:
Wejście:
Quick brown fox
He jumped over the lazy dog
Wynik:
god yzal eht revo depmuj eH
xof nworb kciuQ
Najkrótsze wygrane.
Tabela liderów:
var QUESTION_ID=242,OVERRIDE_USER=61563;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>
strrev
ƃop ʎzɐʃ ǝɥʇ ɹǝʌo pǝdɯnɾ ǝH
xoɟ uʍoɹq ʞɔınΌ
stroną byłoby: ;-POdpowiedzi:
Golfscript - 3 znaki
zaciemniona wersja ma również 3 znaki
oto wyjaśnienie, jak działa %
źródło
Bash - 7
tac
odwraca kolejność linii, arev
odwraca kolejność znaków.źródło
alias z='tac|rev'
rev|tac
taki sam wynik - wystarczy dodać notatkę, aby powiedzieć, że działa to dla dowolnej powłoki POSIX, nie tylko Bash.BrainFuck, 10 znaków
Pokonuje sporą liczbę odpowiedzi na tak prosty język.
źródło
C, 37 bajtów
źródło
Haskell - 21
źródło
Python,
4140 bajtów41 -> 40 - usunięto średnik na końcu programu.
Prawdopodobnie można go zoptymalizować!
źródło
print raw_input()[::~0]]
? To wciąż Python 2 z powoduprint
# Language Name, Character/Byte Count
Pancake Stack ,
342316 bajtówZakłada, że wejście jest zakończone znakiem zerowym (
^@
w wierszu poleceń). Przykład uruchomienia za pomocą interpretera :źródło
APL, 2
Lub CircleBar QuoteQuad, jeśli znaki nie przechodzą, co oznacza po prostu: odwrócone wprowadzanie znaków z klawiatury.
źródło
⍞
.⌽
Jest to pełna funkcja anonimowa, które mogą być przypisane i wykorzystane:f←⌽
f 'The quick brown fox'
.Perl - 23
źródło
print"".reverse<>
jest tylko 17 znaków. A dzięki Perlowi 5.10+ możesz zapisać dwa dodatkowe znaki, używającsay
zamiastprint
.print~~reverse<>
dla 16 znakówsay~~reverse<>
działałoby? 14 znaków.Ruby - 19 znaków
źródło
C - 47 znaków
Zauważ, że wykorzystuje to przestrzeń stosu O (n). Wypróbuj online!
źródło
main(c){(c=getchar())>0&&main(),putchar(c);}
c>=0
może zostać~c
Windows PowerShell, 53
5430.01.2011 (54) - Pierwsza próba
30.01.2011 (53) - Podziały wierszy są fajne.
2011-01-3- (52) - Również wbudowane przypisania zmiennych.
źródło
-join($a="$args")[$a.Length..0]
sam w sobie wydaje się działać dla podanego przykładu, nie mam żadnych problemów z podziałami linii działającymi z systemem Windowscrlf
- nie jestem pewien co do psv2 lub czegokolwiek, czego użyłeś podczas pisania.$input
jest narzędziem wyliczającym uzyskującym wiersze, więc nie można tak go przekreślić.Perl 5.1, 14
źródło
Befunge-93 - 11x2 (22 znaków)
Testowane przy użyciu tego interpretera .
źródło
Binary Lambda Calculus - 9 bajtów
Źródło: http://ioccc.org/2012/tromp/hint.html
źródło
Rozszczepienie ,
161412 bajtówWyjaśnienie
Przepływ kontrolny zaczyna się
D
od opadającego(1,0)
atomu.?
Czyta ze standardowego wejścia, jeden znak naraz, wyznaczając masę do kodu znaków czytać i energii do0
. Gdy uderzymy w EOF,?
zamiast tego ustawimy energię na1
.[
Przekierowuje się na atom oZ
przełącznika. Tak długo, jak czytamy postacie, energia będzie0
, więc atom jest odchylany w górę przezZ
. Klonujemy atom, zapętlając jedną kopię z powrotem do,?
aby kontynuować czytanie danych wejściowych. Zwiększamy energię druga kopia do1
z$
i odkłada ją na stosieK
. Zatem pętla wejściowa jest następująca:Gdy energia
1
wynika z EOF,Z
zamiast tego przepuści atom prosto i0
ponownie obniży energię .~
dodatkowo zmniejsza energię-1
. Atomy o ujemnej energii wyskakują ze stosu, abyśmy mogli pobrać postacie w odwrotnej kolejności i wydrukować je!
. Zauważ teraz, że siatka jest toroidalna, więc atom pojawia się ponownie na lewej krawędzi tego samego rzędu. Pamiętaj, że wcześniej zwiększyliśmy energię wypychanych atomów$
, więc atomy mają teraz energię1
tak jak ostatnia moc wyjściowa?
i ponownie przejdą przezZ
. Ścieżka po EOF jest zatemTa pętla w dolnym rzędzie trwa, dopóki stos nie będzie pusty. Kiedy tak się dzieje, atom jest odbijany z powrotem
K
i jego energia staje się dodatnia (+1
). Zmniejsza~
to jeszcze raz (przesunięcie w lewo), dzięki czemu teraz uderzamyZ
energią nie dodatnią. To odchyla atom w dół, tak że kończy się na klinie miejsca, wY
którym jest przechowywany, a ponieważ nie ma już ruchomych atomów, program kończy się.źródło
> <>,
1614 bajtów-2 bajty autorstwa @JoKing
dwa lata (!) później usuwa dodatkowe -1 z odczytu danych wejściowych, zmieniając logikę zatrzymywania.
Wypróbuj online!
Podobnie jak w przypadku innej odpowiedzi> <>, nie musi to odwracać stosu ze względu na sposób odczytu danych wejściowych w pierwszym wierszu. W rzeczywistości nie jestem zbyt pewien, czy to powinna być sugestia dla drugiej> <> odpowiedzi, ponieważ ma ona zupełnie inny wygląd, ale podobną koncepcję.
Główną różnicą jest to, że moja odpowiedź porównuje dane wejściowe do 0, a jeśli jest mniej (tj. Nie ma danych wejściowych -
i
zwraca -1, jeśli nie ma danych wejściowych), przeskakuje do (1,7), jeśli nie, (0, 7). Jeśli przeskakuje do poprzedniej, wyskakuje najwyższa wartość (-1) i rozpoczyna pętlę drukowania. Jeśli przeskoczy do tego drugiego, kontynuuje pętlę wejściową.11 bajtów, wychodzi z błędem
Dzięki uprzejmości @JoKing
Wypróbuj online!
Uważam, że jest to teraz ważne w drodze meta konsensusu.
Poprzednia odpowiedź (14 bajtów)
źródło
o
po;
o
strony; wtedy tego nie zauważyłem. I dzięki za uratowanie. Sprytne użycie porównania do zera, aby pozbyć się ostatniego -1.0=?
na?!
)PHP -
3817 znakówźródło
cat
??stdin
Stack Cats , 7 bajtów
Wypróbuj online!
Istnieje wiele alternatyw dla tej samej liczby bajtów, z których większość jest zasadniczo równoważna w ich działaniu:
Wyjaśnienie
Krótki podkład Stack Cats:
-1
na wierzchu tych zer, a następnie bajty wejściowe na górze tego (z pierwszym bajtem na samym szczycie i ostatnim bajtem nad-1
).-1
na dole, jeśli taki istnieje, a następnie drukujemy wszystkie wartości jako bajty do STDOUT.Teraz właściwy program:
Sp3000 ustawił wyszukiwanie brutalnej siły, aby znaleźć wszystkie inne rozwiązania 7-bajtowe, więc oto kilka alternatyw:
Te trzy warianty są zasadniczo takie same, z tym wyjątkiem, że różnią się, kiedy bitowe NIE jest obliczane i czy używamy pustego stosu po lewej, czy po prawej.
Jak powiedziałem w powyższym wyjaśnieniu,
T
nic nie robi, gdy górna część stosu ma wartość zero. Oznacza to, że!
zamiast tego możemy umieścić środek. Oznacza to, że pierwszyT
to brak operacji , następnie zamieniamy zero na górze na-1
a, a następnie drugiT
wykonuje odwrócenie. Oczywiście oznacza to, że końcowy stan pamięci znajduje się-1
na stosie obok oryginalnego, ale to nie ma znaczenia, ponieważ tylko stos w bieżącym położeniu głowicy taśmy wpływa na wynik.Ten wariant używa
*
(XOR 1) zamiast!
, więc zamienia zero na+1
, iI
jest warunkowym pchnięciem, które popycha wartości dodatnie i prawe, wartości ujemne w lewo i neguje je w obu przypadkach (tak, że nadal otrzymujemy-1
na szczycie oryginalnego stosu, gdy napotkamyT
), więc ostatecznie działa tak samo jak oryginalne<!]T[!>
rozwiązanie.źródło
PHP,
8229242928 znaków82 -> 29: Nowy znak linii zostaje zachowany po odwróceniu za pomocą
strrev
.29 -> 24: Teraz używa składni skrótu
24 -> 29: Teraz czyta wszystkie linie zamiast jednej linii
źródło
fgets(STDIN)
czyta tylko pierwszą linię.Befunge-98 -
1110(Testowane z cfunge)
Poniższy wariant nieznacznie łamie wymaganie: wykonuje zadanie, ale później generuje nieskończony strumień zerowych bajtów (i nie kończy się).
Działa tak, że wielokrotnie odczytuje dane wejściowe do stosu (
~
) po jednym znaku, przeskakując (#
) przecinek. Po osiągnięciu EOF~
działa jak odbłyśnik, a komputer się przewraca, wielokrotnie wyskakując i wysyłając znak (,
) podczas przeskakiwania (#
) tyldą.źródło
#v~
Linia 2::<,_@#
. Zabawne, że używaniej
go tutaj nie poprawia.Pyth -
354 bajtyOryginalna wersja 3-znakowa nie odwróciła kolejności wierszy, tylko linie. Potem wymyśliłem tę 5-znakową wersję:
Zapisałem 1 bajt dzięki @FryAmTheEggman, aby go uzyskać:
Demo na żywo.
Wyjaśnienie:
Oryginalne (nieprawidłowe) rozwiązanie:
To technicznie się nie liczy, ponieważ Pyth został stworzony w 2014 roku, ale nadal fajnie jest, że jest związany z GolfScript.
Wyjaśnienie:
źródło
Fk_.z_k
Jestem pewien, że ktoś może dostać coś krótszego niż to, ale to właśnie mam.Cubix ,
98 bajtówOgromne podziękowania dla Martina Endera za ten golf:
Zobacz, jak działa online!
Staje się następującą kostką (
>
wskazuje początkowy wskaźnik instrukcji):Pierwszym krokiem programu jest pobranie wszystkich danych wejściowych.
i
umieszcza 1 bajt danych wejściowych na stosie. O ile dane wejściowe nie są zakończone,?
IP skręca w prawo, owijając się wokół kostki, aż dojedziew
, i odsyła ją z powrotemi
.Po zakończeniu wprowadzania,
?
IP kieruje się na północ, wchodząc w pętlę wyjściową:o
: wydrukuj znak na górze stosuw
: „boczny” wskaźnik po prawej stronie;
: pop znak, który właśnie został wydrukowany\
: odzwierciedlają adres IP, wysyłając go na wschód?
: jeśli pozostały znaki do wydrukowania, skręć w prawo, z powrotem w pętlę.Ostateczny czas
?
został osiągnięty, gdy nic nie pozostało na stosie, IP kontynuuje zamiast tego:i
: weź bajt danych wejściowych. Będzie to po-1
zakończeniu wprowadzania danych.\
: odzwierciedlają adres IP, wysyłając go na północ, na:@
: zakończenie programu.Rozwiązanie 9-bajtowe
Zobacz, jak działa online!
W formie kostki:
Pierwszym wprowadzonym znakiem jest
i
kod wejściowy. Jeśli nie ma już żadnych danych wejściowych, jest to-1
.Następna postać to
?
- decyzja. Jeśli górna część stosu jest dodatnia, obraca się w prawo, owijając kostkę, aż uderzy,/
co przesyła ją z powrotem doi
, tworząc pętlę wejściową. Jeśli jednak TOS jest ujemny, wejście zostało zakończone, a zatem zamienia się w pętlę wyjściową.Pętla wyjściowa jest prosta.
o;
wypisuje i wyskakuje TOS. Przy pierwszym uruchomieniu-1
jest na górze stosu, ale nie odwzorowuje postaci i dlatego jest ignorowany./
odzwierciedla adres IP, który ma zostać przesunięty w lewo, tam gdzie się napotyka!@
- co kończy program, jeśli stos jest pusty. W przeciwnym razie adres IP będzie kontynuowany, uderzając?
ponownie - ponieważ stos nie jest pusty, TOS musi być kodem znaków, z których wszystkie mają wartość dodatnią 1 , więc IP skręca w prawo i kontynuuje pętlę wyjściową.1 Oba rozwiązania zakładają, że dane wejściowe nie będą zawierać pustych bajtów.
źródło
05AB1E, 1 bajt
R odwraca wejście.
źródło
,
końcu nie potrzebujesz , ponieważ góra stosu jest drukowana automatycznie, gdy nic nie jest drukowane.Wumpus , 12 bajtów
Wypróbuj online!
Odpowiedź Martina dobrze pokazuje przepływ trójkątnej siatki Wumpusa, ale pomyślałem, że spróbuję tego wyzwania z linią jednopowłokową.
Łatwiejsza do zrozumienia wersja (jeden bajt dłużej) to:
który działa tak:
Teraz spójrzmy na wersję golfową, która różni się w środku:
Wersja w golfa oszczędza bajt, nie wymagając wyraźnego polecenia,
;
aby pop obcy -1. W EOF ten program przeskakuje do miejsca,(4, 0)
w(8, 0)
którym wykonuje się4*0.
ponownie - z tym wyjątkiem, że obce -1 jest na wierzchu! To powoduje, że przeskakujemy do tego(-4, 0)
, co z powodu zawijania jest takie samo jak(8, 0)
dla tej siatki, doprowadzając nas tam, gdzie chcemy, jednocześnie zużywając obcą wartość.źródło
Wumpus ,
1311 bajtówWypróbuj online!
Wyjaśnienie
Ponieważ Wumpus jest językiem stosowym, podstawową ideą jest odczytanie całego STDIN do stosu, a następnie wydrukowanie całego stosu od góry do dołu. Interesującą częścią jest tutaj przepływ kontrolny przez siatkę.
Aby zrozumieć przepływ sterowania, musimy spojrzeć na rzeczywisty układ siatki trójkątnej:
Adres IP zaczyna się w lewym górnym rogu i idzie na wschód. Widzimy, że istnieje pętla przez grupę sześciu komórek po lewej stronie i gałąź poza
\
. Jak można się spodziewać, pętla odczytuje wszystkie dane wejściowe, a sekcja liniowa na końcu zapisuje wynik z powrotem do STDOUT.Najpierw spójrzmy na pętlę. Bardziej sensowne jest myślenie, że pierwszy
)?\
nie jest częścią pętli, a rzeczywista pętla zaczyna się odi
. Oto wstępny fragment:Następnie rozpoczyna się pętla:
To pozostawia odcinek liniowy na końcu:
źródło
PHP - 44 znaki
źródło
Perl
źródło
Rozszczepienie ,
2015 bajtówAlgorytm jest bardzo podobny do Martina, ale implementacja różni się znacznie.
Jak to działa
Wszystko zaczyna się od
R
, który uwalnia atom na wschód o masie 1 i energii 0.Po uderzeniu
?
znak wejściowy zostaje zapisany jako masa atomu, a energia zostaje pozostawiona na 0, chyba że stdin zwróci EOF, w którym to przypadku energia staje się 1.J
jest poleceniem skoku Fission i przeskakuje atom do przodu o liczbę komórek równoważną jego bieżącej energii, pozostawiając atom z zerową energią. Na razie nasz atom ma 0 energii i ignoruje to polecenie.Następnie uderzamy
%
, co jest zmianą. Z większą niż 0 energii, nasz atom byłby skierowany w dół (jakby odbite przez\
zwierciadło), ale ponieważ mamy dokładnie 0 energię, jesteśmy posłani w górę o przeciwnej lustro/
.Nasz atom trwa, dopóki nie uderzy w drugie lustro,
\
tym razem kierując go w lewo.Zwiększamy energię atomu do 1 za pomocą
$
i używamyX
do powielenia atomu. Jedna kopia będzie odzwierciedlać powrotem na$
polecenia (pozostawiając tę kopię z 2 energii), a drugi egzemplarz zostanie odłożony na stosie,K
.Nasza odbita kopia przesuwa się wstecz, skąd przyszła, aż ponownie dotknie
%
przełącznika. Teraz, gdy mamy pozytywną energię, odbijamy się tak, jakbyśmy uderzyli w\
lustro, owijając się wokół planszy na następnąS
i zmniejszając naszą energię do 1.S
Komenda pochłonie 1 energii, aby zachować nasz kierunek. Gdybyśmy nie mieli energii, atom odbiłby się tak, jakby uderzył go\
lustro w dół. Zamiast tego ponownie przechodzimy w prawo i zbieramy więcej danych za pomocą,?
a cykl się powtarza.Gdy nasz atom osiągnie EOF,
?
polecenie zgromadzi 1 energię w atomie. Tak więc, kiedyJ
tym razem uderzymy w komendę, całkowicie przeskakujemy%
przełącznik i lądujemy naS
przełączniku z zerową energią.Ponieważ nasza energia została zużyta podczas skoku, nasz przełącznik nie zachowuje naszego kierunku
S
, ale jesteśmy raczej skierowani w dół. Następnie zmniejszamy naszą energię do -1 za pomocą~
polecenia i owijamy planszę. Po trafieniu ujemną energiąK
polecenie rozrywa atom zamiast go popychać. Wysyłamy nasz nowo wysadzony atom!
i używamy energii 1 tego atomu do ominięciaS
przełącznika, a cykl się kończy.Jeśli stos
K
był pusty, energia naszego atomu jest zanegowana (co daje +1 energii) i jest odbijana z powrotem na~
polecenie, pozostawiając ją z energią 0. PoS
ponownym trafieniu jesteśmy odchylani w prawo, aż do trafienia?
. Po osiągnięciu EOF?
niszczy atom i kończy program.źródło
Labirynt , 10 bajtów
Zwykle programy Labiryntu mają przypominać labirynty, ale udało mi się tak mocno skompresować pętle, że kod skończył się jako pojedynczy blok (pomieszczenie?). Oto nieco rozszerzona wersja, która ułatwia śledzenie przepływu sterowania:
,
odczytuje jeden bajt na raz ze STDIN, aż trafi do EOF i powróci-1
. Te)
przyrosty to wartość tak, że mamy coś pozytywnego dla każdego bajta czytać i zera na EOF. W:
duplikaty każdy odczytać bajt.Po trafieniu w EOF wskaźnik instrukcji przechodzi do drugiej pętli, gdzie wielokrotnie odrzuca jedną wartość za pomocą
;
(początkowo EOF, później druga kopia każdego bajtu), a następnie zmniejsza następną wartość za pomocą(
i drukuje ją za pomocą.
. Dzięki tej drugiej kopii (która zawsze jest pozytywna) wiemy, że adres IP skręci w prawo na górze i będzie kontynuował tę pętlę.Po wydrukowaniu wszystkich bajtów górna część stosu jest ponownie zerowa, a adres IP jest kontynuowany prosto do
@
i program się kończy.Pozornie niepotrzebne duplikowanie każdego bajtu pozwala mi upewnić się, że (nawet w ciasnych pętlach wersji golfowej) IP zawsze przyjmuje właściwy obrót i nigdy nie przechodzi z jednej pętli do drugiej.
Porada dla TheNumberOne i Sp3000, których własne próby bardzo pomogły w znalezieniu tego wysoce skompresowanego rozwiązania.
źródło