Thử thách đa ngôn ngữ


12

Sau tất cả những niềm vui mà chúng tôi đã có với các thử thách đa âm trong quá khứ ( gần đây ), làm thế nào về một thử thách mà đầu ra có thể bằng hai ngôn ngữ?

Câu trả lời của bạn cần chấp nhận đầu vào boolean bvà xuất văn bản "true"hoặc "false". Mã tương tự cần xuất ra, khi chạy bằng ngôn ngữ khác "waar"hoặc "onwaar"hoặc bất kỳ bản dịch nào khác của truefalse.

Đầu vào

  • Đầu vào là một sự thật / falsey phân biệt rõ ràng. Được chấp nhận là các giá trị thực tế T / F, một chuỗi, int hoặc (trống).
  • Đầu vào cần phải giống nhau cho tất cả các phần của trình của bạn.

Đầu ra

  • Đầu ra có thể được trả về bởi một chức năng, được ghi vào STDOUT, được đặt trong cửa sổ bật lên, được in 3D và gửi qua thư, v.v.

  • Đầu ra cần phải đại diện cho trạng thái của b. Vì vậy, một 'sự thật' cần phải xuất ra 'đúng', 'waar' ... và 'falsey' sẽ dẫn đến 'false', 'onwaar', v.v.

  • Các ngôn ngữ khác nhau có thể sử dụng các phương thức đầu ra khác nhau.

Ngôn ngữ sử dụng

  • Một trong những kết quả đầu ra của bạn PHẢI là "true""false".

  • Các phiên bản khác nhau của ngôn ngữ lập trình được tính là ngôn ngữ khác nhau cho thử thách này.

  • Các phương ngữ khác nhau của ngôn ngữ loài người được coi là ngôn ngữ khác nhau cho thử thách này.

  • Bạn có thể mở rộng polyglot thành nhiều hơn hai ngôn ngữ lập trình. Mỗi ngôn ngữ lập trình cần xuất ra một ngôn ngữ riêng của con người.

Câu trả lời với hầu hết các ngôn ngữ được kết hợp sẽ được tuyên bố là người chiến thắng. Khi bị ràng buộc, bytecount được xem xét.


Có phải chương trình của bạn chỉ có thể kiểm tra phiên bản của trình biên dịch / trình biên dịch mà nó chạy với nó không?
CodenameLambda

1
Được "True""False"chấp nhận thay cho yêu cầu "true""false"?
Jonathan Allan

1
@Jonathan ALLan Xấu của tôi. Vâng, điều đó tốt cho đầu ra.
steenbergh

3
Tôi rất muốn thấy một esolang nơi đầu ra được in 3D và gửi lại cho bạn.
Sản phẩm ETH

2
Điều này là quá rộng cho một cuộc thi phổ biến. Do X sáng tạo khuyết điểm pop đã rơi ra khỏi phạm vi.
Dennis

Câu trả lời:


5

Dyalog APL , 243 237 byte : 14 ngôn ngữ, có thể mở rộng đến 131 *

-6 byte nhờ Soaku .

Yêu cầu ⎕IO←0đó là mặc định trên nhiều hệ thống. Nhắc nhở cho đầu vào của 0hoặc 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'

Tùy thuộc vào phiên bản (9.0 đến 16.0, với các phiên bản nhỏ), nó xuất ra tiếng Anh, tiếng Tây Ban Nha, tiếng Bồ Đào Nha, tiếng Đức, tiếng Việt, tiếng Pháp, tiếng Thổ Nhĩ Kỳ, tiếng Ý, tiếng Ba Lan, tiếng Sundan, tiếng Philipin, tiếng Yoruba, tiếng Rumani hoặc tiếng Rumani, mặc dù không có dấu phụ.

⎕AV⍳'ëáàÆÅÄòðÓÈÇ'trong các chỉ số của A tomic V ector (151 142 141 133 132 131 122 121 111 102 101 96)

((... )⍳... )tìm vị trí của

đánh giá

⎕D∩⍨giao điểm của D igits và

4↑ bốn * ký tự đầu tiên của

1⊃ yếu tố thứ hai của

#⎕WG'APLVersion' số phiên bản

(... )⊃sau đó sử dụng nó để chọn trong số

⎕⊃ phần tử input'th (0: đầu tiên; 1: giây) của

các hàm s (mà chúng ta sẽ xác định ngay) được áp dụng cho từng

mặt trái của

(s←{... }) s được áp dụng cho - trong đó s được định nghĩa là

1↓¨ ký tự đầu tiên rơi ra từ mỗi

⍵⊂⍨ đối số được phân vùng ở đâu

⍵= các ký tự của đối số bằng

⊃⍵ nhân vật đầu tiên của đối số

';,true,adevarat,... ,falsch',chuỗi này dự kiến

18⍴',falso' Mười tám ký tự được lấy theo chu kỳ từ chuỗi đó

* Kể từ phiên bản 12.1, số phiên bản bao gồm số bản dựng, do đó, bằng cách tăng số lượng ký tự được lấy từ chuỗi này, có thể dễ dàng bao gồm tất cả 131 ngôn ngữ tập lệnh Latin .


Câu trả lời rất hay! Và bằng chứng tuyệt vời về khả năng mở rộng.
steenbergh

Tôi đếm 243 byte.
Conor O'Brien

@ ConorO'Brien Đã sửa. Cảm ơn.
Adám

Tôi biết đó là muộn, nhưng bạn có thể tiết kiệm vài byte bằng cách thay thế prawdziwyđể prawdafalszywyđể falsz. Các hình thức ngắn phù hợp hơn ở đây và cho bạn một số điểm tốt hơn.
RedClover

11

6 ngôn ngữ, 169 byte

Mong đợi 0\nhoặc 1\nlà đầu vào, và in các từ trong:

  • Python 2 (tiếng Hà Lan vals/waar),
  • Python 3 (tiếng Pháp faux/vrai),
  • Ruby (tiếng Anh false/true),
  • CJam (Na Uy usant/sant),
  • Golfscript (tiếng Đan Mạch usand/sand),
  • Befunge-93 (tiếng Ý 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
Sai trong tiếng Đan Mạch là falsk .
Adám

Tôi sẽ cung cấp cho bạn hai upvote cho printtuyên bố đó !
steenbergh

10

Tất cả các Funges, 6 ngôn ngữ, 146 byte

Bây giờ ở chế độ 3D! 💥

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

Để rõ ràng, tôi đã tách hai mặt phẳng mã để bạn có thể thấy chúng được xếp lớp như thế nào. Trên đĩa, hai khối này sẽ được phân tách bằng ký tự nguồn cấp mẫu ở cuối dòng trên.

   h"vals"0"waar"<

Các quy tắc đã nói các phiên bản khác nhau của một ngôn ngữ được coi là các ngôn ngữ riêng biệt, vì vậy phiên bản này là sáu phiên bản của Funge / Befunge. :)

Nhờ Dennis , tất cả các phiên bản Befunge hiện có thể được thử nghiệm trực tuyến tại TIO . Tuy nhiên, hiện tại không có triển khai các biến thể Unefunge và Trefunge, vì vậy, đối với những người tôi khuyên dùng Rc / Funge .

Abị bỏ qua trong Befunge 93 và 96, nhưng là lệnh About Face năm 97 và không được hỗ trợ trong 98 và do đó phản ánh. Điều này có nghĩa là 93 và 96 đi theo vhướng xuống trong khi 97 và 98 quấn quanh phía đối diện của sân chơi.

Trong Befunge 96, ;theo sau là khoảng trắng ở đầu dòng đánh dấu nó là một nhận xét, do đó dòng đó bị bỏ qua và trình thông dịch tiếp tục đến >dòng thứ ba. Tuy nhiên, vào năm 93, trình thông dịch đi theo >dòng thứ hai.

Con đường 97/98 tiếp tục trên dòng đầu tiên từ phải sang trái, bỏ qua các phần bên trong ;các dấu hiệu nhận xét, là cầu nối &lệnh, cuối cùng đạt dãy U-uốn cong v<^<. Trong Unefunge, những thay đổi hướng này không được hỗ trợ để trình thông dịch đảo ngược hướng và thực hiện phần bị bỏ qua trước đó trong các nhận xét. Trong Befunge / Trefunge, nó tiếp tục ở bên trái.

Trong Befunge 97, mlệnh không được hỗ trợ và do đó bị bỏ qua, vì vậy trình thông dịch tiếp tục dọc theo dòng đầu tiên. Trong 98, nó chỉ ở dạng 3D nên nó phản ánh trong Befunge (2D) và trình thông dịch đi theo vbên phải của nó xuống dòng thứ tư. Trong Trefunge (3D), đó là một nhánh Cao-Thấp chuyển một mức dọc theo trục z sang mặt phẳng thứ hai.

Vì vậy, ngoài trường hợp Unefunge, chúng tôi có mỗi phiên bản tập hợp cặp chuỗi của chúng từ một dòng riêng biệt trước khi được chuyển đến một trong các &lệnh để nhận đầu vào của người dùng. Các đường dẫn mã đó sau đó tất cả hợp nhất với nhau thông qua các ^lệnh trong cột thứ hai, điều hướng chương trình chảy lên trên qua đỉnh của sân chơi, quấn quanh phía dưới một lần nữa.

Cuối cùng, chúng ta có ^_^chuỗi quyết định đường dẫn nào sẽ dựa trên đầu vào của người dùng. Nếu 0 , chúng ta đi thẳng đến chuỗi đầu ra ( >:#,_) viết ra chuỗi sai . Nếu 1 , trước tiên chúng ta thực hiện >_xóa chuỗi đầu tiên khỏi ngăn xếp và do đó xuất ra chuỗi thực .


Một lời giải thích sẽ hữu ích
Kritixi Lithos

1
Câu trả lời rất hay; sử dụng tất cả các phiên bản khác nhau của cùng một ngôn ngữ thực sự làm cho điều này trở nên tinh tế.
steenbergh

5

5 ngôn ngữ, 249 byte

Lưu ý: dòng \r\elà các ký tự nguồn cấp dữ liệu và thoát ký tự, nhưng \x5bphải như vậy là nếu không thì Ruby phàn nàn về lớp nhân vật trong regex.

Một chút muộn cho bữa tiệc, và không phải là người chiến thắng bằng bất kỳ phương tiện nào, nhưng tôi bắt đầu làm việc trên một polyglot cho thử thách tạ ơn và cảm thấy có thể hơi muộn nên đã biến nó thành thế này!

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

Giải trình

Con trăn: 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])

Ở đây chúng ta thiết lập qđể 0//1đó là 0, sau đó chúng ta có một '''chuỗi có chứa hầu hết các mã khác, lưu trữ một mảng chứa FalseTruevà indicies 01tương ứng, chuyển nhượng đầu vào b(mà nên 0hay 1để biểu thị FalsyTruthy) sau đó printcác bchỉ số thứ của a, cho thấy Falsehoặc True.


Hồng ngọc: 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])

Như với tập lệnh Python, chúng tôi đặt biến q, nhưng trong Ruby, điều này được đặt thành 0 / /1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord, vì Ruby chia nó 0/thành "zero chia cho" và sau đây /là "bắt đầu của regex nghĩa đen". Sử dụng nghĩa đen này, tôi có thể che giấu mã PHP và bắt đầu Python '''. Chúng ta phải thêm .to_s.ordbởi vì toán hạng đúng phải /là a Fixnum. Sau đó, chúng ta định nghĩa một hàm input()và biến TrueFalseđể chứa các đối tác tiếng Pháp của chúng và cuối cùng bắt đầu một chuỗi 'tiếp tục trên dòng tiếp theo. Cuối cùng chúng ta tạo ra một mảng achứa "Vrai""Faux"và chọn chúng bằng cách sử dụng input()số ed 0hay 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])

Trong Perl, các q=..=, q+...+q-...-khối được trích dẫn literals sử dụng delimiters bất thường, trong đoạn mã trên tôi đã thay thế những việc này với '...'. Hầu hết các mã được chứa trong một chuỗi bằng chữ, nhưng chúng tôi xác định sub a(chứa a <><!) Để kiểm tra xem STDINcó nhỏ hơn không 1, trả về một trong hai Waarhoặc Vals. Đây print(a[b])thực sự printlà kết quả của việc gọi sub avới và đối số trong [b]đó là một ArrayRef chứa từ trần 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])

Dòng đầu tiên chủ yếu được nhận xét bởi bộ phận 0//1( //là nhận xét dòng trong JavaScript) vì vậy chúng tôi chỉ đặt qthành 0. Các thỏa thuận dòng tiếp theo với việc lập bản đồ các chức năng JS để tên Python của họ và thiết lập các biến TrueFalsetrở thành chuỗi Ý, cuối cùng chúng tôi thực hiện giống như các mã Ruby, thiết lập một đến một mảng của các từ Ý và chọn sử dụng một inputsố 0hoặc 1.


PHP: Ekte/Falsk

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

Do PHP chỉ thực thi mã giữa <?...?>mọi thứ khác là đầu ra, nên mã của chúng tôi ở đây chỉ đơn giản là in một nguồn cấp dữ liệu (để đưa chúng tôi trở lại đầu dòng hiện tại) và chuỗi thoát ANSI để xóa đến cuối dòng dòng, theo sau là Ektehoặc Falsktùy thuộc vào việc char ( 0hoặc 1) đầu vào là trung thực hay giả.



3

C #, Java, 104 byte

Chơi gôn

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

Ung dung:

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

Kiểm tra:

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

Giải trình:

Khi gọi ToString()hoặc toString()trên Boolean bằng C # và Java tương ứng, C # sẽ in chuỗi bằng chữ cái đầu tiên viết hoa TrueFalse, nhưng Java in tất cả bằng chữ thường truefalse.

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

System.out.println(true+"");
//true

2

2 ngôn ngữ, 60 byte

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

Ngôn ngữ là:

  • Thạch true false
  • Python3 waar onwaar

Lưu ý: Có byte UTF-8, không phải byte Jelly.


1

Lua / JavaScript, 68 byte

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

Không biết tại sao tôi đánh gôn nó; Tôi chỉ cảm thấy thích nó.


1

JavaScript / BF

Trong cả hai ngôn ngữ này, không có đầu vào nào được coi là sai và bất kỳ đầu vào nào được coi là đúng.

Khi bạn thấy cấu trúc của chương trình xoay 90 độ sang trái, các biểu tượng BF trông giống như các tòa tháp trong thành phố :)

Dùng thử trực tuyến (BF true testcase)!

Dùng thử trực tuyến (BF testcase)!

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

Giải trình

JavaScript

Nếu promptđúng (nghĩa là không trống vì prompttrả về một chuỗi), đầu ra truehoặc đầu ra khác false.

BF

Đầu ra sand(tiếng Đan Mạch là đúng) nếu có đầu vào hoặc đầu ra khác usand(sai) nếu đầu vào trống.

TL; DR Nếu đầu vào không trống (nghĩa là đúng), không xuất bất cứ thứ gì. Nếu đầu vào trống (tức là sai), đầu ra u. Sau đó, bất kể đầu vào là đúng hay sai, đầu ra sand.

Tôi đã lấy cảm hứng từ https://esolangs.org/wiki/Brainfuck_alacticms mà tôi đã xây dựng logic của chương trình của mình.

Lấy đầu vào. Nếu đầu vào không trống, bộ nhớ tăng, hãy gọi ô này là "Ô A". Kết thúc if-statement

>
,[
>+
<<
]>

So sánh giá trị của "Ô A" với 0. Nếu chúng bằng nhau, hãy để "Cell B" 1, hoặc nếu không thì hãy để nó 0.

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

Nếu "Ô B" là 1, thì đầu ra u. Đóng if-statement

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

Đầu ra sand

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

Đối với phiên bản BF, không nên đầu ra có uđiều kiện, phải không s?
HyperNeutrino

@AlexL. Nó xuất ra một cách có uđiều kiện
Kritixi Lithos

Oh. Tôi đã bối rối bởi vì lời giải thích nói rằng nó xuất ra có sđiều kiện; bạn có thể sửa nó cho rõ ràng? Câu trả lời tốt đẹp nào.
HyperNeutrino

If input is empty (ie false), output `s`.Tôi nghĩ đó là phần khiến Alex L. bối rối.
Erik the Outgolfer

@AlexL. Tôi nhận thấy sai lầm, tôi chỉnh sửa nó ngay bây giờ!
Kritixi Lithos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.