Jak dobrze wiadomo ,
Chuck Norris liczył na nieskończoność. Dwa razy
Poza tym ,
Chuck Norris może liczyć do nieskończoności do tyłu.
Ponadto, choć być może mniej znany, Chuck Norris może mówić trochę po hiszpańsku oprócz angielskiego.
Wyzwanie
Napisz program (lub funkcję), który można uruchomić w dwóch różnych językach. W jednym języku program powinien wypisać sekwencję
1, 1, 2, 2, 3, 3, 4, 4, ...
w innym języku powinna generować sekwencję (łącznie z zerami wiodącymi)
1, 2, ..., 9, 01, 11, 21, 31, ..., 89, 99, 001, 101, 201, ...
Zasady
- Programy lub funkcje są dozwolone w dowolnym języku programowania . Standardowe luki są zabronione.
- Różne wersje tego samego języka (takie jak Python 2/3) nie liczą się jako różne języki. Podobne języki (takie jak C / C ++ lub Matlab / Octave) liczą się jako różne.
- Nie zostaną pobrane żadne dane wejściowe.
- Program powinien kontynuować generowanie warunków sekwencji, dopóki nie zostanie zatrzymany przez użytkownika. Ponieważ program nie zatrzyma się sam, wyjście nie może zostać wygenerowane na końcu. Musi być produkowany podczas działania programu, w sposób ciągły lub partiami.
- Dane wyjściowe mogą korzystać ze STDOUT lub równoważnego lub mogą być wyświetlane w oknie graficznym. Dowolny nieliczbowy separator między terminami sekwencji jest dozwolony, o ile każdy termin można wyraźnie odróżnić od terminów sąsiednich. Dopuszczalne jest również, jeśli ekran jest czyszczony między terminami.
- Każda sekwencja może zaczynać się
0
od1
. W takim przypadku w sekwencji „dwa razy”0
należy powtórzyć, podobnie jak inne liczby. - Zera wiodące są znaczące w sekwencji „wstecz”. Na przykład dziesiąty termin to
01
; ani1
nie001
są akceptowane. - Jeśli oba języki używają różnych kodowań znaków, program jest definiowany przez bajty , a nie przez znaki. Oznacza to, że bajty powinny być takie same w dwóch językach.
- Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
05AB1E / galaretka ,
1413 bajtów-1 bajt dzięki Adnanowi (unikaj trzech powtórzeń z niezadrukowanym drukiem)
Surowe bajty (szesnastkowe):
W 05AB1E „s code stronie :
Wypróbuj online!
W Jelly „s code stronie :
Wypróbuj online!
W jaki sposób?
Program 05AB1E drukuje podwójną liczbę z każdym wpisem oddzielonym znakiem nowej linii:
Program Jelly drukuje odwróconą liczbę z każdym wpisem oddzielonym znakiem nowej linii.
Analizator składni potraktuje prawidłowy literał pomiędzy
[
i]
jako zamknięty literał, w przeciwnym razie bajty te są niezdefiniowanymi tokenami i jako takie stają się równoważne tokenom dzielącym kod na linie.==>
nie parsuje się jako literał, więc kod jest efektywny:źródło
Ð,,
przez==
.Python 2 / C (clang) ,
10910710084958889888784 bajtówPython: Wypróbuj online!
C: Wypróbuj online!
Litera L w kodzie Pythona jest częścią separatora.
Wyjaśnienie:
W kodzie C najpierw ustawia i na 0. Następnie rozpoczyna komentarz (
#
poprawny kod w C dla#include
instrukcji), gdzie idzie kod Pythona. Na końcu komentarza definiuje funkcję, która na zawsze inkrementuje zmienną i wypisuje ją dwukrotnie, rozdzielając spacjami. Następnie rozpoczyna się komentarz.W kodzie Python
i=0;
ustawia i na zero. Python ignoruje następny wiersz, ponieważ#
rozpoczyna komentarz jednowierszowy. Następnie na zawsze inkrementuje ją, zamienia na długą liczbę i drukuje odwróconą reprezentację łańcucha. „L” od długiego jest częścią separatora. Następnie rozpoczyna wieloliniowy ciąg, aby skomentować kod C, który kończy się później.-2 bajty dzięki @LuisMendo. -7 bajtów dzięki @ZacharyT. -6 dodatkowych bajtów dzięki @ZacharyT. +11 bajtów, aby naprawić błąd dzięki @ mbomb007. -7 bajtów dzięki @Doorknob. +1 bajt, aby naprawić błąd dzięki @Doorknob. -1 bajt dzięki @yoann. -1 więcej bajtów dzięki @yoann. -3 bajty dzięki @Cyoce.
źródło
a(i){printf("%i %i ",i,i);a(i+1)}
while
pętli do kodu C?`i`
zamiaststr(i)
for(;;)printf("%i %1$i ",i++);
aby zapisać jeden bajt. Jest1$
to argument pozycyjny, który każeprintf
wyświetlić pierwszy argument (po ciągu formatu).Galaretka / Pyth, 15 bajtów
Materiały niedrukowalne są zniekształcone przez oprogramowanie SE, więc oto zrzut heksowy:
Uruchom odpowiednio
jelly f file
ipyth file
.Wyjaśnienie
Najpierw przychodzi część Pyth.
.V
uruchamia nieskończoną pętlę nad sekwencją rosnącą, zaczynając od jej wejścia, które jest tutaj1
. Następnie_
odwracamy (`
) indeks pętli stringified (b
) i domyślnie go wyprowadzamy.;
Jest tam, aby zakończyć pętlę, a"
jest to konieczne w leczeniu resztę programu jako ciąg dosłownym tak że parser nie dusić na nim.Część „Galaretka” zostanie wyjaśniona, tłumacząc najpierw pozostałą część programu ze strony kodowej „Galaretka”:
W
¶
pełni funkcję przesunięcia wiersza, skutecznie ignorując pierwszą część programu poprzez link, który go nigdy nie jest wywoływana. Następnie zaczynamy od1
i uruchamiamy pętlę while (¿
), która używaṄṄ$
(drukuje dwa razy) jako warunek, i zwiększa (‘
) wartość jako treść pętli.Nawiasem mówiąc, zastępując część Pyth z
1[DR,>]
by utworzyć poprawnego złożenia Jelly / 05AB1E w 14 bajtów, ale obecna interpeter zawiera błąd, który uniemożliwia to.źródło
Perl / JavaScript, 87 bajtów
Perl
Mechanizm Użyłem dużo w poliglotów JS / Perl jest nadużywanie fakt, że substytucja może przyjąć prawie dowolnego ogranicznika, stosując
=
środki mogę wykorzystać początkowe podstawienia bezsensownych (pierwszej wymianie0;print
zeconsole.log;m
z flagą/s
w$_
, który jest obecnieundef
) , następnie ustawienie$_
w wyniku zastąpienias
zs
trybu wielowierszowego (/m
), który jest0
. Teraz$_
jest0
i zaczynamwhile
pętlę, a następnie zwiększa się$_
. Następnie wywołujęprint
, przekazując wyrażenie regularne, które pasuje (ze względu||
na koniec, który pasuje do pustego ciągu) i używam&&
operatora, aby następnie wysłać odwrotność$_
konkatenacji z nową linią ($/
jest wstępnie zainicjowany"\n"
). Odlicza się to do nieskończoności do tyłu.JavaScript
Tutaj jest wiele przypisań zmiennych, zamaskowanych w
s///
wywołaniach Perla . Skonfigurować zmiennes
im
jako0
aliasconsole.log
doprint
uruchomić jakąś bezsensowną podział ustaw$_
do0
i rozpocząćwhile
inkrementację pętli$_
, zadzwońprint
przekazując0
(m/s
ta rozpoczyna wywołaniem
w Perlu, ale jest traktowany jako standardowego podziału w JS) i naszym celem ciąg ($_+"\n"+$_
) za pośrednictwem operatora przecinku, który zwraca ostatnią pozycję na liście. Unikam ostatniego fragmentu kodu Perla (&&reverse.$/
), ponieważ$_+"\n"+$_
będzie on zgodny z prawdą i dlatego mogę użyć||
do wytworzeniaRegExp
obiektu zawierającego koniec kodu Perla, który nigdy nie jest oceniany.Testowane przy użyciu Perla 5 i Węzła 6.
źródło
NodeJS / PHP,
131106 bajtów-25 bajtów dzięki @Titus
Używanie NodeJS zamiast JS przeglądarki w celu lepszego formatowania danych wyjściowych i lepszej obsługi nieskończonej pętli.
Wypróbuj JavaScript online
Wypróbuj PHP online
Pamiętaj, że wyjście TIO jest odcinane po 128 KB.
źródło
<!--←printf=(_,i)=>process.stdout.write(i),strrev=i=i>>1//--><?←for($i=0;;)printf("%s ",strrev($i++));
. 84 bajtów (ale nie w połowie tak przyjemne jak twoje podejście):<!--←for(i=1;;)process.stdout.write(i+" "+i+++" ")//--><?for(;;)echo strrev(++$i),_;
lub<!--←for(i=1;;)process.stdout.write((++i>>1)++" ")//--><?for(;;)echo strrev(++$i),_;
.i>>1
na powtórzenie numeru, ale musiałem zmienićwrite(i)
znak, aby zawierał spację, a ponieważwrite()
nie akceptuje liczby. I miałeś literówkę (strrev=i=i>>1
->strrev=i=>i>>1
), która dodała kolejny bajt. Skończyło się na zrobieniuwrite(i+i)
istrrev=i=>i+" "
.V / Brain-flak Classic ,
27, 26 bajtówHexdump:
Wypróbuj online! w V (nieznacznie zmodyfikowany, aby zakończył się, aby można było zobaczyć wyjście. W TIO, V wychodzi tylko wtedy, gdy program się zakończy)
Wypróbuj online! w Brain-flak Classic
Nie jest to najciekawszy z poliglotów, ponieważ kod V nie ma wpływu na klasyczne wybijanie mózgów i odwrotnie, jednak naprawdę fajnie jest używać obu moich języków w wyzwaniu, a oba rozwiązania są dość interesujące na własną rękę.
V Objaśnienie:
Objaśnienie BFC:
źródło
Retina / Python 2, 61 bajtów
Siatkówka | Python 2
źródło
str()
słowem ``, ale najwyraźniej zaburzyłem kod Retina. Nie wiem dlaczegostr
, w przeciwnym razie dostanieszL
wyniki. Ale faktycznie nie działa w siatkówce. Musiałeś zmienić się bardziej niż to, co powiedziałeś, że zrobiłeś, jak przeniesienie czegoś na inną linię.R / Octave ,
83807871 bajtów-3 bajty dzięki Luisowi Mendo
#{ }#
jest komentarzem blokowym Octave i#
tak się składa, że jest to komentarz dla R. Interpretator R widzi następną linię jako treśćwhile
pętli, a interpreter Octave przeskakuje bezpośrednio do kodu OctaveCzęść R drukuje pary liczb zaczynające się od 1, a część Octave drukuje liczby wstecz zaczynające się od 0.
W pełni oczekuję, że zostanę obezwładniony (nawet przez tę samą kombinację języków); Właśnie pisałem ostatnio tyle kodu Matlab i R, że pomyślałem, że spróbuję.
Wypróbuj online! - Łącze oktawowe
źródło
i=i+1
?+=
nie działa w R, więc tak, musi tak być.end
konieczne?while(1)
), możesz zapisać te bajty.Ruby / Python2:
6864 bajtyRubinowa perspektywa
prosty init zmiennej:
"#{}"
jest składnią interpolacji ciągów. Zamiast tego używam go do wykonania wyrażenia.p
jest skrótem odputs
.loop
tworzy nieskończoną pętlę.Następnie jest
exec
rzecz, ale nigdy nie jest ona oceniana, ponieważ nieskończona pętla jest z definicji nieskończona. Potrzebneexec
nie uzyskując błąd składni z kodem Pythona.Perspektywa Pythona
Z perspektywy Pythona istnieje coś wspólnego
i=0
. Następnie Python ma inną składnię do interpolacji ciągów, więc ten wiersz jest po prostu odrzucany. Następnie jest nieskończona pętla podobna do tego, co opublikowali inni.źródło
Bash / Check ,
5028 bajtówDzięki @Doorknob za zapisanie kilku bajtów poprzez przejście z Pythona na Bash
Grzmotnąć:
To tylko niektóre komentarze, które są ignorowane.
Rozpocznij sekwencję od 1 do nieskończoności, a następnie potokuj wynik do
rev
.Sprawdzić:
To natychmiast przechodzi w tryb 2D, idąc w prawo.
>
kieruje prawem własności intelektualnej, co nie ma wpływu. Owija się do początku linii i uderza#
ponownie, co wyłącza tryb 2D. Następnie uderza>
w tryb 1D, który wypycha 0 na stos. Ponieważ jest w trybie 1D, IP zawija się do następnej linii.#
ponownie przełącza IP w tryb 2D iv
kieruje go w dół.Pierwszy
#
ponownie przełącza się w tryb 1D.p
wysyła TOS jako liczbę (ale go nie wyskakuje), a następnie<
drukuje nowy wiersz. Odbywa się to dwukrotnie, a następnie zwiększa się liczbę)
.#
przełącza się ponownie w tryb 2D, więc IP zawija się na początek linii, uderza,#
aby przełączyć do trybu 1D itp.źródło
#
komentarze i może wykonać „odwrócone cyfry” zadanie bardzo łatwo:seq 1 inf|rev
.i=1;loop{puts i.to_s.reverse;i+=1}
jest krótszy o jeden bajtCJam /> <>,
2723 bajtówDo CJam:
Wypróbuj online! - zauważ, że musisz poczekać do 60 sekund, aby zobaczyć wynik, ale działa on offline.
Definiuje to wieloliniowy literał łańcuchowy, który nigdy nie jest używany.
Druga linia wygląda następująco:
Do> <>:
Zaczyna literał ciąg.
Treść dosłownego ciągu znaków. Każdy z kodów znaków jest indywidualnie wypychany na stos.
Adres IP zawija się, aby osiągnąć
"
ponownie, co kończy tryb ciągów.l
bierze długość stosu,a
wypycha 10 i,
dzieli. To daje nam długość stosu / 10.:
duplikuje,n
drukuje jako liczbę,a
wypycha 10 io
drukuje jako kod znakowy (nowa linia).Ta sama rzecz. Wydrukuj numer, a następnie nowy wiersz. Stos ma teraz ponownie długość 10 (zawartość oryginalnego literału łańcuchowego znajduje się na stosie).
IP następnie wraca do
"
siebie, prowadząc do 10 kolejnych elementów do wypchnięcia. Następnym razem,l
zwraca 20, więc 2 jest drukowane itp.Druga linia nigdy nie jest dotykana przez adres IP.
źródło
Röda / C (gcc) , 90 bajtów
Röda: Wypróbuj online!
C: Wypróbuj online!
Wyjaśnienie
To narusza fakt, że
//
int dywison w Röda, ale komentarz liniowy w C.W obu językach
main(){}
oznacza program główny i oba wywołują funkcjęf
z fałszywym argumentem0
.W Röda
a=1//1
robi int dzielenie i przypisuje wynik1
doa
. C widzia=1
i robi to samo, ale wszystko po tym zadaniu jest komentarzem dla C. Stamtąd dwa języki się rozgałęziają.Röda
Mamy nieskończoną pętlę z
while[]
( pusty warunek jest prawdziwy ). Wewnątrz tego` $a`
konwertuje liczbę całkowitąa
na ciąg (ze spacją wiodącą), po czym[::-1]
odwraca ją (i wyprowadza spację końcową). Następnie wartośća
zwiększa się o jeden.Poza pętlą while komentarz wielowierszowy zaczyna się
/*
i kończy tuż przed końcem funkcji.do
Po zignorowaniu reszty linii program przechodzi do drugiej linii. Zaczynamy od średnika, ponieważ
a=1
instrukcja musi zostać zakończona. Następnie napotykamy prostą pętlę for, która wypisuje zmienną iteracyjną,a
, dwukrotnie w każdej iteracji.Poza pętlą for
/*
jest po prostu zignorować końcowy*/
komentarz Rödy .źródło
QBIC / QBasic 4.5 , 58 bajtów
To mocno nadużywa faktu, że wszystkie małe litery są interpretowane przez interpreter QBIC jako dosłowny kod QBasic i dlatego są właśnie przekazywane do warstwy QBICS QBIC. Jak oba języki widzą ten kod obok siebie:
źródło
laserLANG / > <> , 163 bajty
Po raz pierwszy w golfa, więc jest nieco większy, niż mógłby być. Chciałem użyć> <>, ale ponieważ kilka osób już go używało do stworzenia drugiej sekwencji, zdecydowałem, że chcę rozpocząć tworzenie pierwszej sekwencji.
Spróbuj> <> online!
W przypadku laserLANG potrzebny jest tłumacz offline, aby go wypróbować. Można go znaleźć tutaj .
laserLANG
rozpoczyna się wykonywanie, w
!
którym jest całkowicie ignorowane. następnie dociera do\
i zaczyna przechodzić obok kilku postaci, które całkowicie ignoruje. W końcu dochodzi do kolejnego\
i zaczyna się zabawa. Zasadniczo wpadłem na pomysł „Witaj, świecie!” zapętlić i skondensować jak najlepiej. Było to trochę trudne, biorąc pod uwagę fakt, że laserLANG ma zamiar zmniejszać / zwiększać licznik pamięci, gdy licznik programu przesuwa się odpowiednio w lewo / prawo. Wydaje mi się, że najwięcej bajtów można by tutaj uratować, wykonując kilka sztuczek, o których nawet nie myślałem.> <>
Wykonanie rozpoczyna się od
!
momentu, w którym powoduje pominięcie\
. Następnie kontynuuje działanie, jakby nie było tam kodu laserLANG. Nie zdawałem sobie sprawy, że> <> ma tylko obsługę podziału zmiennoprzecinkowego, więc krótkie i proste obcinanie było początkowo nieco mylące.źródło
Befunge-98 / > <> , 32 bajty
Napisałem to, zanim zobaczyłem, ile jest
><>
odpowiedzi. Niektóre tło:\
to operator zmieniający kierunek w> <>, w tym przypadku popychający go w dół, podczas gdy w Befunge zamienia dwa górne elementy na stosie. Kod Befunge wygląda następująco:Wypróbuj online!
Drukuje liczby do tyłu oddzielone znakami nowej linii. Befunge drukuje spację automatycznie po każdej liczbie, więc każda cyfra jest oddzielona spacjami. Wielokrotnie pobiera ostatnią cyfrę, drukuje ją i dzieli liczbę przez 10, aż będzie równa 0. Następnie zwiększaj i powtarzaj.
Kod> <> natychmiast przechodzi do drugiej linii.
Wypróbuj online!
I jest dość prosty. Uzyskaj długość stosu, wydrukuj dwa razy z nowymi liniami i pozostaw kopię długości na stosie do następnej pętli.
źródło
Rubinowy / skumulowany , 37 bajtów
Wypróbuj online!
To drukuje
1 1 2 2
... w Ruby i1 2 3 ... 01 11 21...
Stacked.Wyjaśnienie
W Ruby:
Po usunięciu komentarza staje się to:
Jedyną istotną linią tutaj jest ostatnia.
p
zwraca argument, więcp p
wypisuje argument dwa razy.$.
zaczyna się od0
, więc$.+=1
zwiększa$.
, zwracając zwiększoną wartość. Dlatego to wypisuje każdą liczbę z1
dwóch razy.W stosie:
Jest to równoważne z następującymi tokenami:
Pierwsze dwa nie są istotne (w zasadzie przekształcenie
0
w redukcję f Unction). Następnie0
jest wypychany na stos. Następnie funkcja[1+:tostr rev out]
jest wypychana na stos.loop
wyświetla tę funkcję i wykonuje ją w nieskończoność.Wnętrze funkcji inkrementuje górę stosu (
1+
), powiela ją (:
), konwertuje na string (tostr
), odwraca ją (rev
) i wysyła (out
). Proces ten powtarza się w nieskończoność. Ponieważ pętla jest nieskończona, wszystko, co następuje po tym tokenie, jest w zasadzie ignorowane przez interpretera.źródło
> <> / Jelly , 37 bajtów (25 na stronie kodowej Jelly)
Spróbuj> <> online!
Wypróbuj Jelly online!
> <> drukuje sekwencję dwukrotnie do nieskończoności, galaretka liczy się wstecz.
> <> dotyczy tylko górnej linii:
I dzięki @ Challenger5 za zapisanie niektórych bajtów tutaj na linii
Jelly wykonuje swój kod od dołu do góry. Istotne są tylko ostatnie 2 wiersze.
źródło
><>
kodzie mają punkty kodowe ASCII odpowiadające stronie kodowej Jelly. Nie wiem zbyt wiele na temat tej strony kodowej, ale myślę, że spowodowałoby to te same bajty, które zostały użyte do przedstawienia kodu. Znaki w dolnych wierszach są ignorowane przez,><>
więc nie ma znaczenia, czy są dokładnie takie same między stronami kodowymi. Liczba bajtów została pobrana z><>
łącza TIO.","
po prostu wypycha wartość ASCII,
na stos, dzięki czemu możnaa
zamiast tego użyć separatora nowej linii.C (gcc) / PHP ,
1028680 bajtówZwraca podwójną sekwencję w C i odwrotną sekwencję w PHP.
Wypróbuj w C!
Wypróbuj w PHP!
Objaśnienia
do
W C
#
formularze preprocesora. Naprawdę niewiele wiem o C, ale to nie narzeka, gdy jest pusty wiersz na te rzeczy. Te//
formy komentarz linia. A\
na końcu linii zasadniczo „ucieka” od nowej linii i sprawia, że dwie linie są traktowane jako jedna. Działa to również w przypadku komentarzy do linii, więc drugi wiersz jest postrzegany jako komentarz w C. Trzeci wiersz działa na podstawie wyprowadzania liczb za pomocą prostej pętli for. Potem jest tylko komentarz.PHP
W PHP
#
tworzy komentarz do wiersza, więc pierwszy wiersz jest całkowicie ignorowany. Drugi wiersz wypisuje liczby odwrócone za pomocą pętli for i oddziela je za pomocą\nint main(i){for(;;i++)printf("%d %d ",i,i);}//
(kod C zawinięty w łańcuch).źródło