คำเตือน : กำแพงข้อความใกล้เข้ามา มันเป็นลูกเล่นเล็ก ๆ ที่ฉันรวบรวมมาเมื่อเวลาผ่านไป
เขียนวิธีแก้ปัญหาของคุณเป็นบล็อกนิรนาม
สิ่งนี้ถูกกล่าวถึงแล้ว แต่ฉันต้องการจะย้ำอีกครั้ง ใน TIO คุณสามารถเขียนลงในส่วนหัวบล็อกเป็นรหัสที่เหมาะสมและเริ่มท้ายด้วยmy $f = ;สิ่งนี้ดูเหมือนจะเป็นวิธีที่สั้นที่สุดที่จะทำให้งานเสร็จ (เนื่องจากคุณไม่จำเป็นต้องสนใจอ่านข้อความใด ๆ เลยมันเป็นสิ่งที่คุณได้รับในการโต้แย้ง)
วิธีที่ดีอีกประการหนึ่งคือการใช้-nหรือ-pสวิทช์ แต่ผมไม่ได้หาวิธีที่จะทำให้การทำงานใน TIO
ใช้ไวยากรณ์ลำไส้ใหญ่สำหรับการส่งผ่านข้อโต้แย้ง
นั่นคือแทนที่จะthing.method(foo,bar)คุณสามารถทำthing.method:foo,barและบันทึก 1 ตัวอักษร น่าเสียดายที่คุณไม่สามารถเรียกวิธีอื่นในผลลัพธ์ด้วยเหตุผลที่ชัดเจนดังนั้นจึงเหมาะสมที่จะใช้สำหรับวิธีสุดท้ายในบล็อกเท่านั้น
ใช้$_มากเท่าที่คุณสามารถ
บางครั้งการใช้อาร์กิวเมนต์รายการเดียวจะดีกว่าหลายอาร์กิวเมนต์ เมื่อมีการเข้าถึง$_คุณอาจเรียกวิธีการที่มันเพียงแค่เริ่มต้นด้วยจุด: เช่นจะมีค่าเท่ากับ.sort$_.sort
อย่างไรก็ตามโปรดทราบว่าแต่ละบล็อกได้รับเป็นของตัวเอง$_ดังนั้นพารามิเตอร์ของบล็อกด้านนอกจะไม่แพร่กระจายไปยังด้านใน หากคุณต้องการเข้าถึงพารามิเตอร์ของฟังก์ชั่นหลักจากบล็อกด้านใน ...
ใช้^ตัวแปรหากคุณไม่สามารถใช้ได้$_
แทรกระหว่างเครื่องหมายและชื่อตัวแปรเช่นนี้^ $^aใช้งานได้เฉพาะภายในบล็อกเท่านั้น คอมไพเลอร์จะนับจำนวนของสิ่งเหล่านี้ที่คุณมีในบล็อกเรียงลำดับพจนานุกรมและจากนั้นกำหนดอาร์กิวเมนต์แรกให้กับอาร์กิวเมนต์แรกหนึ่งในสองและหนึ่งต่อไป ^ความต้องการที่จะนำมาใช้เฉพาะในการเกิดขึ้นครั้งแรกของตัวแปร ดังนั้น{$^a - $^b}ใช้ 2 สเกลาร์และลบออก สิ่งเดียวที่สำคัญคือลำดับตัวอักษรดังนั้น{-$^b + $^a}สิ่งเดียวกัน
หากคุณเคยรู้สึกว่าการใช้ไวยากรณ์บล็อกแหลม (เช่น->$a,$b {$a.map:{$_+$b}}) คุณจะดีกว่าการเขียนคำสั่งปลอมที่จุดเริ่มต้นของบล็อกโดยใช้^สำหรับแต่ละอาร์กิวเมนต์ที่คุณจะไม่ใช้ในบล็อกหลัก (เช่น{$^b;$^a.map:{$_+$b}}) (หมายเหตุ) วิธีที่ดีกว่าในการเล่นกอล์ฟนี่คือ{$^a.map(*+$^b)}ฉันแค่อยากอวดคอนเซ็ปต์)
ผู้ประกอบการมีประสิทธิภาพมากและบ่อยครั้งที่พวกเขาเป็นวิธีที่สั้นที่สุดในการทำสิ่งต่างๆให้สำเร็จ โดยเฉพาะอย่างยิ่งผู้ประกอบการเมตา (ผู้ประกอบการที่ใช้ประกอบเป็นอาร์กิวเมนต์) [], [\], X, <</ >>และZมีความคุ้มค่าของความสนใจของคุณ อย่าลืมว่า meta-op สามารถใช้ meta-op อื่นเป็นอาร์กิวเมนต์ (เช่นXZ%%ฉันจัดการให้ใช้ที่นี่ ) คุณสามารถใช้>>วิธีการโทรด้วยซึ่งอาจมีราคาถูกกว่าแผนที่ ( @list>>.methodแทนที่จะเป็น@list.map(*.method)แต่ควรระวังพวกเขาไม่เหมือนกัน! ) และสุดท้ายก่อนที่คุณจะใช้เลขฐานสอง<< >>โปรดจำไว้ว่าZบ่อยครั้งที่จะทำสิ่งเดียวกันในตัวละครน้อยลง
หากคุณกองจำนวนมาก meta-Ops บนแต่ละอื่น ๆ []คุณสามารถระบุลำดับความสำคัญการใช้วงเล็บ ที่จะช่วยคุณประหยัดเมื่อคุณพะเนินเทินทึกผู้ประกอบการจำนวนมากว่ามันสับสนคอมไพเลอร์ (นั่นไม่ได้เกิดขึ้นบ่อยมาก)
สุดท้ายถ้าคุณต้องการสิ่งที่จะบีบบังคับ Bool, Int หรือ Str ไม่ได้ใช้วิธีการ.Bool, .Intและ.Strแต่ผู้ประกอบการ?, และ+ ~หรือดีกว่าเพียงแค่วางมันลงในนิพจน์ทางคณิตศาสตร์เพื่อบังคับให้พวกมันเข้าสู่ Int เป็นต้น +@listทางที่สั้นที่สุดที่จะได้รับความยาวของรายการคือ หากคุณต้องการคำนวณ 2 ถึงความยาวของรายการเพียงแค่พูด2**@listและมันจะทำสิ่งที่ถูกต้อง
ใช้ตัวแปรรัฐอิสระ$, @และ%
ในแต่ละบล็อกเกิดขึ้นของทุก$(หรือ@หรือ%) หมายถึงสเกลาเงาใหม่ (หรืออาร์เรย์หรือกัญชา) รัฐตัวแปร (ตัวแปรที่มีค่ายังคงมีอยู่ทั่วโทรไปยังบล็อก) หากคุณต้องการตัวแปรสถานะที่จำเป็นต้องอ้างอิงเพียงครั้งเดียวในซอร์สโค้ดทั้งสามนี้เป็นเพื่อนใหญ่ของคุณ (ส่วนใหญ่มักจะเป็น$.) ยกตัวอย่างเช่นในวงจรย้อนกลับคณิตศาสตร์$++%6ท้าทายก็สามารถนำมาใช้ในการเลือกผู้ประกอบการจะวนจากอาร์เรย์ซึ่งได้รับการจัดทำดัชนีโดย
ใช้รูปแบบย่อยmap, grepet al,
นั่นหมายความว่า: ทำค่อนข้างกว่าmap {my block},list list.map({my block})แม้ว่าคุณจะสามารถใช้งานได้list.map:{my block}สองวิธีนี้จะมีจำนวนไบต์เท่ากัน และบ่อยครั้งที่คุณจะต้องวงเล็บรายการเมื่อเรียกวิธีการ แต่ไม่เมื่อเรียกย่อย ดังนั้นวิธีการย่อยออกมาดีกว่าหรืออย่างน้อยก็เหมือนกับวิธีที่หนึ่ง
ยกเว้นอย่างเดียวที่นี่คือเมื่อวัตถุซึ่งจะmapped, grepped และอื่น ๆ $_ที่อยู่ใน จากนั้นเห็นได้ชัดเต้น.map:{}map {},$_
ใช้ทางแยก ( &และ|) แทนและ&&||
เห็นได้ชัดว่าพวกมันสั้นลง 1 ไบต์ ในทางกลับกันพวกเขาจะต้องยุบตัวโดยถูกบังคับให้เข้าสู่บริบทบูลีน สิ่งนี้สามารถทำได้ด้วย?เสมอ ที่นี่คุณควรทราบ meta-op !opที่บังคับให้บริบท bool ใช้opและคัดค้านผลลัพธ์
หากคุณมีรายการและคุณต้องการที่จะเปิดเป็นชุมทางที่ไม่ได้ใช้และ[&] [|]แทนที่จะใช้และ.any .allนอกจากนี้ยังมี.noneสิ่งที่ไม่สามารถลอกเลียนแบบได้ง่ายโดยจุดเชื่อมต่อ
say (3² + 4², 2²⁰, 5⁻²)(25 1048576 0.04)รายการที่สมบูรณ์ของ Unicode คุณสามารถละเมิดเช่นนี้อยู่ที่นี่: docs.perl6.org/language/unicode_texas