<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 65641; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 31516; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d?\.?\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
2.7.1
celu2.7.n
. (W rzeczywistości Sweerpotato robi to samo z głównymi wersjami.)Odpowiedzi:
30 języków, 248 bajtów, 248/30 ^ 3 = 0,009185
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
: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:
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
co zwiększa komórkę do 1, a następnie drukuje ją jako liczbę.
2. CoffeeScript (obejmuje tłumacza)
CoffeeScript widzi:
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:
1/5
jest racjonalny i nie równy0.2
, więc 3 jest drukowane. Postępowanie"""
to błąd składniowy.Zauważ, że
print
wydaje się, że wypisuje poprzedni znak nowej linii i końcowe miejsce w Common Lisp. Jednak na szczęściewrite
dział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"""
, mianowicie1"2"3"4
.5. Befunge-93 | Interpretator
Befunge jest językiem 2D, a odpowiednie instrukcje są
w pierwszej linii i
5
w25
linii.#
pomija następną instrukcję,15g
pobiera znak w pozycji(1, 5)
w kodzie (5
w25
wierszu),,
wyświetla znak i@
zatrzymuje.6. Python 2 | ideone
Python widzi:
(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6
, który dostajeprint
ed.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 jestz
o
iJ
pochodzące z linii używanych przez TRANSCRIPT. Po wyprowadzeniu 7 pociąg uderza nierozpoznanąJ
instrukcję, 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
etaoinsh
i ich duże litery, co oznacza, że kod zaczyna się odn...e
popycha baza numer 7 w oparciu o to, co znajduje się wewnątrz ograniczników, które przezSaI
to624
, lub 312 w systemie dziesiętnym.o
następnie wyprowadza jako char, najwyraźniej po modulo 256, podając char8
(punkt kodowy 56).e
nastę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
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
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,n
wysył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
gdzie
a
inkrementuje zmiennąA
,e
to funkcja splotu zła, która tasuje bityA
iw
generuje wynikiA
. Stąd produkujemy1
dwa razy, dając11
.Ale co z resztą instrukcji, a zwłaszcza
w
z 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
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:
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ćnil
przez 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:
?
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
STL
spacji, tabulacji i nowego wiersza, początek programu to:Pierwszy wiersz wypycha 16 (
+10000
podstawa 2), poprzedniTLST
drukuje 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ą
Ze względu na ograniczenia ETA używamy
k
do zmniejszania zmiennej B, a niea
do jej zwiększania.kk
zmniejsza B do -2 imm
kwadraty 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ą
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
#
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,9
konwertuje to 1 na1*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/null
stamtąd, nie ma żadnego, wypychając 0 na stos. A+
zn >= 5
poprzednimi spacjami popychan-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
L
spawnuje 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 char2
i..
wysyła ją dwukrotnie.23. Julia | Wypróbuj online!
Julia widzi:
Drukowane jest to
4^2+7 = pow(4,2)+7 = 16+7 = 23
, a program popełnia błąd, próbując podzielićnothing
przez 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:
7/6*24 = 1*24 = 24
jest drukowane.25. GolfScript | Wypróbuj online!
GolfScript widzi:
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 w1/5
jest liczbą zmiennoprzecinkową, która jest równa0.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
który definiuje podstawienie,
f -> 27
oznacza koniec podstawienia za pomocą::=
. Lonef
wif
zostaje zastąpiony27
, 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:który drukuje
7/6*24 = 28
.29. Picolisp | ideone
Picolisp widzi:
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:
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 przezX
(„badaj”) w trzecim wierszu.źródło
pre
tagami zamiast korzystać z bloku kodu w stylu Markdown.15 języków,
686665 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
\t
poniżej: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 a2
. 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:
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 a1
, a5
następnie a7
. Bierzemy różnicę z dwóch ostatnich, aby uzyskać-2
, a następnie odejmujemy ją od,1
aby 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:I
próbuje odczytać dane wejściowe, ale nie może, więc popycha-1
.a
wypycha bieżący numer linii plus 1, czyli2
.e
jest divmod , który zastępuje te przez0
i1
(lub-1
, właściwie nie wiem, ale to nie ma znaczenia). Następnye
zamienia oba z nich na0
.Teraz interesująca część.
NTHne
jest literałem liczbowym typu base-7.N
ie
są tylko ogranicznikami, a trzy cyfry toTHN
. To znaczy54
(gdzieT
jest cyfra1
,H
jest0
in
jest5
).a
popycha2
jeszcze raz.S
odejmuje to, co powoduje,52
iO
wyprowadza go jako znak (4
). Teraze
pró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:Na szczęście Axo ma także ukryte
0
s na dole stosu, ponieważ#
wyskakuje na górze stosu (aby sprawdzić, czy następna instrukcja powinna zostać pominięta). Wszystkie litery są bezoperacyjne. Następnie5
naciska przycisk a5
,{
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
t
zamiast\t
, aby kolumny były poprawnie ustawione:Teraz, gdy litery, spacje i tabulatory są ścianami w Labiryncie, więc dostępny kod wygląda tak:
Wskaźnik instrukcji automatycznie podąży tą ścieżką.
#
wypycha głębokość głównego stosu (0
) i15
zamienia go w a15
.}
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
.7
zamienia zero na a7
,'
to nie jest możliwe. Jest`
to jednoznaczna negacja, więc rozumiemy-7
. Teraz-
odejmuje-7
od niejawnego0
pod spodem tworzenia7
. Tym razem adres IP skręca w prawo do`
, co jest jednoznaczną negacją, więc otrzymujemy7
ponownie. IP uderza w ślepy zaułek i się odwraca.-
Działa tak samo jak wcześniej, więc mamy7
jeszcze raz. Ponieważ górna część stosu jest teraz dodatnia, adres IP skręca w prawo. Jest jeszcze jeden,-
który daje-7
ponownie. Wtedy~
NIE jest bitowe, co daje6
i!
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:
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
5
i6
jest 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 jest0
, 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.7
ustawia tę krawędź na7
.'
wraca do miejsca, z którego przyszliśmy.-
odejmuje krawędź pamięci, którą właśnie ustawiliśmy,7
od 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 daje7
zamiast6
.!@
, 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 drukuje8
. 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 to3
(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:
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ą po9
.-
zmniejsza tę komórkę, ale to nie ma znaczenia.<
przesuwa głowicę taśmy na9
i.
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).9
Mogą być ignorowane.a
popycha10
,e
popycha14
,"8"
popycha kod znaku8
,@
obraca trzy górne elementy stosu (pociągając w górę10
), tak, żen
drukuje10
i;
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:
n
Wpływa również na stan, który nas nie obchodzi, więc zignorujmy to również. Teraza
zwiększa rejestr (który zaczyna się od0
) ie
jest magiczną operacją „splotu” zła, która w szczególny sposób przenika bity.aeeeaeea
zdarza się dać wartość,49
która jest kodem znaku1
.ww
drukuje 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
:To są dwa polecenia:
Pierwszy przesuwa numer
12
. W szczególnościSS
rozpoczyna literał liczbowy. NastępnyS
jest bit znaku (dodatni). Zatem wszystko doL
binarnej reprezentacji liczby. Jest mnóstwo wiodących zer, których potrzebujemy dla Starry, ale nie wpływają one na liczbę. WtedyTTSS
s jest12
w formacie binarnym. Ciekawostka: gdybym dodał szesnasty język, mógłbym tutaj zapisać bajt, ponieważ Starry może użyć tejS
liczby w binarnej reprezentacji16
. Wątpię, czy będę ...Po
TLST
prostu drukuje górę stosu jako liczbę. (TL
oznacza polecenie jako polecenie we / wy iST
drukuje liczby).Odbitki z rozszczepu
13
Wypróbuj online.
Rozszczepienie widzi tylko tę część kodu:
L
rozpoczyna kontrolę przepływu od lewoskrętnego atomu."
przełącza tryb drukowania, aby31
po 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ół7
zamiast ciągnąć w górę10
, a następnie14
drukuje się zamiast10
.Wydruki GolfScript
15
Wypróbuj online.
Ten jest najprostszy:
#
komentuje pierwszy wiersz. Następnie15
wypycha się i}
jest „super komentarzem”, który ignoruje całą resztę programu. Więc15
jest drukowany na końcu programu.źródło
Python 1.x, 2.x i 3.x, 32 bajty / 3 ^ 3 = 1.1851 ...
Wyświetla pierwszą liczbę wersji, która znajduje się
1
w Python 1.x,2
Python 2.x i3
Python 3.x.Zanim otrzymamy Python 9.x, mój wynik będzie wspaniały
0.04389
!: ~)!
źródło
1
ponieważ jest to pierwszy znak ciągu „10.whither”?3 języki, 2 bajty / 27 = 0,074
Cóż, to co najmniej połowa zgłoszeń: P
1. GolfScript
GolfScript ignoruje
P
, wypisując tylko 1. Wypróbuj online .2. Par
P
jest 2 do potęgi, więc1P = 2^1 = 2
. Wypróbuj online .3. Poważnie
P
daje 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.\x13
zadział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.
3u
jest 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: /
źródło
6 języków - 44 bajty / 6 ^ 3 = 0,204 ...
Dzięki SnoringFrog za uratowanie 10 bajtów!
Pracuje w:
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
Spróbuję użyć więcej języków programowania :)
Befunge (odbitki
1
):Wypróbuj online
Pyth (odbitki
2
):Wypróbuj online
Brainfuck (odbitki
3
):Wypróbuj online
Sześciokąt (odciski
4
):Wypróbuj online
Bardziej czytelna wersja:
Białe znaki (wydruki
5
):Wypróbuj online
Ponieważ inne znaki są ignorowane, ale białe znaki i tabulatory, pozostaje nam:
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.
źródło
SSSSSSSSSSTTSTSTLTLSS
co masz teraz, możesz zrobićSSSTSTLTLST
. To popycha dosłownie 5 na stos, a następnie drukuje jako liczbę całkowitą67 języków,3237 bajtów, wynik0,148 ...37/7 3 ≈ 0,107872 ...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 = 2
i 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 zasadzieprint(4)
.> <>
#
odzwierciedla IP,5
przesuwa 5,n
drukuje liczbę i;
wychodzi.Befunge
#
przeskakuje nad+
,!
logicznie neguje górę stosu,"@\"
przesuwa ciąg@\
,6
przesuwa 6,.
drukuje liczbę i@
wychodzi.Pyt
#
uruchamia nieskończoną pętlę, odrzucając wszelkie błędy.7
wypisuje 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.źródło
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.
To jest bałagan. Oto podział tego, jak to działa. Literały Unicode (
\u000a
inaczej znane jako linefeed i\u002a
inaczej znane jako*
) są rozszerzane przez kompilator Java na ich rzeczywiste znaki. Oto, co widzi kompilator Java: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:
Oto, co widzi kompilator C / C ++ (usunąłem literały Unicode, ponieważ nie są one rozszerzane przez kompilator i dlatego nic nie robią):
Tutaj komentarze jednowierszowe zastępują na początku ograniczniki komentarzy wieloliniowych, więc wszystkie
#define
s i#include
są 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:#ifdef __cplusplus
Do zdefiniowania tokenao
jako"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ę,p
która przyjmuje pojedynczy (ignorowany)int
argument i wywołaniaprintf
, używając naszego nowo zdefiniowanegoo
tokena. Jak zwykle wartość zwracana jest pomijana, ponieważ nie jesteśmy w trybie ścisłym. Następnie definiujemystruct
z pojedynczym elementem, wskaźnik funkcji, którego podpis pasuje dop
, i tworzymy pojedynczą instancję o nazwieout
. W metodzie głównej (int
jak zwykle przestajemy) adresp
jest przypisywany doout.print
(wywoływaniaout.print
połą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ć
p
jakoint p(int a){puts("2");}
. Niestety, C ++ wymaga wykonania operacji#include
we / wy. Jeśli C nie została uwzględniona, moglibyśmy spaść definicjip
i#ifdef
makra preprocesora, a bezpośrednio zdefiniować funkcję członkowskiego wstruct
zamiast konieczności wskaźnik funkcji. Niestety C nie obsługuje funkcji składowych.źródło
4 języki, 28 bajtów / 64 = 0,4375
1. Python 2
0
jest fałszem i/
podziałem całkowitym, więc2. Perl (także Python 3)
0
jest fałszem i/
podziałem zmiennoprzecinkowym, więc3. Ruby
0
jest prawdą i^
jest bitowe xor, więc4. Lua
0
jest prawdą i^
jest potęgowaniem, więcZauważ, że Lua i Ruby nie mogą dodawać boolanów tak, jakby były liczbami całkowitymi, stąd ich grupowanie razem. Niestety
0and
nie 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):
-3 bajty dzięki @xnor dla tej wersji, dzięki czemu jest o wiele ładniejszy :)
źródło
2^(0 or 1)
zadziała?BFSRS> <> funge93thon123, 73/343 ≈ 0,212827 ...
Brainfuck, Poważnie ,> <>, Befunge-93, Python 1, Python 2, Python 3
Zawiera niezadrukowalne zrzuty heksadecymalne (odwracalne z
xxd -ps -r
):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:
Poważnie :
><>
:Befunge-93:
Python 1 (dzięki muddyfish):
Python 2 :
Python 3 :
źródło
3
na4
)14 języków, 73 bajty, wynik = (73/14 ^ 3) = 0,02660349854
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:Jest to równoważne z (w JavaScript)
Które wyjścia 2.
3. element; Wypróbuj online!
Odpowiedni kod:
To rejestruje
3
i 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:#
redefiniujeY
być TOS, w tym przypadku0
.2
popycha 2;(
obraca stos N razy, odrywając N od stosu;3`
popycha -3; i wreszcie5n
druki5
.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:
Super-odpowiedni kod:
Lub, równoważnie:
nthne o
.n...e
jest literałem base-7 ithn
jest liczbą base-7 dla 54.o
wypisuje ten znak. Przesłanie się kończy, ale nie wiem dlaczego.7. Python 3
Co widzi:
15/2
daje 7,5, podobnie jak/
podział zmiennoprzecinkowy.int(...)
czyni liczbę całkowitą, która jest następnie drukowana. Program+3
napotyka błędy po napotkaniu.8. Julia
Julia widzi:
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:
Mam ten pomysł z części Martin's Fission (bardziej jak ukradłem).
L
zaczyna rzecz lewą, chwyta9
i kończy się<
.10. Biała spacja; Wypróbuj tutaj!
Odpowiedni kod, tłumaczący spacje
S
i tabulatory naT
:Pcha 10 do stosu i wysyła go jako liczbę (
T\nST
).11. Python 2
Python 2 widzi to:
(int(15/2))+3
jest oceniany na 11 i jest drukowany.12. Gol> <>; Wypróbuj tutaj!
Odpowiedni kod:
Wykorzystuje sztuczkę zastosowaną w odpowiedzi Martina, która
@
obraca różne kierunki w> <> i Gol> <>.#
dubluje,c
popycha 12,d
popycha 13,0
popycha 0 i@
przenosic
na górę stosu, a następnie zostaje wyrzucony i wydrukowany za pomocą;n
.13.> <>; Wypróbuj online!
Odpowiedni kod:
Ponownie użycie tego
@
obraca różne kierunki w> <> i Gol> <>.#
dubluje,c
popycha 12,d
popycha 13,0
popycha 0 i@
przenosid
na górę stosu, a następnie zostaje wyrzucony i wydrukowany za pomocą;n
.14. Skrypt golfowy; Wypróbuj online!
Co widzi:
To popycha
14
,print
to i błędy.Skradzionyzainspirowany odpowiedzią Sp3000 .źródło
Subskin , Brainfuck i Fob 27 bajtów / 3 ^ 3 = 1
Subskin
Ustawiamy wskaźnik instrukcji (tutaj nie ma znaczenia) na
0
i rejestr wyjściowy na31
. Jeśli zawartość rejestru wyjściowego jest>= 0
, wyprowadzamy zawartą wartość jakochar
. Cały pozostały kod jest ignorowany.Brainfuck
Umieszcza
3
w rejestrze, raz zmniejsza wartość,-
a na koniec wyświetla za pomocą.
.Oszukiwać
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 a3
, 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ą
$
.źródło
7 języków, 55/7 ^ 3 ≈ 0,16035
Działa w PowerShell v1, v2, v3, v4 i v5, Foo i Pyth
Cyfry 1-5 używają logiki podobnej do odpowiedzi sweerpotato .
$PSVersionTable
Specjalna zmienna została wprowadzona w PowerShell v2 i zawiera pełną listę budować, przeglądy itd Oto przykład wyjście zmiennej:W tym kodzie najpierw przechowujemy go,
$p
aby długość kodu była krótsza. Następnie sprawdzamy jego istnienie, wykorzystując zmienną jako indeks do tablicy dwóch elementów:$NULL
,!
której jest$TRUE
lub1
odpowiada drugiemu elementowi tablicy, który generuje dane wyjściowe1
.!
zmienna powoduje, że$FALSE
lub0
indeksuje 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,6
a 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
źródło
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]
? Działa to w mojej Powershell, ale może nie we wszystkich poprzednich wersjach.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:
Nie golfowany:
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\n
po 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”,\n
wię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!)
źródło
4 języki (Befunge-93, Microscript II, Microscript i Foo), wynik 7/64 = 0,109
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
źródło
Python 1 | 2 | 3, 27 bajtów / 27 = 1
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 lubFalse
od Python 2.3 i(1/2>0) == (0.5>0)
zwracaTrue
Python 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(Od Co nowego w Python 2.0 )
źródło
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.
Python 3, drukuje
1
Trik jest następujący:
To zostanie wydrukowane
1
Ruby, odciski
2
Interpretowany kod dla Ruby to:
To się drukuje
2
Perl, odciski
3
Interpretowany kod dla Perla to:
Przede wszystkim
__DATA__
token informuje kompilator Perla, że kompilacja została zakończona. Wszystko później jest ignorowane.I druki
3
C, wydruki
4
Interpretowany kod różni się od pozostałych:
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
.źródło
5 języków, 18 bajtów / 5 ^ 3 = 0,144
Działa w Brainbool , Mathematica , Foo , > <> i Befunge-93 .
Brainbool
Brainbool jest jak Brainfuck, ale działa tylko na bitach, a jego wejście i wyjście składa się wyłącznie z
0
i1
.Matematyka
W Mathematica wszystko jest wyrażeniem i ma wartość.
Print@2
drukuje2
i zwraca symbolNull
. Następnie kod wykonuje pewne obliczenia symboliczne, ale nic nie drukuje.bla
"3"
drukuje 3. Nie wiem, co robią inne części.> <>
Befunge
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 > <> .
źródło
6 języków, 38/6 ^ 3 = 0.17592̅5̅9̅
Biała przestrzeń , Brainfuck, Ruby, Labirynt , Foo, Poważnie
Legenda:
£
: tab•
: przestrzeń§
: 0x7fZawiera 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)
bla
Wypróbuj online.
Jedyne, co wpływa na wynik, to „5”, które wypisuje 5.
Poważnie
Wypróbuj online.
źródło
5 języków: Chaîne , Minkolang , Foo , Brainf ** k-ng i Vitsy , 21/5 ^ 3 = 0,168
Brainf ** k-ng
Chaîne
bla
Minkolang
Vitsy
Prawdopodobnie mogę dodać> <> lub coś takiego.
źródło
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:
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<...>
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.
źródło
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ć.
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):
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):
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.3
jest najwyższym elementem na końcu programu, więc jest wyprowadzany.źródło
5 języków, 18 bajtów / 5 ^ 3 = 0,144
Ouroboros , Pip , QBasic, Foo i Pyth
1. Ouroboros
Każda linia programu przedstawia węża jedzącego ogon.
Snake 1
Push
5
,'
to no-op, push52
(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śnij3
,'
to brak możliwości.@
obraca1
wierzch stosu in
wysyła go jako liczbę, pozostawiając3
wierzchoł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
2
drukowane jest ostatnie wyrażenie ,.3. QBasic
Wszystko po
'
to komentarz. Pierwsza linia sprowadza się zatem do5
numeru linii. W drugiej linii1
znajduje się numer linii i?3
skrót doPRINT 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"
odbitki4
. 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
5
jest wyprowadzany. Następnie program napotyka'"4"
próbę odczytu pliku o nazwie4
. 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 defined
Zakł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.źródło
4 języki, 24 bajty, 24/4 ^ 3 = 0,375
1. PHP
PHP wykonuje,
print(1);
co jest równe 12. Lua
Lua wykonuje,
print(1//0.5);
co równa się 23. 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)źródło
Brainfuck-ng, Foo,> <>, 9 bajtów / 3 ^ 3 = 0,333 ...
Brainfuck-ng
Jedyne znaki Uznaje się
+
i!
:Wydruki
1
bla
Drukuje wszystko w cudzysłowie.
Wydruki
2
> <>
#
Odzwierciedla punkt po lewej stronie,3
wypycha 3 na stos,n
wyprowadza go jako liczbę całkowitą,;
zatrzymuje program.źródło
3 języki,
8283/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:
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 znak1
.2. Biała spacja
Białe znaki to język, który ignoruje wszystkie znaki niebiałe. Tutaj przekonwertowałem go na czytelną formę. Pierwsza linia wypycha
2
na 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
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
17
na stos. Druga linia powiela wierzchołek stosu dwukrotnie, a trzecia linia dodaje góry na elementy stosu wraz dwukrotnie skutecznie trzykrotnie17
się51
. Ostatnia linia wypisuje tutaj znak na górze stosu3
.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ą.
źródło
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ę
źródło
3 języki, 15 bajtów, wynik 0,555 ...
Później dodam więcej języków.
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 tylko2
część zostanie wykonana.3. Python 2/3 REPL
Komentarze w Pythonie zaczynają się od
#
, więc tylko2//1+1
część 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.źródło
4 języki, 97 bajtów, 0,37890625
Rubin
Ustawia
s
się"1"
, porównano za pomocą=~
przeciw-3
w pustce kontekście próbuje podzielić2
przez/2;'''/.to_s.ord
następnie rozpoczyna nowy łańcuch zawierający=;print 4; __DATA__ =1;
, uderza komentarz, a następnieprint
ss
, który jest nadal1
.Pyton
Ustawia
s
się"1"
jak wyżej, a następnie ustawia ponownie na~-3
to, co jest2
. Możemy uruchomić podział liczby całkowitej2//2
, to istnieje docstring zawierającą/.to_s.ord;"=;print 4; __DATA__ =1; ";#
, po komentarzu, wreszcieprint
ings
, który jest nadal2
.JavaScript
Ustala
s
się"1"
następnie ustawia go ponownie, aby~-3
jak powyżej, to nie jest2
na linii, a następnie komentarza. Następnie ustawiamy zmienną__DATA__
na1
. 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;"/
,print
y4
i reszta łańcucha jest maskowany za__DATA__
identyfikatorem.źródło
QBasic, QBIC i> <>, 18 bajtów / 3 ^ 3 języki = 0,6666 punktów
Awaria:
1. QBasic ( pobierz IDE )
2. QBIC ( Uzyskaj tłumacza )
3.> <> ( Wypróbuj online )
źródło
JavaScript, HTML i PHP, 72 bajty / 3 ^ 3 = 2,67
W HTML wydrukuje to pierwsze 1, zignoruj
<!window?2:2//>
znacznika, a reszta to komentarz HTML.W JavaScript ocenia
1<!window?2:2
i 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 HTML1
z3
.źródło