Wielojęzyczne wyzwanie

13

Po całej zabawie, jaką mieliśmy z wyzwaniami poliglotycznymi w ( niedawnej ) przeszłości, co powiesz na wyzwanie, w którym wyniki mogą być w dwóch językach?

Twoja odpowiedź musi zaakceptować wartość logiczną bi wydrukować tekst "true"lub "false". Ten sam kod musi wyjścia, gdy prowadzony w innym języku, "waar"lub "onwaar"lub innego przekładu truei false.

Wejście

  • Dane wejściowe to wyraźnie odróżniająca się prawda / falsey. Dopuszczalne są wartości rzeczywiste T / F, bit, int lub (pusty) ciąg znaków.
  • Dane wejściowe muszą być takie same dla wszystkich części Twojego zgłoszenia.

Wynik

  • Dane wyjściowe mogą być zwracane przez funkcję, zapisywane STDOUT, umieszczane w wyskakującym oknie, drukowane w 3D i wysyłane pocztą itp.

  • Dane wyjściowe muszą reprezentować stan b. Tak więc „prawda” musi być wyrażeniem „prawda”, „waar” ... a „falsey” powinno prowadzić do „fałszu”, „onwaar” itp.

  • Różne języki mogą korzystać z różnych metod wyjściowych.

Użyte języki

  • Jednym z twoich wyników MUSI być "true"i "false".

  • Różne wersje języków programowania są liczone jako różne języki dla tego wyzwania.

  • Różne dialekty ludzkiego języka liczą się jako różne języki dla tego wyzwania.

  • Możesz rozszerzyć poliglota na więcej niż dwa języki programowania. Każdy język programowania musi generować odrębny język ludzki.

Odpowiedź z włączoną większością języków zostanie ogłoszona zwycięzcą. Po remisie brana jest pod uwagę liczba bajtów.

Steenbergh
źródło
Czy jest celowe, że Twój program może po prostu sprawdzić wersję interpretera / kompilatora, z którą działa?
CodenameLambda
1
Czy są "True"i są "False"akceptowane zamiast wymaganych "true"i "false"?
Jonathan Allan
1
@JonathanAllan My bad. Tak, w porządku dla wyjścia.
steenbergh
3
Chciałbym zobaczyć esolang, w którym wydruk jest wydrukowany w 3D i odesłany do ciebie.
ETHprodukcje
2
Jest to zbyt szerokie, aby można było wziąć udział w konkursie popularności. Czy X twórczo popowe nie są objęte zakresem.
Dennis

Odpowiedzi:

5

Dyalog APL , 243 237 bajtów : 14 języków, z możliwością rozszerzenia do 131 *

-6 bajtów dzięki Soaku .

Wymaga ⎕IO←0ustawienia domyślnego w wielu systemach. Monity o wprowadzenie 0lub 1.

((⎕AV'ëáàÆÅÄòðÓÈÇ')⍳⍎⎕D∩⍨41⊃#⎕WG'APLVersion')⊃⎕⊃s¨⌽(s←{1↓¨⍵⊂⍨⍵=⊃⍵})';,true,adevarat,haqiqiy,otito,tunay,bener,prawda,dogru,vrai,that,wahr,vero,verdade,cierto;,false,fals,yolg''on,eke,mali,palsu,falsz,yanlis,faux,sai,falsch',18',falso'

W zależności od wersji (od 9.0 do 16.0, z mniejszymi wersjami) wyświetla w języku angielskim, hiszpańskim, portugalskim, niemieckim, wietnamskim, francuskim, tureckim, włoskim, polskim, sundajskim, filipińskim, jorubskim, uzbeckim lub rumuńskim, chociaż bez znaków diakrytycznych.

⎕AV⍳'ëáàÆÅÄòðÓÈÇ'w indeksów A TOMIC V wtryskiwacza (151 142 141 133 131 122 121 132 111 102 101 96)

((... )⍳... )znajdź pozycję

oceniany

⎕D∩⍨przecięcie D igits i

4↑ cztery * pierwsze znaki

1⊃ drugi element

#⎕WG'APLVersion' numer wersji

(... )⊃następnie użyj tego, aby wybrać

⎕⊃ element wejściowy (0: pierwszy; 1: drugi) elementu

funkcja s (którą wkrótce zdefiniujemy) zastosowana do każdej z nich

odwrotność

(s←{... }) s zastosowane do - gdzie s jest zdefiniowane jako

1↓¨ pierwsza postać wypadła z każdego z nich

⍵⊂⍨ argument podzielił gdzie

⍵= znaki argumentu są równe

⊃⍵ pierwszy znak argumentu

';,true,adevarat,... ,falsch',ten ciąg poprzedzony

18⍴',falso' osiemnaście znaków pobranych cyklicznie z tego ciągu

* Od wersji 12.1 numer wersji zawiera numer kompilacji, więc zwiększając liczbę znaków pobranych z tego ciągu, można łatwo objąć wszystkie 131 języków łacińskich .

Adám
źródło
Bardzo ładna odpowiedź! I świetny dowód na rozszerzalność.
steenbergh
Liczę 243 bajty.
Conor O'Brien,
@ ConorO'Brien Naprawiono. Dzięki.
Adám,
Wiem, że jest późno, ale możesz zaoszczędzić kilka bajtów, zastępując prawdziwydo prawdai falszywydo falsz. Krótsze formy pasują tutaj lepiej i dają lepszy wynik.
RedClover,
13

6 języków, 169 bajtów

Oczekuje 0\nlub 1\njako dane wejściowe i drukuje słowa w:

  • Python 2 (holenderski vals/waar),
  • Python 3 (francuski faux/vrai),
  • Ruby (angielski false/true),
  • CJam (norweski usant/sant),
  • Golfscript (duński usand/sand),
  • Befunge-93 (włoski falso/vero).

"#{puts gets>?1;exit}"" "#"& 1v
""
print('vwfvaaarlauasrxi'[int(1/2*4+int(input()))::4])
""#";;;;ri"u">"sant"+o
""""
__END__
]0=~"u">"sand"""#@,,,,"vero"  _"oslaf",,,,,@
Lynn
źródło
1
False po duńsku to falsk .
Adám
Dałbym wam dwa głosy poparcia dla tego printoświadczenia!
steenbergh
10

Wszystkie grzyby, 6 języków, 146 bajtów

💥 Teraz w 3D! 💥

A vv"faux"0"vrai"mv#<v&#;9*j"kslaf"6j"etke">:#,_@;
; >"otreic"0"oslaf"v^<
&^>"murev"0"muslaf">
&^&<"false"0"true"<
>_>:#,_@
^_^

Dla jasności rozdzieliłem dwie płaszczyzny kodu, abyś mógł zobaczyć, jak są one warstwowe. Na dysku te dwa bloki zostałyby oddzielone znakiem wysuwu formularza na końcu wiersza powyżej.

   h"vals"0"waar"<

Reguły mówiły, że różne wersje języka liczą się jako osobne języki, więc jest to sześć wersji Funge / Befunge. :)

Dzięki Dennisowi wszystkie wersje Befunge można teraz przetestować online w TIO . Jednak obecnie nie działają implementacje wariantów Unefunge i Trefunge, więc dla tych polecam Rc / Funge .

Ajest ignorowany w Befunge 93 i 96, ale jest poleceniem About Face w 97 i nie jest obsługiwany w 98, a zatem odzwierciedla. Oznacza to, że 93 i 96 podążają w vdół, a 97 i 98 owijają się po przeciwnej stronie pola gry.

W Befunge 96 a ;po nim spacja na początku linii oznacza ją jako komentarz, dzięki czemu linia jest pomijana, a tłumacz kontynuuje do >trzeciej linii. W wersji 93 tłumacz podąża >za drugą linią.

Ścieżka 97/98 nadal w pierwszej linii od prawej do lewej strony, pomijając sekcji wewnątrz ;znaczników komentarza, wypełnia &polecenie, ostatecznie osiągając sekwencję U-bend v<^<. W Unefunge te zmiany kierunku nie są obsługiwane, więc interpreter odwraca kierunek i wykonuje poprzednio pominiętą sekcję w komentarzach. W Befunge / Trefunge kontynuuje się w lewo.

W Befunge 97 mpolecenie nie jest obsługiwane i dlatego jest pomijane, więc interpreter kontynuuje wzdłuż pierwszej linii. W 98 jest tylko 3D, więc odbija się w Befunge (2D), a tłumacz podąża za nią vz prawej strony, aż do czwartej linii. W Trefunge (3D) jest to gałąź High-Low, która przenosi poziom wzdłuż osi Z do drugiej płaszczyzny.

Tak więc poza przypadkiem Unefunge, każda wersja gromadzi swoje pary ciągów z osobnego wiersza, zanim zostanie skierowana do jednego z &poleceń w celu uzyskania danych wejściowych od użytkownika. Te ścieżki kodu następnie łączą się ze sobą za pomocą ^poleceń w drugiej kolumnie, kierując przepływ programu w górę przez górę pola gry, ponownie owijając się w dół.

Wreszcie mamy ^_^sekwencję, która decyduje, którą ścieżką podążać na podstawie danych wprowadzonych przez użytkownika. Jeśli 0 , przechodzimy od razu do sekwencji wyjściowej ( >:#,_), zapisując fałszywy ciąg. Jeśli 1 , najpierw wykonujemy, >_który usuwa pierwszy ciąg ze stosu, a tym samym wyprowadza prawdziwy ciąg.

James Holderness
źródło
Pomocne byłoby wyjaśnienie
user41805
1
Bardzo ładna odpowiedź; używanie wszystkich różnych wersji tego samego języka naprawdę sprawia, że ​​jest to subtelne.
steenbergh
5

5 języków, 249 bajtów

Uwaga: \ri \esą dosłownie znakami linii i znakami ucieczki, ale \x5bmuszą być takie, jakie są w przeciwnym razie Ruby narzeka na klasę znaków w wyrażeniu regularnym.

Trochę za późno na imprezę i wcale nie zwycięzca, ale zacząłem pracować nad poliglotą na Święto Dziękczynienia i czułem, że może być trochę za późno, więc przekształciłem go w to!

q=0//1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord;def input()gets.to_i;end;q=+q+0;True="Vrai";False="Faux";'+;sub a{<><1?Vals:Waar}q-
input=prompt;print=alert;True="Vero";False="Falso"//'#'''
a=[False,True];b=input();1-+1;print(a[b])

Wyjaśnienie

Python: True/False

q=0//1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord;def input()gets.to_i;end;q=+q+0;True="Vrai";False="Faux";'+;sub a{<><1?Vals:Waar}q-
input=prompt;print=alert;True="Vero";False="Falso"//'#'''
a=[False,True];b=input();1-+1;print(a[b])

Tutaj możemy ustawić qna 0//1co 0, to mamy '''ciąg znaków, który zawiera większość innych kodów, przechowywać tablicę zawierającą Falsei Trueoraz indeksów 0i 1odpowiednio przypisać wejście do b(co powinno być 0albo 1zdecydowanym Falsyi Truthy), a następnie printz bth wskaźnik a, pokazujący Falselub True.


Ruby: Vrai/Faux

q=0//1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord;def input()gets.to_i;end;q=+q+0;True="Vrai";False="Faux";'+;sub a{<><1?Vals:Waar}q-
input=prompt;print=alert;True="Vero";False="Falso"//'#'''
a=[False,True];b=input();1-+1;print(a[b])

Podobnie jak w przypadku skryptu Python, ustawiamy zmienną q, ale w Ruby jest to ustawione 0 / /1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord, ponieważ Ruby dzieli to 0/jako „zero podzielone przez”, a następujące /jako „początek wyrażenia regularnego”. Używając tego literału, jestem w stanie ukryć kod PHP i uruchomić Pythona '''. Musimy dodać, .to_s.ordponieważ właściwym operandem /musi być Fixnum. Następnie definiujemy funkcję input()i zmienną Trueoraz Falsezawierają ich francuskie odpowiedniki i wreszcie rozpoczynamy ciąg znaków, 'który przechodzi do następnego wiersza. Wreszcie możemy utworzyć tablicę a, która zawiera "Vrai"i "Faux"wybierz je za pomocą input()numeru ed 0lub 1.


Perl: Waar/Vals

'0//1;\'\'\'<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord;def input()gets.to_i;end;q}+q{0;True="Vrai";False="Faux";\'';sub a{<><1?Vals:Waar}'
input=prompt;print=alert;True="Vero";False="Falso"//\'#\'\'\'
a=[False,True];b=input();1'+1;print(a[b])

W Perl, że q=..=, q+...+i q-...-bloki są notowane literały wykorzystaniem nietypowych ograniczniki w kodzie powyżej Mam wymieniać je z '...'. Większość kodu jest zawarta w dosłownym ciągu, ale definiujemy sub a(który zawiera <><!), Który sprawdza, czy STDINjest mniejszy niż 1, zwracając albo, Waaralbo Vals. W print(a[b])rzeczywistości printjest wynikiem wywołania sub aargumentu with i argumentu [b]ArrayRef zawierającego goły wyraz b.


JavaScript: Vero/Falso

q=0//1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord;def input()gets.to_i;end;q=+q+0;True="Vrai";False="Faux";'+;sub a{<><1?Vals:Waar}q-
input=prompt;print=alert;True="Vero";False="Falso"//'#'''
a=[False,True];b=input();1-+1;print(a[b])

Pierwsza linia jest najczęściej komentowane przez podział 0//1( //jest linia komentarza w JavaScript), więc po prostu ustawić qsię 0. Kolejne oferty linii z mapowaniem funkcji JS ich nazw Python i ustawienie zmiennych Truei Falsebyć włoskich struny, w końcu wykonujemy tak samo jak kod Ruby, wyznaczając do tablicy włoskich słów i wybierając stosując inputz 0lub 1.


PHP: Ekte/Falsk

die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));

Ponieważ PHP wykonuje tylko kod między <?...?>wszystkimi pozostałymi danymi wyjściowymi takimi, jakie są, tak więc nasz kod po prostu wypisuje wiersz (aby umieścić nas z powrotem na początku bieżącej linii) i sekwencję specjalną ANSI, aby wyczyścić do końca bieżącego linii, po czym następuje Ektelub Falskw zależności od tego, czy znak wejściowy ( 0lub 1) jest truthy lub falsy.

Dom Hastings
źródło
3

Pyth, Python - 28 bajtów

#>"onwaar"yQ.q
print input()
Maltysen
źródło
Możesz zapisać bajt, pozbywając się .qi dodając ;na końcu.
TheBikingViking
@ TheBikingViking Nie sądzę, że byłby to nieskończona pętla.
Maltysen
Test
TheBikingViking
3

C #, Java, 104 bajtów

Gra w golfa:

String M(Boolean b){String s=b+"";if(s=="True")return "Wahr";if(s=="False")return "Falsch";return b+"";}

Nie golfowany:

  class MultiLingualChallenge
  {
    public String M(Boolean b)
    {
      String s = b + "";
      if (s == "True")
        return "Wahr";
      if (s == "False")
        return "Falsch";
      return b + "";
    }
  }

Test:

DO#

Console.WriteLine(new MultiLingualChallenge().M(true));
//Wahr
Console.WriteLine(new MultiLingualChallenge().M(false));
//Falsch

Jawa

System.out.println(new MultiLingualChallenge().M(true));
//true
System.out.println(new MultiLingualChallenge().M(false));
//false

Wyjaśnienie:

Dzwoniąc ToString()lub toString()na Boolean w C # i Java, odpowiednio, C # drukuje ciąg z kapitału pierwszej litery, Truea False, ale Java drukuje wszystko małymi literami truea false.

Console.WriteLine(true+"");
//True

System.out.println(true+"");
//true
Pete Arden
źródło
2

2 języki, 60 bajtów

print('onwaar'[2*int(input()):]);1#¶ị“¡ẈẆ“⁸1»

Języki to:

  • Galareta true false
  • Python3 waar onwaar

Uwaga: Istnieją bajty UTF-8, a nie bajty galaretki.

Erik the Outgolfer
źródło
1

Lua / JavaScript, 68 bajtów

x=1//1print(...and"true"or"false")
--x;alert(prompt()?"vrai":"faux")

Nie wiem, dlaczego to grałem w golfa; Po prostu się tak czułem.

Zrobiłem
źródło
1

JavaScript / BF

W obu tych językach żadne dane wejściowe nie są uważane za fałszywe, a dane wejściowe za prawdziwe.

Gdy zobaczysz, że struktura programu jest obrócona o 90 stopni w lewo, symbole BF wyglądają jak wieże w mieście :)

Wypróbuj online (BF true testcase)!

Wypróbuj online (fałszywa walizka BF)!

console.log(prompt()?"true":"false")
/*
           >,[>
+          <<]>>[->-<]
+          >[<->[-]]<>[-]<[>>
+++        [->
++++       <]>[->
++++++++++ <]>---.>]>
++++++++++ [->
++++++++++ <]
+++        [->
+++++      <]>.<
++++       [->----<]>--.<
+++        [->
++++       <]>
+          .<
+++        [->---<]>-.
*/

Wyjaśnienie

JavaScript

Jeśli promptprawda jest (tzn. Nie jest pusta, ponieważ promptzwraca ciąg znaków), generuje dane wyjściowe truelub dane wyjściowe false.

BF

Wyjścia sand(duński dla prawdy), jeśli istnieje wejście, lub wyjścia usand(fałsz), jeśli wejście jest puste.

TL; DR Jeśli dane wejściowe nie są puste (tj. Prawda), nie wysyłaj niczego. Jeśli dane wejściowe są puste (tj. Fałsz), dane wyjściowe u. Następnie, niezależnie od tego, czy dane wejściowe są prawdziwe, czy fałszywe, generują dane wyjściowe sand.

Czerpałem inspirację z https://esolangs.org/wiki/Brainfuck_algorithms, z którymi zbudowałem logikę mojego programu.

Weź wkład. Jeśli dane wejściowe nie są puste, zwiększ pamięć, nazwijmy tę komórkę komórką A. Koniec instrukcji if

>
,[
>+
<<
]>

Porównuje wartość „Komórki A” z 0. Jeśli są równe, niech „Komórka B” będzie 1, albo niech będzie 0.

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

Jeśli „Komórka B” ma wartość 1, wówczas jest wysyłana u. Zamknij instrukcję if

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

Wynik sand

>
++++++++++[->++++++++++<]+++[->+++++<]>.
<++++[->----<]>--.
<+++[->++++<]>+.
<+++[->---<]>-.
user41805
źródło
Czy w przypadku wersji BF nie powinno być generowane uwarunkowo, prawda s?
HyperNeutrino
@AlexL. Czyni wyjście uwarunkowo
user41805
O. Byłem zdezorientowany, ponieważ wyjaśnienie mówi, że wyprowadza swarunkowo; czy możesz to naprawić dla jasności? W każdym razie miła odpowiedź.
HyperNeutrino,
If input is empty (ie false), output `s`.Myślę, że to właśnie ta część pomieszała Alexa L.
Erik the Outgolfer,
@AlexL. Zauważyłem błąd, zredagowałem go teraz!
user41805,
1

Haskell, JavaScript, Python, 115 bajtów

q=1//1#1;f True="waar";f False="false";a//b=0;a#b=0{-
1//1;f=lambda x:"wahr"if x else"falsch";"""
f=x=>x+[]//"""#-}
Benji
źródło