คำเตือน : กำแพงข้อความใกล้เข้ามา มันเป็นลูกเล่นเล็ก ๆ ที่ฉันรวบรวมมาเมื่อเวลาผ่านไป
เขียนวิธีแก้ปัญหาของคุณเป็นบล็อกนิรนาม
สิ่งนี้ถูกกล่าวถึงแล้ว แต่ฉันต้องการจะย้ำอีกครั้ง ใน 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
, grep
et al,
นั่นหมายความว่า: ทำค่อนข้างกว่าmap {my block},list
list.map({my block})
แม้ว่าคุณจะสามารถใช้งานได้list.map:{my block}
สองวิธีนี้จะมีจำนวนไบต์เท่ากัน และบ่อยครั้งที่คุณจะต้องวงเล็บรายการเมื่อเรียกวิธีการ แต่ไม่เมื่อเรียกย่อย ดังนั้นวิธีการย่อยออกมาดีกว่าหรืออย่างน้อยก็เหมือนกับวิธีที่หนึ่ง
ยกเว้นอย่างเดียวที่นี่คือเมื่อวัตถุซึ่งจะmap
ped, grep
ped และอื่น ๆ $_
ที่อยู่ใน จากนั้นเห็นได้ชัดเต้น.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