การใช้การวนซ้ำเพื่อคำนวณลำดับ
โดยทั่วไปแล้วการแก้ไขความท้าทายลำดับ OEIS จะต้องใช้สูตรใดสูตรหนึ่งที่ให้ไว้ในหน้า บางส่วนของสิ่งเหล่านี้ปรับตัวได้ดีสำหรับ J และอื่น ๆ ไม่มาก สูตรเรียกซ้ำเป็นแบบตรงไปตรงมาอย่างไรก็ตามการทำซ้ำอาจไม่ง่าย รูปแบบที่ฉันเริ่มใช้คือ
(s(]f)^:[~]) n
] Gets n
s The first value in the sequence
~ Commute the argument order, n is LHS and s is RHS
[ Gets n
^: Nest n times with an initial argument s
(]f) Compute f s
Returns (f^n) s
โดยที่s
เป็นค่าแรกในลำดับf
เป็นคำกริยาที่จะคำนวณคำถัดไปที่กำหนดคำก่อนหน้านี้และn
เป็นดัชนี zero-based ของคำที่คุณต้องการคำนวณ วิธีนี้อาศัยข้อเท็จจริงที่ว่าเมื่อคำนวณพลังของ dyad LHS จะผูกพันกับ dyad เพื่อสร้าง monad ใหม่และ monad นั้นซ้อนอยู่บนค่าเริ่มต้น คู่ให้กับคำวิเศษณ์อำนาจเป็นเบ็ดที่(]f)
จะได้รับดัชนีn
ใน LHS s
และคุณค่าของคำที่อยู่ในลำดับที่ เบ็ดจะนำไปใช้f
ในการs
เป็น monad แล้วไม่สนใจที่จะกลับผลมาจากการn
f s
ห้องสมุดมาตรฐาน
บางครั้งคุณอาจพบว่าเจจะมีการสนับสนุนสำหรับคำกริยาในของห้องสมุดมาตรฐาน ตัวอย่างเช่นการดำเนินการจำนวนเต็ม bitwise ส่วนใหญ่ถูกผูกไว้กับชื่อที่สั้นกว่าการใช้การโทรดั้งเดิม
AND =: (17 b.) NB. it is actually '$:/ :(17 b.)'
มีวันที่และเวลาในตัว
ช่วง
หากคุณมีชุดของค่า[a, b, c]
และคุณต้องการจัดรูปแบบช่วงโดยยึดตามผลิตภัณฑ์ของพวกเขา[0, 1, 2, ..., a*b*c-1]
วิธีการทั่วไปก็คือการค้นหาผลิตภัณฑ์ของพวกเขาแล้วสร้างช่วงที่อาจมี[:i.*/
ค่าใช้จ่าย 6 ไบต์ วิธีที่สั้นกว่าคือ,@i.
4 ไบต์เนื่องจากi.
สามารถสร้างอาร์เรย์หลายมิติในขณะที่ยังคงนับและแบนมันจะสร้างช่วงที่เทียบเท่า
การพิมพ์อย่างต่อเนื่อง
วิธีโดยปริยายในการพิมพ์ค่าและใช้งานต่อไปโดยไม่ต้องวนซ้ำอย่างชัดเจน([echo)
สำหรับกรณี monadic echo
เป็นคำกริยาในไลบรารีมาตรฐานที่พิมพ์เนื้อหาstdout
ในรูปแบบเดียวกับที่ใช้ในล่าม จากนั้นตะขอผ่านค่าอินพุตเดียวกันโดยใช้[
กริยาซ้าย
ฐาน 10 หลักของจำนวนเต็ม
วิธีมาตรฐานในการรับฐาน 10 หลักของจำนวนเต็มมี10#.inv]
ค่า 8 ไบต์มากเกินไป! อีกทางเลือกหนึ่งคือการแปลงเป็นสตริงและแยกวิเคราะห์ที่อันดับ 0 "."0@":
ซึ่งช่วยประหยัดไบต์ แต่วิธีที่ดีกว่าคือการ,.&.":
ประหยัดไบต์อื่นซึ่งทำให้ต้นทุน 6 ไบต์สุดท้ายเป็น 8 แทน
GolfScript gets its own way far too often
ในปี 2019