Q, 47 ไบต์
m:{*/1_-':|(0<){y-x x bin y}[*+60(|+\)\1 0]\x}
ทดสอบ
+(i;m'i:1 2 3 4 5 6 7 8 9 42 1000 12345)
อ่านมันเป็นคู่ (i, map (m, i)) โดยที่ m คือฟังก์ชันการคำนวณและ i เป็น args ที่ต่างกัน
เขียน
1 1
2 2
3 3
4 3
5 5
6 5
7 10
8 8
9 8
42 272
1000 12831
12345 138481852236
คำอธิบาย
n funtion\arg
ใช้ฟังก์ชั่น (ฟังก์ชั่น (ฟังก์ชั่น (ฟังก์ชั่น (... ฟังก์ชั่น (args))) n ครั้ง (ภายในใช้เรียกซ้ำทัล) และส่งกลับลำดับของผลลัพธ์เราคำนวณ 60 รายการแรกของซีรีส์ Fibonnaci เป็น*+60(|+\)\1 0
ในกรณีนั้นฟังก์ชั่นคือ | +): + \ นำไปใช้กับลำดับคำนวณผลรวมบางส่วน (อดีต + \ 1 2 3 คือ 1 3 6) และ | ฝืน seq ดังนั้น 'การวนซ้ำ' แต่ละครั้งเราคำนวณผลรวมบางส่วนของจำนวนฟีโบนักชีสองก่อนหน้านี้และคืนค่าบางส่วน ผลรวมย้อนกลับ60(|+\)\1 0
สร้างลำดับ 1 0, 1 1, 2 1, 3 2, 5 3, 8 5, 13 8, 21 13, ... *+
นำไปใช้กับผลการพลิกนี้ (traspose) มันและใช้ครั้งแรกผลที่ได้คือลำดับ 1 1 2 3 5 8 13 21 34 55 ..
(cond)function\args
ใช้ฟังก์ชัน (function (.. function (args))) ในขณะที่ cond true และส่งคืนลำดับของผลลัพธ์บางส่วน
function[arg]
ใช้กับฟังก์ชั่นที่มีมากกว่าหนึ่งอาร์กิวเมนต์สร้างการฉายภาพ (แอพพลิเคชั่นบางส่วน)
เราสามารถตั้งชื่อให้กับ args ได้ แต่ชื่อโดยนัยคือ x, y, z
{y-x x bin y}[*+60(|+\)\1 0]
ประกาศแลมบ์ดากับ args x, y ด้วยการฉายบางส่วน (หาเรื่อง x คือฟีโบนักชีซีรีส์คำนวณเป็น * + 60 (| +) \ 1 0) x แทนค่าฟีโบนักชีและจำนวนที่ประมวลผล การค้นหาแบบไบนารี (bin) ใช้เพื่อค้นหาดัชนีของหมายเลขx bin y
ฟีโบนักชีมากกว่า <= y ( ) และแทนที่ค่าที่สอดคล้องกันของ x
ในการคำนวณผลิตภัณฑ์จากตัวต้านทานบางส่วนเราจะทำการย้อนกลับและคำนวณความแตกต่างของแต่ละคู่ ( -':|
) ให้วางอันแรก ( 1_
เพราะเป็น 0) และคูณด้วย ( */
)
ถ้าเรามีความสนใจในผลรวมสะสมรหัสเดียวกัน แต่มีแทน+/
*/
นอกจากนี้เรายังสามารถใช้ตัวดำเนินการ diadic อื่นแทน + หรือ *
เกี่ยวกับประสิทธิภาพการดำเนินการ
ฉันรู้ว่าในการแข่งขันครั้งนี้ไม่มีปัญหา แต่ในปัญหานี้เราสามารถหาได้ตั้งแต่ต้นทุนเชิงเส้นถึงต้นทุนเอ็กซ์โปเนนเชียล
ฉันพัฒนารุ่นที่สอง (ความยาว 48 ไบต์ไม่รวมข้อคิดเห็น) และกรณีทดสอบซ้ำแบตเตอรี่ 1,000 ครั้งทั้งสองรุ่น
f:*+60(|+\)\1 0;m:{*/1_-':|(0<){x-f f bin x}\x} /new version
เวลาดำเนินการคือ: เวอร์ชันดั้งเดิม 0'212 seg, เวอร์ชันใหม่ 0'037 seg
เวอร์ชั่นต้นฉบับจะคำนวณ fibbonaci serie หนึ่งครั้งต่อแอปพลิเคชั่น; เวอร์ชั่นใหม่คำนวณ fibonacci เพียงอันเดียว
ในการคำนวณทั้งสองกรณีของชุด fibonacci ใช้การเรียกซ้ำแบบหาง
2
-1 + 3
คำแถลงที่ถูกต้องของทฤษฎีบทของ Zeckendorf คือตัวเลขจำนวนฟีโบนักชีบวกสามารถแยกย่อยได้อย่างไม่เหมือนใครซึ่งเป็นผลรวมของตัวเลขฟีโบนัชชีแบบไม่ต่อเนื่องพร้อมดัชนีค่าบวก