Wszechstronna drukarka liczb całkowitych


93

Napisz fragment kodu, który można wykonać w co najmniej trzech różnych językach. Kod musi wypisać liczbę całkowitą 1w języku numer jeden, 2w języku numer dwa, 3w języku numer trzy itd.

Zasady:

  • Dane wyjściowe muszą być tylko liczbą całkowitą, ale końcowe znaki nowego wiersza są prawidłowe.
  • Kod nie może pobierać żadnych danych wejściowych
  • Różne główne wersje tego samego języka są uważane za unikalne. Zatem twój kod może być wykonywalny w Python 2 i Python 3, jednak Python 2.5 i Python 2.7 nie są uważane za unikalne.
  • Możesz użyć nowego języka tylko wtedy, gdy ma artykuł esolang / wiki, dostępny tłumacz i dokumentację oraz był używany przez co najmniej dwóch użytkowników PPCG przed użyciem go w tym wyzwaniu. Musi także przestrzegać tych 4 zasad .

Wynik przesłanego zgłoszenia to liczba bajtów w kodzie podzielona przez liczbę języków, w których może on działać w postaci kostki. 54-bajtowe rozwiązanie, które można wykonać w 3 językach, będzie miało wynik 2:

54 / 3^3 = 2  

Niższy wynik jest lepszy.


Tabela liderów


6
@muddyfish Możesz być w stanie pobrać mniejszą wersję w kodzie, które następnie daje darmowe rozwiązania dla wszystkich 2.7.1celu 2.7.n. (W rzeczywistości Sweerpotato robi to samo z głównymi wersjami.)
Martin Ender,

14
Myślę, że może najkrótsze rozwiązanie według języka nie ma tutaj sensu ...: P
FryAmTheEggman

3
@Mego Ja też nie jestem, dlatego zostawiam sarkastyczne komentarze na temat problemu, aby inni
mogli

12
Chciałem tylko pogratulować ci wyważonego wyniku. Kiedy wyzwania kodu mieszają dwie liczby w jeden wynik, równowaga jest prawie zawsze wyłączona, tak więc najlepsza odpowiedź po prostu zoptymalizuje jedną z ocen bez konieczności rozważania drugiej. Waga sześcienna liczby języków była tutaj idealna ... chociaż zawsze można było dodać inny język, zawsze było to bardzo miłe (ale wykonalne) wyzwanie, biorąc pod uwagę liczbę dostępnych bajtów. :)
Martin Ender,

20
W tym wyzwaniu PPCG wspólnie budowaliśmy poliglota. Teraz ma lepszy wynik w tym wyzwaniu niż wiodące wpisy poddane temu wyzwaniu, ale nie ma sensu kopiować wysiłku grupy, który jest stale doskonalony, więc po prostu zostawiam wzmiankę w komentarzach tutaj.

Odpowiedzi:


90

30 języków, 248 bajtów, 248/30 ^ 3 = 0,009185

#|#?15g,@           kkmNmSaIeoe99+{\#/-;n@0ea
#[9!@>.>.eeaww#-1@*"12" L
#{  
###
#`{
25
print(4^2 +7)/2


"""
Jo is here.
$'main'MoO OOM
 7
>Jo, 30
>X Jo
f::=~27
::=]##}#(prin 29)
print (7/6*24)###;alert 2#-[>+<-----]>-.|#(write(if(= 1/5 .2)26 3))"""

Edycja: Beatnik został usunięty, ponieważ testy pierwotności w Beatniku mogą być niemożliwe.

Kod zawiera tabulatory (które są zniekształcane przez Stack Exchange) i końcowy znak nowej linii, więc oto xxd:

00000000: 237c 233f 3135 672c 4020 2020 0920 2020  #|#?15g,@   .   
00000010: 206b 6b6d 4e6d 5361 4965 6f65 3939 2b7b   kkmNmSaIeoe99+{
00000020: 5c23 2f2d 3b6e 4030 6561 0a23 5b39 2140  \#/-;n@0ea.#[9!@
00000030: 3e2e 3e2e 6565 6177 7723 2d31 402a 2231  >.>.eeaww#-1@*"1
00000040: 3222 094c 0a23 7b20 090a 2323 230a 2360  2".L.#{ ..###.#`
00000050: 7b0a 3235 0a70 7269 6e74 2834 5e32 202b  {.25.print(4^2 +
00000060: 3729 2f32 0a0a 0a22 2222 0a4a 6f20 6973  7)/2...""".Jo is
00000070: 2068 6572 652e 0a24 276d 6169 6e27 4d6f   here..$'main'Mo
00000080: 4f20 4f4f 4d0a 2037 0a3e 4a6f 2c20 3330  O OOM. 7.>Jo, 30
00000090: 0a3e 5820 4a6f 0a66 3a3a 3d7e 3237 0a3a  .>X Jo.f::=~27.:
000000a0: 3a3d 5d23 237d 2328 7072 696e 2032 3929  :=]##}#(prin 29)
000000b0: 0a70 7269 6e74 2028 372f 362a 3234 2923  .print (7/6*24)#
000000c0: 2323 3b61 6c65 7274 2032 232d 5b3e 2b3c  ##;alert 2#-[>+<
000000d0: 2d2d 2d2d 2d5d 3e2d 2e7c 2328 7772 6974  -----]>-.|#(writ
000000e0: 6528 6966 283d 2031 2f35 202e 3229 3236  e(if(= 1/5 .2)26
000000f0: 2033 2929 2222 220a                       3))""".

Możesz także skopiować i wkleić kod z tego „Wypróbuj online!” link .

Jest to dość kiepska gra w golfa, ale chciałem odrzucić pomysł, że gdy będziesz mieć wystarczająco dużo języków, liczba bajtów nie będzie już tak ważna. Powiedziawszy, że jest kilka języków, które wciąż mogę łatwo dodać (np. Objeck), ale obecnie są one zbyt długie, aby były przydatne. Skończyło mi się dobre języki, więc na razie mogę się tu zatrzymać.

Uruchom wszystkie programy z </dev/null 2>/dev/null(tj. Puste wejście, zignorowany STDERR).

Wyjaśnienie jest dość długie, więc oto streszczenie:

No.  Lang.              Non-esolang?     2D esolang?      BF/BF-deriv?
--------------------------------------------------------------------------
1    COW                                                       ✓
2    CoffeeScript            ✓
3    Common Lisp             ✓
4    Retina
5    Befunge-93                               ✓
6    Python 2                ✓
7    Rail                                     ✓
8    ETA
9    Prelude
10   Gol><>                                   ✓
11   evil
12   Foo                                                       ✓
13   Ruby                    ✓
14   ><>                                      ✓
15   Brian & Chuck                                             ✓
16   Whitespace
17   3var
18   Axo                                      ✓
19   Labyrinth                                ✓
20   Starry
21   Fission                                  ✓
22   Brainfuck                                                 ✓
23   Julia                   ✓
24   Lily                    ✓
25   GolfScript
26   Chicken Scheme          ✓
27   Thue
28   Perl 6                  ✓
29   Picolisp                ✓
30   TRANSCRIPT

1. KROW

COW jest pochodną Brainfuck z dodatkowymi poleceniami, z których jedno jest wyjściem numerycznym. Wszystko, co nieprawidłowe, jest ignorowane, więc wykonywany program jest po prostu

MoO OOM

co zwiększa komórkę do 1, a następnie drukuje ją jako liczbę.

2. CoffeeScript (obejmuje tłumacza)

CoffeeScript widzi:

# comments
###
multiline comment
###;alert 2# comment

który po prostu ostrzega 2.

(Tak, prawdopodobnie byłoby lepiej, gdyby ten język zajął ten slot, ale jestem zbyt leniwy, aby przetasować w tym momencie: P)

3. Wspólne Lisp | ideone

Common Lisp (clisp) widzi:

#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""

1/5jest racjonalny i nie równy 0.2, więc 3 jest drukowane. Postępowanie """to błąd składniowy.

Zauważ, że printwydaje się, że wypisuje poprzedni znak nowej linii i końcowe miejsce w Common Lisp. Jednak na szczęście writedziała zarówno w programie Common Lisp, jak i Chicken Scheme.

4. Siatkówka | Wypróbuj online!

Wprowadzone ograniczenia : co druga linia zaczynająca się od pierwszej musi być poprawnym wyrażeniem regularnym.

Każda para linii tworzy etap zastępowania, zastępując wystąpienia dopasowania wyrażenia regularnego pierwszej linii drugą linią. Pośrodku mamy parę

„” „

który zastępuje początkowy pusty ciąg """. Ostatnia pusta linia, nie będąca częścią żadnej pary, jest traktowana jako etap dopasowania, licząc liczbę dopasowań wyrażenia regularnego. Istnieją cztery przypadki pustego łańcucha """, mianowicie 1"2"3"4.

5. Befunge-93 | Interpretator

Befunge jest językiem 2D, a odpowiednie instrukcje są

# # 15g,@

w pierwszej linii i 5w 25linii. #pomija następną instrukcję, 15gpobiera znak w pozycji (1, 5)w kodzie ( 5w 25wierszu), ,wyświetla znak i @zatrzymuje.

6. Python 2 | ideone

Python widzi:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6, który dostaje printed.

7. Szyna | Wypróbuj online!

Rail jest językiem 2D, a wykonywanie rozpoczyna się od $głównej funkcji, kierującej się na południowy wschód. Tak więc odpowiednią częścią kodu jest

$'main'
 7
  o
   J

z oi Jpochodzące z linii używanych przez TRANSCRIPT. Po wyprowadzeniu 7 pociąg uderza nierozpoznaną Jinstrukcję, która powoduje awarię programu.

8. ETA | Wypróbuj online!

Wprowadzone ograniczenia: Znaki przed programem ETA nie powinny być wprowadzone etaoinsh.

ETA rozpoznaje tylko litery etaoinshi ich duże litery, co oznacza, że ​​kod zaczyna się od

NSaIeoe

n...epopycha baza numer 7 w oparciu o to, co znajduje się wewnątrz ograniczników, które przez SaIto 624, lub 312 w systemie dziesiętnym. onastępnie wyprowadza jako char, najwyraźniej po modulo 256, podając char 8(punkt kodowy 56). enastępnie próbuje podzielić się z pustym stosem, co się nie udaje.

9. Preludium | Wypróbuj online!

Wprowadzone ograniczenia: Nie więcej niż jedna ()w dowolnej kolumnie, ()dopasowane czytanie kolumny na raz, brak nieskończonych pętli spowodowanych ().

Wymaga to ustawienia interpretera języka Python NUMERIC_OUTPUT = True.

Preludium to język, w którym każda linia jest wykonywana osobno. Wykonuje się wiele znaków, ale ważną częścią jest

9!

w drugim wierszu, który wyprowadza 9. ()w Preludium, oznacza pętlę, ale dzięki wyróżnieniu #s (które wyskakują ze stosu), wierzchołki stosów są zawsze równe 0 do momentu uderzenia pętli, więc żaden z nich są uruchomione. ()Jednak ograniczenia kodu źródłowego Prelude dotyczące wprowadzonych obcych przestrzeni.

10. Gol> <> | Interpretator

Ta część (i> <>) działa jak odpowiedź Martina . Odpowiednim kodem jest

#                                      ;n@0ea

Gol> <> jest językiem 2D i #odzwierciedla adres IP, dzięki czemu podróżuje w lewo. Zawija się, pcha 10, 14 i 0 na stos. @następnie obraca stos, podnosząc 10 na szczyt, nwysyła go i ;zatrzymuje program.

11. zło | Wypróbuj online!

Ta część jest również podobna do odpowiedzi Martina.

zło ignoruje wszystko oprócz małych liter. Ignorując kilka dodatkowych znaków, odpowiednią częścią jest

aeeeaeeaww

gdzie ainkrementuje zmienną A, eto funkcja splotu zła, która tasuje bity Ai wgeneruje wyniki A. Stąd produkujemy 1dwa razy, dając 11.

Ale co z resztą instrukcji, a zwłaszcza wz ostatniej linii? Powiedzmy, że czasami najłatwiej jest po prostu zepsuć kod i modlić się, aby nadal działał we wszystkim, co tutaj ...

12. Foo | Wypróbuj online!

Foo wypisuje wszystko między podwójnymi cudzysłowami, więc odpowiednią częścią jest

"12"

w drugiej linii. Ponieważ jednak potrzebujemy później podwójnych cudzysłowów, używamy metody podobnej do odpowiedzi Martina, aby wyeliminować błąd Foo, a mianowicie poprzedniej #-1@. Nie jest jasne, dlaczego to działa w języku, w którym żołnierze stoją w obliczu pustego stosu i dzielenia przez zero błędów, ale cieszę się, że tak.

13. Ruby | ideone

Podobnie jak Python, Ruby widzi:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

Jednak warto zauważyć, że multiline ciąg jest faktycznie trzy oddzielne ciągi ( "", "...", "") sklejone. Linia wydruku drukuje (4^2+7) = xor(4,2)+7 = 6+7 = 13, zanim popełnisz błąd, próbując podzielić nilprzez 2.

14. > <> | Wypróbuj online!

Ta część jest taka sama jak część Gol> <>, z @tą różnicą, że zamiast niej 14 znajduje się na górze, co zostaje wyprowadzone.

15. Brian & Chuck | Wypróbuj online!

Brian & Chuck to pochodna BF z dwiema taśmami, w których wskaźnik instrukcji jednej taśmy jest wskaźnikiem pamięci drugiej taśmy. W przypadku braku ```pierwszych dwóch wierszy kodu źródłowego używa się do inicjalizacji taśm.

Odpowiednie znaki w pierwszych dwóch wierszach to:

   ?15
#     >.>.

?Taśmą Briana przekazuje kontrolę do Chucka w komórce wskazywanego (the #) jest niezerowe. Następnie Chuck wykonuje >.>., wysyłając dwa znaki po znaku zapytania.

16. Biała spacja | Interpretator

Używając odpowiednio STLspacji, tabulacji i nowego wiersza, początek programu to:

SSSTSSSSL
TL
STL
L
L

Pierwszy wiersz wypycha 16 ( +10000podstawa 2), poprzedni TLSTdrukuje go jako liczbę. Kolejne trzy nowe linie zatrzymują program.

Należy jednak pamiętać, że ten program jest specyficzny dla interpretera. Reszta błędów składniowych kodu w większości interpreterów, dlatego wymagany jest bardziej łagodny interpreter, taki jak ten, do którego prowadzi link powyżej.

17. 3var | Wypróbuj online!

Z pierwszego wiersza wykonywanych jest mnóstwo instrukcji, ale odpowiednie są

kkmmao#/

Ze względu na ograniczenia ETA używamy kdo zmniejszania zmiennej B, a nie ado jej zwiększania. kkzmniejsza B do -2 i mmkwadraty B dwa razy do 16, co jest zwiększane do 17 za pomocą a. Jest to następnie generowane za pomocą o.

#jest następnie używany do resetowania B do 0 i /powoduje błąd programu przez dzielenie przez 0.

18. Axo | Wypróbuj online!

Wprowadzone ograniczenia: Brak instrukcji przed programem Axo, które zmieniają kierunek IP

Po raz kolejny mnóstwo instrukcji jest wykonywanych w pierwszym wierszu, ale odpowiednie są

# # 15 ,@            9 9  + {   \

Axo jest językiem 2D, takim jak Befunge, i #podobnie jest pomostem, który pomija następną instrukcję, ale tylko wtedy, gdy górna część stosu wynosi zero. 15,push na stos, ale stos jest opróżniany @. 99+następnie popycha 18, {wychodzi i \zatrzymuje się.

19. Labirynt | Wypróbuj online!

Labirynt to kolejny język 2D, a wykonywane instrukcje to

#|#
 [9!@

#wypycha długość stosu, która po raz pierwszy wynosi 0. |jest bitowe LUB, nie zmienia niczego, ponieważ stos ma w tym momencie po prostu #zero , a drugi przesuwa teraz 1 z powodu samotnego zera. Skręcamy w prawo z powodu 1, 9konwertuje to 1 na 1*10+9 = 19, !drukuje i @zatrzymuje się.

Ten program opiera się na fakcie, że [obecnie nie jest uznaną instrukcją, a zatem jest traktowany jak ściana.

20. Starry | Wypróbuj online!

Wprowadzone ograniczenia: Wszystkie +s muszą mieć co najmniej jedną poprzednią spację

Jeśli usuwamy nierozpoznane znaki, odpowiednią częścią kodu jest

,       +.. +

,jest wejściem, ale ponieważ potokujemy /dev/nullstamtąd, nie ma żadnego, wypychając 0 na stos. A +z n >= 5poprzednimi spacjami popycha n-5, więc następna instrukcja popycha 2. ..następnie wypisuje te dwie cyfry w odwrotnej kolejności.

Następnie mamy +jedną poprzedzającą spację, która się powiela. Jednak stos jest pusty, więc się pomyliliśmy.

21. Rozszczepienie | Wypróbuj online!

Jedyną istotną częścią dla rozszczepienia jest

*"12"L

Lspawnuje atom poruszający się w lewo, "21"drukuje 21 i *zatrzymuje się.

22. Brainfuck | Wypróbuj online!

Wprowadzone ograniczenia: Nie .przed pierwszym[

Wymaga to interpretera, który podaje 0 na EOF i ma 8-bitowe komórki. Odpowiednim kodem jest

,+-[>.>.-+.>,>]-[>+<-----]>-..

Inital -ma na celu przesunięcie +, a pierwszy [...]nie jest wykonywany, ponieważ komórka ma 0. Poniżej -[>+<-----]>-ustawia komórkę na kod char 2i ..wysyła ją dwukrotnie.

23. Julia | Wypróbuj online!

Julia widzi:

# comments
25
print(4^2 +7)/2

Drukowane jest to 4^2+7 = pow(4,2)+7 = 16+7 = 23, a program popełnia błąd, próbując podzielić nothingprzez 2. Zauważ, że Julia wydaje się nie przejmować faktem, że reszta kodu i tak spowodowałaby błąd składniowy.

24. Lily | Interpretator

Lily widzi:

# comment
#[
multiline comment
]## comment
print (7/6*24)# comment

7/6*24 = 1*24 = 24 jest drukowane.

25. GolfScript | Wypróbuj online!

GolfScript widzi:

# comments
25
print(

GolfScript jest oparty na stosie, więc 25 jest wypychany na stos, a następnie otwierany i drukowany print. (następnie próbuje zmniejszyć ukryty pusty ciąg na stosie, co kończy się niepowodzeniem i powoduje błąd programu.

26. Program z kurczaka | ideone

Schemat kurczaka ma tę samą #| ... |#składnię komentarzy wielowierszowych co Common Lisp. Jednak w

(write(if(= 1/5 .2)26 3))

1/5jest liczbą zmiennoprzecinkową, która jest równa 0.2, więc zamiast tego wyprowadzane jest 26.

27. czw. | Wypróbuj online!

Thue jest językiem opartym na przepisywaniu napisów. Pierwszą istotną częścią jest

f::=~27
::=

który definiuje podstawienie, f -> 27oznacza koniec podstawienia za pomocą ::=. Lone fw ifzostaje zastąpiony 27, który jest wyprowadzany.

28. Perl 6 | ideone

Perl 6 ma nową składnię komentarzy, a mianowicie #`(some bracket)komentarz wielowierszowy aż do pasującego nawiasu. Zatem Perl 6 widzi:

# comments
#`{
multiline comment
}# comment
print (7/6*24)# comment

który drukuje 7/6*24 = 28.

29. Picolisp | ideone

Picolisp widzi:

# comment
#{
multiline comment
}#(prin 29)

który wypisuje 29. Następnie wiersz powoduje błąd składniowy.

30. TRANSCRIPT | Wypróbuj online!

TRANSCRIPT to esolang tematyczny wzorowany na przygodach tekstowych. Nierozpoznane linie są ignorowane (co pozwala dodać dodatkowy tekst historii / smaku do rzeczywistych instrukcji kodu), więc odpowiednie linie to:

Jo is here.
>Jo, 30
>X Jo

Pierwszy wiersz deklaruje zmienną łańcuchową Jo, używając dwuliterowej nazwy, ponieważ nazwy jednoliterowe wydają się zawodzić. Drugi wiersz ustawia ten ciąg "30", który jest wyprowadzany przez X(„badaj”) w trzecim wierszu.


12
Daaaaaaaaaang ...
AdmBorkBork

9
Podejrzewam, że może to być najniższy wynik niezerowy na dowolne pytanie tutaj.
Morgan Thrapp

To jest niesamowite. Jestem pod wrażeniem.
Nic Hartley,

2
* pozytywne, istnieje kilka negatywnych wyników dla krótkich odpowiedzi z bonusami.
CalculatorFeline

Porada z przyszłości: twoje zakładki nie zostaną pomieszane, jeśli otoczysz kod pretagami zamiast korzystać z bloku kodu w stylu Markdown.
Jakob,

148

15 języków, 68 66 65 bajtów / 15 ^ 3 = 0,019 ...

Retina , Starry , Prelude , ETA , Axo , Labirynt , Hexagony , Foo , Brian & Chuck , Gol> <> , evil , Whitespace , Fission , > <> i GolfScript .

Po ogromnym przepisaniu udało mi się zmieścić w czterech kolejnych językach. Kod zawiera kilka zakładek dla białych znaków. Ponieważ Stack Exchange konwertuje je na spacje, przedstawiłem je \tponiżej:

#I5aeeNTH{\?      \t\t + +3;n@"8"ea9
15}7'`--~!@<"31"LSOe.\t
 \teaww`

Myślę, że skończyłem dodawać języki (chociaż dodanie tylko jednego może zaoszczędzić trochę bajtów w tym, co już mam). Zastanawiam się, czy jest to możliwe do gry w golfa ... 65 bajtów na 15 języków to dość duży skok z 32 bajtów na 11 języków, a teraz mam przynajmniej jedną bezużyteczną postać, aby Foo działało ...

Odbitki siatkówki 1

Wypróbuj online.

Na szczęście pierwsza linia jest poprawnym wyrażeniem regularnym. Jednak wyrażenie regularne oczywiście nie pasuje do pustych danych wejściowych, więc pierwszy etap (składający się z dwóch pierwszych wierszy) nic nie robi.

Trzeci wiersz jest samodzielny, więc jest traktowany jako etap dopasowania, który domyślnie liczy liczbę dopasowań. Jednak `jest separator, który mówi, że część siatkówki przed nim jest ciągiem konfiguracja (nie zdarza się, by poznać jedną z opcji podanych tam), a część po to jest wyrażenie regularne. Zatem wyrażenie regularne jest puste, a Retina znajduje dokładnie jedno dopasowanie.

Gwiaździste odciski 2

Wypróbuj online.

Starry ignoruje wszystko oprócz spacji i +*,'`.. Każde polecenie jest jednym z tych znaków w połączeniu ze spacjami od ostatniego z tych znaków. Więc usuńmy cały zewnętrzny kod:

       + +'`. `

Siedem spacji, po których następuje +push a 2. Jedna spacja, po której następuje +duplikat. 'to skok warunkowy. Wyskakuje na górze stosu, co jest zgodne z prawdą (pozytywne), więc przeskakuje do odpowiedniej etykiety (gdzie etykiety są oznaczone przez `„odpowiadające” oznaczają „z tą samą liczbą wiodących spacji”), która jest pierwszą `. .bez spacji przed nim drukuje górę stosu jako liczbę.

Preludium wydruków 3

Wypróbuj online.

Zakłada się interpreter Pythona, który wykorzystuje dane liczbowe. Usuńmy wszystkie no-ops:

# 5        ?         + +3    8   9
15 7  -- !   31

Pierwszy głos robi wiele rzeczy, ale nic z tego nie ma znaczenia, ponieważ nie !można wydrukować żadnego z wyników. Drugi głos popycha a 1, a 5następnie a 7. Bierzemy różnicę z dwóch ostatnich, aby uzyskać -2, a następnie odejmujemy ją od, 1aby uzyskać 3. !drukuje to. Trzeci głos ma tylko brak operacji.

Wydruki ETA 4

Wypróbuj online.

ETA ignoruje wszystko oprócz znaków ETAOINSH(w każdym razie). Zatem kod widziany przez ETA to:

IaeeNTHneaSOeea

Ipróbuje odczytać dane wejściowe, ale nie może, więc popycha -1. awypycha bieżący numer linii plus 1, czyli 2. ejest divmod , który zastępuje te przez 0i 1(lub -1, właściwie nie wiem, ale to nie ma znaczenia). Następny ezamienia oba z nich na 0.

Teraz interesująca część. NTHnejest literałem liczbowym typu base-7. Ni esą tylko ogranicznikami, a trzy cyfry to THN. To znaczy 54(gdzie Tjest cyfra 1, Hjest 0i njest 5). apopycha 2jeszcze raz. Sodejmuje to, co powoduje, 52i Owyprowadza go jako znak ( 4). Teraz epróbuje ponownie divmod, ale stos zawiera dwa zera, więc program kończy się z błędem (ale nie zanieczyszcza STDOUT, robiąc to).

Odbitki Axo 5

Wypróbuj online.

Ten język był prawie w pojedynkę odpowiedzialny za przepisywanie. Nie mogłem mieć w }pierwszym wierszu, ponieważ blokowałoby to wejście w Axo (zobacz historię zmian dla tego, o czym mówię). W przypadku Axo istotna jest tylko ta część kodu:

#I5aeeNTH{\

Na szczęście Axo ma także ukryte 0s na dole stosu, ponieważ #wyskakuje na górze stosu (aby sprawdzić, czy następna instrukcja powinna zostać pominięta). Wszystkie litery są bezoperacyjne. Następnie 5naciska przycisk a 5, {drukuje go, \kończy program. Naprawdę proste.

Odbitki labiryntowe 6

Wypróbuj online.

Trochę obcinam kod, ponieważ do prawej połowy nigdy nie ma dostępu, a także używam tzamiast \t, aby kolumny były poprawnie ustawione:

#I5aeeNTH{\
15}7'`--~!@
 teaww`

Teraz, gdy litery, spacje i tabulatory są ścianami w Labiryncie, więc dostępny kod wygląda tak:

# 5      {\
15}7'`--~!@
      `

Wskaźnik instrukcji automatycznie podąży tą ścieżką. #wypycha głębokość głównego stosu ( 0) i 15zamienia go w a 15. }przenosi go na stos pomocniczy i nie będziemy go więcej używać. To wygodnie powoduje, że góra stosu jest zerowa, dzięki czemu adres IP nie skręca w lewo w stronę 5. 7zamienia zero na a 7, 'to nie jest możliwe. Jest `to jednoznaczna negacja, więc rozumiemy -7. Teraz -odejmuje -7od niejawnego 0pod spodem tworzenia 7. Tym razem adres IP skręca w prawo do `, co jest jednoznaczną negacją, więc otrzymujemy 7ponownie. IP uderza w ślepy zaułek i się odwraca. -Działa tak samo jak wcześniej, więc mamy7jeszcze raz. Ponieważ górna część stosu jest teraz dodatnia, adres IP skręca w prawo. Jest jeszcze jeden, -który daje -7ponownie. Wtedy ~NIE jest bitowe, co daje 6i !drukuje. To jest właściwy moment, aby to zrobić, ponieważ teraz stos jest ponownie pusty, tak że adres IP nie skręci w lewo na, {ale zamiast tego przechodzi prosto do tego, @co kończy program.

Odbitki sześciokątne 7

Wypróbuj online.

Rozłożony kod wygląda następująco:

     # I 5 a e
    e N T H { \
   ? + + 3 ; n @
  " 8 " e a 9 1 5
 } 7 ' - - ~ ! @ <
  " 3 1 " L S O e
   . e a w w . .
    . . . . . .
     . . . . .

Zwykle byłby to przerażający program Hexagony, ale faktycznie używane postacie nie są zbyt liczne. W rzeczywistości są one niemal tak samo, jak te używane przez Labirynt i myślę, że tak, jak rozróżniania 5i 6jest dość miłe. :)

Górny rząd można w zasadzie zignorować. #zwykle zmieniałby na inny adres IP, ale obecna krawędź pamięci jest 0, więc nie. Litery po prostu ustawiają stałą wartość pamięci, ale nie zamierzamy jej użyć. Po zakończeniu pierwszego rzędu przepływ kontrolny jest kontynuowany w środkowym rzędzie (zaczynając od }, idąc w prawo). Gdy }przemieszcza się do innej krawędzi pamięci. 7ustawia tę krawędź na 7. 'wraca do miejsca, z którego przyszliśmy. -odejmuje krawędź pamięci, którą właśnie ustawiliśmy, 7od nieużywanej krawędzi pamięci ( 0), więc otrzymujemy -7. Następny -robi to samo, więc nie ma możliwości. Jak dotąd dość podobny do Labiryntu (poza układem pamięci). Ale teraz~nie jest bitem NIE, ale jednoznaczną negacją w Heksagonii. To daje 7zamiast 6. !@, jak w Labiryncie wypisuje wartość i kończy program.

Odbitki Foo 8

Wypróbuj online.

Jak wszyscy wiemy, ponieważ Quiz języka programowania drukowanie rzeczy w Foo jest dość trywialne, nawet jeśli większość kodu jest losową zbieraniną znaków. Żaden ze znaków nie wpływa na wydruk, oprócz tego, "8"który drukuje 8. Cóż, jest "31"później, ale Foo kończy się z błędem na końcu pierwszego wiersza. Nie jestem do końca pewien, dlaczego tak się dzieje, ale wymaga to 3(lub jakiejkolwiek innej cyfry) w górnym wierszu, który nie jest używany nigdzie indziej.

Odbitki Briana i Chucka 9

Wypróbuj online.

Zróbmy to jeszcze raz, gdy usuwamy trzeci wiersz (nigdy nie jest analizowany) i zastępujemy wszystkie nieistotne znaki (tj. Brak operacji lub komórki, które nie są odczytywane) spacjami:

         { ?         + +         9
  }   --   <        .

Dla przypomnienia, każda linia jest jak Brainfuck, której taśma jest kodem źródłowym innego programu. Kontrola rozpoczyna się w pierwszej linii (zwanej Brian).

Te {ruchy szef taśma całą drogę w lewo (gdzie już jest) i ?ręce kontrolować przepływ przez Chuck (druga linia). Tam }przesuwa głowicę taśmy w prawo, aż znajdzie komórkę zerową. Nie dzieje się to do końca programu, więc głowa taśmy kończy się jedną komórką po 9. -zmniejsza tę komórkę, ale to nie ma znaczenia. <przesuwa głowicę taśmy na 9i .drukuje ją. Chuckowi brakuje programu i kończy się.

Gol> <> drukuje 10

Testowane tutaj.

#jest lustrem, więc adres IP natychmiast przeskakuje do końca pierwszej linii (i idzie w lewo). 9Mogą być ignorowane. apopycha 10, epopycha 14, "8"popycha kod znaku 8, @obraca trzy górne elementy stosu (pociągając w górę 10), tak, że ndrukuje 10i ;kończy działanie programu.

Dzięki Sp3000 za sugerowanie użycia @zamiast !(co zapisało bajt).

złe odciski 11

Dzięki Sp3000 za wysłanie mi brutalnie wymuszonych list poleceń do generowania liczb jednocyfrowych.

Wypróbuj online.

zło ignoruje wszystko oprócz małych liter, więc kod wygląda następująco:

aeeneaeeaww

nWpływa również na stan, który nas nie obchodzi, więc zignorujmy to również. Teraz azwiększa rejestr (który zaczyna się od 0) i ejest magiczną operacją „splotu” zła, która w szczególny sposób przenika bity. aeeeaeeazdarza się dać wartość, 49która jest kodem znaku 1. wwdrukuje to dwa razy.

Odbitki białych znaków 12

Wypróbuj online.

Ok, wiemy, że Whitespace odczytuje tylko spacje, tabulatory i kanały, więc napiszmy kod widziany przez Whitespace STL:

SSSSSSTTSSLTLST

To są dwa polecenia:

SSSSSSTTSSL
TLST

Pierwszy przesuwa numer 12. W szczególności SSrozpoczyna literał liczbowy. Następny Sjest bit znaku (dodatni). Zatem wszystko do Lbinarnej reprezentacji liczby. Jest mnóstwo wiodących zer, których potrzebujemy dla Starry, ale nie wpływają one na liczbę. Wtedy TTSSs jest 12w formacie binarnym. Ciekawostka: gdybym dodał szesnasty język, mógłbym tutaj zapisać bajt, ponieważ Starry może użyć tej Sliczby w binarnej reprezentacji 16. Wątpię, czy będę ...

Po TLSTprostu drukuje górę stosu jako liczbę. ( TLoznacza polecenie jako polecenie we / wy i STdrukuje liczby).

Odbitki z rozszczepu 13

Wypróbuj online.

Rozszczepienie widzi tylko tę część kodu:

           <"31"L

Lrozpoczyna kontrolę przepływu od lewoskrętnego atomu. "przełącza tryb drukowania, aby 31po prostu drukować 13. Następnie atom jest przechwytywany w klinie <, co kończy program.

> <> drukuje 14

Testowane tutaj.

Rozróżnianie między> <> i Gol> <> nie jest tak łatwe, jak myślałem, ponieważ Gol> <> prawie zawsze robi to samo, co> <> dla poleceń istniejących zarówno w Gol, jak i poleceń istniejących tylko w Gol> < > powoduje> <> awaria. Jednak @obraca się w drugą stronę>>, tak że przesuwa w dół 7zamiast ciągnąć w górę 10, a następnie 14drukuje się zamiast 10.

Wydruki GolfScript 15

Wypróbuj online.

Ten jest najprostszy: #komentuje pierwszy wiersz. Następnie 15wypycha się i }jest „super komentarzem”, który ignoruje całą resztę programu. Więc 15jest drukowany na końcu programu.


34
To naprawdę imponujące!
sweerpotato,

1
@YassinHajaj Dzięki, poprawione.
Martin Ender,

2
Niiice. Świetna robota dla 15 języków!
ev3commander,

1
@SnoringFrog Cóż, proszę bardzo.
Martin Ender,

1
@Eumel Dzięki, ale nagroda jest przeznaczona specjalnie dla „normalnych” języków wymienionych w jej opisie, więc nagroda powinna się znaleźć na taką odpowiedź (jak bardzo fajne rozwiązanie Sp3000). Myślę, że i tak mam wystarczająco dużo przedstawicieli. ;)
Martin Ender,

42

Python 1.x, 2.x i 3.x, 32 bajty / 3 ^ 3 = 1.1851 ...

import sys
print(sys.version[0])

Wyświetla pierwszą liczbę wersji, która znajduje się 1w Python 1.x, 2Python 2.x i 3Python 3.x.

Zanim otrzymamy Python 9.x, mój wynik będzie wspaniały 0.04389!

: ~)!


10
Z czatu: Tak, jest to zarówno tanie, jak i ważne =) Jest to jeden z powodów, dla których tylko główne wersje były uważane za wystarczająco wyjątkowe. Nie wiem, ile jest wersji Pythona, ale prawdopodobnie możesz uzyskać dość niski wynik przy użyciu czegoś takiego ... To jedno z niewielu rozwiązań, w którym naprawdę rozumiem, co się dzieje, więc daj +1 ode mnie; - )
Stewie Griffin,

6
Czy w Pythonie 10.x (jeśli istnieje) nie wypisuje, 1ponieważ jest to pierwszy znak ciągu „10.whither”?
ev3commander,

1
@ ev3commander Jednak to przesłanie nie jest przeznaczone do uzyskania poprawnego wyniku w python10.
Tyzoid

Naprawiony! Pracuję nad wersją przyszłości, ale Python 1.x nie jest tak przyjazny dla użytkownika jak inne: ~)!
sweerpotato,

1
Wszystko, co muszę zrobić, to stworzyć język, który ma trzy główne wersje. W tych trzech głównych wersjach po uruchomieniu pustego pliku zwraca numer wersji głównej. Wynik byłby 0/3 ^ 3 = 0 Idealny.
Braden Steffaniak,

32

3 języki, 2 bajty / 27 = 0,074

1P

Cóż, to co najmniej połowa zgłoszeń: P

1. GolfScript

GolfScript ignoruje P, wypisując tylko 1. Wypróbuj online .

2. Par

Pjest 2 do potęgi, więc 1P = 2^1 = 2. Wypróbuj online .

3. Poważnie

Pdaje n-tą pierwszą liczbę zerową zindeksowaną. Dostajemy 3, ponieważ jest to druga liczba pierwsza. Wypróbuj online .


Notatki

Moim początkowym celem było znalezienie poprawnej odpowiedzi w 1 bajcie. Moja pierwsza próba była \x12, która działa w Bubblegum i GS2 , ale wyzwanie wymaga minimum trzech językach. \x13zadziałałoby, jeśli istnieje język, w którym dane wyjściowe 1.

Rezygnując z jednobajtowej odpowiedzi, przeniosłem się na dwa bajty. 3ujest blisko, daje 1 w Japt , 3 w GolfScript i 4 w Poważnie, ale ciężko było znaleźć język, który wyprowadzał 2 w celu wypełnienia luki.

To wszystko zajęło mi zbyt długo: /


20

6 języków - 44 bajty / 6 ^ 3 = 0,204 ...

Dzięki SnoringFrog za uratowanie 10 bajtów!

Pracuje w:

  • Befunge
  • Pyt
  • Brainfuck
  • Sześciokąty
  • Biała przestrzeń
  • AniRad v0.2

2# "1",@"-[----->+<]>.*@@@!4<SSTST
T
ST
 >6=

Uwaga: przed wypróbowaniem go w trybie online upewnij się, że S zastąpiono spacjami, a T tabulacjami lub przekonwertowano następujący zrzut heksowy na ASCII

32 23 20 22 31 22 2c 40 22 2d 5b 2d 2d 2d 2d 2d 3e 2b 3c 5d 3e 2e 2a 40 40 40 21 34 3c 20 20 09 20 09 0d 0a 09 0d 0a 20 09 0d 0a 20 3e 36 3d

Spróbuję użyć więcej języków programowania :)

Befunge (odbitki 1):

Wypróbuj online

2# "1",@"-[----->+<]>.*@@@!4<
2                             # This puts 2 onto the stack
 #                            # Skips the next op (the space)
   "1"                        # Sets the ASCII value of 1 onto the stack
      ,                       # Pop the last item (1)
       @                      # Terminate program

Pyth (odbitki 2):

Wypróbuj online

2# "1",@"-[----->+<]>.*@@@!4<
2                             # Prints 2
 #                            # Infinite while loop until an error occurs
   "1"                        # String
      ,@                      # This gives the error and terminates the program

Brainfuck (odbitki 3):

Wypróbuj online

2# "1",@"-[----->+<]>.*@@@!4<
2# "1",@"                     # Since these are not brainfuck ops, these will be ignored
         -[----->+<]>         # Puts "3" on the stack
                     .        # Prints the last item (3)     

Sześciokąt (odciski 4):

Wypróbuj online

2# "1",@"-[----->+<]>.*@@@!4<   

Bardziej czytelna wersja:

   2 # " 1       # The steps:
  " , @ " -      # 1 (2) - Hexagony starts at the top-left of the hexagon
 [ - - - - -     #       - This immediately puts 2 onto the stack
> + < ] > . *    # 2 (#) - Since the stack is 2, this makes the 2nd pointer the 
 @ @ @ ! 4 <     #       - new current pointer
  > 6 = . .      # 3 (*) - The position of the 2nd pointer is in the left-most
   . . . .       #       - position. This sets the stack to the product
                         - of the two neighbours which is zero
                 # 4 (<) - Changes the pointer direction to west
                 # 5 (4) - Sets the stack to 4
                 # 6 (!) - Outputs the decimal 4
                 # 7 (@) - Terminates the program

Białe znaki (wydruki 5):

Wypróbuj online

Ponieważ inne znaki są ignorowane, ale białe znaki i tabulatory, pozostaje nam:

SSTST                 # This pushes 5 onto the stack
T                     # 
ST                    # This prints the decimal

AniRad wersja 0.2 (odbitki 6):

Jakoś to działa dla wersji 0.2, ale daje błąd dla wersji 0.4. Nie mam pojęcia, dlaczego. Możesz znaleźć wersję 0.2 tutaj . Aby to uruchomić, możesz skopiować i wkleić kod interpretera do repl.it i uruchomić go. Następnie wystarczy wkleić program do STDIN i uruchomić go.

2# "1",@"-[----->+<]>.*@@@!4<      # (#)  Starts at the hashtag (starting point)
                                   #      Direction is down
                                   # (>)  When the pointer gets to the '>', it changes
 >6=                               #      its direction
                                   # (6) Puts 6 onto the stack 
                                   # (=) Pushes the result and terminates

1
Myślę, że więcej języków to zdecydowanie najlepsza droga ... sześcienny mianownik jest naprawdę hojny, więc nie powinno być zbyt trudno pokonać mój wynik, gdy masz 5 lub 6 języków.
Martin Ender,

@ MartinBüttner, Tak, chociaż nie widzę, jak dodać nowy język
Adnan

2
@Martin tak, to hojne. Celem mianownika sześciennego było silne zachęcanie do większej liczby języków. Myślę, że 6 języków na 50 bajtów powinno być takich samych, jak 5 języków na 30 bajtów. :-) na pewno będzie trudniej, im więcej używanych języków.
Stewie Griffin,

Twój kod białych znaków może zostać nieco zmniejszony (i nie sądzę, że wpłynie to na którykolwiek z twoich innych języków. (Używanie L do podawania wiersza), zamiast tego, SSSSSSSSSSTTSTSTLTLSSco masz teraz, możesz zrobić SSSTSTLTLST. To popycha dosłownie 5 na stos, a następnie drukuje jako liczbę całkowitą
SnoringFrog

@SnoringFrog Dzięki! Zredagowałem to
Adnan

14

6 7 języków, 32 37 bajtów, wynik 0,148 ... 37/7 3 ≈ 0,107872 ...

#7+!"@\"6.@;n5
print(4--int(-3/2)#"
)

Brainfuck-ng

+zwiększa bieżącą komórkę, !drukuje jako liczbę całkowitą, @wychodzi. #i "są NOP.

Python 2

Pierwszy wiersz to komentarz. Używając podziału na liczby całkowite, oblicza 4 - -int(-3 / 2) = 4 - -int(-2) = 4 - -(-2) = 4 - 2 = 2i drukuje wynik.

Python 3

Tak jak poprzednio, ale z podziałem zmiennoprzecinkowym. 4 - -int(-3 / 2) = 4 - -int(-1.5) = 4 - -(-1) = 4 - 1 = 3.

Lua

--rozpoczyna komentarz, a #w pierwszym wierszu jest komentarz, więc w zasadzie print(4).

> <>

#odzwierciedla IP, 5przesuwa 5, ndrukuje liczbę i ;wychodzi.

Befunge

#przeskakuje nad +, !logicznie neguje górę stosu, "@\"przesuwa ciąg @\, 6przesuwa 6, .drukuje liczbę i @wychodzi.

Pyt

#uruchamia nieskończoną pętlę, odrzucając wszelkie błędy. 7wypisuje 7, a następnie następuje, +!"string")co w zasadzie powoduje błąd polegający na braku dwóch operandów +kończących program.


13

JavaC ++ C, 363/27 = 13,4 ....

Java drukuje 1, C ++ drukuje 2, C drukuje 3. Nie bije tu żadnych rekordów (ponieważ Java), ale naprawdę podoba mi się sprytny, obelżywy sposób tworzenia poliglota w tych językach, które odkryłem.

//\u000a/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*\u002a/
import static java.lang.System.out;
public class P{//*/
/*\u002a/public static void//*/
main(/*\u002a/String[] args//*/
){//\u000a/*
out.print=p;
//\u002a/
out.print(1);}
/*\u002a/}//*/

To jest bałagan. Oto podział tego, jak to działa. Literały Unicode ( \u000ainaczej znane jako linefeed i \u002ainaczej znane jako *) są rozszerzane przez kompilator Java na ich rzeczywiste znaki. Oto, co widzi kompilator Java:

//
/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/**/
import static java.lang.System.out;
public class P{//*/
/**/public static void//*/
main(/**/String[] args//*/
){//
/*
out.print=p;
//*/
out.print(1);}
/**/}//*/

Wszystkie te rzeczy na początku są ignorowane, ponieważ wszystko jest zawinięte w wieloliniowy komentarz ( /* ... */). Później widzimy, że mieszanie komentarzy jednowierszowych i wieloliniowych pozwala nam dokładnie kontrolować, które części są komentowane w każdym języku. W metodzie głównej rozpoczynamy komentarz wielowierszowy, a następnie mamy //*/. Zwykle byłby to komentarz jednowierszowy, ale ponieważ mamy komentarz wieloliniowy, //nic nie robi, pozwalając na */jego zamknięcie.

To jest równoważny kod Java, z usuniętymi komentarzami:

import static java.lang.System.out;
public class P{
public static void
main(String[] args
){
out.print(1);}
}

Oto, co widzi kompilator C / C ++ (usunąłem literały Unicode, ponieważ nie są one rozszerzane przez kompilator i dlatego nic nie robią):

///*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*/
import static java.lang.System.out;
public class P{//*/
/*/public static void//*/
main(/*/String[] args//*/
){//\/*
out.print=p;
///
out.print(1);}
/*/}//*/

Tutaj komentarze jednowierszowe zastępują na początku ograniczniki komentarzy wieloliniowych, więc wszystkie #defines i #includesą przetwarzane wstępnie. Następnie komentarze wielowierszowe są używane do komentowania kodu tablicy kontrolnej dla Java. To jest równoważny kod, z usuniętymi komentarzami:

#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
main(
){
out.print=p;
out.print(1);}

#ifdef __cplusplusDo zdefiniowania tokena ojako "2"lub "3"w zależności od tego, czy jest to kompilator C ++ lub C, który kompiluje kod, używana jest standardowa sztuczka poliglota C / C ++ . Następnie definiujemy funkcję, pktóra przyjmuje pojedynczy (ignorowany) intargument i wywołania printf, używając naszego nowo zdefiniowanego otokena. Jak zwykle wartość zwracana jest pomijana, ponieważ nie jesteśmy w trybie ścisłym. Następnie definiujemy structz pojedynczym elementem, wskaźnik funkcji, którego podpis pasuje do p, i tworzymy pojedynczą instancję o nazwie out. W metodzie głównej ( intjak zwykle przestajemy) adres pjest przypisywany do out.print(wywoływania out.printpołączeń p) i jest wywoływany.

Jeśli C ++ nie został uwzględniony w językach, moglibyśmy usunąć cały kod preprocesora i zdefiniować pjako int p(int a){puts("2");}. Niestety, C ++ wymaga wykonania operacji #includewe / wy. Jeśli C nie została uwzględniona, moglibyśmy spaść definicji pi #ifdefmakra preprocesora, a bezpośrednio zdefiniować funkcję członkowskiego w structzamiast konieczności wskaźnik funkcji. Niestety C nie obsługuje funkcji składowych.


12

4 języki, 28 bajtów / 64 = 0,4375

print((0 and 3^1or 1/2>0)+1)

1. Python 2

0jest fałszem i /podziałem całkowitym, więc

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0 > 0) + 1 = False + 1 = 1

2. Perl (także Python 3)

0jest fałszem i /podziałem zmiennoprzecinkowym, więc

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0.5 > 0) + 1 = 1 + 1 = 2

3. Ruby

0jest prawdą i ^jest bitowe xor, więc

(0 and 3^1 or 1/2 > 0) + 1 = xor(3,1) + 1 = 2 + 1 = 3

4. Lua

0jest prawdą i ^jest potęgowaniem, więc

(0 and 3^1 or 1/2 > 0) + 1 = pow(3,1) + 1 = 3 + 1 = 4

Zauważ, że Lua i Ruby nie mogą dodawać boolanów tak, jakby były liczbami całkowitymi, stąd ich grupowanie razem. Niestety 0andnie działa w Lua, więc nie możemy zapisać tam bajtu.


Poprzednia 17 bajtowa wersja, która drukuje 1 (Lua), 2 (Ruby), 3 (Python / Perl):

print(2^(0 or 1))

-3 bajty dzięki @xnor dla tej wersji, dzięki czemu jest o wiele ładniejszy :)


Czy 2^(0 or 1)zadziała?
xnor

@xnor Ah tak, dziękuję :)
Sp3000

8

BFSRS> <> funge93thon123, 73/343 ≈ 0,212827 ...

Brainfuck, Poważnie ,> <>, Befunge-93, Python 1, Python 2, Python 3

# 4['.]@kX21z-[>+<-----]>--.<;n3
import sys;print(3+int(sys.version[0]))

Zawiera niezadrukowalne zrzuty heksadecymalne (odwracalne z xxd -ps -r):

2320345b272e5d406b5832317a7f2d5b3e2b3c2d2d2d2d2d5d3e2d2d2e3c
3b6e330a696d706f7274207379733b7072696e7428332b696e7428737973
2e76657273696f6e5b305d2929

Z czasem będę dodawać kolejne języki (i prawdopodobnie bajty). Języki w nagłówku są wymienione w kolejności drukowania. Zakłada 8-bitowe zawijanie komórek i taśmę, która nie będzie narzekać na opuszczenie początkowej pozycji (zawijanie lub nieskończoność) dla Brainfuck.

Brainfuck:

[.]   initial value of first cell is 0, so loop is skipped
-[>+<-----]>--  push 49 (ASCII ordinal of 1)
.     print "1"
<     move to blank cell
[0]   skip loop because cell is 0
      everything else is ignored

Poważnie :

# 4['.]@  does some stuff we don't care about
kX        pop entire stack, push as list, discard (essentially the same as é, but is ASCII so we can use Python)
2         push 2
1z        pop 1 item from stack and print (used instead of . so Brainfuck doesn't print here; same as ü in this scenario, but is ASCII so we can use Python)
0x7f      terminate program
          everything else is ignored

><>:

#    mirror, reverse direction
3n;  push 3, print "3", end (reversed because IP is scanning RTL at this point)
     everything else is ignored

Befunge-93:

#     jump over the space
4['.] push 4, print 4 (brackets and ' do nothing)
@     end program
      everything else is ignored

Python 1 (dzięki muddyfish):

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+1=5

Python 2 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+2=6

Python 3 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+3=7

Python 1 również działa. Zobacz codegolf.stackexchange.com/a/65652/32686 . Nie dodaje żadnych znaków (ale zmienia się 3na 4)
Blue

8

14 języków, 73 bajty, wynik = (73/14 ^ 3) = 0,02660349854

#Y2(3`5n~thneo e        ;n@0d c
#   -[>+<"9"L-----]>+.
14  
print(int(15/2))+3

Mogę dodać więcej języków, ale myślę, że dodam to, co mam tutaj.

1. Brainbool ; Wypróbuj online!

Odpowiedni kod:

    [>+<         ]>+.

               + 

To jest naprawdę sprawiedliwe +.+, co daje wynik 1.

2. Jolf ; Wypróbuj tutaj!

Znak (przestaje interpretować kod źródłowy, więc kod źródłowy to:

#Y2

Jest to równoważne z (w JavaScript)

var Y = []; toHex(Y); alert(2);

Które wyjścia 2.

3. element; Wypróbuj online!

Odpowiedni kod:

    3`

To rejestruje 3i drukuje.

4. Brainfuck ; Wypróbuj online!

Odpowiedni kod to:

-[>+<    -----]>+.

  -    -      + 

Który jest standardowym sposobem generowania kodu 4 i wysyłania go, a także kilka innych rzeczy po nim.

5. Reng; Wypróbuj tutaj!

~ kończy program, więc odpowiedni kod tutaj to:

#Y2(3`5n~

#redefiniuje Ybyć TOS, w tym przypadku 0. 2popycha 2; (obraca stos N razy, odrywając N od stosu; 3`popycha -3; i wreszcie 5ndruki 5.

6. ETA; Wypróbuj online!

ETA odczytuje tylko litery E, T, A, O, I, N, S, H, więc wykonywany tylko kod jest następujący:

       n thneo e         n     


  int int          

Super-odpowiedni kod:

       n thneo

Lub, równoważnie: nthne o. n...ejest literałem base-7 i thnjest liczbą base-7 dla 54. owypisuje ten znak. Przesłanie się kończy, ale nie wiem dlaczego.

7. Python 3

Co widzi:

# comment
# comment
14
print(int(15/2))+3

15/2daje 7,5, podobnie jak /podział zmiennoprzecinkowy. int(...)czyni liczbę całkowitą, która jest następnie drukowana. Program +3napotyka błędy po napotkaniu.

8. Julia

Julia widzi:

# comment
# comment
14
print(int(15/2))+3

Zamiast obcinania 15/2, Julia zaokrągla go w górę, uzyskując 8. Drukuje to, a następnie napotyka błędy przy napotkaniu +3.

9. Rozszczepienie; Wypróbuj online!

Odpowiedni kod:

        <"9"L         

Mam ten pomysł z części Martin's Fission (bardziej jak ukradłem). Lzaczyna rzecz lewą, chwyta 9i kończy się <.

10. Biała spacja; Wypróbuj tutaj!

Odpowiedni kod, tłumaczący spacje Si tabulatory na T:

SSSTSTS
T
ST

Pcha 10 do stosu i wysyła go jako liczbę ( T\nST).

11. Python 2

Python 2 widzi to:

# comment
# comment
14
print(int(15/2))+3

(int(15/2))+3 jest oceniany na 11 i jest drukowany.

12. Gol> <>; Wypróbuj tutaj!

Odpowiedni kod:

#                      ;n@0d c

Wykorzystuje sztuczkę zastosowaną w odpowiedzi Martina, która @obraca różne kierunki w> <> i Gol> <>. #dubluje, cpopycha 12, dpopycha 13, 0popycha 0 i @przenosi cna górę stosu, a następnie zostaje wyrzucony i wydrukowany za pomocą ;n.

13.> <>; Wypróbuj online!

Odpowiedni kod:

#                      ;n@0d c

Ponownie użycie tego @obraca różne kierunki w> <> i Gol> <>. #dubluje, cpopycha 12, dpopycha 13, 0popycha 0 i @przenosi dna górę stosu, a następnie zostaje wyrzucony i wydrukowany za pomocą ;n.

14. Skrypt golfowy; Wypróbuj online!

Co widzi:

# comment
# comment
    14
print(-int(-15/2))+3

To popycha 14, printto i błędy. Skradziony zainspirowany odpowiedzią Sp3000 .


7

Subskin , Brainfuck i Fob 27 bajtów / 3 ^ 3 = 1

0#>&$3#<>$-[----->+<]>-.
31

Subskin

0
31

Ustawiamy wskaźnik instrukcji (tutaj nie ma znaczenia) na 0i rejestr wyjściowy na 31. Jeśli zawartość rejestru wyjściowego jest >= 0, wyprowadzamy zawartą wartość jako char. Cały pozostały kod jest ignorowany.

Brainfuck

-[----->+<]>-.

Umieszcza 3w rejestrze, raz zmniejsza wartość, -a na koniec wyświetla za pomocą ..

Oszukiwać

#>&$3#<>$

Jest to nieco trudniejsze, ponieważ Brainfuck czyta również instrukcje <i >w Fob. Wchodzimy w tryb wykonywania z #i zwiększamy wskaźnik Brainfuck o jeden, co ułatwia nam później. Nie mamy jeszcze nic do wykonania, więc nic nie jest wykonywane.

Wchodzimy do trybu akumulatora za pomocą $, wrzucamy a 3, ponownie wchodzimy w tryb wykonywania, pchamy zawartość akumulatora do stosu za pomocą, <a na koniec wyprowadzamy zawartość za pomocą >.

Aby zapobiec wkręceniu Brainfuck w program, ponownie wchodzimy w tryb akumulacji za pomocą $.


7

7 języków, 55/7 ^ 3 ≈ 0,16035

Działa w PowerShell v1, v2, v3, v4 i v5, Foo i Pyth

#7.q"6""
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]

Cyfry 1-5 używają logiki podobnej do odpowiedzi sweerpotato . $PSVersionTableSpecjalna zmienna została wprowadzona w PowerShell v2 i zawiera pełną listę budować, przeglądy itd Oto przykład wyjście zmiennej:

PS C:\Tools\Scripts> $PSVersionTable

Name                           Value                                                                                                                           
----                           -----                               
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

W tym kodzie najpierw przechowujemy go, $paby długość kodu była krótsza. Następnie sprawdzamy jego istnienie, wykorzystując zmienną jako indeks do tablicy dwóch elementów:

  • Jeśli zmienna nie istnieje, PowerShell utworzy ją dynamicznie i przypisze $NULL, !której jest $TRUElub 1odpowiada drugiemu elementowi tablicy, który generuje dane wyjściowe 1.
  • Jeśli zmienna istnieje (jak ma to miejsce w v2 +), wówczas !zmienna powoduje, że $FALSElub 0indeksuje do pierwszego elementu, który wypisuje numer wersji.

Używając Foo dla 6, wykorzystujemy #komentarz, który jest w PowerShell, więc jest ignorowany podczas wykonywania go w środowisku PS. Jednak Foo z radością wypluje numer, 6a następnie przejdzie przez resztę programu, co nic nie robi.

Używając Pyth dla 7, wracamy 7, a następnie natychmiast wychodzimy z .q, więc nieskończona pętla while-true, która się rozpoczęła, #nie ma znaczenia. Ponieważ zostało nam coś, co zostaje domyślnie wydrukowane. Dzięki @ FryAmTheEggman za ten dodatek.

Edytuj - Grał w garść bajtów dzięki Mauris Edit - wyjaśnił wyjaśnienie Pyth dzięki Sp3000


Jak o $p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]? Działa to w mojej Powershell, ale może nie we wszystkich poprzednich wersjach.
Lynn,

7

7 języków, 287/7 ^ 3 = 0,836

Prawdopodobnie najniższy wynik, jaki dostaje, w każdym razie lubię te 3 wersje C polyglot.

Dodano nudne rozwiązanie Python, aby przynajmniej zakwalifikować się do nagrody za 3 unikalne języki.

Dodano Javę, nadużywając C trigrafów do różnych interpretacji komentarzy.

Pracuje w:

  • Python 1

  • Python 2

  • Python 3

  • C89

  • C99

  • C ++

  • Jawa

wersja golfowa:

/*
*??/
/
#include <stdio.h>
#ifndef __cplusplus
#define true 8/*
import sys
print(sys.version[0])
'''
#*??/
/
#endif
int main(){int a=(true>1)?-6:3;printf("%d",(true//*
+a
//**??/
/+2));}
#define a \
'''
/**\u002f
public class p{public static void main(){System.out.println("7");}}
/**/

Nie golfowany:

/*
*??/
/

#include <stdio.h>

#ifndef __cplusplus
#define true 8/*

import sys
print(sys.version[0])
'''
#*??/
/
#endif 

int main()
{
    int a = (true > 1) ? -6 : 3;
    printf ("%d", (true//*
    +a
    //**??/
/
    +2));
}
#define a \
'''

/**\u002f
public class p
{
    public static void main()
    {
        System.out.println("7");
    }
}
/**/

Ok, to chyba trochę się męczy i mam nadzieję, że moje umiejętności posługiwania się językiem angielskim są wystarczająco dobre, aby wyjaśnić to zwyczajnie.

Przede wszystkim wyjaśnię różne rodzaje komentarzy, których użyłem do enkapsulacji struktur językowych.

Weźmy więc pierwszy blok:

/*
*??/
/

W przypadku Javy jest to dopiero początek komentarza wieloliniowego. Ale ... w C99 / 89 / ++ to ocenia na

/*
*/

Ponieważ ??/jest to trójgranica, \podczas gdy w C \postać jest w pewnym sensie konsekwentna, a nawet zużywa łamanie linii w swojej funkcji dowodzenia. Powoduje to, że wynik jest \npo prostu „wyświetlany” zamiast przerywania linii. to znaczy, biorąc pod uwagę tablicę bajtów reprezentującą pierwszy blok: [ /] [ *] [ \n] [ *] [ ?] [ ?] [ /] [ \n] [ /] będzie po ocenie trigraficznej: [ /] [ *] [ \n] [ *] [ \] [ \n] [ /] Tam, gdzie spójna funkcjonalność \wyzwalaczy i „zużywa”, \nwięc pozostałe i ostatecznie w Cangach ocenianych bajtów to: [ /] [ *] [ \n] [ *] [ /]

Ale o tym wszystkim java nic nie wie i traktuje wszystko, co następuje, jako komentarz, dopóki ta sztuczka nie zostanie cofnięta.

(ciąg dalszy nastąpi!)


7

4 języki (Befunge-93, Microscript II, Microscript i Foo), wynik 7/64 = 0,109

"4"1.@2

Befunge: Naciśnij 4, naciśnij 1, wydrukuj 1 i zakończ.

Microscript II: Wytwórz ciąg „4”, odrzuć go, weź pierwiastek kwadratowy z jednego, odrzuć to i ostatecznie ustaw x na 2. To jest następnie drukowane niejawnie.

Microscript: Wciśnij 52 na stos (który tak naprawdę nigdy nie będzie używany przez resztę programu), zwiększ rejestr (początkowo zero) o jeden, a następnie zwiększ rejestr o dwa. Jest to następnie drukowane niejawnie.

Foo: wydrukuj ciąg „4”, a następnie naciśnij 2


6

Python 1 | 2 | 3, 27 bajtów / 27 = 1

print(len("\xabc")+(1/2>0))

Użycie numerów wersji przez sweerpotato sprawiło, że zastanawiałem się, czy można odróżnić Pytony w mniejszym stopniu. Oto najlepsze, jakie znalazłem.

Wyjaśnienie

Aby odróżnić Python 3 od wcześniejszych wersji, używamy standardowej sztuczki z dzieleniem liczb całkowitych vs. (1/2>0) == (0>0)zwraca 0 wcześniejszych wersji niż Python 2.3 lub Falseod Python 2.3 i (1/2>0) == (0.5>0)zwraca TruePython 3.

Aby odróżnić Python 1 od reszty, bierzemy długość ciągu "\xabc", który ma długość 1 w Pythonie 1 i długość dwa od Python 2 wzwyż. Dlaczego? Dlatego

Ucieczka \ x w literałach łańcuchowych zajmuje teraz dokładnie 2 cyfry szesnastkowe. Poprzednio zajmowałby wszystkie cyfry szesnastkowe następujące po „x” i pobierał 8 najniższych bitów wyniku, więc \ x123456 był równoważny \ x56.

(Od Co nowego w Python 2.0 )


6

Python 3, Ruby, Perl, C, C ++, Objective-C 202 bajty / 6 ^ 3 = 0,935 ...

To była naprawdę dobra zabawa i dużo zabawy z booleanami.

Możesz wszystkie wersje kodu w następującej witrynie , kopiując i wklejając kod do interpretera.

#include <stdio.h> /*
print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1
"""""
*/
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}/*
"""
#*/

Python 3, drukuje 1

Trik jest następujący:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

To zostanie wydrukowane 1

Ruby, odciski 2

Interpretowany kod dla Ruby to:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

To się drukuje 2

Perl, odciski 3

Interpretowany kod dla Perla to:

print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1

Przede wszystkim __DATA__token informuje kompilator Perla, że ​​kompilacja została zakończona. Wszystko później jest ignorowane.

print ((("0"+"0"==0)and 3) or (0and 2or 1));

I druki 3

C, wydruki 4

Interpretowany kod różni się od pozostałych:

#include <stdio.h>
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}

Spowoduje to po prostu wydrukowanie znaku 4.

C ++, drukuje 5

Taki sam jak kod C.

Spowoduje to wydrukowanie znaku 5.

Cel C, odbitki 6

Taki sam jak kod C.

Spowoduje to wydrukowanie znaku 6.


5

5 języków, 18 bajtów / 5 ^ 3 = 0,144

Działa w Brainbool , Mathematica , Foo , > <> i Befunge-93 .

4!<n;+Print@2"3".5

Brainbool

Brainbool jest jak Brainfuck, ale działa tylko na bitach, a jego wejście i wyjście składa się wyłącznie z 0i 1.

4!<n;+Print@2"3".5
  <                   move the pointer to the left
     +                logic not
                .     print the current cell

Matematyka

W Mathematica wszystko jest wyrażeniem i ma wartość. Print@2drukuje 2i zwraca symbol Null. Następnie kod wykonuje pewne obliczenia symboliczne, ale nic nie drukuje.

bla

"3" drukuje 3. Nie wiem, co robią inne części.

> <>

4!<n;+Print@2"3".5
4                     push 4
 !                    skip the next command
   n                  pop and print it as a number
    ;                 end the program

Befunge

4!<n;+Print@2"3".5
4                     push 4
 !                    logical not
  <                   makes the program counter travel to the right
 !                    logical not
4                     push 4
                 5    push 5
                .     pop and print it as a number
             "3"      push the string "3"
            2         push 2
           @          end the program

12 języków, 35 bajtów / 12 ^ 3 = 0,0202546 ...

Używanie sztuczki sweerpotato , tanie, ale potężne.

Działa w Brainbool , Mathematica 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 i 10.0 , Foo i > <> .

cn;+"11".Print@Floor@$VersionNumber


5

6 języków, 38/6 ^ 3 = 0.17592̅5̅9̅

Biała przestrzeń , Brainfuck, Ruby, Labirynt , Foo, Poważnie

Legenda:

£: tab

: przestrzeń

§: 0x7f

puts•2;#4!@•-[>+<-----]>6.§"5"•£    
£
•£

Zawiera znaki niedrukowalne, więc oto zrzut heksowy:

7075747320323b23342140202d5b3e2b3c2d2d2d2d2d5d3e362e7f22352220090a090a20090a

Wyjaśnienie:

Biała przestrzeń

Wypróbuj online. (Uwaga: mój program pomija zamykanie trzech kanałów dla zakończenia programu, napisałem / przetestowałem to na Whitelips i daje to tam właściwe wyjście, ale nie wypróbowuje go w Try It Online, więc do połączonego programu dodano te dwa znaki. jak mogę powiedzieć, niektórzy tłumacze pozwalają ci to zrobić, inni utkną w nieskończonej pętli bez wyraźnego zakończenia)

(pomijając ignorowane znaki)

spacespacespacetabenter: wepchnij 1 na stos

tabenterspacetab: wypisuje górę stosu

Rubin

Nie powinienem tego wyjaśniać. Drukuje 2, traktuje resztę tego wiersza (ergo, program pieprzenia mózgu) jako komentarz, resztę pliku traktuje jako pustą.

Brainfuck

Wypróbuj online.

Wymaga interpretera obsługującego niedomiar. Przepełnia pierwszą komórkę do 255, a następnie używa jej do wygenerowania 51 przez licznik pętli, który jest kodem ascii dla 3.

Labirynt

Wypróbuj online.

(pomijając ostatnie dwa wiersze dla czytelności, ponieważ nigdy nie zostały osiągnięte)

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•                            skipped
     2                           push 2 onto stack
      ;                          pop 2 from stack
       #                         push current stack depth (0) to stack
        4                        push 4 to stack
         !                       print top of stack as integer
          @                      program terminates

bla

Wypróbuj online.

Jedyne, co wpływa na wynik, to „5”, które wypisuje 5.

Poważnie

Wypróbuj online.

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•2;#4!@ -[>+<-----]>           assorted stack manipulation that doesn't affect this program
                        6          push 6 to the stack
                         .         output top of the stack
                          §        (0x7f) terminate program

5

5 języków: Chaîne , Minkolang , Foo , Brainf ** k-ng i Vitsy , 21/5 ^ 3 = 0,168

2|<«+!@"3".N+m

5N»

Brainf ** k-ng

2|<«+!@"3".N+m

5N»
  <            go left (should still be ok)
    +!         output 1
      @        halt execution

Chaîne

2|<«+!@"3".N+m

5N»
2              «add 2 to the current string»
 |<            «take off and put on the string (no op)»
   «           «comment»

  »
               «implicit output»

bla

2|<«+!@"3".N+m

5N»
       "3"     print three

Minkolang

2|<«+!@"3".N+m

5N»
2              C push 2 to the stack [2] C
 |             C mirror C
2              C push 2 to the stack [2,2] C
             m C ignored C
            +  C add top two [4] C
           N   C output C
          .    C terminate program C

Vitsy

2|<«+!@"3".N+m

5N»
2              push 2
 |             mirror
2              push 2
             m pop 2, goto line 2
5              push 5
 N             output 5
  »            ignored

Prawdopodobnie mogę dodać> <> lub coś takiego.


1
Wiesz, nigdy nie znalazłem dobrego zastosowania dla lustra. xD
Addison Crump,

5

Craneflak , Brain-Flak Classic , Rain-Flak , BrainHack , Brain-Flueue , miniflak , miniHack : .1020

(([]()()()<()()()>)()()){}#{}({}())

Wypróbuj online!

Wyjaśnienie

Pierwszą rzeczą, która się tutaj dzieje, jest różnica w sposobie odczytywania komentarzy między interpretatorami BrainHack, CraneFlak i Rain-Flak. Craneflak nie ma komentarzy, w Rain-Flak #komentuje resztę linii, aw BrainHack #{...}komentuje wnętrze.

Oto, co czyta każdy język:

Rain-Flak: (([]()()()<()()()>)()()){}         -> 3
BrainHack: (([]()()()<()()()>)()()){}({}())   -> 4
Craneflak: (([]()()()<()()()>)()()){}{}({}()) -> 1

Następną rzeczą jest różnica między uderzeniami mózgu i miniflakami. Zarówno Rain-Flak, jak i BrainHack obsługują miniflak, w którym wszystkie dodatkowe operacje są po prostu usuwane. Oznacza to, że tracą []i<...>

Rain-Flak: (()()()()()())         -> 6
BrainHack: (()()()()()())({}())   -> 7

Następnie mamy różnicę między Brain-Flak i Brain-Flak Classic. W Classic []jest-1 zamiast wysokości stosu, co oznacza, że ​​nasz wynik jest o 1 mniej niż w zwykłym Rain-Flak, co daje 2.

Wreszcie mamy różnicę między Flak mózgu a płomieniem mózgu. W płomieniach mózgowych zamiast stosu używana jest kolejka. Zwykle uderzenie mózgu popycha 3, a następnie 5 i odrywa 5, jednak w płomieniu mózgowym pop pozbywa się 3, a nie 5.


4

Droga Mleczna 1.0.2 , CJam i STXTRM , 20 bajtów / 3 ^ 3 = 0,741

Wyobrażam sobie, że istnieje co najmniej jeden inny język, który mógłbym dodać.

'2"3""1"1<<1>;;"2"3;

Wyjaśnienie


Droga Mleczna ,1

W Drodze Mlecznej ciągi są oznaczone tylko parami podwójnych cudzysłowów. Pojedynczy cytat odczytuje dane wejściowe z wiersza poleceń; jeśli nie ma, wypycha pusty ciąg. Większe niż i mniejsze niż znaki obrócą cały stos odpowiednio w prawo i w lewo. Na koniec średnik zamienia dwa górne elementy stosu.

Oto wizualizacja stosu (pokazany stos jest wynikiem operacji wymienionej na liście po jej wystąpieniu):

["", 0]                                             #  default stack

["", 0, ""]                                 #   '   #  read input from command line
["", 0, "", 2]                              #   2   #  push 2 to the stack
["", 0, "", 2, "3"]                         #  "3"  #  push "3" to the stack
["", 0, "", 2, "3", "1"]                    #  "1"  #  push "1" to the stack
["", 0, "", 2, "3", "1", 1]                 #   1   #  push 1 to the stack
[0, "", 2, "3", "1", 1, ""]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0, 1]              #   1   #  push 1 to the stack
[1, "", 2, "3", "1", 1, "", 0]              #   >   #  rotate the stack rightward
[1, "", 2, "3", "1", 1, 0, ""]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0, "", 2]       #  "2"  #  push 2 to the stack
[1, "", 2, "3", "1", 1, "", 0, "", 2, "3"]  #   3   #  push "3" to the stack
[1, "", 2, "3", "1", 1, "", 0, "", "3", 2]  #   ;   #  swap the top two stack elements

CJam ,2

W CJam ciągi są również oznaczane parami podwójnych cudzysłowów. Pojedynczy cytat przesuwa kod następnego znaku. Kiedy wyprowadzany jest kod znakowy, jest on wyprowadzany jako odpowiadający mu znak. Znaki większe niż i mniejsze niż działają zgodnie z oczekiwaniami, oceniając kolejność dwóch górnych elementów stosu. Wreszcie średnik odrzuca element górnego stosu. Po zakończeniu programu zawartość stosu jest wyprowadzana.

Oto wizualizacja stosu (pokazany stos jest wynikiem operacji wymienionej na liście po jej wystąpieniu):

[]                         #  default stack

['2]               #  '2   #  push the character code of "2" to the stack
['2, "3"]          #  "3"  #  push "3" to the stack
['2, "3", "1"]     #  "1"  #  push "1" to the stack
['2, "3", "1", 1]  #   1   #  push 1 to the stack
['2, "3", "1"]     #   <   #  leave the greater of the top two stack elements on the stack
['2, 0]            #   <   #  leave the greater of the top two stack elements on the stack
['2, 0, 1]         #   1   #  push 1 to the stack
['2, 1]            #   >   #  leave the lesser of the top two stack elements on the stack
['2]               #   ;   #  pop the top stack value
[]                 #   ;   #  pop the top stack value
['2]               #  "2"  #  push the character code of "2" to the stack
['2, "3"]          #   3   #  push "3" to the stack
['2]               #   ;   #  pop the top stack item

STXTRM ,3

W MSM wszystko, co nie jest operatorem, jest wypychane na stos jako znak. Średnik powiela element górnego stosu. Program trwa, dopóki nie będzie już więcej operatorów lub na stosie będzie pojedynczy element.

Ostatnim znakiem na stosie jest 3, który jest duplikowany przez operatora końcowego. 3jest najwyższym elementem na końcu programu, więc jest wyprowadzany.


4

5 języków, 18 bajtów / 5 ^ 3 = 0,144

Ouroboros , Pip , QBasic, Foo i Pyth

5'"4"()"
1?3'@n()2

1. Ouroboros

Każda linia programu przedstawia węża jedzącego ogon.

Snake 1

Push 5, 'to no-op, push 52(kod ASCII "4"). (powoduje, że wąż wyskakuje numer i zjada tyle znaków ogona. Ponieważ powoduje to połknięcie wskaźnika instrukcji (i całego węża), wykonywanie zostaje zatrzymane.

Snake 2

Wciśnij 1, wciśnij losową liczbę ( ?), wciśnij 3, 'to brak możliwości. @obraca 1wierzch stosu i nwysyła go jako liczbę, pozostawiając 3wierzchołek stosu. Następnie (zjada tyle znaków z końca węża, połykając wskaźnik instrukcji i zatrzymując się.

Możesz uruchomić ten program online w interpretatorze fragmentu stosu tutaj .

2. Pip

Większość programu składa się z wyrażeń, które są oceniane i odrzucane:

  • 5
  • '" (dosłowny charakter)
  • 4
  • "()"
  • 1?3'@ (wyrażenie trójskładnikowe)
  • n (zmienna, = nowa linia)
  • () (zero)

Na koniec 2drukowane jest ostatnie wyrażenie ,.

3. QBasic

Wszystko po 'to komentarz. Pierwsza linia sprowadza się zatem do 5numeru linii. W drugiej linii 1znajduje się numer linii i ?3skrót do PRINT 3.

(Najwyraźniej niedziałające numery wierszy nie stanowią problemu, choć byłoby to łatwe do naprawienia).

4. Foo

Prawie wszystko jest bezoperacyjne. "4"odbitki 4. Nawiasy (x2) to pętla, która działa do momentu, gdy bieżąca komórka macierzy wyniesie zero, co jest prawdą natychmiast i pętla kończy działanie. @, gdy nie następuje po nim liczba, pobiera wartość bieżącej komórki macierzy (zainicjowanej na 0) i wypycha ją na stos.

Nie jestem do końca pewien, jak należy postępować z drugim, niedopasowanym ". Wersja elektroniczna wydaje się dodanie nowego wiersza do wyjścia, które reguły wyzwanie pozwolić.

5. Pyth

5jest wyprowadzany. Następnie program napotyka '"4"próbę odczytu pliku o nazwie 4. Dopóki taki plik nie istnieje, myślę, że powinno to zakończyć działanie programu z błędem. (Wersja online mówi - name 'open' is not definedZakładam, ponieważ otwieranie plików nie jest dozwolone online).

Błąkanie "na końcu wiersza 1 zapewnia, że ​​wiersz 2 nie spowoduje błędu składniowego przed wykonaniem.



@Dennis Thanks! Strona Esolangs nie miała linku do tego tłumacza.
DLosc

Oto indeks aktualnie dostępnych języków. Jeśli chcesz, żebym go dodał, po prostu pinguj mnie na czacie.
Dennis

4

4 języki, 24 bajty, 24/4 ^ 3 = 0,375

print(1//0.5--1+1/2*2
);

1. PHP

PHP wykonuje, print(1);co jest równe 1

2. Lua

Lua wykonuje, print(1//0.5);co równa się 2

3. Python 2

Python 2 wykonuje, print(1//0.5--1+1/2*2);co jest równe 3 (dzielenie liczb całkowitych)

4. Python 3

Python 3 wykonuje, print(1//0.5--1+1/2*2);co jest równe 4 (dzielenie zmiennoprzecinkowe)


Fajna odpowiedź, lubię odpowiedzi w konwencjonalnych językach :-) mam nadzieję, że będziesz się dobrze bawić w golfa na ppcg :-) wypróbuj jedno z moich wcześniejszych wyzwań, jeśli uważasz, że są interesujące :-) niektóre są nieco trudne, a niektóre są bardziej podstawowe :-)
Stewie Griffin

Możesz być zainteresowany otwartą nagrodą za 100 powtórzeń opisaną w wyzwaniu. Outgolf Sp3000 (28 bajtów, 4 języki) korzystający tylko z konwencjonalnych języków (zdefiniowanych w linku) i jest twój :-) niestety python 2 i 3 nie są uważane za wyjątkowe w wyzwaniu nagrody.
Stewie Griffin

3

Brainfuck-ng, Foo,> <>, 9 bajtów / 3 ^ 3 = 0,333 ...

#+!"2";n3

Brainfuck-ng

Jedyne znaki Uznaje się +i !:

+ Increment cell by one
! Print as integer

Wydruki 1

bla

Drukuje wszystko w cudzysłowie.

"2"

Wydruki 2

> <>

#Odzwierciedla punkt po lewej stronie, 3wypycha 3 na stos, nwyprowadza go jako liczbę całkowitą, ;zatrzymuje program.

#      ;n3

2

3 języki, 82 83/3 ^ 3 = 3,074 ...

Działa w ??? , Whitespace i Beatnik . A raczej powinien działać w tych językach, ale nie będę mógł ich przetestować przez kilka dni. W każdym razie oto kod:

K... Jax... Jy... Jy...   ...
My...    My...
... ...     ......................XO!

1. ???

.................................................!

??? jest po prostu bzdurą, ale używa tradycyjnych interpunkcji jako poleceń zamiast tradycyjnych znaków. .zwiększa bieżącą komórkę pamięci, co jest wykonywane 49 razy. !pobiera bieżącą komórkę pamięci i drukuje ją tutaj jako znak 1.

2. Biała spacja

[Space][Space][Space][Tab][Line Feed]
[Tab][Line Feed]
[Space][Tab]

Białe znaki to język, który ignoruje wszystkie znaki niebiałe. Tutaj przekonwertowałem go na czytelną formę. Pierwsza linia wypycha 2na stos, a dwie pozostałe linie drukują tutaj górę stosu jako liczbę 2.
Zauważ, że w połączonym kodzie zastąpiłem tabulatory czterema spacjami z powodu ograniczeń technicznych.

3. Beatnik

K Jax
Jy Jy
My My
XO

Beatnik to język, w którym każde słowo jest konwertowane na jego wynik Scrabble, a następnie wyniki są interpretowane jako polecenia. Pierwsza linia wypycha 17na stos. Druga linia powiela wierzchołek stosu dwukrotnie, a trzecia linia dodaje góry na elementy stosu wraz dwukrotnie skutecznie trzykrotnie 17się 51. Ostatnia linia wypisuje tutaj znak na górze stosu 3.
Zauważ, że używam Beatnik na Face Value, zakładając, że nie ma błędu w oryginalnej specyfikacji Beatnik. Zauważ też, że korzystam z systemu punktacji English Scrabble w Ameryce Północnej.

Jeśli do tej pory nie jest to jasne, każdy z tych języków akceptuje tylko określony typ znaków (odpowiednio interpunkcję, białe znaki i litery), więc pisanie tego poliglota było tak proste, jak pisanie poszczególnych programów. Jedyną prawdziwą „sztuczką” jest użycie kodu Białej Przestrzeni, aby oddzielić słowa od Beatnika. Poza tym poszczególne programy w ogóle się nie pokrywają.


2
3 ^ 3 = 27 ==> 82/27 = 3.037037037037037 ...
AdmBorkBork

1
Twój kod białych znaków drukuje 0, a nie 2. Testowany tu i tutaj .
Dennis,

@Dennis Dzięki, pominąłem bit znaku.
Mike Bufardeci,

2

5 języków, 175/5 ^ 3 = 1,4

Postanowiłem opublikować inną odpowiedź, ponieważ nagroda zmienia wymagania w taki sposób, że poczułem się niezadowolony z mojej pierwszej odpowiedzi (ale wciąż satysfakcjonuje mnie ogólne wyzwanie!)

Oto moje rozwiązanie, które kwalifikuje się do wyzwania nagrody:

Kompiluje się

  • C99
  • objC90
  • C ++ 0x
  • Rubin
  • Perl
#if __cplusplus
#define x\
=begin\
=pod
#endif
int a=
#ifndef x
1//**/
+1
#else
3
#endif
;int main(){printf("%d",a);}
#ifdef f
=end
puts 5;
=begin
=cut
print"4";
=end
#endif

2

3 języki, 15 bajtów, wynik 0,555 ...

Później dodam więcej języków.

2//1+1#😅😨

1. Emotinomicon

Emotinomicon prawie ignoruje każdy tekst, który nie jest łańcuchem. 😅wypycha 1 do stosu i 😨wysyła TOS jako liczbę.

2. JavaScript

Komentarze w JavaScript zaczynają się od //, więc tylko 2część zostanie wykonana.

3. Python 2/3 REPL

Komentarze w Pythonie zaczynają się od #, więc tylko 2//1+1część zostanie wykonana. //to podział na liczby całkowite w Pythonie 3 i jest taki sam jak /w Pythonie 2. 2 podzielone przez 1 to 2, plus 1 to 3.


2

4 języki, 97 bajtów, 0,37890625

s="1";s=~-3;2//2;'''/.to_s.ord;"=;print 4;
__DATA__
=1;
";#'''#";print=s=>console.log(3)
print(s)

Rubin

Ustawia ssię "1", porównano za pomocą =~przeciw -3w pustce kontekście próbuje podzielić 2przez /2;'''/.to_s.ordnastępnie rozpoczyna nowy łańcuch zawierający =;print 4; __DATA__ =1;, uderza komentarz, a następnie prints s, który jest nadal 1.

Pyton

Ustawia ssię "1"jak wyżej, a następnie ustawia ponownie na ~-3to, co jest 2. Możemy uruchomić podział liczby całkowitej 2//2, to istnieje docstring zawierającą /.to_s.ord;"=;print 4; __DATA__ =1; ";#, po komentarzu, wreszcie printing s, który jest nadal 2.

JavaScript

Ustala ssię "1"następnie ustawia go ponownie, aby ~-3jak powyżej, to nie jest 2na linii, a następnie komentarza. Następnie ustawiamy zmienną __DATA__na 1. Jest tam krótki ciąg znaków, ;#'''#po którym następuje definicja funkcjiprint która koduje wyjście na wartość 3, która jest wywoływana w następnym wierszu.

Perl

Prowadzi równoważnik zastępczego do s/"1";s/~-3;2\/\/2;'''\/.to_s.ord;"/, printy 4i reszta łańcucha jest maskowany za __DATA__identyfikatorem.


2

QBasic, QBIC i> <>, 18 bajtów / 3 ^ 3 języki = 0,6666 punktów

1:?v+1'-5`
''`>3n;

Awaria:

1. QBasic ( pobierz IDE )

1:          Line number 1
  ?         Print
   v+1      undefined var v = 0 + 1 = 1
'-5`        The rest of theis code is a QBasic comment
''`>3n;     As is this

2. QBIC ( Uzyskaj tłumacza )

1     inserts a 1 in the code - mostly harmless
:     Reads from the cmd line. Nothing there, creates an empty variable a
?     Print
v+1   v is initialised to 6, +1 = 7
'     Code Literal: everything till the ` is passed to QBasic without processing
 -5`  7-5 = 2

''`>3n; Code literal with the first literal being a ': comment in QBasic

3.> <> ( Wypróbuj online )

1:  Push a 1 on the stack, duplicate stack
?   Pop top off the stack and skip next instruction if that's a 0
v   Move downwards - rest of the line is ignored

>   move to the right
3   Push 3 onto the stack
n   Print the top of the stack as a number
;   End the program

1
Myślę, że chcesz podliczyć liczbę języków w swoim wyniku (tj. 18 / (3 ^ 3))
matematyka ćpun

1

JavaScript, HTML i PHP, 72 bajty / 3 ^ 3 = 2,67

1<!top?2:2//><!--<?='--'.'><script>document.body.innerHTML=3</script>'?>

W HTML wydrukuje to pierwsze 1, zignoruj <!window?2:2//> znacznika, a reszta to komentarz HTML.

W JavaScript ocenia 1<!window?2:2i wypisuje 2 (to musi być uruchomione w konsoli), a reszta to komentarz.

W PHP, dodaje to wyjście z serwera: 1<!top?2:2//><!----><script>document.body.innerHTML=3</script>który zastępuje w formacie HTML 1z 3.


1
Witamy w PPCG.SE! Świetny pierwszy post! Dwie rzeczy: zwykle nie lubimy odpowiedzi opartych na REPL (program Javascript). Ponadto kod PHP nie działa, gdy umieszczam go w tłumaczu online , jak dokładnie działa PHP?
GamrCorps,

Dzięki! Cóż, technicznie jest to PHP + HTML (tj. Jeśli jest to kod źródłowy dla code.php, odwiedzanie strony / code.php w przeglądarce wyświetla 3.
cuniculus

Wypróbuj tutaj: mowbl.com/se.php .
cuniculus,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.