เขียนโปรแกรมที่เขียนฟังก์ชั่น แต่เป็นภาษาอื่น!


30

เขียนโปรแกรมที่สั้นที่สุดที่รับหนึ่งอินพุต (n) จาก STDIN (หรือเทียบเท่า) และส่งออกฟังก์ชันการเพิ่มอย่างง่ายด้วยอาร์กิวเมนต์หนึ่งตัว (x) ที่ส่งคืน x + n แต่ฟังก์ชันนั้นต้องเป็นภาษาอื่น ค่อนข้างง่าย!

นี่คือรหัส - กอล์ฟ, ใช้กฎปกติ, โปรแกรมที่สั้นที่สุดชนะ

ตัวอย่าง:> <> ถึง Python (Ungolfed)

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

การป้อนข้อมูล:

3

เอาท์พุท:

def i(x):
    return x+3

แก้ไข: ฟังก์ชั่นไม่ระบุชื่อและการแสดงออกแลมบ์ดาได้รับอนุญาต!


อินพุตสามารถรับได้ขนาดใหญ่เท่าใด เท่าที่ฉันจะบอกได้ตัวอย่างของคุณใช้ได้กับตัวเลขหลักเดียวสำหรับครึ่ง <>> เท่านั้น
Sp3000

ในทางทฤษฎีแล้วควรจะสามารถใช้อินพุต (สมเหตุสมผล) ใด ๆ แต่คำตอบที่ใช้เฉพาะอินพุตที่สามารถรักษา 1 หลักได้อย่างสมบูรณ์ฉันยอมรับพิจารณา reworking ตัวอย่างเพื่อแก้ไขสิ่งนี้ก่อนโพสต์ แต่ฉันคิดว่าไม่ดี .
Blake Lockley

4
ฉันไม่เห็นคำจำกัดความใด ๆ สำหรับfunction BUTสิ่งที่เราควรจะเขียน .. -_-
เครื่องมือเพิ่มประสิทธิภาพ

1
เมื่อฟังก์ชันส่งกลับฟังก์ชันอื่นก็เรียกว่าปิด ฉันไม่ทราบว่าสิ่งนี้ใช้ภาษาข้ามแม้ว่า ...
ETHproductions

@ ETHproductions ฉันเดาว่าเป้าหมายจะไม่คืนค่าฟังก์ชันวัตถุ แต่เป็นซอร์สโค้ดของฟังก์ชันในภาษาอื่นนั้น
Paŭlo Ebermann

คำตอบ:


23

GS2 → K, 2 ไบต์

•+

ฟังก์ชันนี้จะพิมพ์โดยอัตโนมัติ ซอร์สโค้ดใช้การเข้ารหัสCP437 ลองออนไลน์!

ทดสอบการทำงาน

$ 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

มันทำงานอย่างไร

GS2

  • GS2 อ่านจาก STDIN โดยอัตโนมัติและผลักดันอินพุตบนสแต็ก

  • บ่งชี้ว่าไบต์ถัดไปเป็นตัวอักษรสตริงเดี่ยว

  • ก่อนออกจาก GS2 พิมพ์รายการสแต็กทั้งหมด

K

การโต้แย้งอาร์กิวเมนต์ซ้ายอัตโนมัติใน K

ที่นี่n+จะเปิดฟังก์ชั่น dyadic เป็นฟังก์ชั่นเอกโดยการตั้งค่าอาร์กิวเมนต์ซ้ายไป+n


1
คุณใช้การเข้ารหัสแบบใด
Conor O'Brien

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ "ซอร์สโค้ดใช้การเข้ารหัสCP437 "
ETHproductions

16

ShapeScript → J, 4 ไบต์

"&+"

สิ่งนี้จะพิมพ์คำกริยาที่มีความหมายเดียว ลองออนไลน์: ShapeScript , J

ทดสอบการทำงาน

$ 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

มันทำงานอย่างไร

ShapeScript

  • ShapeScript อ่านจาก STDIN โดยอัตโนมัติและผลักดันอินพุตบนสแต็ก

  • "&+" ดันสตริงนั้นบนสแต็ก

  • ก่อนออกจาก ShapeScript พิมพ์รายการสแต็กทั้งหมด

J

& ทำการโต้แย้งข้อ

ที่นี่n&+จะเปลี่ยนคำกริยา dyadic เป็นคำกริยาเอกโดยการตั้งค่าอาร์กิวเมนต์ซ้ายไป+n


ฉันค่อนข้างมั่นใจว่ามีภาษาที่คุณไม่จำเป็นต้องมีคำพูดปิด
lirtosiast

มีโอกาสที่ดีที่คุณพูดถูก แต่ฉันจำไม่ได้ว่ามีอินพุตโดยปริยายและเอาต์พุตโดยปริยาย
Dennis

13

GolfScript → CJam, 4 ไบต์

{+}+

สิ่งนี้จะพิมพ์บล็อกรหัส (ฟังก์ชั่นที่ไม่ระบุชื่อ) ลองออนไลน์: GolfScript , CJam

ทดสอบการทำงาน

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

มันทำงานอย่างไร

GolfScript

  • GolfScript อ่านจาก STDIN โดยอัตโนมัติและผลักดันอินพุตบนสแต็ก

  • {+} ดันบล็อกนั้นบนสแต็ก

  • + ทำการเรียงต่อกันอย่างมีความสุขซึ่งเชื่อมสตริงและบล็อกอย่างมีความสุข

  • ก่อนที่จะออก GolfScript จะพิมพ์รายการสแต็กทั้งหมด

CJam

{n +}เป็นบล็อคโค้ดที่เมื่อเรียกใช้งานครั้งแรกให้กดnบนสแต็กจากนั้นเรียกใช้งาน+ซึ่งจะปรากฏจำนวนเต็มสองจำนวนจากสแต็กและส่งผลรวมของพวกเขา


2
ฉันเพิ่งจะโพสต์สิ่งนี้!
Loovjo

ว้าวมันน่าประทับใจ {n +}ดัน42, +รันแล้ว (น่าจะเป็น{42 +}หรือ "ดันn")
Justin

@ จัสตินแน่นอน ขอบคุณ!
เดนนิส

12

BrainF *** เป็น JavaScript ES6, 57 ไบต์

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

(สมมติว่าอินพุตประกอบด้วยอักขระตัวเลข)

พูด1337คืออินพุตของคุณ จากนั้นสิ่งนี้จะรวบรวมไปที่:

x=>x+1337


10

Oถึง K, 5 ไบต์

ฉัน '++ o

ขอบคุณ@ kirbyfan64sos

อีกรุ่นที่ใช้ฟีเจอร์ที่เพิ่มเข้ามาหลังจากการสร้างความท้าทาย

ฉัน '+
  • รับอินพุตผลักไปยังสแต็ก
  • กด '+' เป็นสตริง
  • เอาต์พุตเนื้อหาสแต็ก

K มี currying i'++pอัตโนมัติดังนั้นคุณก็สามารถทำได้
kirbyfan64sos

ระยะห่างระหว่าง K และ O คือ 4 คุณต้องตัดให้สั้นลงหนึ่งไบต์
mbomb007

@ mbomb007 วัด รหัสคือ 5 ไบต์ยาว
ระยะ

2
จดหมาย. ในตัวอักษร รับมัน
mbomb007

1
@ mbomb007 ที่ซับซ้อนเกินไปสำหรับฉัน
ช่วง

9

R ถึง Julia, 19 ไบต์

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

นี้อ่านจำนวนเต็มจาก STDIN ใช้scan()และเขียนฟังก์ชั่นจูเลียชื่อเพื่อ STDOUT cat()ใช้ ฟังก์ชัน Julia นั้นเรียบง่ายx->x+nซึ่งnมาจากโปรแกรม R



8

Minecraft 1.8.7 ถึง K, 7 6 + 33 + 27 + 62 = 129 128 ไบต์

นี้กำลังใช้รุ่นของการนับไบต์นี้

ระบบ

บล็อกคำสั่ง (ไปจากซ้ายไปขวา):

วัตถุประสงค์ของสกอร์บอร์ดเพิ่ม K Dummy
ผู้เล่นสกอร์บอร์ดตั้งค่า JK <input>
tellraw @a {คะแนน: {ชื่อ: "J", วัตถุประสงค์: "K"}, พิเศษ: [{text: "+"}]}}

สิ่งนี้อาจจะเล่นกอล์ฟเพิ่มอีกนิด แต่ก็ค่อนข้างง่าย: สร้างตัวแปรJโดยมีวัตถุประสงค์Kและกำหนดคะแนนสำหรับวัตถุประสงค์นั้นเป็นอินพุต (ไม่มี STDIN - ฉันคิดว่านี่ใกล้พอแล้ว) จากนั้นหลังจากที่เห็บออกคะแนนของตัวแปรJสำหรับวัตถุประสงค์ตามมาด้วยK +peasy ง่าย ๆ


โปรดทราบว่า. byatecounting ไม่สามารถใช้ได้กับระบบนี้เนื่องจากเวอร์ชั่น Minecraft ที่ระบุไว้ไม่รองรับไฟล์โครงสร้าง
Addison Crump

สำหรับอันที่สองคุณไม่สามารถลบextraวางคะแนน JSON ในอาร์เรย์และวางสตริงหลังจากได้หรือไม่ tellraw @a [{score:{name:"J",objective:"K"}},"+"]
โปรแกรม Redwolf

@ RedwolfPrograms ไม่ได้อยู่ในช่วงเวลาของการส่งสี่ปีที่ผ่านมา
Addison Crump

8

อย่างจริงจังกับ Python ขนาด 15 ไบต์

,"lambda n:n+"+

คาดว่าอินพุตจะอยู่ในรูปแบบสตริงเช่น "3"

คำอธิบาย:

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

ลองออนไลน์ (คุณจะต้องป้อนข้อมูลด้วยตนเองเพราะลิงก์ไม่ชอบคำพูด)


เฮ้มีคนผ่านเข้ามาอย่างจริงจังจริงๆ! : D
ETHproductions

2
อย่างจริงจัง? คุณทำเรื่องจริงจังกับ Simplex มาก่อนหรือไม่? D:
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴยังไม่เสร็จสมบูรณ์ (ดูตัวติดตามปัญหา) แต่ใช้งานได้ดีพอที่จะใช้ในสนามกอล์ฟบางแห่ง
Mego

7

Mathematica ถึง C #, 22 ไบต์

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

เอาท์พุท C # Func<int, int>ของแบบฟอร์ม

x=>x+n

1
ผลลัพธ์เป็น Javascript ที่ถูกต้อง (ES6 / 7) เช่นกัน
Ismael Miguel


6

Pyth เป็น APL, 7 5 ไบต์

+z"--

รหัส Pyth เพียงแค่เชื่อมอินพุต ( z) "--"กับสตริง สิ่งนี้สร้างขบวนรถไฟ monadic ที่ไม่มีชื่อใน APL ด้วยแบบฟอร์มn--ซึ่งnมาจาก Pyth เมื่อโทรใน APL, (n--)xข้อโต้แย้งบางคำนวณxn--x = n-(-x) = n+x

ลอง: Pyth , APL

บันทึก 2 ไบต์ด้วยเดนนิส!


5

> <>ถึง Python, 25 + 3 = 28 ไบต์

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

ใช้อินพุตผ่านการ-vตั้งค่าสถานะเช่น

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

lambda x:x+27และเอาท์พุทแลมบ์ดางูใหญ่เช่น

สำหรับโบนัสนี่คือเวอร์ชั่นอินพุต STDIN ขนาด 30 ไบต์:

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

5

Mouse to Ruby ขนาด 19 ไบต์

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

Ungolfed:

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

สิ่งนี้จะสร้างฟังก์ชัน Ruby ที่ไม่มีชื่อของฟอร์ม->x{x+n}ที่nมาจาก Mouse


เยี่ยมมากฉันชอบโพสต์นี้
เฟส


5

Brainfuck ถึง Java, 273

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

แสดงผลวิธีเช่นint d(int i){return i+42;}(ซึ่งดูไม่เหมือนวิธี Java แต่ ... Java!)


1
คุณรู้เพราะ Java
Conor O'Brien

1
หมายความว่าอย่างไรมันไม่เหมือนวิธี Java วิธีการแบบนั้นควรมีลักษณะอย่างไร
Paŭlo Ebermann

@ PaŭloEbermannpublic static int method(int argument){return argument+42;}
ช่วง

1
อืมโอเค (แม้ว่าคุณจะเขียนโปรแกรมเฉพาะในpublic staticแต่คุณไม่ได้ทำ Java จริงๆargumentจะมีชื่อsummand;-) ดีกว่า )
Paŭlo Ebermann

@ PaŭloEbermannฉันแค่สร้างโมเดลpublic static void main(String[] arguments){}
ช่วง

4

PHP → JavaScript (ES6), 20 24ไบต์

การอ่านจากSTDINนั้นแพงเสมอใน PHP มันดูแปลกไปหน่อย:

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

มันพิมพ์x=>x+และรอให้ผู้ใช้ป้อนข้อมูลให้เสร็จสมบูรณ์สตริงยุติกับฟังก์ชั่นที่ไม่ระบุชื่อ JavaScript x=>x+2สมบูรณ์เช่น

รุ่นแรก (24 ไบต์ )

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

ทำไมไม่เพียงx=>x+<?=$x;? มันเป็น PHP4.1 ที่ถูกต้องและคุณสามารถส่งผ่านค่า POST, GET, SESSION, COOKIE, ... และมันจะทำงานได้อย่างไร้ที่ติ หรือบน PHP5.3 ด้วยregister_globals=on(ในphp.iniไฟล์ของคุณ)
Ismael Miguel

@IsmaelMiguel STDINความต้องการของความท้าทายพูดว่ามันต้องใช้ตัวเลขจาก ทุกครั้งที่ฉันเพิกเฉยมันก็ถูกวิพากษ์วิจารณ์ ดังนั้นตอนนี้ฉันจึงต้องการอย่างจริงจัง :)
insertusername ที่นี่

ฉันคิดว่าGETมันผ่านไปSTDINแล้ว ฉันสามารถทดสอบได้ในขณะที่
Ismael Miguel

1
serverfault.com/questions/187025/… <- หลักฐานการเรียกร้องของฉัน เพียงแค่ใช้รหัสที่ฉันให้ไว้ให้ตบลิงค์นี้และไม่มีใครสามารถบ่นได้
Ismael Miguel

1
เข้าใจแล้ว! มันฉลาดจริงๆ!
Blackhole


4

Python 2 ถึง CJam, 18 20 ไบต์

ขอบคุณ LegionMammal978 สำหรับการแก้ไขการทำงาน

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

Python ทำรูปแบบสตริงพื้นฐาน %fเป็นรหัสสำหรับการลอยและเนื่องจากฉันจะไม่สูญเสียไบต์ใด ๆ สำหรับการจัดการการลอยฉันไปข้างหน้าและทำเช่นนั้น

CJam นั้นเหมือนกับ Golfscript-> CJam ตอบมาก ดูเหมือนว่า:

{7.4+}

หรือ:

{23+}

มันคือบล็อกที่นำค่าสูงสุดออกจากสแต็กกดหมายเลขพิเศษแล้วเพิ่มเข้าไป


@ LegionMammal978 ในตอนท้ายของคำถามมันบอกว่าฟังก์ชั่นที่ไม่ระบุชื่อและการแสดงออกแลมบ์ดาได้รับอนุญาต ยังฉันจะแก้ไขคำตอบของฉันด้วยโปรแกรมเต็มรูปแบบทางเลือก
bkul

1
OP หมายถึงเอาต์พุตสามารถเป็นฟังก์ชันได้
LegionMammal978

3

POSIX เชลล์เป็น Haskell, 19 ไบต์

read n;echo "($n+)"

ฟังก์ชั่นที่ไม่ระบุชื่อได้รับอนุญาต Haskell เป็นตัวเลือกผลลัพธ์ที่ดีสำหรับส่วนของผู้ปฏิบัติ


3

Retina to Pipขนาด 4 ไบต์

ใช้หนึ่งไฟล์สำหรับแต่ละบรรทัดเหล่านี้ + 1 การลงโทษไบต์ หรือใส่ทั้งสองบรรทัดในไฟล์เดียวและใช้-sแฟล็ก

$
+_

จับคู่ส่วนท้ายของอินพุตด้วย$และวางไว้ที่+_นั่น ส่งผลให้บางสิ่งบางอย่างในรูปแบบ3+_ซึ่งเป็นฟังก์ชั่นที่ไม่ระบุชื่อใน Pip



3

Vitsy ถึง K, 5 ไบต์

\ o / K จะถูกใช้งานในไม่ช้าหากทำได้

N '+' Z

หรืออาจจะ...

N '+' O

หากอินพุตถูกใช้เป็นสตริง (เฉพาะอินพุต 0-9) ...

ฉัน '+' Z

ทั้งหมดเหล่านี้สำหรับอินพุต 2 จะส่งออก:

2+

3

Lisp เล็ก ๆถึงCeylon , 68 61

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

Tiny Lisp ไม่มีอินพุตและเอาต์พุตจริง - เพียงแค่มีการประเมินผลนิพจน์ uรหัสนี้ข้างต้นสร้างฟังก์ชั่นและผูกมัน จากนั้นคุณสามารถเรียกuด้วยอาร์กิวเมนต์nดังนี้: (u 7)ซึ่งจะประเมินค่า Tiny Lisp นี้:

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

นี่เป็นนิพจน์ Ceylon ที่ถูกต้องสำหรับฟังก์ชันที่ไม่ระบุตัวตนซึ่งเพิ่ม 7 ให้เป็นจำนวนเต็มตามอำเภอใจ

ขอบคุณ DLosc สำหรับการปรับปรุง 7 ไบต์


การทำงานที่ดีกับความสามารถในการส่งออกที่ จำกัด มาก!
DLosc

3

JavaScript สู่แลมบ์ดาแคลคูลัส , 39 ไบต์

(ใช้เอกสารที่เชื่อมโยงเป็นพื้นฐาน)

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

5การป้อนข้อมูลกล่าวคือ จากนั้นจะกลายเป็น:

"λa(5(add a))"

1
ล่ามสำหรับแลมบ์ดาแคลคูลัสอยู่ที่ไหน
feersum

@feersum ตรวจสอบลิงค์ ฉันไม่แน่ใจว่ามีล่ามจริงหรือไม่ แต่ฉันได้รับแจ้งว่าฉันสามารถส่งเป็นภาษานี้ได้
Conor O'Brien

1
คุณหมายถึงอะไร "คุณถูกบอก" คำตอบที่ไม่ทำงานในการปรับใช้ภาษาใด ๆ นั้นไม่ถูกต้อง
feersum


1
แคลคูลัสแลมบ์ดาค่อนข้างเป็นที่รู้จักกันดีฉันคิดว่าต้องมีล่ามที่ถูกต้องที่ไหนสักแห่ง ประเด็นคือคุณต้องระบุล่ามดังกล่าวและเขียนรหัสในรูปแบบที่ยอมรับโดยล่ามนั้น
feersum



2

CeylonถึงTiny lisp , 76

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

สิ่งนี้สร้างผลลัพธ์ (หลังจากอ่านบรรทัดอินพุต) เช่น(q((x)(s 5(s 0 x))))ซึ่งประเมินใน Tiny Lisp ถึง((x) (s 5 (s 0 x)))ฟังก์ชันที่รับอาร์กิวเมนต์xลบออกจาก 0 และลบผลลัพธ์จาก 5 (ใช่นี่คือสิ่งที่เพิ่มใน Tiny Lisp มีเพียงฟังก์ชั่นการลบเท่านั้นที่สร้างขึ้นแน่นอนว่าใครสามารถกำหนดฟังก์ชั่นการเพิ่มก่อนได้

คุณสามารถใช้สิ่งนี้เป็นฟังก์ชันที่ไม่ระบุชื่อ:

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

(สิ่งนี้จะประเมินเป็น 12)

หรือคุณสามารถตั้งชื่อ:

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

กรมราชทัณฑ์และสนามกอล์ฟจาก DLosc ผู้เขียนของ Tiny Lisp


2

Javascript (ES6)> PHP / Javascript 38 48 47 ไบต์

รหัสนี้เป็นฟังก์ชั่นที่ไม่ระบุชื่อที่สร้างถูกต้อง PHP และ Javascript anonymousฟังก์ชั่นที่เรียกว่า

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

จากการเขียนโค้ดนี้ Firefox เท่านั้นที่ใช้งาน ES6 nativelly (โดยไม่ต้องมีค่าสถานะและเช่น)

รหัสนี้ใช้prompt()ฟังก์ชั่นเพื่อขออินพุตและเอาต์พุต Firefox รองรับการคัดลอกผลลัพธ์ของprompt()การทำเช่นนี้เป็นวิธีการส่งออกที่ถูกต้องสำหรับ Javascript


การพิจารณา:

  • ;ที่สิ้นสุดเป็นสิ่งจำเป็นสำหรับ PHP
  • return $xJavascript ต้องการ พื้นที่ใน
    • การเพิกเฉยมันจะบอกว่าไม่ได้return$xกำหนด
  • ชื่อฟังก์ชั่นเป็นแบบอัตโนมัติ: ฉันไม่มีทางเลือก
  • การเลือกเฉพาะ PHP หรือ Javascript เท่านั้นจะลดโค้ดใน 1 ไบต์และจะลดความสนุกลงครึ่งหนึ่ง
  • อาจทำงานกับภาษาอื่น ๆ

คำตอบเก่า (48 ไบต์):

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

คำตอบที่ไม่ถูกต้องเก่า:

y=>''+Function('$x',`return $x+${y};`)

@ LegionMammal978 เรียบร้อยแล้ว ซ่อมมัน.
Ismael Miguel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.