JḟЀ `ị⁸Ṃ€
ṙJṖ€Ṃ€
ṙJṖ« / อาร์กิวเมนต์: 1D array (z)
J [1,2,3, ... , len (z)]
ṙหมุน z ตามจำนวนข้างต้นแต่ละรายการ (อาร์เรย์ปัจจุบันคือ 2D)
Ṗลบอาร์เรย์สุดท้าย
« / ลดจำนวนขั้นต่ำ [impliclitly vectorized]
ลองออนไลน์!
ตรวจสอบทั้งหมดของพวกเขาในครั้งเดียว! (แก้ไขเล็กน้อย)
ฉันค่อนข้างมั่นใจว่าเดนนิสสามารถตีกอล์ฟนี้ได้
มันทำงานอย่างไร
อัลกอริทึมค่อนข้างซับซ้อน [4,2,2,5]
ให้เราสังเกตสิ่งนี้ไม่ให้
ประการแรกเราใช้จะได้รับJ
[1,2,3,4]
โปรดทราบว่า Jelly ใช้การจัดทำดัชนี 1 ครั้ง
ṙ
จากนั้นเราจะเห็น มันต้องใช้สองข้อโต้แย้ง: อาร์เรย์และจำนวนเต็ม มันจะหมุนอาร์เรย์ไปทางซ้ายตามจำนวนที่ระบุโดยจำนวนเต็ม ที่นี่ṙ
จะเห็น[4,2,2,5]
ทางซ้ายและ[1,2,3,4]
ทางขวาของมัน (เพิ่มเติมเกี่ยวกับวิธีการทำงานนี้สามารถพบได้ในการกวดวิชา ) ใน Jelly คำสั่ง vectorize โดยนัย ดังนั้นคำสั่งนี้จะถูกดำเนินการผ่านแต่ละองค์ประกอบทางด้านขวาซึ่งเป็นสาเหตุที่เราจะสร้างอาร์เรย์ 2D:
ดังนั้น[4,2,2,5]ṙ[1,2,3,4]
กลายเป็น[[4,2,2,5]ṙ1,[4,2,2,5]ṙ2,[4,2,2,5]ṙ3,[4,2,2,5]ṙ4]
ซึ่งกลายเป็น:
[[2,2,5,4]
[2,5,4,2]
[5,4,2,2]
[4,2,2,5]]
โปรดสังเกตว่าองค์ประกอบดั้งเดิมอยู่ในแถวสุดท้ายเนื่องจากในแถวนั้นเราหมุนไปทางซ้ายด้วยจำนวนเท่ากับความยาวของอาร์เรย์ซึ่งเป็นสาเหตุที่เราใช้Ṗ
ถัดไปเพื่อลบแถวนั้นออกเพื่อให้คอลัมน์เป็นคอลเล็กชันของ องค์ประกอบของอาร์เรย์ที่ไม่ได้อยู่ที่ดัชนีปัจจุบัน:
[[2,2,5,4]
[2,5,4,2]
[5,4,2,2]]
การดำเนินการต่อไปนี้«/
ยังค่อนข้างซับซ้อน ประการแรก«
คืนค่าต่ำสุดของตัวเลขทั้งสองที่เห็นทางด้านซ้ายและด้านขวา ตัวอย่างเช่นผลตอบแทน5«3
3
ทีนี้ถ้าอาร์กิวเมนต์ทั้งสองเป็นอาร์เรย์แล้วมันจะเป็นเวกเตอร์ดังที่ฉันได้กล่าวไว้ สิ่งนี้หมายถึงว่ามัน[1,5,2,3]«[4,1,5,2]
จะกลายเป็นซึ่งเป็น[1«4,5«1,2«5,3«2]
[1,1,2,2]
ตอนนี้/
คือreduce
ซึ่งหมายความว่าเราทำการดำเนินการผ่านแต่ละแถวจนถึงจุดสิ้นสุด ยกตัวอย่างเช่น[1,2,3,4]+/
จะกลายเป็นซึ่งเป็นผลรวมของอาร์เรย์((1+2)+3)+4
[1,2,3,4]
ดังนั้นถ้าเราใช้«/
กับอาร์เรย์ 2 มิติที่เราเพิ่งได้รับเราจะได้:
([2,2,5,4]«[2,5,4,2])«[5,4,2,2]
ซึ่งเนื่องจาก vectorization จะเท่ากับ:
[2«2«5,2«5«4,5«4«2,4«2«2]
ซึ่งคำนวณค่าต่ำสุดของทุกอาร์เรย์โดยไม่มีองค์ประกอบที่ดัชนี
[4 3 2 2 5]
ส่งออก?