คำนำหน้าไม่ระบุชื่อแลมบ์ดา ส่งคืนเนื้อความโปรแกรม
{
1=≢⍵:⍕⍵ ⍝ single element
(2=≢⍵)∧(⍵[2]=11×⍵[1]):⍕⍵[1] ⍝ 2, 22 etc.
1=≢∪⍵:'⊢',⍕⊃⍵ ⍝ all the same
(⊢≡⊃×⍳∘≢)⍵:'+',⍕⊃⍵ ⍝ linear
((⌊=⊢)!⍣¯1⊢⊃⍵)∧(1∧.=1↓⍵):'!',⍕!⍣¯1⊃⍵ ⍝ factorial followed by all 1s
(⍵[2]∧.=1↓⍵)∧(⍵[1]=10|2⊃⍵):(⍕⊃⍵),'⌈',(⊃⍕2⊃⍵) ⍝ b ab ab ab
e←{∊⍉2 2⍴'+×',⍕¨⍵}¨⍸(⊃⍵)=∘.×⍨⍳10
b←⍵∘≡¨e(({0::⍬ ⋄ ⍎⍵}¨,\)⍴∘⊂)¨⍨(≢⍵)
∨/b:⊃b/e
Q←{'''',⍨⍵/⍨1+''''=⍵}
(5∧.≤⍵)∧(≢⍕⍵)>6+(+/14=⍵)+≢⍵:'{⍺←⎕AV⍳⊃⋄1⌽⍺⊢⍵}''',Q ⎕AV[⍵] ⍝ string fallback
(≢⍕⍵)>9+(+/5=⍵)+≢⍵:'{⍺←¯4+⎕AV⍳⊃⋄1⌽⍺⊢⍵}''',Q ⎕AV[4+⍵] ⍝ offset string fallback
'{⍺←⊃⋄1⌽⍺⊢⍵}',⍕⍵ ⍝ fallback
}
ลองออนไลน์!
วิธีการ
วิธีนี้จะสำรวจวิธีการต่าง ๆ และคืนค่าวิธีการแรกที่ใช้งานได้ในที่สุดก็กลับไปใช้วิธีการที่ใช้ได้
องค์ประกอบเดียว
หากรายการมีองค์ประกอบเดียวก็จะถูกส่งกลับตามสภาพ
2, 22 เป็นต้น
หลักเดียวสามารถทำซ้ำเพื่อสร้างจำนวนที่ใหญ่กว่า 11 เท่า
เหมือนกันทั้งหมด
เราแค่ส่งคืนหมายเลข rightmost ( ⊢
)
เชิงเส้น
f (n) = k × nลำดับเพียงใส่เครื่องหมายบวกก่อนเทอมแรก
แฟคทอเรียลตามด้วย 1s ทั้งหมด
เมื่อจำนวนแรก n =! m และตัวเลขที่ตามมาเป็น 1 แล้ว!m
เป็นทางออกเพราะ!m
เป็น n และm!m
เป็น 1 และ!1
เป็น 1
b ab ab ab
เนื่องจากตัวเลขสองหลักทั้งหมดมีขนาดใหญ่กว่าตัวเลขหลักเดียวทั้งหมดค่าสูงสุดที่ใช้งานซึ่งด้านหน้าของหมายเลขแรกถูกจับที่ด้านหลังของตัวเลขที่สองจึงเป็นวิธีแก้ปัญหา
รหัสสามบรรทัด
ตรวจสอบว่าสูตรประเภทใด ๆ ที่+a×b
ถูกต้อง
สตริงทางเลือก
ลำดับยาวที่ไม่มีตัวเลขต่ำกว่า 5 (เนื่องจาก 4 เป็นตัวแบ่งบรรทัด) สามารถเข้ารหัสเป็นอักขระของ SBCS
ทางเลือกสตริงออฟเซ็ต
หากมีตัวเลขต่ำกว่า 5 เราจะเลื่อนขึ้น 9 เพื่อหลีกเลี่ยง
รั้งท้าย
การต่อสตริงอย่างง่ายของสตริง"{⍺←⊃⋄1⌽⍺⊢⍵}"
และอินพุต stringified ( ⍕
) เช่นผลตอบแทนร่างกายโปรแกรม[3,1,4]
{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
ส่วนในวงเล็บปีกกาเป็นฟังก์ชั่นเด็ดขาดซึ่งหมายความว่ามันอาจเป็นได้ทั้งฟังก์ชั่นคำนำหน้าหรือฟังก์ชั่นมัด ดังนั้นอินสแตนซ์ทางซ้ายสุดของมันจะทำงานในโหมดส่วนนำหน้าและส่วนอื่น ๆ ทั้งหมดในโหมด infix ความแตกต่างระหว่างโหมดคือการระบุว่า⍺
อาร์กิวเมนต์ซ้ายมีค่าหรือไม่ หากไม่เป็นเช่นนั้นจะมีการกำหนดฟังก์ชั่น⊃
(ก่อน)
คำอธิบายของวิธีการทางเลือก
{
… }
แลมบ์ดานิรนาม:
⍺←⊃
หากไม่มีข้อโต้แย้งเหลือ ( ⍺
) กำหนดฟังก์ชั่น⊃
(ก่อน) เพื่อ⍺
⋄
แล้ว:
ณ จุดนี้รหัสต่อไปนี้หมายถึงสองสิ่งที่แตกต่างกันขึ้นอยู่กับว่า⍺
เป็นรายการหมายเลข (การเรียกใช้แบบ infix) หรือฟังก์ชัน "first" (การเรียกคำนำหน้า)
หาก⍺
เป็นรายการหมายเลข:
⍺⊢⍵
ทิ้งอาร์กิวเมนต์ซ้ายเพื่อสนับสนุนอาร์กิวเมนต์ที่ถูกต้อง
1⌽
หมุนไปทางซ้ายหนึ่งก้าว
ถ้า⍺
เป็นฟังก์ชั่น "first":
⊢⍵
ให้ผลอาร์กิวเมนต์ที่ถูกต้อง
⍺
เลือกองค์ประกอบแรกของที่
1⌽
หมุนหนึ่งขั้นตอน (ไม่ต้องใช้สเกลาร์)
ตัวอย่าง run of fallback method
การ3 1 4
เรียกใช้โค้ด ' {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
, กำหนดฟังก์ชัน "first" ให้กับ⍺
และส่งคืนองค์ประกอบแรก 3
.
การดำเนินการ{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
ให้แลมบ์ดาทางขวาสุด "จับ" ด้านซ้าย3 1 4
เป็นอาร์กิวเมนต์ซ้ายดังนั้นจึง⍺
มีค่าที่ถูกทิ้งในความโปรดปราน3 1 4
ซึ่งจะหมุนไปทางซ้ายหนึ่งขั้นและให้1 4 3
ผลลัพธ์ สิ่งนี้ถูกใช้เป็นอาร์กิวเมนต์เพียงอย่างเดียวกับแลมบ์ดาซ้ายสุดซึ่ง⍺
จะกลายเป็นฟังก์ชัน "แรก" ซึ่งทำให้ผลลัพธ์เป็นองค์ประกอบแรก 1
.
การดำเนินการ{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
ช่วยให้ขวาสุดแลมบ์ดา "จับ" ตรงกลาง3 1 4
เป็นอาร์กิวเมนต์ซ้ายซึ่งถูกยกเลิกแล้วในความโปรดปรานของการโต้แย้งที่เหมาะสมซึ่งเมื่อหมุนหนึ่งก้าวซ้าย3 1 4
1 4 3
นี่ใช้เป็นอาร์กิวเมนต์ที่ถูกต้องของแลมบ์ดากลางพร้อมกับซ้ายสุด3 1 4
เป็นอาร์กิวเมนต์ซ้าย 4 3 1
อาร์กิวเมนต์ซ้ายจะถูกยกเลิกสิทธิซึ่งหมุนหนึ่งอัตราผลตอบแทนขั้นตอนที่เหลือ สิ่งนี้จะกลายเป็นอาร์กิวเมนต์เพียงอย่างเดียวของแลมบ์ดาซ้ายสุดดังนั้นจึง⍺
กลายเป็น "ฟังก์ชันแรก" ส่งคืนองค์ประกอบแรก 4
.
เกณฑ์การให้คะแนน
เมื่อถึงเวลาที่ต้องทำการทดสอบโดยใช้ข้อมูลจริงให้ใช้ชุดควบคุมการทดสอบนี้ (เชื่อมโยงกับข้อมูลที่มีการทดสอบก่อน) กรณีทดสอบไปในฟิลด์อินพุตและเอาต์พุตจะนับรวมทั้งหมดของ 500 โปรแกรมด้วยกัน (นอกจากนี้ยังจะโยนข้อผิดพลาด แต่เป็นเพียงเพราะหลังจากนั้นพยายามประเมินอินพุตตาม -)