Twoim zadaniem jest odwrócenie kolejności prints
wykonywania niektórych .
Specyfikacja:
Twój kod będzie w tej formie:
//some lines of code
/*code*/ print "Line1" /*code*/
/*code*/ print "Line2" /*code*/
/*code*/ print "Line3" /*code*/
/*code*/ print "Line4" /*code*/
//some lines of code
Będziesz musiał print
(lub echo
, lub write
równoważny) te ciągi znaków od czwartego do pierwszego.
Ty decydujesz, które wiersze twojego programu muszą
print
być łańcuchami, ale muszą być one przyległe ;Każda linia może zawierać tylko jeden
print
i nie może przekraczać 60 bajtów ;Ponieważ jest to konkurs popularności , bądź kreatywny i unikaj pisania
goto
prostych lub prostych rzeczyfor(i){if(i=4)print"Line1";if(i=3)...}
Wygrywa to najbardziej pozytywna odpowiedź za 2 tygodnie.
Twój wynik MUSI być
Line4 Line3 Line2 Line1
ORLine4Line3Line2Line1
LUBLine4\nLine3\nLine2\nLine1
(gdzie\n
jest nowy wiersz) i musi być wygenerowany tylko przez wykonanie goprints
wstecz.
Miłego kodowania!
AKTUALIZACJA: Konkurs się zakończył! Dziękuję wam wszystkim :)
Odpowiedzi:
Commodore 64 BASIC
źródło
PHP
Nadużywanie pierwszeństwa ... :-)
źródło
print
może być użyte jako wyrażenie, ponieważ może być w perlu, którego wartością zwracaną jest zawsze1
.!1
zwracabool(false)
, który po wpisaniu jako ciąg zwraca pusty ciąg. Bardziej właściwym ograniczeniem dla PHP może być wymaganieecho
zamiastprint
; powyższe tak naprawdę jest tylko jednym stwierdzeniem.print ("Line 1". !print ("Line2". !print ("Line 3". !print "Line4")));
- wszystko, co jest po prawej stronie instrukcji print, jest jej częścią.print
jest nazywany pierwszym, nie kończy ewaluacji tego, co musi wydrukować, dopóki wewnętrzne (niższe)print
s nie zostaną już wywołane i w pełni ocenione. I!
są tylko po to, aby ukryć jedynki, które wydrukowałyby inaczej. Genialne, @bwoebi!do
Nieokreślone zachowanie jest najbardziej ekscytującym rodzajem zachowania!
Rzeczywista wydajność może się różnić w zależności od kompilatora, konsolidatora, systemu operacyjnego i procesora :)
źródło
Jawa
Korzystanie z odbicia
Wynik:
Wyjaśnienie, dlaczego to działa, można znaleźć tutaj .
źródło
C (i sortowanie Pythona)
Nowa wersja, wykorzystująca makro idealnie pasujące do formatu pytania. Po komentarzu Quincunx dodałem,
return
żeby było ładniej.Działa również w Pythonie, ale drukuje we właściwej kolejności.
Wersja oryginalna - obie są praktycznie takie same, po zastąpieniu makra:
źródło
#define } 0))));
(nie wiem dokładnie, jak działają makra w C). W ten sposób możesz mieć po prostu instrukcje print w metodzie głównej, nic więcej.}
, ale możesz zdefiniowaćreturn
, co teraz zrobiłem. Teraz jest prawie poliglotą -print
składnia działa w kilku językach skryptowych,#define
często jest komentarzem, alemain(){..}
nie działa w żadnym języku, który mógłbym znaleźć.print
zastąpiłoby go to"\n",printf(
?ES6 (przy użyciu trybu wstecz;)
Wow, wygląda na to, że projektanci ECMAScript mieli niesamowitą dalekowzroczność, kiedy włączyli tryb wsteczny do specyfikacji:
Wynik (ocena, naprawdę):
Zauważ, że jest to dokładnie żądana forma, z jedynie niewielkim wstecznym dopasowaniem, aby dopasować składnię trybu . Należy również zauważyć, że tryb ten jest obsługiwany tylko w nowszych wersjach Firefoksa w tej chwili .
Uwaga końcowa: w rzeczywistości nie ma trybu wstecznego. Ale nadal jest to prawidłowy skrypt działający w Firefoksie (skopiuj całość). :RE
ES6 „tryb lax”
BONUS : Oto zaktualizowana wersja, która nie korzysta z trybu wstecz, ale używa nowo określonego „trybu lax”, w którym silnik JS po prostu spróbuje odgadnąć, co powinien zrobić kod, bez względu na przestrzeganie określonej składni JS ( w zasadzie antyteza trybu ścisłego):
Należy pamiętać, że „ tryb lax ” jest obecnie dostępny tylko w przeglądarce Firefox> = 34.; P
źródło
do
źródło
Rubin
Edycja: Alternatywnie
źródło
ruby
-zabawnie z blokami kodu? pastebin.com/LDWpxKx8method_missing
jednak, że sama w sobie jest dość Rubinowa.PHP
Wiem, że to szaleństwo ...
źródło
goto
” ;-)Haskell
To prawie idiomatyczny Haskell, ponieważ program wygląda teraz jak kompozycja funkcji od prawej do lewej. Gdyby funkcja nie była wypisana, ale coś, co zwróciłoby (użyteczną) wartość, deklaracja operatora byłaby niepotrzebna, a kod byłby czymś, co można zobaczyć w bibliotekach.
źródło
(<<) = flip (>>)
<*
i*>
.<*
rzeczywistości operator aplikacji jest inny niż ten<<
:a <* b
jest równoważnydo x<-a;b;return x
, tj.a
Najpierw działa , efektPerl
źródło
HTML + CSS
CSS:
Zobacz jsFiddle .
Edycja:
Aby lepiej dostosować się do reguł, oto wariant XML, który faktycznie używa
print
.gdzie powinien być style.css
HTML bez CSS
I do cholery, oto jedna bez CSS.
Fiddle .
źródło
p {float:right;}
div {float:left}
.C ++
(Zmienne lokalne są niszczone w odwrotnej kolejności do deklaracji.)
C ++ 11
(Tak samo, ale zamiast tego używa lambdas i elementu danych tablicy).
źródło
std::function
i próbowałem się go pozbyć. Teraz nie potrzebuję, bo masz to!Haskell
źródło
JavaScript
źródło
1,2,3,4
jako limitów czasu również działa dla mnie. (Nie wiem jednak, czy to zachowanie jest ustandaryzowane wsetTimeout
jest standaryzowany w HTML5 / timerach , a nie w ES. Określa również minimalny limit czasu wynoszący 4 ms :-)do
Starając się maksymalnie podpowiedzieć wskazówkom zawartym w pytaniu:
źródło
BF
Zakłada owijanie komórek.
Dlaczego to działa?
Pierwszy i ostatni wiersz składają się z pętli, która powtarza się cztery razy (counter =
cell0
).Wewnątrz pętli znajduje się zmienna licznika (
cell1
), która jest zwiększana za każdym razem.Każda linia sprawdza, czy zmniejszenie o cztery, trzy, dwa lub jeden jest równe zero. Dlatego przy pierwszym uruchomieniu licznik jest jeden i wykonywana jest ostatnia linia, przy drugim uruchomieniu wykonywana jest trzecia linia itp.
Te
(line 1)
pokazy gdzie trzeba wprowadzić tekst, który zostanie wydrukowany. Strzałki w pętlach przydzielającell2
do tego celu.[-]
Czyścicell2
po użyciu.źródło
Grzmotnąć
Ku pamięci czcigodnych SleepSort i SleepAdd przedstawiam wam ... SleepReverse :
źródło
$1
i$2
:function print(){(sleep $((4-$2));echo "$1 $2";)&}; print Line 1
Jawa
Wszystko we właściwym czasie ... ;-)
źródło
Python 3
źródło
Grzmotnąć
Oto skrypt o podwójnych twarzach:
źródło
tac
istnieje! Haha dzięki.Wspólne Lisp nr 1
Łatwo jest napisać
ngorp
makro, które wykonuje swoje formularze w odwrotnej kolejności:Wspólne Lisp nr 2
Oto jeden, który bierze problem bardzo dosłownie; kod z pytania pojawia się w programie bez modyfikacji:
źródło
PHP
Kolejny
eval
wariant:źródło
FA#
Właśnie utworzyłem niestandardowego operatora, który wykonuje funkcje w odwrotnej kolejności.
źródło
(?) f g x
czyta mniej więcej tak(?)(f, g, x)
, jakf(g(x))
Go (Golang)
Wypróbuj: http://play.golang.org/p/fjsJLwOFn2
źródło
Python3
Może być o 6 bajtów krótszy, usuwając wszystkie spacje w ostatnim wierszu.
źródło
JavaScript
C ++ 11
źródło
std::reverse
istd::for_each
po prostu użyjwhile (! functors.empty()) { functors.back()(); functors.pop_back(); }
Partia
źródło
DO#
Zamiast bezpośrednio wywoływać metodę Run, tworzę metodę dynamiczną, która zawiera kopię kodu bajtowego Run IL, z wyjątkiem tego, że argumenty opcode łańcucha znaków są zamieniane. Co powoduje, że nowa metoda wyświetla ciągi w odwrotnej kolejności.
źródło
Pyton
jeszcze inne rozwiązanie
eval()
nie jest to bardzo skomplikowane, ale łatwe do zrozumienia.
źródło