Tantangan Multi-Bahasa


12

Setelah semua kesenangan yang kami alami dengan tantangan polyglot di masa lalu ( baru-baru ini ), bagaimana dengan tantangan di mana output bisa dalam dua bahasa?

Jawaban Anda perlu menerima input boolean bdan output teks "true"atau "false". Kode yang sama perlu ditampilkan, ketika dijalankan dalam bahasa lain, "waar"atau "onwaar"atau terjemahan lain dari truedan false.

Memasukkan

  • Masukan adalah kebenaran / falsey yang dapat dibedakan secara jelas. Dapat diterima adalah nilai aktual T / F, sedikit, int atau (kosong) string.
  • Input harus sama untuk semua bagian dari kiriman Anda.

Keluaran

  • Output dapat dikembalikan oleh fungsi, ditulis ke STDOUT, ditempatkan di jendela sembulan, cetak 3D dan dikirim dll.

  • Output harus mewakili keadaan b. Jadi 'kebenaran' perlu menampilkan 'benar', 'waar' ... dan 'falsey' harus mengarah ke 'false', 'onwaar', dll.

  • Bahasa yang berbeda dapat menggunakan metode keluaran yang berbeda.

Bahasa yang digunakan

  • Salah satu output Anda HARUS "true"dan "false".

  • Versi bahasa pemrograman yang berbeda dihitung sebagai bahasa yang berbeda untuk tantangan ini.

  • Dialek yang berbeda dari bahasa manusia dianggap sebagai bahasa yang berbeda untuk tantangan ini.

  • Anda dapat memperluas polyglot ke lebih dari dua bahasa pemrograman. Setiap bahasa pemrograman harus menghasilkan bahasa manusia yang berbeda.

Jawaban dengan bahasa terbanyak akan dinyatakan sebagai pemenang. Saat diikat, bytecount dipertimbangkan.


Apakah disengaja program Anda hanya dapat memeriksa versi interpeter / compiler yang dijalankannya?
CodenameLambda

1
Apakah "True"dan "False"dapat diterima sebagai pengganti yang dibutuhkan "true"dan "false"?
Jonathan Allan

1
@ JonathanAllan Badaku. Ya, itu bagus untuk output.
steenbergh

3
Saya ingin melihat esolang di mana hasilnya dicetak 3D dan dikirimkan kembali kepada Anda.
ETHproduk

2
Ini terlalu luas untuk kontes popularitas. Apakah X secara kreatif muncul kontra telah keluar dari ruang lingkup.
Dennis

Jawaban:


5

Dyalog APL , 243 237 byte : 14 bahasa, dapat diperpanjang hingga 131 *

-6 byte terima kasih kepada Soaku .

Membutuhkan ⎕IO←0yang default pada banyak sistem. Anjuran untuk input 0atau 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'

Bergantung pada versi (9.0 hingga 16.0, dengan versi minor) itu output dalam bahasa Inggris, Spanyol, Portugis, Jerman, Vietnam, Perancis, Turki, Italia, Polandia, Sunda, Filipina, Yoruba, Uzbekistan, atau Rumania, meskipun tanpa diakritik.

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

((... )⍳... )cari posisi

yang dievaluasi

⎕D∩⍨persimpangan D igits dan

4↑ empat * karakter pertama dari

1⊃ elemen kedua dari

#⎕WG'APLVersion' nomor versi

(... )⊃lalu gunakan itu untuk memilih di antara

⎕⊃ elemen input'th (0: pertama; 1: detik) dari

fungsi s (yang akan kita definisikan segera) diterapkan untuk masing-masing

kebalikan dari

(s←{... }) s diterapkan ke - di mana s didefinisikan sebagai

1↓¨ karakter pertama turun dari masing - masing

⍵⊂⍨ argumen dipartisi di mana

⍵= karakter argumen sama dengan

⊃⍵ karakter pertama argumen

';,true,adevarat,... ,falsch',string ini diawali dengan

18⍴',falso' delapan belas karakter diambil secara siklikal dari string itu

* Sejak versi 12.1, nomor versi menyertakan nomor bangun, jadi dengan meningkatkan jumlah karakter yang diambil dari string ini, mudah untuk mencakup semua 131 bahasa skrip Latin .


Jawaban yang sangat bagus! Dan bukti hebat tentang ekstensibilitas.
steenbergh

Saya menghitung 243 byte.
Conor O'Brien

@ ConorO'Brien Diperbaiki. Terima kasih.
Adem

Saya tahu ini terlambat, tetapi Anda dapat menyimpan beberapa byte dengan mengganti prawdziwyke prawdadan falszywyke falsz. Formulir yang lebih pendek lebih pas di sini dan memberi Anda skor yang lebih baik.
RedClover

11

6 bahasa, 169 byte

Diharapkan 0\natau 1\nsebagai input, dan mencetak kata dalam:

  • Python 2 (Belanda vals/waar),
  • Python 3 (Prancis faux/vrai),
  • Ruby (Bahasa Inggris false/true),
  • CJam (Norwegia usant/sant),
  • Naskah Golf (Denmark usand/sand),
  • Befunge-93 (Italia 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
Salah dalam bahasa Denmark adalah falsk .
Adám

Saya akan memberi Anda dua upvotes untuk printpernyataan itu!
steenbergh

10

Semua Jamur, 6 bahasa, 146 byte

💥 Sekarang dalam 3D! 💥

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

Untuk lebih jelasnya saya telah memisahkan dua bidang kode sehingga Anda dapat melihat bagaimana mereka berlapis. Pada disk, dua blok ini akan dipisahkan dengan karakter umpan formulir di akhir baris di atas.

   h"vals"0"waar"<

Aturan mengatakan versi berbeda dari suatu bahasa dihitung sebagai bahasa yang terpisah, jadi ini adalah enam versi Funge / Befunge. :)

Berkat Dennis , semua versi Befunge sekarang dapat diuji secara online di TIO . Namun saat ini tidak ada implementasi yang berfungsi dari varian Unefunge dan Trefunge, jadi bagi mereka saya akan merekomendasikan Rc / Funge .

Adiabaikan di Befunge 93 dan 96, tetapi merupakan perintah Tentang Wajah di 97 dan tidak didukung di 98 dan karenanya mencerminkan. Ini berarti bahwa 93 dan 96 mengikuti ke vbawah sementara 97 dan 98 membungkus sisi berlawanan dari lapangan bermain.

Di Befunge 96 a ;diikuti oleh spasi pada awal baris menandainya sebagai komentar, sehingga garis dilewati dan penerjemah melanjutkan ke >pada baris ketiga. Namun pada 93, penerjemah mengikuti >baris kedua.

Jalan 97/98 berlanjut pada baris pertama dari kanan ke kiri, melompati bagian di dalam ;penanda komentar, menjembatani &perintah, akhirnya mencapai urutan tikungan-U v<^<. Di Unefunge, perubahan arah ini tidak didukung sehingga penerjemah membalikkan arah dan mengeksekusi bagian yang sebelumnya dilewati dalam komentar. Di Befunge / Trefunge terus ke kiri.

Di Befunge 97 mperintah tidak didukung dan dengan demikian dilewati, sehingga penerjemah melanjutkan sepanjang baris pertama. Dalam 98 itu hanya 3D sehingga tercermin dalam Befunge (2D) dan penerjemah mengikuti vke kanan sampai ke baris keempat. Di Trefunge (3D) itu adalah cabang High-Low yang mentransfer level sepanjang sumbu z ke bidang kedua.

Jadi selain dari kasus Unefunge, kami meminta setiap versi mengumpulkan pasangan string mereka dari baris terpisah sebelum diarahkan ke salah satu &perintah untuk mendapatkan input pengguna. Jalur kode tersebut kemudian bergabung bersama melalui ^perintah di kolom kedua, mengarahkan program mengalir ke atas melalui bagian atas playfield, membungkus lagi ke bawah.

Akhirnya kami memiliki ^_^urutan yang memutuskan jalur mana yang harus diikuti berdasarkan input pengguna. Jika 0 , kita langsung ke urutan output ( >:#,_) menuliskan string yang salah . Jika 1 , pertama kita jalankan >_yang menghapus string pertama dari stack, dan dengan demikian menampilkan string yang benar .


Penjelasan akan sangat membantu
user41805

1
Jawaban yang sangat bagus; menggunakan semua versi berbeda dari bahasa yang sama benar-benar membuat ini halus.
steenbergh

5

5 bahasa, 249 byte

Catatan: the \rdan \emerupakan karakter baris-feed dan melarikan diri literal, tetapi \x5bharus seperti apa adanya jika tidak Ruby mengeluh tentang kelas karakter di regex.

Agak terlambat ke pesta, dan bukan pemenang dengan cara apa pun, tapi aku mulai mengerjakan polyglot untuk tantangan ucapan syukur dan merasa mungkin agak terlambat jadi mengubahnya menjadi ini!

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

Penjelasan

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

Di sini kita mengatur quntuk 0//1yang 0, maka kita memiliki '''string yang berisi sebagian besar kode lain, menyimpan array yang berisi Falsedan Truedan indicies 0dan 1masing-masing, menetapkan masukan untuk b(yang harus 0atau 1untuk menandakan Falsydan Truthy) kemudian printpada bindeks th a, menunjukkan Falseatau 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])

Seperti halnya skrip Python, kita mengatur variabel q, tetapi dalam Ruby ini diatur ke 0 / /1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord, karena Ruby memecah ini 0/sebagai "nol dibagi-oleh" dan berikut ini /sebagai "awal regex literal". Dengan menggunakan literal ini saya dapat menyembunyikan kode PHP dan memulai Python '''. Kami harus menambahkan .to_s.ordkarena operan yang tepat /harus a Fixnum. Setelah ini, kita mendefinisikan fungsi input()dan variabel Truedan Falseuntuk memuat rekan-rekan Prancis mereka dan akhirnya memulai string 'yang berlanjut ke baris berikutnya. Akhirnya kami membuat array ayang berisi "Vrai"dan "Faux"dan memilihnya menggunakan input()nomor ed 0atau 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])

Dalam Perl, the q=..=, q+...+dan q-...-blocks dikutip literal menggunakan pembatas yang tidak biasa, dalam kode di atas saya telah menggantinya dengan '...'. Sebagian besar kode terkandung dalam string literal, tetapi kami mendefinisikan sub a(yang berisi <><!) Yang memeriksa apakah STDINkurang dari 1, mengembalikan salah satu Waaratau Vals. Yang print(a[b])sebenarnya printadalah hasil dari memanggil sub adengan dan argumen [b]yang merupakan ArrayRef yang berisi kata kosong 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])

Baris pertama sebagian besar dikomentari oleh divisi 0//1( //adalah komentar baris dalam JavaScript) jadi kami hanya mengatur quntuk 0. Garis penawaran berikutnya dengan pemetaan fungsi JS untuk nama Python dan pengaturan variabel Truedan Falsemenjadi string Italia, akhirnya kami jalankan sama dengan kode Ruby, menetapkan ke array dari kata Italia dan memilih menggunakan inputdari 0atau 1.


PHP: Ekte/Falsk

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

Karena PHP hanya mengeksekusi kode antara <?...?>semua yang lain adalah apa adanya, jadi kode kami di sini hanya mencetak umpan baris (untuk membawa kami kembali ke awal baris saat ini) dan urutan pelarian ANSI untuk menghapus hingga akhir saat ini baris, diikuti oleh salah satu Ekteatau Falsktergantung pada apakah input char ( 0atau 1) benar atau salah.



3

C #, Java, 104 Bytes

Golf:

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

Tidak Disatukan:

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

Uji:

C #

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

Penjelasan:

Ketika memanggil ToString()atau toString()pada Boolean di C # dan Java masing-masing, C # mencetak string dengan huruf kapital pertama, Truedan False, tetapi Java mencetak semua dalam huruf kecil truedan false.

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

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

2

2 bahasa, 60 byte

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

Bahasa adalah:

  • Jeli true false
  • Python3 waar onwaar

Catatan: Ada byte UTF-8, bukan Jelly byte.


1

Lua / JavaScript, 68 byte

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

Tidak tahu mengapa saya bermain golf; Saya hanya merasa seperti itu.


1

JavaScript / BF

Dalam kedua bahasa ini, tidak ada input yang dianggap salah dan input apa pun dianggap benar.

Ketika Anda melihat struktur program diputar 90 derajat ke kiri, simbol BF terlihat seperti menara di kota :)

Coba online (testcase BF benar)!

Cobalah online (BF false testcase)!

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

Penjelasan

JavaScript

Jika promptbenar (yaitu tidak kosong karena promptmengembalikan string), output true, atau keluaran lain false.

BF

Output sand(Denmark untuk true) jika ada input, atau output usand(false) jika input kosong.

TL; DR Jika input tidak kosong (yaitu benar), jangan output apa pun. Jika input kosong (mis. Salah), output u. Kemudian, terlepas dari apakah input itu benar atau salah, output sand.

Saya telah mengambil inspirasi dari https://esolangs.org/wiki/Brainfuck_algorithms yang dengannya saya membangun logika program saya.

Ambil input. Jika input tidak kosong, tambahkan memori, sebut saja sel ini "Sel A". Akhiri jika-pernyataan

>
,[
>+
<<
]>

Membandingkan nilai "Sel A" dengan 0. Jika mereka sama, biarkan "Sel B" menjadi 1, atau biarkan saja 0.

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

Jika "Sel B" adalah 1, maka output u. Tutup jika-pernyataan

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

Keluaran sand

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

Untuk versi BF, bukankah seharusnya output ubersyarat, bukan s?
HyperNeutrino

@AlexL. Itu menghasilkan ukondisional
user41805

Oh Saya jadi bingung karena penjelasannya mengatakan bahwa itu keluar secara skondisional; bisakah Anda memperbaikinya untuk kejelasan? Jawaban yang bagus.
HyperNeutrino

If input is empty (ie false), output `s`.Saya pikir itu adalah bagian yang membuat Alex L. bingung.
Erik the Outgolfer

@AlexL. Saya perhatikan kesalahannya, saya mengeditnya sekarang!
user41805
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.