Policz jak Chuck Norris

58

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ę 0od 1. W takim przypadku w sekwencji „dwa razy” 0należy powtórzyć, podobnie jak inne liczby.
  • Zera wiodące są znaczące w sekwencji „wstecz”. Na przykład dziesiąty termin to 01; ani 1nie 001są 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.
Luis Mendo
źródło
8
Downvoters, jakieś sugestie dotyczące poprawy?
Luis Mendo
29
Chuck Norris jest zbyt potężny, by liczyć, gdyby to zrobił, pierwsza liczba, którą policzyłaby, przekroczyłaby nieskończoność i zniszczyłaby sferę znanej matematyki. Dlatego odmawiam konkurowania.
Magic Octopus Urn
11
@ carusocomputing, bardzo mądry, biorąc pod uwagę ogólnoświatowy brak pompek, odkąd Chuck Norris zrobił je wszystkie.
Wossname
33
Chuck Norris może ukończyć to wyzwanie w 0 bajtach. Może po prostu patrzeć na komputer, a komputer robi, co chce.
Kodos Johnson,
17
Chuck Norris nie próbował wygrać tego wyzwania, po prostu pozwolił ci przegrać.
Nat

Odpowiedzi:

18

05AB1E / galaretka ,  14  13 bajtów

-1 bajt dzięki Adnanowi (unikaj trzech powtórzeń z niezadrukowanym drukiem)

Surowe bajty (szesnastkowe):

31 5b 3d 3d 3e 5d fc 06 b6 3b 87 08 15

W 05AB1E „s code stronie :

1[==>]üε¶;‡ηΩ

Wypróbuj online!

W Jelly „s code stronie :

1[==>]‘©Ṛ;⁷®ß

Wypróbuj online!

W jaki sposób?

Program 05AB1E drukuje podwójną liczbę z każdym wpisem oddzielonym znakiem nowej linii:

1[==>]üε¶;‡ηΩ
1             - push 1 onto the stack
 [            - start infinite loop:
  =           - print top of stack
   =          - print top of stack
    >         -   increment the top of the stack (pop(1), x+=1, push)
     ]        - end the infinite loop
      üε¶;‡ηΩ - this code is never executed nor is it parsed

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:

1 - link 1 (not executed but parsed)
1 - literal 1

==> - link 2 (not executed but parsed)
=   - left equals right? (vectorises)
 =  - left equals right? (vectorises)
  > - is greater than the right argument? (vectorises)

‘©Ṛ;⁷®ß - Main link: no arguments
‘       - increment (implicit 0 on left increments to 1 on the first pass)
 ©      - copy the result to the register and yield it
  Ṛ     - reverse, this has an implicit decimal list build, e.g. 142 -> [2,4,1]
    ⁷   - a newline character
   ;    - concatenate, e.g. [2,4,1] -> [2,4,1,'\n']
     ®  - recall the number from the register, e.g. 142
        - The chain has reduced to one item of arity 0, causing a pre-evaluation print:
        -     ...and since the list contains a character it gets smashed together
        -     e.g. [2,4,1,'\n'] prints 241 followed by a newline character
      ß - call this link with the same arity, e.g. as a monad with left = 142
Jonathan Allan
źródło
Nie sprawdzałem, czy działa na Jelly, ale jeśli to nie działa, można zastąpić Ð,,przez ==.
Adnan
To powinno parsować w galarecie. Poszukałem w info.txt nieskalanego wydruku i nie widziałem tego. Dzięki.
Jonathan Allan
26

Python 2 / C (clang) , 109 107 100 84 95 88 89 88 87 84 bajtów

i=0;
#/*
while 1:i+=1L;print`i`[::-1]
'''*/
a(){for(;;)printf("%i %1$i ",++i);}//'''

Python: 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 #includeinstrukcji), 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.

Towarzyszu SparklePony
źródło
Hmm, myślę, że można użyć rekurencji w kodzie C -a(i){printf("%i %i ",i,i);a(i+1)}
enedil
Dlaczego nie użyć whilepętli do kodu C?
enedil
@enedil Zajmuje więcej bajtów.
Towarzysz SparklePony,
Myślę, że możesz użyć `i`zamiaststr(i)
Cyoce
Możesz użyć, for(;;)printf("%i %1$i ",i++);aby zapisać jeden bajt. Jest 1$to argument pozycyjny, który każe printfwyświetlić pierwszy argument (po ciągu formatu).
yoann
12

Galaretka / Pyth, 15 bajtów

.V1_`b;"1üÉÉ$

Materiały niedrukowalne są zniekształcone przez oprogramowanie SE, więc oto zrzut heksowy:

00000000: 2e56 315f 6062 3b22 7f31 fcc9 c924 0b    .V1_`b;".1...$.

Uruchom odpowiednio jelly f filei pyth file.

Wyjaśnienie

Najpierw przychodzi część Pyth. .Vuruchamia nieskończoną pętlę nad sekwencją rosnącą, zaczynając od jej wejścia, które jest tutaj 1. 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”:

¶1‘ṄṄ$¿

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 od 1i 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.

Klamka
źródło
1
@JonathanAllan Masz rację, to była nowa linia dodana przez mój edytor tekstu.
Klamka
11

Perl / JavaScript, 87 bajtów

s=0;print=console.log;m=s;$_=s=s=s=m;while(++$_){print((m/s,$_+`
`+$_||/&&reverse.$/))}

Perl

s/0;print/console.log;m/s;$_=s/s/s/m;while(++$_){print((/s,$_+`
`+$_||/&&reverse.$/))}

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 wymianie 0;printze console.log;mz flagą /sw $_, który jest obecnie undef) , następnie ustawienie $_w wyniku zastąpienia sz strybu wielowierszowego ( /m), który jest 0. Teraz $_jest 0i zaczynam whilepę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

s=0;print=console.log;m=s;$_=s=s=s=m;while(++$_){print((m/s,$_+`
`+$_||/&&reverse.$/))}

Tutaj jest wiele przypisań zmiennych, zamaskowanych w s///wywołaniach Perla . Skonfigurować zmienne si mjako 0alias console.logdo printuruchomić jakąś bezsensowną podział ustaw $_do 0i rozpocząć whileinkrementację pętli $_, zadzwoń printprzekazując 0( m/sta rozpoczyna wywołanie mw 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 wytworzenia RegExpobiektu zawierającego koniec kodu Perla, który nigdy nie jest oceniany.

Testowane przy użyciu Perla 5 i Węzła 6.

Dom Hastings
źródło
8

NodeJS / PHP, 131 106 bajtów

-25 bajtów dzięki @Titus

<!--
printf=(_,i)=>process.stdout.write(i+i),strrev=i=>i+" "//--><?
for($i=0;;)printf("%s ",strrev($i++));

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.

Justin Mariner
źródło
1
102 bajtów, poczynając od 0: <!--←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),_;.
Titus
@Titus Fajny pomysł i>>1na 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 zrobieniu write(i+i)i strrev=i=>i+" ".
Justin Mariner
7

V / Brain-flak Classic , 27 , 26 bajtów

(()){[[({}())[]]]}é1òÙæ_æ

Hexdump:

00000000: 2828 2929 7b5b 5b28 7b7d 2829 295b 5d5d  (()){[[({}())[]]
00000010: 5d7d e931 f2d9 e65f 01e6                 ]}.1..._..

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:

é1              " Insert a '1'
  ò             "   Recursively:
   Ù            "   Duplicate this number
    æ_          "   Flip this line
      <C-a>     "   Increment the number on this line
           æ    "   Flip it back (the '_' is implicit because it's at the end of the program)

Objaśnienie BFC:

#Push a one onto the main stack
(())

#Forever:
{

  #Print twice:
  [[

    #Increment the top of the stack.
    #Evaluates to *i + 1*
    ({}())

    #Minus one
    []
  ]]

#Endwhile
}
DJMcMayhem
źródło
3
Gdy tylko zobaczyłem języki, wiedziałem, że opublikowałeś ten.
Riley
Dlaczego jest to „Brain-flak Classic”? Czy jest inny płat mózgowy?
nmjcman101
@ nmjcman101 Brain-flak classic to oryginalna wersja Brain-flak. Różnicę wyjaśniono tutaj bardziej szczegółowo , ale wybrałem ją dlatego, że ma wyraźny efekt, czego nie robi współczesne uderzenie mózgu. (pozwalając na nieskończoną moc wyjściową)
DJMcMayhem
4

Retina / Python 2, 61 bajtów

#{*M`
#*M`
"""

}`$
1
""";i=1
while 1:print str(i)[::-1];i+=1

Siatkówka | Python 2

mbomb007
źródło
Próbowałem zastąpić str()słowem ``, ale najwyraźniej zaburzyłem kod Retina. Nie wiem dlaczego
officialaimm
I tak nie możesz tego zrobić. Jeśli ma dojść do dużej liczby i działać poprawnie, musi tak być str, w przeciwnym razie dostaniesz Lwyniki. 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ę.
mbomb007
3

R / Octave , 83 80 78 71 bajtów

-3 bajty dzięki Luisowi Mendo

i=0;
while(1)
#{
print(c(i<-i+1,i))
#}
disp(flip(num2str(i)))
i+=1;
end

#{ }# jest komentarzem blokowym Octave i # tak się składa, że ​​jest to komentarz dla R. Interpretator R widzi następną linię jako treść whilepętli, a interpreter Octave przeskakuje bezpośrednio do kodu Octave

Część 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

Giuseppe
źródło
Czy najważniejsza musi być i=i+1?
Zacharý
1
@ZacharyT niestety +=nie działa w R, więc tak, musi tak być.
Giuseppe,
Czy to endkonieczne?
BLT
1
@BLT, tak, oznacza koniec pętli while dla oktawy.
Giuseppe,
Ok dzięki. Myślałem, że skoro i tak nigdy się nie skończy ( while(1)), możesz zapisać te bajty.
BLT
3

Ruby / Python2: 68 64 bajty

i=0
"#{loop{p i+=1,i}}"
exec('while 1:print str(i)[::-1];i+=1')

Rubinowa perspektywa

prosty init zmiennej:

i = 0

"#{}"jest składnią interpolacji ciągów. Zamiast tego używam go do wykonania wyrażenia.

"#{loop{p i+=1,i}}"

pjest skrótem od puts. looptworzy nieskończoną pętlę.

Następnie jest execrzecz, ale nigdy nie jest ona oceniana, ponieważ nieskończona pętla jest z definicji nieskończona. Potrzebne execnie 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.

enedil
źródło
3

Bash / Check , 50 28 bajtów

Dzięki @Doorknob za zapisanie kilku bajtów poprzez przejście z Pythona na Bash

#>
#v
 #p<p<)#
seq 1 inf|rev

Grzmotnąć:

#>
#v
 #p<p<)#

To tylko niektóre komentarze, które są ignorowane.

seq 1 inf|rev

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.

#v

#ponownie przełącza IP w tryb 2D i vkieruje go w dół.

 #p<p<)#

Pierwszy #ponownie przełącza się w tryb 1D. pwysył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.

Esolanging Fruit
źródło
1
Bash używa #komentarze i może wykonać „odwrócone cyfry” zadanie bardzo łatwo: seq 1 inf|rev.
Klamka
Kod Ruby i=1;loop{puts i.to_s.reverse;i+=1}jest krótszy o jeden bajt
dkudriavtsev
3

CJam /> <>, 27 23 bajtów

"la,:naonao
"1{_sW%n)}h

Do CJam:

Wypróbuj online! - zauważ, że musisz poczekać do 60 sekund, aby zobaczyć wynik, ale działa on offline.

"la,:naonao
"

Definiuje to wieloliniowy literał łańcuchowy, który nigdy nie jest używany.

 1{_sW%n)}h

Druga linia wygląda następująco:

1     e# Push 1:               | 1 
{     e# Forever:              | 1
  _   e#   Duplicate:          | 1 1
  s   e#   Convert to string:  | 1 "1"
  W%  e#   Reverse:            | 1 "1"
  n   e#   Print with newline: | 1
  )   e#   Increment:          | 2
}h    e# End loop

Do> <>:

"

Zaczyna literał ciąg.

 la,:naonao

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.

 la,

lbierze długość stosu, awypycha 10 i ,dzieli. To daje nam długość stosu / 10.

    :nao

:duplikuje, ndrukuje jako liczbę, awypycha 10 i odrukuje jako kod znakowy (nowa linia).

        nao

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.

Esolanging Fruit
źródło
2

Röda / C (gcc) , 90 bajtów

main(){f(0);}f(a){a=1//1{[` $a`[::-1]];a++}while[]/*
;for(;;a++)printf("%d %d ",a,a);/**/}

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ę fz fałszywym argumentem 0.

W Röda a=1//1robi int dzielenie i przypisuje wynik 1do a. 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ą ana ciąg (ze spacją wiodącą), po czym [::-1]odwraca ją (i wyprowadza spację końcową). Następnie wartość azwię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=1instrukcja 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 .

Kritixi Lithos
źródło
2

QBIC / QBasic 4.5 , 58 bajtów

do
p=p+1
if q then
'?`_f!p$|
else
?p,p,
end if
loop

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:

LOC         QBasic                    QBIC
-------------------------------------------------------
do                   Start an infinite loop
p=p+1                Increment p, starts off as 0
if q then    q = 0, goto ELSE         q = 1, execute IF
'?`_f!p$|    ' = comment, invalid     '?` is a 'code literal', passing PRINT to QBASIC
             syntax is ignored        followed by QBIC code to flip p cast as string.
else         q=0, execute             q=1, so ignored
?p,p,        PRINT p twice,
             separated by tab
end if               End of the branching logic
loop                 Wrap around for the next pass
Steenbergh
źródło
2

laserLANG / > <> , 163 bajty

!\0 \
/:+1/!   ]oo\
\:a( ?\:a%$a ,!
/r[-1l//" ,"/
/!n-%1:\?(1l
 \ --\/ <<---\
/----/'
\----  v
/>>--\#>---->/
\     /
/----<
\  \
/ -<< \
 /<< \
 "
">=>= /
\>=>=/

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

!\
 \ --\/ <<---\
/----/'
\----  v
/>>--\#>---->/
\     /
/----<
\  \
/ -<< \
 /<< \
 "
">=>= /
\>=>=/

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.

> <>

!\0 \
/:+1/!   ]oo\
\:a( ?\:a%$a ,!
/r[-1l//" ,"/
/!n-%1:\?(1l

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.

Aroymart
źródło
2

Befunge-98 / > <> , 32 bajty

\r.#%a/# :_::p#+a#1,#
>l::naonao

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:

\r.#%a/# :_::p#+a#1,#

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.

>l::naonao

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.

Jo King
źródło
1

Rubinowy / skumulowany , 37 bajtów

0#/0[1+:tostr rev out]
loop{p p$.+=1}

Wypróbuj online!

To drukuje 1 1 2 2... w Ruby i1 2 3 ... 01 11 21... Stacked.

Wyjaśnienie

W Ruby:

0#/0[1+:tostr rev out]
loop{p p$.+=1}

Po usunięciu komentarza staje się to:

0
loop{p p$.+=1}

Jedyną istotną linią tutaj jest ostatnia. pzwraca argument, więc p pwypisuje argument dwa razy. $.zaczyna się od 0, więc $.+=1zwiększa $., zwracając zwiększoną wartość. Dlatego to wypisuje każdą liczbę z1 dwóch razy.

W stosie:

0#/0[1+:tostr rev out]
loop{p p$.+=1}

Jest to równoważne z następującymi tokenami:

0 #/ 0 [ 1 + : tostr rev out ] loop { p p $ . + = 1 }

Pierwsze dwa nie są istotne (w zasadzie przekształcenie 0w redukcję f Unction). Następnie 0jest wypychany na stos. Następnie funkcja [1+:tostr rev out]jest wypychana na stos.loopwyś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.

Conor O'Brien
źródło
1

> <> / Jelly , 37 bajtów (25 na stronie kodowej Jelly)

01+:nao:nao!
DU;⁷Ṙ€
®‘©Çß

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

01+:nao:nao!                           Stack at: 1st run   2nd run ...
0                 Push a 0             0         -
 1                Push a 1             0,1       1,1   
  +               Pop 2, add them      1         2 
   :              Duplicate top item   1, 1      2, 2
    n             Pop top, show as num 1         2
     a            Push the number 10   1, 10     2, 10
      o           Pop and show 10 as an ACII char (ie '\lf')
                                       1         2
         :nao     And again, for repetition
             !    ><> wraps around; this skips pushing a 0 again.

Jelly wykonuje swój kod od dołu do góry. Istotne są tylko ostatnie 2 wiersze.

®‘©Çß       main link, keeps track of the current number

®           Get a number from the register (0 on first run)
 ‘          Increment that by 1
  ©         Store in register
   Ç        Call helper (printer) link
    ß       Call this link again

DU;⁷Ṙ€      Printer

            (Say we are at number 21)
D           Break into digits         [2, 1]
 U          Reverse array             [1, 2]
  ;⁷        Append a line break       [1, 2, \n]
    Ṙ€      Print each char in array
Steenbergh
źródło
@LuisMendo Znaki użyte w tym ><>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.
steenbergh
Czy nie są drukowane bez separatora w> <>?
Esolanging Fruit
@ Challenger5 masz rację; naprawiony.
steenbergh
Ryba nie ma typu postaci; ","po prostu wypycha wartość ASCII ,na stos, dzięki czemu można azamiast tego użyć separatora nowej linii.
Esolanging Fruit
Wygląda na to, że przecinki nadal znajdują się w pierwszym wierszu wyjaśnienia> <>.
Esolanging Fruit
1

C (gcc) / PHP , 102 86 80 bajtów

#//\
for(;;)echo strrev(++$i).'
int main(i){for(;;i++)printf("%d %d ",i,i);}//';

Zwraca 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).

Business Cat
źródło