การใช้การวนซ้ำเพื่อคำนวณลำดับ
โดยทั่วไปแล้วการแก้ไขความท้าทายลำดับ 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 แล้วไม่สนใจที่จะกลับผลมาจากการnf 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