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