多语言挑战


13

在过去(最近)遇到了多语种挑战之后,我们经历了很多有趣的事情,那么,以两种语言输出的挑战又如何呢?

您的答案需要接受布尔输入b并输出文本"true""false"。当以另一种语言运行,"waar"或运行and的"onwaar"任何其他翻译时,需要输出相同的代码。truefalse

输入值

  • 输入是明显可区分的真假。允许的实际值为T / F,位,int或(空)字符串。
  • 提交的所有部分的输入都必须相同。

输出量

  • 输出可以由函数返回,写入STDOUT,放置在弹出窗口中,3D打印和邮寄等。

  • 输出需要代表的状态b。因此,“真实的”需要输出“ true”,“ waar” ...和“ falsey”应导致“ false”,“ onwaar”等。

  • 不同的语言可能使用不同的输出方法。

使用的语言

  • 您的输出之一必须是"true""false"

  • 针对此挑战,不同版本的编程语言被视为不同的语言。

  • 人类语言的不同方言被视为应对这一挑战的不同语言。

  • 您可以将多语种扩展为两种以上的编程语言。每种编程语言都需要输出不同的人类语言。

包含最多语言的答案将宣布为获胜者。绑定时,将考虑字节数。


您的程序是否有意仅检查运行它的interpeter / compiler的版本?
代号

1
"True""False"需要地方接受"true""false"
乔纳森·艾伦

1
@JonathanAllan,我不好。是的,可以输出。
steenbergh

3
我希望看到一个esolang,其中输出经过3D打印并邮寄给您。
ETHproductions 2016年

2
对于人气竞赛而言,这个范围太广了。X的创造性流行缺点是否已超出范围。
丹尼斯

Answers:


5

Dyalog APL243个 237 字节:14种语言,可扩展到131 *

-6个字节感谢Soaku

要求⎕IO←0在许多系统上是默认设置。提示输入01

((⎕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,以及次要版本),它输出英语,西班牙语,葡萄牙语,德语,越南语,法语,土耳其语,意大利语,波兰语,Sundanese,菲律宾语,约鲁巴语,乌兹别克语或罗马尼亚语,尽管没有变音符号。

⎕AV⍳'ëáàÆÅÄòðÓÈÇ'在的索引托米奇V厄克托(151 142 141 133 132 131 122 121 111 102 101 96)

((... )⍳... )找到的位置

被评估者

⎕D∩⍨的交点d igits和

4↑ 的第四个*字符

1⊃ 第二个要素

#⎕WG'APLVersion' 版本号

(... )⊃然后用它来选择

⎕⊃ 输入的第(0:第一; 1:第二)元素

函数s(我们将在稍后定义)应用于每个

相反的

(s←{... }) s适用于–其中s定义为

1↓¨ 第一个字符从每个

⍵⊂⍨ 该论点划分在哪里

⍵= 参数的字符等于

⊃⍵ 论点的第一个字符

';,true,adevarat,... ,falsch',此字符串前置

18⍴',falso' 从该字符串中循环取出的18个字符

*从版本12.1开始,版本号包括内部版本号,因此,通过增加从该字符串中获取的字符数,可以轻松覆盖所有131种拉丁脚本语言


很好的答案!并很好地证明了可扩展性。
steenbergh

我数了243个字节。
科纳·奥布莱恩

@ ConorO'Brien固定。谢谢。
亚当

我知道已经晚了,但是您可以通过替换prawdziwyprawdafalszywy来节省一些字节falsz。较短的表格更适合此处,并为您提供更好的分数。
RedClover

13

6种语言,169字节

期望0\n1\n作为输入,并在以下位置打印单词:

  • Python 2(荷兰文vals/waar),
  • Python 3(法语faux/vrai),
  • Ruby(英语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
丹麦语的错误是“ falsk”
亚当

我要给你两个赞成的print声明!
steenbergh

10

所有Funges,6种语言,146字节

in现在进入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的六个版本。:)

感谢Dennis,现在可以在TIO在线测试所有Befunge版本。不过,目前没有Unefunge和Trefunge变体的有效实现,因此对于那些我建议Rc / Funge的实现

A在Befunge 93和96中被忽略,但是在97中是About About命令,在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)中,它是一个高-低分支,它沿z轴向上移动一个水平到第二平面。

因此,除了Unefunge的情况以外,我们将每个版本从一个单独的行收集其字符串对,然后定向到其中一个&命令来获取用户输入。然后,这些代码路径全部通过^第二列中的命令合并在一起,将程序流向上引导穿过游戏场的顶部,再次环绕到底部。

最后,我们有了^_^序列,该序列根据用户输入来决定要遵循的路径。如果为0,我们直接进入输出序列(>:#,_),写出错误的字符串。如果为1,那么我们首先执行>_该操作以清除堆栈中的第一个字符串,从而输出真实字符串。


一个解释会有所帮助
user41805

1
很好的答案;使用相同语言的所有不同版本确实使这一点变得微妙。
steenbergh

5

5种语言,249个字节

注意:\r\e是文字换行和转义字符,但\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])

在这里,我们设置q0//1其是0,那么我们有一个'''包含大部分的其他代码的字符串,存储阵列包含FalseTrue和indicies 01分别输入端分配到b(这应该是01以表示FalsyTruthy),那么print所述b的个索引a,表示FalseTrue


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因为正确的操作数/必须是Fixnum。在此之后,我们定义一个函数input()和变量,TrueFalse包含它们的法语对应项,最后开始一个字符串',该字符串继续到下一行。最后,我们创建一个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,返回Waaror Vals。该print(a[b])实际上print在叫的结果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中注释行),所以我们只设置q0。与映射JS功能到其的Python名称和设置变量的下一行的交易TrueFalse是意大利串,最后我们执行相同Ruby代码,设置于意大利单词的数组,并使用选择input01


PHP:Ekte/Falsk

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

由于PHP仅执行<?...?>其他所有内容之间的代码,因此我们的代码仅打印换行符(将我们返回到当前行的开头)和ANSI转义序列以清除到当前末尾行,后接Ekte或,Falsk取决于输入的char(01)是真还是假。



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

爪哇

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

说明:

拨打电话时ToString()toString()在分别C#和Java布尔,C#打印大写首字母串,TrueFalse,但Java打印所有小写truefalse

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 /高炉

在这两种语言中,没有输入被认为是错误的,任何输入都被认为是正确的。

当您看到程序的结构向左旋转90度时,BF符号看起来像一座城市中的塔楼:)

在线尝试(BF真正的测试用例)!

在线尝试(BF错误的测试用例)!

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

说明

的JavaScript

如果prompttrue为true(即因为prompt返回字符串而为非空),则输出true,否则为output false

高炉

sand如果有输入,则输出(丹麦语为true),usand如果输入为空,则输出(false)。

TL; DR如果输入不为空(即为true),则不输出任何内容。如果输入为空(即false),则输出u。然后,无论输入是true还是false,都输出output sand

我从https://esolangs.org/wiki/Brainfuck_algorithms获得了灵感,并以此构建了程序的逻辑。

接受输入。如果输入不为空,则增加内存,我们将此单元称为“单元A”。结束if语句

>
,[
>+
<<
]>

将“单元格A”的值与进行比较0。如果它们相等,则使“ Cell B”为1,否则为0

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

如果“单元格B”为1,则输出u。关闭if语句

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

输出量 sand

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

对于BF版本,不应该u有条件输出s吗?
HyperNeutrino '16

@AlexL。它确实u有条件输出
user41805

哦。我很困惑,因为解释说它是s有条件输出的。你能解决这个问题吗?无论如何,好的答案。
HyperNeutrino '16

If input is empty (ie false), output `s`.我认为这是使Alex L.感到困惑的部分。
暴民埃里克

@AlexL。我注意到了错误,我现在对其进行了编辑!
user41805 '16

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+[]//"""#-}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.