Багатомовний виклик


13

Зрештою, із задоволенням, що ми мали проблеми з поліглотом у недавньому минулому, як щодо проблеми, де вихід може бути двома мовами?

У вашій відповіді потрібно прийняти булевий ввід bі вивести текст "true"або "false". Такий самий пароль повинен виводити, при запуску на іншій мові, "waar"або "onwaar"будь-якої іншої переклад trueі false.

Вхідні дані

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

Вихідні дані

  • Вихід може бути повернутий функцією, записаною у STDOUT, розміщеною у спливаючому вікні, 3D-друком та надісланим поштою тощо.

  • Вихід повинен представляти стан b. Таким чином, "truthy" повинен виводити "true", "waar" ... а "falsey" повинен призводити до "false", "onwaar" тощо.

  • Різні мови можуть використовувати різні методи виведення.

Використовувані мови

  • Один з ваших результатів ОБОВ'ЯЗКОВО бути "true"та "false".

  • Різні версії мов програмування вважаються різними мовами для цього завдання.

  • Різні діалекти людської мови вважаються різними мовами для цього виклику.

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

Відповідь із більшою кількістю мов буде оголошено переможцем. При зав’язуванні вважається рахунковий рахунок.


Чи навмисно ваша програма може просто перевірити версію інтерпетера / компілятора, з якою вона працює?
CodenameLambda

1
Чи є "True"і "False"прийнятними замість необхідних "true"і "false"?
Джонатан Аллан

1
@JonathanAllan Моє погано. Так, це добре для виведення.
steenbergh

3
Я хотів би побачити езоланг, де вихідний текст надрукований у 3D та відправлений поштою.
ETHproductions

2
Це занадто широко для конкурсу на популярність. Хіба X творчо поп-мінуси випали із сфери застосування.
Денніс

Відповіді:


5

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

-6 байт завдяки Soaku .

Потрібно, ⎕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 запалює і

4↑ чотири * перші символи

1⊃ другий елемент

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

(... )⊃потім використовуйте це для вибору серед

⎕⊃ вхідний (0: перший; 1: другий) елемент

функція s (яку ми визначимо скоро), застосована до кожного з

зворотній бік

(s←{... }) s застосовується до - де s визначено як

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

⍵⊂⍨ аргумент розділений де

⍵= символи аргументу дорівнюють

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

';,true,adevarat,... ,falsch',ця струна прикидається

18⍴',falso' вісімнадцять символів, взяті циклічно з цього рядка

* Оскільки у версії 12.1 номер версії включає номер збірки, тож збільшуючи кількість символів, узятих із цього рядка, легко охопити всі 131 мови латинських сценаріїв .


Дуже приємна відповідь! І чудовий доказ на розширюваність.
steenbergh

Я рахую 243 байти.
Conor O'Brien

Виправлено @ ConorO'Brien Дякую.
Адам

Я знаю , що вже пізно, але ви можете заощадити кілька байт, замінивши 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),
  • Голфскрипт (датський 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твердження!
steenbergh

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 a ;пробіл на початку рядка позначає це як коментар, так що ця лінія пропускається, а інтерпретатор продовжує переходити до >третього рядка. Однак у 93 році перекладач дотримується >другого рядка.

Шлях 97/98 продовжується на першому рядку справа наліво, пропускаючи розділ всередині ;маркерів коментарів, мостить &команду, зрештою досягаючи послідовності U-згину v<^<. У режимі відключення ці зміни напрямку не підтримуються, тому перекладач повертає напрямок та виконує раніше пропущений розділ у коментарях. У Befunge / Trefunge він продовжується зліва.

У Befunge 97 mкоманда не підтримується і, таким чином, пропускається, тому інтерпретатор продовжує перший рядок. У 98 році це лише 3D, тому він відображається у Befunge (2D), а інтерпретатор слідує vправоруч від нього до четвертого рядка. У Trefunge (3D) це гілка High-Low, яка передає рівень уздовж осі z у другу площину.

Отже, крім випадку Unefunge, ми маємо кожну версію, яка збирає їх рядку рядків з окремого рядка, перш ніж буде спрямована на одну з &команд для отримання вводу користувача. Ці кодові шляхи потім усі зливаються разом за допомогою ^команд у другому стовпчику, направляючи потік програми вгору через верхню частину ігрового поля, знову загортаючись донизу.

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


Пояснення було б корисно
користувач41805

1
Дуже приємна відповідь; використання всіх різних версій однієї мови дійсно робить це тонким.
steenbergh

5

5 мов, 249 байт

Примітка: \rі \eє в буквальному сенсі перекладу рядка і екранують символи, але \x5bмає бути , як-інакше Рубін скаржиться на класі символів в регулярних виразах.

Трохи запізнюючись на вечірку, і жодним чином не переможець, але я почав працювати над поліглотом для виклику подяки і відчув, що може бути трохи пізно, тому перетворив це на це!

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.


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

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


PHP: Ekte/Falsk

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

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



3

C #, Java, 104 байти

Гольф:

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

Безголівки:

  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

Java

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, а не желейні байти.


1

Lua / JavaScript, 68 байт

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

Не знаю, чому я його гольфував; Я просто відчував, що це подобається.


1

JavaScript / BF

В обох цих мовах жодне введення не вважається помилковим, а будь-яке введення вважається істинним.

Коли ви бачите, як структура програми повертається на 90 градусів ліворуч, символи BF виглядають як вежі в місті :)

Спробуйте в Інтернеті (справжній тестовий зразок BF)!

Спробуйте в режимі он-лайн (BF false testcase)!

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

Пояснення

JavaScript

Якщо значення promptвірно (тобто не порожнє, оскільки promptповертає рядок), виводить trueабо інше виводитьfalse .

BF

Виходи sand(датські для істинних), якщо є вхідні дані, або інші результатиusand (помилкові), якщо вхід порожній.

TL; DR Якщо вхід не порожній (тобто вірно), нічого не виводьте. Якщо вхід порожній (тобто хибний), виведіть u. Потім, незалежно від того, вхідний чи неправдивий, виведіть висновокsand .

Я взяв натхнення з https://esolangs.org/wiki/Brainfuck_algorithms допомогою якого я побудував логіку своєї програми.

Візьміть внесок. Якщо вхід не порожній, приріст пам’яті, давайте назвемо цю клітинку «Клітинка A». Закінчення if-заяви

>
,[
>+
<<
]>

Порівняє значення "Осередок А" з 0. Якщо вони рівні, нехай буде "Стільниця В" 1, інакше нехай буде 0.

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

Якщо "Стільниця B" дорівнює 1, тоді виведіть u. Закрити, якщо-заяви

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

Вихідні дані sand

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

Чи не слід для версії BF виводити її uумовно, чи не так s?
HyperNeutrino

@AlexL. u
Виводить

Ой. Я заплутався, оскільки в поясненні йдеться про те, що він виходить sумовно; Ви могли б це виправити для наочності? Гарна відповідь все одно.
HyperNeutrino

If input is empty (ie false), output `s`.Я думаю, що це та частина, яка розгубила Алекса Л.
Ерік Атголфер

@AlexL. Я помітив помилку, я її відредагував зараз!
користувач41805

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+[]//"""#-}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.