Многоязычный вызов

13

После всего того веселья, которое у нас было с вызовами полиглотов в ( недавнем ) прошлом, как насчет задач, когда результат может быть на двух языках?

Ваш ответ должен принять логический ввод bи вывод текста "true"или "false". Тот же код должен выводить, при запуске на другом языке, "waar"или "onwaar"или любой другой перевод trueи false.

вход

  • Ввод - это четко различимая истина / ложь. Допустимы фактические значения T / F, бит, int или (пустая) строка.
  • Входные данные должны быть одинаковыми для всех частей вашего представления.

Выход

  • Вывод может быть возвращен функцией, записан STDOUT, помещен во всплывающее окно, напечатан в 3D, отправлен по почте и т. Д.

  • Выходные данные должны представлять состояние b. Таким образом, для «truey» необходимо вывести «true», «waar» ... и «falsey» должно привести к «false», «onwaar» и т. Д.

  • Разные языки могут использовать разные методы вывода.

Используемые языки

  • Один из ваших выходов ДОЛЖЕН быть "true"и "false".

  • Различные версии языков программирования считаются разными языками для этой задачи.

  • Различные диалекты человеческого языка считаются разными языками для этой задачи.

  • Вы можете расширить полиглот более чем на два языка программирования. Каждый язык программирования должен выводить отдельный человеческий язык.

Ответ с большинством языков будет объявлен победителем. При связывании считается byountount.

steenbergh
источник
Это намеренно, что ваша программа может просто проверить версию интерпретатора / компилятора, с которым она запускается?
CodenameLambda
1
Являются ли "True"и "False"приемлемы вместо необходимых "true"и "false"?
Джонатан Аллан
1
@JonathanAllan Мой плохой. Да, это хорошо для вывода.
Стинберг
3
Я хотел бы видеть esolang, где продукция напечатана в 3D и отправлена ​​вам по почте.
ETHproductions
2
Это слишком широко для конкурса популярности. У X креативно поп-минусы выпали из сферы применения.
Денис

Ответы:

5

Dyalog APL , 243 237 байт : 14 языков, с возможностью расширения до 131 *

-6 байт благодаря Соаку .

Требуется ⎕IO←0по умолчанию во многих системах. Запрашивает ввод 0или 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'

В зависимости от версии (с 9.0 по 16.0, с небольшими версиями) он выводит на английском, испанском, португальском, немецком, вьетнамском, французском, турецком, итальянском, польском, сунданском, филиппинском, йоруба, узбекском или румынском, хотя без диакритических знаков.

⎕AV⍳'ëáàÆÅÄòðÓÈÇ'в индексах A ТОМИЧ V Ector (151 142 141 133 132 131 122 121 111 102 101 96)

((... )⍳... )найти позицию

оцененный

⎕D∩⍨пересечение D igits и

4↑ четыре * первых персонажа

1⊃ второй элемент

#⎕WG'APLVersion' номер версии

(... )⊃затем используйте это, чтобы выбрать среди

⎕⊃ элемент input'th (0: первый; 1: второй)

функция s (которую мы вскоре определим) применяется к каждому из

обратная сторона

(s←{... }) s применяется к - где s определяется как

1↓¨ первый персонаж выпал из каждого

⍵⊂⍨ аргумент разделен где

⍵= символы аргумента равны

⊃⍵ первый символ аргумента

';,true,adevarat,... ,falsch',эта строка предшествует

18⍴',falso' восемнадцать символов, взятых циклически из этой строки

* Начиная с версии 12.1, номер версии включает номер сборки, поэтому, увеличив число символов, взятых из этой строки, легко охватить все 131 язык латинского алфавита .

Адам
источник
Очень хороший ответ! И отличное доказательство расширяемости.
Стинберг
Я считаю 243 байта.
Конор О'Брайен
@ ConorO'Brien Исправлено. Благодарю.
Adám
Я знаю , что уже поздно, но вы можете сэкономить несколько байт, заменив prawdziwyна prawdaи falszywyна falsz. Более короткие формы лучше подходят здесь и дают лучший результат.
RedClover
13

6 языков, 169 байт

Ожидает 0\nили 1\nкак ввод, и печатает слова в:

  • Python 2 (голландский vals/waar),
  • Python 3 (французский faux/vrai),
  • Руби (английский false/true),
  • CJam (норвежский usant/sant),
  • Golfscript (датский usand/sand),
  • Befunge-93 (итальянский 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",,,,,@
Линн
источник
1
Ложь по-датски - это фальшивка .
Адам
Я бы дал вам два отзыва за это printзаявление!
Стинберг
10

Все функции, 6 языков, 146 байт

💥 Теперь в 3D! 💥

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

Для ясности я разделил две плоскости кода, чтобы вы могли видеть, как они наслоены. На диске эти два блока будут разделены символом перевода формы в конце строки выше.

   h"vals"0"waar"<

В правилах говорилось, что разные версии языка считаются отдельными языками, так что это шесть версий Funge / Befunge. :)

Благодаря Деннису все версии Befunge теперь можно тестировать онлайн на TIO . В настоящее время не существует работающих реализаций вариантов Unefunge и Trefunge, поэтому для них я бы порекомендовал Rc / Funge .

Aигнорируется в Befunge 93 и 96, но является командой About Face в 97 и не поддерживается в 98 и, следовательно, отражает. Это означает, что 93 и 96 следуют vвниз, в то время как 97 и 98 переходят на противоположную сторону игрового поля.

В Befunge 96 знак ;пробела в начале строки помечает его как комментарий, поэтому строка пропускается, а интерпретатор переходит к >третьей строке. В 93, однако, переводчик следует >за второй строкой.

Путь 97/98 продолжается в первой строке справа налево, пропуская секцию внутри ;маркеров комментариев, соединяя &команду, в конце концов достигая последовательности U-изгиба v<^<. В Unefunge эти изменения направления не поддерживаются, поэтому интерпретатор меняет направление и выполняет ранее пропущенный раздел в комментариях. В Befunge / Trefunge это продолжается влево.

В Befunge 97 mкоманда не поддерживается и, следовательно, пропускается, поэтому переводчик продолжает выполнение по первой строке. В 98 он только для 3D, поэтому он отражается в Befunge (2D), и переводчик следует vсправа от него до четвертой строки. В Trefunge (3D) это ветвь High-Low, которая переводит уровень вдоль оси z во вторую плоскость.

Таким образом, кроме случая Unefunge, каждая версия собирает их строковую пару из отдельной строки, а затем направляется одной из &команд для получения пользовательского ввода. Затем эти пути кода сливаются воедино с помощью ^команд во втором столбце, направляя поток программы вверх через верхнюю часть игрового поля, снова оборачиваясь вниз.

Наконец, у нас есть ^_^последовательность, которая решает, какой путь выбрать, основываясь на вводе пользователем. Если 0 , мы идем прямо к выходной последовательности ( >:#,_), записывая ложную строку. Если 1 , мы сначала выполняем, >_который очищает первую строку от стека, и таким образом выводит истинную строку.

Джеймс Холдернесс
источник
Было бы полезно объяснение
user41805
1
Очень хороший ответ; использование всех разных версий одного и того же языка действительно делает это тонким.
Стинберг
5

5 языков, 249 байт

Примечание: \rи \eявляются буквальными символами перевода строки и escape-символами, но \x5bдолжны быть как есть, в противном случае Ruby жалуется на класс символов в регулярном выражении.

Немного опоздал на вечеринку и ни в коем случае не победитель, но я начал работать над полиглотом для соревнования по благодарению и почувствовал, что может быть немного поздно, поэтому превратил его в это!

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])

объяснение

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])

Здесь мы устанавливаем qна 0//1что 0, то есть '''строка , которая содержит большую часть другого кода, хранить массив , содержащим Falseи Trueи indicies 0и , 1соответственно, назначить вклад b(который должен быть 0или 1для обозначения Falsyи Truthy) , то printв bй индексе a, показывающие Falseили True.


Рубин: 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])

Как и в сценарии Python, мы устанавливаем переменную q, но в Ruby это значение равно 0 / /1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord, поскольку Ruby разбивает его на 0/«деление на ноль», а на следующее /- «начало литерала регулярного выражения». Используя этот литерал, я могу скрыть код PHP и начать работу с Python '''. Мы должны добавить, .to_s.ordпотому что правильный операнд /должен быть Fixnum. После этого мы определяем функцию input()и переменную Trueи Falseдолжны содержать их французские аналоги и, наконец, начинаем строку, 'которая продолжается на следующей строке. Наконец, мы создаем массив, aкоторый содержит "Vrai"и, "Faux"и выбираем их, используя input()номер ed 0или 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])

В Perl, то q=..=, q+...+и q-...-блоки цитируются литералы , используя необычные разделители, в коде выше я заменил их с '...'. Большая часть кода содержится в буквальной строке, но мы определяем sub a(который содержит <><!), Который проверяет, STDINменьше ли 1, возвращая либо Waarили, либо Vals. print(a[b])Фактически printS результат вызова метода sub aс и аргументом , [b]который является ссылкой на массив , который содержит голое слово 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])

Первая строка в основном закомментирована разделением 0//1( //это комментарий строки в JavaScript), поэтому мы просто установили qна 0. Следующая строка имеет дело с отображением функций JS на их имена Python и установкой переменных, Trueа также Falseдля того, чтобы они были итальянскими строками. Наконец, мы выполняем то же самое, что и код Ruby, устанавливая для массива итальянских слов и выбирая с помощью inputof 0или 1.


PHP: Ekte/Falsk

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

Поскольку PHP выполняет код только между <?...?>всеми остальными, выводится как есть, поэтому наш код здесь просто печатает перевод строки (чтобы вернуть нас в начало текущей строки) и escape-последовательность ANSI, чтобы очистить до конца текущего строка, за которой следует либо, Ekteлибо в Falskзависимости от того, является ли введенный символ ( 0или 1) истинным или ложным.

Дом Гастингс
источник
3

Pyth, Python - 28 байт

#>"onwaar"yQ.q
print input()
Maltysen
источник
Вы можете сохранить байт, избавившись от него .qи добавив ;в конце.
TheBikingViking
@TheBikingViking Я так не думаю, это сделало бы бесконечный цикл.
Maltysen
Тест
TheBikingViking
3

C #, Java, 104 байта

Golfed:

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

Ungolfed:

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

Тестовое задание:

C #

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

Джава

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

Объяснение:

При вызове ToString()или toString()логического значения в C # и Java соответственно, C # печатает строку с заглавной первой буквой Trueи False, но Java печатает все в нижнем регистре trueи false.

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

System.out.println(true+"");
//true
Пит Арден
источник
2

2 языка, 60 байтов

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

Языки:

  • Желе true false
  • python3 waar onwaar

Примечание: есть байты UTF-8, а не байты желе.

Эрик Outgolfer
источник
1

Lua / JavaScript, 68 байт

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

Не знаю, почему я играл в гольф; Мне просто хотелось.

Я сделал
источник
1

JavaScript / BF

На обоих этих языках ни один ввод не считается ложным, а любой ввод считается верным.

Когда вы видите, что структура программы повернута на 90 градусов влево, символы БФ выглядят как башни в городе :)

Попробуйте онлайн (BF true testcase)!

Попробуйте онлайн (ложный тестовый сценарий BF)!

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

объяснение

JavaScript

Если prompttrue (то есть не пусто, потому что promptвозвращает строку), выводит trueили выводит false.

BF

Выводит sand(датский для истины), если есть вход, или же выводит usand(ложь), если вход пустой.

TL; DR Если вход не пустой (т. Е. Истина), ничего не выводить. Если вход пуст (то есть false), выведите u. Затем, независимо от того, является ли ввод истинным или ложным, выводится sand.

Я черпал вдохновение из https://esolangs.org/wiki/Brainfuck_algorithms, с помощью которого я построил логику своей программы.

Примите вход. Если вход не пустой, увеличьте объем памяти, назовем эту ячейку «Ячейка А». Конец if-оператора

>
,[
>+
<<
]>

Сравнивает значение «Ячейка А» с 0. Если они равны, пусть будет «Ячейка B» 1, или пусть так и будет 0.

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

Если «Ячейка B» равна 1, то выводится u. Закрыть if-оператор

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

Выход sand

>
++++++++++[->++++++++++<]+++[->+++++<]>.
<++++[->----<]>--.
<+++[->++++<]>+.
<+++[->---<]>-.
user41805
источник
Для версии BF, не должно ли это выводить uусловно, не так sли?
HyperNeutrino
@AlexL. Делает вывод uусловно
user41805
Ой. Я запутался, потому что объяснение говорит, что это выводит sусловно; Вы могли бы это исправить для ясности? Хороший ответ в любом случае.
ГиперНейтрино
If input is empty (ie false), output `s`.Я думаю, что это та часть, которая запутала Алекса Л.
Эрик Аутгольфер
@AlexL. Я заметил ошибку, я редактировал ее сейчас!
user41805
1

Haskell, JavaScript, Python, 115 байт

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
источник