Tulis Program yang Menulis fungsi TETAPI dalam bahasa yang berbeda!

30

Tulis program terpendek yang mengambil satu input (n) dari STDIN (atau yang setara) dan mengeluarkan fungsi penambahan sederhana dengan satu argumen (x) yang mengembalikan x + n tetapi fungsinya harus dalam bahasa yang berbeda. Cukup mudah!

Ini adalah kode-golf, aturan normal berlaku, kemenangan program terpendek.

Contoh:> <> ke Python (Tidak Digubah)

!v"def i(x):"a"    return x+"ir!
 >l?!;o

Memasukkan:

3

Keluaran:

def i(x):
    return x+3

Sunting: Fungsi anonim dan ekspresi lambda diizinkan!

Blake Lockley
sumber
Seberapa besar input bisa didapat? Sejauh yang saya tahu, contoh Anda hanya bekerja dengan angka satu digit untuk> <> setengahnya.
Sp3000
Secara teori di harus dapat menggunakan input (masuk akal), tetapi jawaban yang hanya menggunakan input yang dapat mempertahankan 1 digit sepenuhnya dapat diterima, saya memang mempertimbangkan pengerjaan ulang contoh untuk memperbaiki ini sebelum memposting tetapi saya pikir saya tidak akan membiarkannya untuk kepentingan kesederhanaan .
Blake Lockley
4
Saya tidak melihat definisi apa pun function BUTyang seharusnya kami tulis .. -_-
Pengoptimal
1
Ketika suatu fungsi mengembalikan fungsi lain, itu disebut penutupan . Saya tidak tahu apakah ini berlaku lintas bahasa, ...
ETHproduksi
@ ETHproductions Saya kira tujuannya bukan untuk mengembalikan objek fungsi, tetapi kode sumber fungsi dalam bahasa lain.
Paŭlo Ebermann

Jawaban:

23

GS2 → K, 2 byte

•+

Ini mencetak fungsi diam-diam, monadik. Kode sumber menggunakan pengkodean CP437 . Cobalah online!

Uji coba

$ xxd -c 2 -g 1 sum-func.gs2
00000000: 07 2b  .+
$ printf 42 | gs2 sum-func.gs2
42+
$ kona
K Console - Enter \ for help

  (42+) 69
111
  f : 42+
42+
  f 69
111

Bagaimana itu bekerja

GS2

  • GS2 secara otomatis membaca dari STDIN dan mendorong input pada tumpukan.

  • menunjukkan bahwa byte berikutnya adalah string singleton literal.

  • Sebelum keluar, GS2 mencetak semua item tumpukan.

K

Currying argumen kiri otomatis dalam K.

Di sini, n+mengubah fungsi diad +menjadi fungsi monadik dengan mengatur argumen kirinya n.

Dennis
sumber
1
Pengodean apa yang Anda gunakan?
Conor O'Brien
2
@ CᴏɴᴏʀO'Bʀɪᴇɴ "Kode sumber menggunakan pengkodean CP437 ."
ETHproduk
16

ShapeScript → J, 4 byte

"&+"

Ini mencetak kata kerja monadik diam-diam. Cobalah online: ShapeScript , J

Uji coba

$ cat sum-func.shape; echo
"&+"
$ printf 42 | shapescript sum-func.shape; echo
42&+
$ j64-804/jconsole.sh 
   42&+ 69
111
   f =: 42&+
   f 69
111

Bagaimana itu bekerja

ShapeScript

  • ShapeScript secara otomatis membaca dari STDIN dan mendorong input pada stack.

  • "&+" mendorong string itu di tumpukan.

  • Sebelum keluar, ShapeScript mencetak semua item tumpukan.

J

& melakukan currying argumen.

Di sini, n&+mengubah kata kerja diad +menjadi kata kerja monadik dengan mengatur argumen kirinya n.

Dennis
sumber
Saya cukup yakin ada bahasa di mana Anda tidak memerlukan kutipan-dekat.
lirtosiast
Ada peluang bagus Anda benar, tetapi saya tidak dapat mengingatnya dengan input dan output implisit.
Dennis
13

GolfScript → CJam, 4 byte

{+}+

Ini mencetak blok kode (fungsi anonim). Cobalah online: GolfScript , CJam

Uji coba

$ cat sum-func.gs; echo
{+}+
$ printf 42 | golfscript sum-func.gs
{42 +}
$ cjam
> 69 {42 +} ~
111
> {42 +}:F; 69F    
111

Bagaimana itu bekerja

GolfScript

  • GolfScript secara otomatis membaca dari STDIN dan menekan input pada stack.

  • {+} mendorong blok itu di tumpukan.

  • + melakukan penggabungan, yang dengan senang hati menyatukan string dan blok.

  • Sebelum keluar, GolfScript mencetak semua item tumpukan.

CJam

{n +}adalah blok kode yang, ketika dieksekusi, pertama mendorong nstack, lalu mengeksekusi +, yang muncul dua integer dari stack dan mendorong jumlah mereka.

Dennis
sumber
2
Saya hanya akan memposting ini!
Loovjo
Wow, itu mengesankan. {n +}mendorong 42, lalu mengeksekusi +. (Mungkin seharusnya {42 +}atau "mendorong n")
Justin
@ Justin Memang. Terima kasih!
Dennis
12

BrainF *** ke JavaScript ES6, 57 byte

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

(Diasumsikan bahwa input terdiri dari karakter numerik)

Katakan 1337adalah input Anda. Kemudian, ini akan dikompilasi ke:

x=>x+1337
Conor O'Brien
sumber
10

Rotor ke K, 2 byte

'+

Mungkin juga melompat pada kereta musik K.

sebuah spaghetto
sumber
10

O hingga K, 5 byte

saya +++

Terima kasih kepada @ kirbyfan64sos

Versi lain menggunakan fitur yang ditambahkan setelah tantangan dibuat.

saya +
  • Mendapat input, mendorong untuk menumpuk
  • Tekan '+' sebagai string
  • Output menumpuk konten
tahap
sumber
K memiliki kari otomatis, jadi Anda bisa melakukannya i'++p.
kirbyfan64sos
Jarak antara K dan O adalah 4. Anda harus mempersingkat satu byte.
mbomb007
@ mbomb007 wat. Kode adalah 5 byte
fase
2
Surat-surat. Dalam alfabet. Mengerti?
mbomb007
1
@ mbomb007 itu terlalu rumit untuk saya
fase
9

R ke Julia, 19 byte

cat("x->x+",scan())

Ini membaca bilangan bulat dari STDIN menggunakan scan()dan menulis fungsi Julia tanpa nama untuk menggunakan STDOUT cat(). Fungsi Julia sederhana x->x+n, di mana nberasal dari program R.

Alex A.
sumber
9

Malbolge ke JavaScript ES6, 71 byte

('&%@9]!~}43Wyxwvutsr)Mon+HGi4~fBBdR->=_]:[875t4rT}0/Pf,d*((II%GEE!Y}Az

Itu selalu menyenangkan untuk menghasilkan kode Malbolge.

Conor O'Brien
sumber
8

Minecraft 1.8.7 hingga K, 7 6 + 33 + 27 + 62 = 129 128 Bytes

Ini menggunakan versi penghitungan byte ini .

sistem

Blok perintah (dari kiri ke kanan):

tujuan papan skor menambah boneka K
pemain papan skor mengatur JK <input>
tellraw @a {score: {name: "J", objektif: "K"}, tambahan: [{text: "+"}]}

Ini mungkin bisa golf sedikit lebih, tapi itu cukup sederhana: menghasilkan variabel Jdengan tujuan Kdan menetapkan skor untuk tujuan itu ke input (tidak ada STDIN - saya pikir ini cukup dekat). Kemudian, setelah kutu, output skor variabel Juntuk tujuan Kdiikuti oleh a +. Peasy mudah.

Addison Crump
sumber
Perhatikan bahwa bytecounting dat tidak berlaku untuk sistem ini, karena versi Minecraft yang tercantum tidak mendukung file struktur.
Addison Crump
Untuk yang kedua, tidak bisakah Anda menghapus extra, tempat skor JSON dalam array, dan tempatkan string setelah? tellraw @a [{score:{name:"J",objective:"K"}},"+"]
Program Redwolf
@RedwolfPrograms Tidak pada saat pengiriman, empat tahun lalu.
Addison Crump
8

Serius ke Python, 15 byte

,"lambda n:n+"+

Mengharapkan input dalam bentuk string, yaitu "3"

Penjelasan:

,: read value from input
"lambda n:n+": push this literal string
+: concatenate top two values on stack

Cobalah online (Anda harus memasukkan input secara manual karena permalink tidak suka kutipan)

Mego
sumber
Hei, seseorang benar-benar melewati dengan Serius! : D
ETHproduk
2
Serius? Anda selesai dengan serius sebelum Simplex? D:
Conor O'Brien
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Ini belum sepenuhnya selesai (lihat pelacak masalah), tetapi berfungsi cukup baik untuk digunakan di beberapa golf.
Mego
7

Mathematica ke C #, 22 byte

"x=>x+"<>InputString[]

Output C # Func<int, int>bentuk

x=>x+n
LegionMammal978
sumber
1
Outputnya juga Javascript (ES6 / 7) yang valid.
Ismael Miguel
6

rs -> K, 2 byte

/+

Demo langsung.

kirbyfan64sos
sumber
6

Pyth ke APL, 7 5 byte

+z"--

Kode Pyth hanya menyatukan input ( z) dengan string "--". Ini menciptakan kereta monadik tanpa nama di APL dengan formulir n--, dari mana ndatangnya Pyth. Saat memanggilnya di APL, (n--)xuntuk beberapa argumen xdihitung n--x = n-(-x) = n+x.

Coba: Pyth , APL

Disimpan 2 byte berkat Dennis!

Alex A.
sumber
5

> <> ke Python, 25 + 3 = 28 byte

"v+x:x adbmal
o/?(3l
;>~n

Mengambil input melalui -vflag, mis

py -3 fish.py add.fish -v 27

dan menghasilkan lambda Python, misalnya lambda x:x+27.

Untuk bonus, inilah versi input STDIN selama 30 byte:

i:0(?v
x+"r~/"lambda x:
o;!?l<
Sp3000
sumber
5

Mouse ke Ruby, 19 byte

?N:"->x{x+"N.!"}"$

Tidak Terkumpul:

? N:       ~ Read an integer from STDIN, store in N
"->x{x+"   ~ Write that string to STOUT
N. !       ~ Write N
"}"$       ~ Close bracket, end of program

Ini menciptakan fungsi Ruby yang tidak disebutkan namanya dari ->x{x+n}mana nasalnya dari Mouse.

Alex A.
sumber
Kerja bagus, saya suka posting ini.
fase
5

Haskell to Mathematica, 14 byte

(++"+#&").show
alephalpha
sumber
5

Brainfuck to Java, 273

+ [-----> +++++. +++++. ++++++. [----> ++++. + [-> ++++ .- [- > +++ -.----- [-> +++. +++++. ++++++. [----> ++++ .- [---> ++ -. [-----> ++ -. [-> +++. --------- .-------------. [---> + ---. +. ---. ---- .- [-> +++++ -.- [---> ++ -. [-----> +++., [. ,] + [---------> +++ .- [---> +++.

Menghasilkan metode seperti int d(int i){return i+42;}(yang tidak terlihat seperti metode Java, tapi ... Java!)

tahap
sumber
1
Kau tahu, karena Jawa.
Conor O'Brien
1
Apa artinya, itu tidak terlihat seperti metode Java? Bagaimana lagi metode seperti itu terlihat?
Paŭlo Ebermann
@ PaŭloEbermannpublic static int method(int argument){return argument+42;}
fase
1
Hmm baiklah. (Meskipun jika Anda hanya memprogram dalam public static, Anda tidak benar-benar melakukan Java. argumentJuga akan dinamai summand;-). )
Paŭlo Ebermann
@ PaŭloEbermann Saya baru saja menjadi modelpublic static void main(String[] arguments){}
fase
4

PHP → JavaScript (ES6), 20 24 byte

Membaca dari STDIN selalu mahal di PHP. Ini terlihat agak aneh:

x=>x+<?fgets(STDIN);

Ini mencetak x=>x+dan menunggu input pengguna untuk menyelesaikan string, berakhir dengan fungsi JavaScript anonim lengkap, misalnya x=>x+2.

Versi pertama (24 byte )

<?='x=>x+'.fgets(STDIN);
masukkan nama pengguna di sini
sumber
Kenapa tidak adil x=>x+<?=$x;? Ini PHP4.1 yang valid dan Anda dapat memberikan nilai lebih dari POST, GET, SESI, COOKIE, ... dan itu akan bekerja dengan sempurna. Atau di PHP5.3 dengan register_globals=on(pada php.inifile Anda ).
Ismael Miguel
@IsmaelMiguel Persyaratan dari tantangan mengatakan bahwa dibutuhkan nomor dari STDIN. Setiap kali saya mengabaikannya itu dikritik. Jadi saya menganggap serius persyaratan sekarang. :)
insertusernamehere
Yah, saya pikir itu GETsudah berlalu STDIN. Saya bisa mengujinya sebentar.
Ismael Miguel
1
serverfault.com/questions/187025/… <- Bukti pada klaim saya. Cukup gunakan kode yang saya berikan, tampar tautan ini dan tidak ada yang bisa mengeluh
Ismael Miguel
1
Ho, mengerti! Itu memang pintar!
Blackhole
4

Pyth -> K, 4 byte

+z\+

K sangat mudah disalahgunakan di sini ...

Demo langsung.

kirbyfan64sos
sumber
4

Python 2 hingga CJam, 18 20 byte

Terima kasih kepada LegionMammal978 untuk mengoreksi fungsi.

print"{%f+}"%input()

Python melakukan format string dasar. %fadalah kode untuk float, dan karena saya tidak akan kehilangan byte untuk menangani float, saya melanjutkan dan melakukannya.

CJam hampir sama dengan Golfscript-> jawaban CJam. Itu terlihat seperti ini:

{7.4+}

atau:

{23+}

Ini adalah blok yang mengambil nilai teratas dari tumpukan, mendorong nomor khusus, lalu menambahkannya.

bkul
sumber
@ LegionMammal978 Di akhir pertanyaan dikatakan bahwa fungsi anonim dan ekspresi lambda diperbolehkan. Namun, saya akan mengedit jawaban saya dengan program lengkap alternatif.
bkul
1
OP berarti bahwa output dapat menjadi suatu fungsi.
LegionMammal978
3

Shell POSIX ke Haskell, 19 byte

read n;echo "($n+)"

Fungsi anonim diizinkan, Haskell adalah pilihan output yang baik dengan bagian operator.

arjanen
sumber
3

Retina ke Pip , 4 byte

Menggunakan satu file untuk setiap baris ini + 1 byte hukuman; atau, letakkan kedua baris dalam satu file dan gunakan -sbendera.

$
+_

Cocokkan dengan akhir input dengan $dan letakkan di +_sana. Ini menghasilkan sesuatu dalam bentuk 3+_, yang merupakan fungsi anonim di Pip.

DLosc
sumber
3

Bash → C / C ++ / C # / Java, 33 byte

dan mungkin yang lain

echo "int f(int a){return a+$1;}"
Zereges
sumber
3

Vitsy ke K, 5 Bytes

\ o / K akan segera digunakan jika dapat melakukan ini.

N '+' Z

atau mungkin...

N '+' O

Jika input diambil sebagai string (hanya untuk input 0-9) ...

i '+' Z

Semua ini, untuk input 2, akan menampilkan:

2+
Addison Crump
sumber
3

Tiny Lisp to Ceylon , 68 61

(d u(q((n)(c(q(Integer x))(c(q =>)(c(c(q x+)(c n()))()))))))

Tiny Lisp tidak memiliki input dan output nyata - hanya memiliki evaluasi ekspresi. Kode ini di atas membuat fungsi dan mengikatnya u. Anda kemudian dapat memanggil udengan argumen nseperti ini:, (u 7)yang akan mengevaluasi nilai Tiny Lisp ini:

((Integer x) => (x+ 7))

Ini adalah ekspresi Ceylon yang valid, untuk fungsi anonim yang menambahkan 7 ke integer sewenang-wenang.

Terima kasih kepada DLosc untuk peningkatan 7 byte.

Paŭlo Ebermann
sumber
Pekerjaan yang bagus bekerja dengan kemampuan output yang sangat terbatas!
DLosc
3

JavaScript ke Lambda Calculus , 39 byte

(Ini menggunakan dokumen yang ditautkan sebagai dasar.)

alert((x=>`λa(${x}(add a))`)(prompt()))

Katakan input 5. Maka ini menjadi:

"λa(5(add a))"
Conor O'Brien
sumber
1
Di mana penerjemah untuk Lambda Calculus?
feersum
@feersum Periksa tautannya. Saya tidak yakin apakah ada penerjemah yang sebenarnya, tetapi saya diberi tahu bahwa saya bisa mengirimkan dalam bahasa ini.
Conor O'Brien
1
Apa maksudmu "kamu diberi tahu"? Jawaban yang tidak berjalan dalam implementasi bahasa apa pun tidak valid.
feersum
1
Kalkulus Lambda cukup terkenal, saya berasumsi pasti ada penerjemah yang valid di suatu tempat. Intinya adalah, Anda perlu mengidentifikasi juru bahasa tersebut dan menulis kode dalam format yang diterima oleh juru bahasa tersebut.
feersum
2

GNU sed to C, 46 bytes

sed -r 's/^([0-9]+)$/f(int x){return x+\1;}/'
pengguna2064000
sumber
2

Ceylon to Tiny lisp , 76

shared void run(){print("(q((x)(s ``process.readLine()else""``(s 0 x))))");}

Ini menghasilkan (setelah membaca satu baris input) keluaran seperti (q((x)(s 5(s 0 x)))), yang mengevaluasi dalam Tiny Lisp to ((x) (s 5 (s 0 x))), fungsi yang mengambil argumen x, mengurangi dari 0, dan mengurangi hasilnya dari 5. (Ya, ini adalah bagaimana seseorang menambahkan di Tiny Lisp , hanya ada fungsi pengurangan substraksi. Tentu saja, seseorang dapat mendefinisikan fungsi tambahan terlebih dahulu, tetapi ini akan lebih lama.)

Anda dapat menggunakannya seperti ini sebagai fungsi anonim:

((q((x)(s 5(s 0 x)))) 7)

(Ini akan mengevaluasi ke 12.)

Atau Anda bisa memberi nama:

(d p5 (q((x)(s 5(s 0 x)))))
(p5 7)

Petunjuk Perbaikan dan Golf dari DLosc, penulis Tiny Lisp.

Paŭlo Ebermann
sumber
2

Javascript (ES6)> PHP / Javascript, 38 48 47 byte

Kode ini adalah fungsi anonim yang membuat PHP VALID dan fungsi Javascript disebut anonymous.

P=prompt;P(Function('$x',`return $x+${P()};`));

Pada saat penulisan kode ini, hanya Firefox yang mengimplementasikan ES6 secara nativelly (tanpa flag dan semacamnya).

Kode ini menggunakan prompt()fungsi untuk meminta input dan untuk output. Firefox mendukung menyalin keluaran prompt(), menjadikan ini metode keluaran yang sah untuk Javascript.


Pertimbangan:

  • Di ;akhir diperlukan untuk PHP
  • Ruang dalam return $xdiperlukan oleh Javascript
    • Mengabaikannya akan mengatakan bahwa return$xitu tidak terdefinisi
  • Nama fungsinya otomatis: Saya tidak punya pilihan untuk itu
  • Memilih hanya PHP atau hanya Javascript hanya akan mengurangi kode dalam 1 byte, dan akan mengurangi faktor kesenangan menjadi setengahnya
  • Dapat bekerja dengan bahasa lain

Jawaban lama (48 byte):

alert(Function('$x',`return $x+${prompt()};`));

Jawaban tidak valid lama:

y=>''+Function('$x',`return $x+${y};`)
Ismael Miguel
sumber
@ LegionMammal978 Selesai. Memperbaikinya.
Ismael Miguel