บวกหรือลบรูปหลายเหลี่ยม!


14

การส่งของคุณจะต้องใช้เวลารายการตัวเลข (ในรายการสิ่งที่รูปแบบการสนับสนุนภาษาของคุณหรือใช้พารามิเตอร์ฟังก์ชั่น / บรรทัดคำสั่งหลาย) หรือสตริงของตัวเลขคั่นด้วยตัวอักษรใด ๆ 0123456789ที่ไม่ได้เป็น ในหนึ่งภาษานั้นจะต้องเพิ่มทั้งหมดและส่งออกผลรวม ในภาษาอื่นมันจะต้องลบมันออกจากกันตามลำดับ ตัวอย่าง:

12
5
7
2

ในภาษาหนึ่งก็ต้องส่งออกและในอีกมันต้องเอาท์พุท26 โปรดทราบว่าตัวเลขทั้งหมดที่ป้อนจะเป็นจำนวนเต็มบวกน้อยกว่า-2 100จะไม่มีมากกว่า20ตัวเลขให้เพื่อที่คุณจะไม่เคยส่งออกมากขึ้นกว่าหรือน้อยกว่า2000 -1899มีอะไรจะถามอีกไหม? แสดงความคิดเห็นด้านล่าง!


อนุญาตให้ใช้ช่องว่างต่อท้ายในเอาต์พุตได้หรือไม่
แมวธุรกิจ

อนุญาตให้ใช้ภาษาเดียวกันสองเวอร์ชันที่ต่างกันหรือไม่ ดูPython 2/3 คำตอบโดย HyperNeutrino
Mr. Xcoder

@ Mr.Xcoder ได้รับอนุญาต
programmer5000

2
@BetaDecay คุณคิดว่าเป็นปัญหาลองดู code-golf!
programmer5000

1
@ programmer5000 คุณหมายถึง[code-golf] -[polyglot]อะไร
Erik the Outgolfer

คำตอบ:


14

เยลลี่ / 05AB1E , 3 ไบต์

00000000: c6 71 53                                         .qS

นี่คือ hexdump (xxd) ของโปรแกรมที่ส่ง

ลองออนไลน์!

เยลลี่: ผลรวม

เจลลี่ใช้หน้ารหัสเจลลี่จึงเห็นอักขระต่อไปนี้

İqS

ลองออนไลน์!

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

İqS  Main link. Argument: A (array)

İ    (ignored)
 q   Unrecognized token. This breaks the link; nothing to the left is executed.
  S  Take the sum of A.

05AB1E: ความแตกต่าง

05AB1E ใช้Windows-1252ดังนั้นจึงเห็นอักขระต่อไปนี้

ÆqS

ลองออนไลน์!

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

Æ     Take the difference of the input.
 q    Quit.
  S   (ignored)

22

Python 2/3, 52 ไบต์

lambda l:sum(l[:1]+[x*int(1-(1/2)*4)for x in l[1:]])

int(1-(1/2)*4)ผลตอบแทน1ในหลาม 2 เพราะ1/2ประเมินแรกที่แล้ว00 * 4 = 0

int(1-(1/2)*4)ผลตอบแทน-1ในหลาม 3 เพราะ1/2ประเมินแรกที่แล้ว0.5int(0.5 * 4) = int(2.0) = 2


1
ใช้ภาษาเดียวกันโดยอนุญาตรุ่นอื่น ๆ ด้วยหรือไม่
Mr. Xcoder

3
@ Mr.Xcoder ฉันไม่เห็นว่าทำไมไม่ฉันได้เห็นภาษาอื่นโดยใช้ C, Java, Python และ Befunge รุ่นอื่น ฉันจะถามเกี่ยวกับเมตาหรือดูว่าฉันสามารถหาโพสต์เมตาที่เกี่ยวข้อง
HyperNeutrino

ใช้เทคนิคคณิตศาสตร์ได้ดีเนื่องจากมีการเปลี่ยนแปลงเวอร์ชั่น
Mr. Xcoder

1
@ Mr.Xcoder ขอบคุณ! ผมเคยถามคำถามเกี่ยวกับเมตานี่ ; ฉันหวังว่าจะได้รับคำตอบในไม่ช้า
HyperNeutrino

1
@ programmer5000 การแบ่งจำนวนเต็ม
HyperNeutrino

14

C และ C ++ (ทั้งจาก GCC), 81 75 73 ไบต์

int c;int f(int*a,int l){auto d=.5;c=*a++;for(;--l;a++)c+=*a-4*d**a;c=c;}

นำตัวชี้ไปยังอาร์เรย์และความยาว

คำอธิบาย: ยังคงใช้คำอธิบาย @Steadybox: pใน C auto d=.5ประกาศตัวแปรจำนวนเต็มด้วยคลาสหน่วยเก็บข้อมูลอัตโนมัติ (ซึ่งเป็นค่าเริ่มต้น) ซึ่งเริ่มต้นแล้วเป็น 0 ในขณะที่ใน C ++ 11 จะประกาศคู่ซึ่งเริ่มต้นได้ ถึง 0.5

C - plus language: ลองออนไลน์!

C ++ - ภาษาลบ: ลองออนไลน์!


11

05AB1E / Jelly , 5 ไบต์

00000000: 4f71 7f5f 2f                             Oq._/

ลองออนไลน์! (05AB1E)
ลองออนไลน์! (Jelly)

05AB1E เห็น :

oq? _ /
คำอธิบาย:

Oq? _ / 1 อาร์กิวเมนต์โดยนัย
O นำผลรวมของรายการอินพุตแรก
 ออกจาก
  ? _ / ไม่สามารถใช้งานได้

เยลลี่เห็น :

oq
_ /
คำอธิบาย:

_ / ลิงก์หลัก อาร์กิวเมนต์: z
องค์ประกอบ _ / ลบ z ตามลำดับ

ลิงก์ Oq Helper ไม่สามารถใช้งานได้

สิ่งนี้ใช้หน้าวุ้นหรือไม่?
programmer5000

@ programmer5000 นี่คือการทดสอบดิบที่ใช้ CP-1252 สำหรับ 05AB1E และ JELLY สำหรับ Jelly 7fดังนั้น
Erik the Outgolfer

โอ้ไม่ได้ตระหนักถึงสิ่งนั้น!
programmer5000

8

จริง / Jelly , 4 ไบต์

00000000: e4 81 5f 2f                                      .._/

นี่คือ hexdump (xxd) ของโปรแกรมที่ส่ง ไม่สามารถทดสอบในรูปแบบ raw ออนไลน์ได้ TIO ไม่รองรับการเข้ารหัส CP437

ที่จริง: รวม

ใช้CP 437จริง ๆ แล้วจะเห็นอักขระต่อไปนี้

Σü_/

ลองออนไลน์!

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

Σ     Take the sum on the input.
 ü    Print and empty the stack.
  _   Natural logarithm. Ignored since the stack is empty.
   /  Float division. Ignored since the stack is empty.

เยลลี่: ความแตกต่าง

เจลลี่ใช้หน้ารหัสเจลลี่จึงเห็นอักขระต่อไปนี้

ỵ¹_/

ลองออนไลน์!

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

ỵ¹_/  Main link. Argument: A (array)

ỵ     Unrecognized token. Splits the link.
 ¹    Identity; yield A.
  _/  Reduce (/) A by subtraction (_).

ฉันอ่านเป็นactually, Jelly.:)
programmer5000

คุณทำร้ายความจริงที่ว่าตัวละครที่ไม่ได้กำหนดทำหน้าที่เหมือน:)
เอริก Outgolfer

1
@EriktheOutgolfer มากหรือน้อย เพื่อความซื่อสัตย์อย่างสมบูรณ์ฉันไม่แน่ใจว่าโทเค็นที่ไม่รู้จักทำอะไร
เดนนิส

ในความคิดที่สองฉันคิดว่าคุณเพียงแค่เลือกที่จริงเพียงเพราะมันได้üมอบหมายให้ฟังก์ชั่นที่สมบูรณ์แบบ> _>
Erik the Outgolfer

@ programmer5000 jelly, actuallyมัน
Arjun


7

CJam / Jelly , 6 ไบต์

q~:-
S

CJam

q~    e# Read a list from input
:-    e# Reduce by subtraction
S     e# Push a space
      e# Implicit output

ลองออนไลน์!

วุ้น

(ใช้ UTF-8 ไม่ใช่หน้ารหัส Jelly)

q~:-คือลิงก์ผู้ช่วยเหลือ เนื่องจากมันไม่ถูกเรียกมันไม่สำคัญว่ามันจะเป็นอะไรSคำนวณผลรวมของอาร์เรย์

ลองออนไลน์!


5
แยมและเยลลี่ ทำให้รู้สึกถึงใช้สองสิ่งที่คล้ายกันเข้าด้วยกัน
mbomb007

1
สิ่งนี้ไม่ถูกต้อง วุ้นมี 0x7f สำหรับการขึ้นบรรทัดใหม่นี้มี 0x0a สำหรับการขึ้นบรรทัดใหม่ ใน Jelly q~:-½Sนี้เป็นจริงเช่นเดียวกับ น่าเสียดายที่ fix ( q~:-e#\x7fS) นั้นใหญ่กว่า ลองออนไลน์! (CJam)และลองออนไลน์! แต่ละคนมีการเข้ารหัสของตัวเองเพื่อทดสอบด้วยตัวเอง
Erik the Outgolfer

2
หรืออีกวิธีหนึ่งคุณสามารถใช้การเข้ารหัส UTF-8 สำหรับเยลลี่ซึ่งทำให้ใช้งานได้ตามที่เป็นอยู่ในปัจจุบัน แต่โปรดระบุ
Erik the Outgolfer

5

JavaScript / Cubix ขนาด 36 ไบต์

//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

ลองมัน!

ฟังก์ชัน JavaScript สามารถทดสอบได้โดยใช้ข้อมูลโค้ดด้านล่างโปรแกรม Cubix สามารถทดสอบได้ที่นี่

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

JavaScript

บรรทัดแรกคือความคิดเห็นเกี่ยวกับ JavaScript เนื่องจากมันเริ่มต้นด้วยเครื่องหมายทับสองอันดังนั้น JavaScript จะเห็นเฉพาะบรรทัดล่าง ( a=>eval(a.join`-`)) ซึ่งใช้อาร์เรย์เป็นอินพุตร่วมกับเครื่องหมายลบในระหว่างนั้นจากนั้นเรียกใช้เป็นรหัสทำให้เกิด การลบองค์ประกอบทั้งหมดในอาร์เรย์

let f=
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

console.log(f([1,2,3,4,5]))
console.log(f([3,1,4,1,5]))

Cubix

Cubix เห็นลูกบาศก์ต่อไปนี้ (สังเกตว่า Cubix ละเว้นช่องว่างทั้งหมด):

      / / .
      ! v +
      u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
      . . .
      . . .
      . . .

การเริ่มต้น

IP เริ่มต้นที่บรรทัดที่สามชี้ไปทางทิศตะวันออก มันกระทบ'I'คำสั่งซึ่งนำตัวเลขจากอินพุตและส่งไปยังสแต็ก จากนั้นจะถูกเปลี่ยนเส้นทางโดย'^'ไปที่ sum-loop

sum-ห่วง

ฉันลบอักขระทั้งหมดที่ไม่ได้เป็นส่วนหนึ่งของผลรวมและแทนที่ด้วย no-ops ( '.') IP เริ่มมาที่บรรทัดที่สองโดยชี้ไปทางทิศตะวันออก

      . . .
      ! v +
      u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

ก่อนอื่น'!'คำสั่งจะตรวจสอบองค์ประกอบยอดนิยม หากนั่นคือ0(เช่นเราได้มาถึงจุดสิ้นสุดของอินพุต) คำสั่งถัดไป ( 'v') จะถูกดำเนินการสะท้อน IP ออกจากลูป หากเรายังไม่ถึงจุดสิ้นสุดของการป้อนข้อมูลเราจะเพิ่มรายการสองอันดับแรกด้วยกัน ( '+'รายการที่สองคือผลรวมจนถึงจุดนั้นรายการด้านบนจะเป็นอินพุตใหม่) จากนั้น IP ตัดไปที่ใบหน้าอื่นของคิวบ์ลงใน'u'ตัวละครซึ่งทำให้ IP กลับมาและดำเนินการ'I'คำสั่ง (อ่านจำนวนเต็มอินพุตอื่น) ขณะที่ชี้ไปทางทิศเหนือ IP ตัดกลับไปที่ใบหน้าด้านบนข้าม'$'คำสั่งลบ ()';' ) และกลับรถอีกครั้งกลับไปยังจุดที่เราเริ่มต้น

ตอนจบ

หาก IP สะท้อนออกมาจากลูปตัวอักษรต่อไปนี้จะถูกดำเนินการ:

      . . .
      . v .
      . ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

คำแนะนำเหล่านี้ลบองค์ประกอบด้านบน (ซึ่งเป็นศูนย์) แล้วเอาท์พุทองค์ประกอบด้านบน (ผลรวม) เป็นจำนวนเต็ม จากนั้นถึง'@'คำสั่งดังนั้นโปรแกรมจึงสิ้นสุด


4

Python 2 และ 3, 33 ไบต์

lambda l,*r:l+sum(r)*(1/2>0 or-1)

รับอินพุตเป็นพารามิเตอร์แยกกัน


Python 2
Python 3


lambda l,*r:l+sum(r)*(1/2-.5)*2for 31 bytes
ovs

@ovs ฉันตั้งใจหลีกเลี่ยงการส่งคืนทุ่น หากคุณได้รับอนุญาตให้ใช้*(1/2*4-1)นั่นคือไบต์ที่น้อยกว่าของคุณ
Veedrac

ผมคิดว่าพิมพ์กลับไม่ได้เรื่องจริงๆตราบเท่าค่าที่ถูกต้อง
OVS

4

JS (ES6), CGL (CGL Golfing Language) , 32 26 ไบต์

 x=>eval(x.join`-`)
//-⨥

JS ทำการลบและ CGL ทำการเพิ่ม

JS:

x=>eval(x.join`-`)

Array#reduceฟังก์ชั่นที่ไม่ระบุชื่อที่หักแต่ละองค์ประกอบในอาร์เรย์ใช้

//-⨥

ความคิดเห็น.

CGL

 x=>eval(x.join`-`)

สิ่งที่ดูเหมือนว่าช่องว่างในบรรทัดแรกจริงๆแล้วเป็นช่องว่างไม่แตกความคิดเห็นใน CGL บรรทัดแรกจะถูกละเว้น

//-⨥

/s ทำอะไร การ-ลดลงของตัวชี้สแต็กปัจจุบันดังนั้นจึงชี้ไปที่อินพุต เพิ่มสแต็กปัจจุบัน (อินพุต) เข้าด้วยกันผลักไปที่สแต็กถัดไปและเพิ่มสแต็กปัจจุบัน มันเป็นผลลัพธ์โดยปริยาย


1
คุณสามารถย่อรุ่น JS โดยใช้x=>eval(x.join`-`)การประหยัด 5B
Luke


@ Adámคุณพูดถูก แก้ไขแล้ว.
programmer5000

4

JavaScript (ES6) / QBasic, 84 83 ไบต์

'';f=x=>eval(x.join`+`)/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/

อีกวิธีในการแฮ็คความคิดเห็น!

JavaScript คำนวณผลรวม มันใช้เวลาในอาร์เรย์ที่มีตัวเลขเป็นอินพุต returnขาออกเป็นฟังก์ชั่น alert(f([10,20,30]))คุณสามารถเรียกฟังก์ชั่นเช่น

QBasic คำนวณความแตกต่าง ขอให้ป้อนข้อมูลซ้ำ ๆ ทันทีที่คุณป้อนค่ามันจะแสดงผลต่างของตัวเลขทั้งหมดที่คุณป้อนจนถึงเวลากดปุ่มEnterและขอให้ป้อนอีกครั้ง คงไว้ซึ่งการทำเช่นเดียวกันจนกระทั่งถึงจุดจบของทุกสิ่ง


มันทำงานยังไง?

ใน QBasic (ภาษาของตระกูล BASIC ที่มีโครงสร้างไม่จำเป็นต้องมีหมายเลขบรรทัด) 'ทำเครื่องหมายจุดเริ่มต้นของความคิดเห็นที่ไปจนถึงจุดสิ้นสุดของบรรทัด ในขณะที่ JavaScript มันเป็นจุดเริ่มต้นของสตริง ดังนั้นบรรทัดแรกทั้งหมดจะถูกทำเครื่องหมายว่าเป็นความคิดเห็นใน QBasic แต่ใน JavaScript บรรทัดจะถูกดำเนินการ (และบรรทัดนี้มีส่วน JavaScript ที่เพิ่มตัวเลขรวมถึง/*ตอนท้ายที่เริ่มความคิดเห็นเพื่อซ่อนส่วนที่เหลือ ของรหัส QBasic จากตัวแปล JavaScript)

รหัสจากบรรทัดที่สองถึงบรรทัดสุดท้ายมีรหัส QBasic เพื่อคำนวณความแตกต่างของหมายเลขอินพุตทั้งหมด (รหัสนั้นอธิบายได้ด้วยตนเอง)

'*/บรรทัดสุดท้ายมี 'ทำให้ล่าม QBasic เพื่อแปลรหัสต่อไปนี้เป็นความคิดเห็นในขณะที่ JavaScript มันไม่ได้มีผลกระทบใด ๆ เพราะมันเป็นส่วนหนึ่งของความคิดเห็น (ซึ่งเริ่มต้นในตอนท้ายของบรรทัดแรก) รหัสต่อไปนี้ (*/ ) ทำให้ JavaScript สิ้นสุดความคิดเห็นซึ่งเริ่มต้นในบรรทัดแรก แต่ไม่ได้ดำเนินการใน QBasic เพราะ QBasic คิดว่าเป็นส่วนหนึ่งของความคิดเห็น


กรณีทดสอบ

JavaScript (เพิ่ม):

'';f=x=>eval(x.join`+`);/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/
console.log(f([12,5,7,2]));

QBasic (ลบ):

ไปที่เว็บไซต์นี้ คัดลอกวางรหัสต่อไปนี้ใน text-editor:

1 '';f=x=>eval(x.join`+`);/*
2 INPUT a
3 FOR i=1 TO 2
4 i=0
5 INPUT n
6 a=a-n
7 PRINT a
8 NEXT i
9 '*/

เหตุผลที่ต้องใช้หมายเลขบรรทัดคือเว็บไซต์ที่ฉันกล่าวถึงรองรับเฉพาะภาษา BASIC ที่ไม่มีโครงสร้าง และเว็บไซต์นั้นเป็นล่าม BASIC ออนไลน์ที่ดีที่ฉันสามารถหาได้ อย่างไรก็ตามการรันโค้ดที่แสดงอยู่ด้านบนของโพสต์ (โค้ดที่ไม่มีหมายเลขบรรทัด) ควรทำงานได้ดีในล่าม QBasic ที่ดีใด ๆ ที่สนับสนุน BASIC ที่มีโครงสร้างและ'เป็นความคิดเห็นเริ่มต้น


หมายเหตุ

  • นี่เป็นโพลิกแรกของฉัน! ฉันหวังว่ามันจะเป็นสิ่งที่ดี!
  • ส่วน QBasic ของรหัสไม่จำเป็นต้องใช้ENDเพราะล่ามจะไม่ไปถึงมัน! (มันจะติดอยู่ตลอดไปในวงวนไม่สิ้นสุด; มักจะขอข้อมูลเพิ่ม)

3

Brain-Flak / Brain-Flueueขนาด 20 ไบต์

({}<([({{}})]){}>{})

ลองออนไลน์! (Brain-Flak) (บวก)

ลองออนไลน์! (Brain-Flueue) (ลบ)

คำอธิบาย

ข้อแตกต่างระหว่าง Brain-Flak และ Brain-Flueue คือ Brain-Flue จะแทนที่ทั้งสองสแต็ค (เข้าก่อนออกก่อน) ที่ใช้ใน Brain-Flak ด้วยสองคิว (เข้าก่อนเข้าก่อน) โดยปกติโปรแกรมนี้ใช้ความแตกต่างนี้

รหัสข้อเขียน

(                  ) Push the sum of...
 {}                   the first input,
   <            >     zero,
                 {}   the remaining sum (see below)
    ([      ])       Push the of below line
      ({{}})         Pop all the input sans first, push the sum
              {}     Pop (in Brain-Flak, this discards the negative sum,
                            in Brain-Flueue, the positive)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.