PowerShell ขนาด 84 ไบต์
param([char]$a,$b)($b[($c=$b.length)..0],$b[0..$c])[$a%7-eq6]-join("","`n")[90-lt$a]
นี่จะเป็นการพูดพล่อยๆที่ไม่สมบูรณ์สำหรับผู้ที่ไม่คุ้นเคยกับ PowerShell ไปกันเถอะ
จะเข้ากับนักแสดงอย่างชัดเจนกับตัวละครสำหรับparam([char]$a,$b)
$a
ส่วนที่เหลือของโปรแกรมคือคำสั่งเดียว -join
เราจะเริ่มต้นกับช่วงครึ่งปีแรกขึ้นไป
เรากำลังสร้างอาร์เรย์แบบไดนามิกใหม่และการจัดทำดัชนีลงไปด้วย(...,...)
$a%7-eq6
ค่า ASCII สำหรับv
และ>
เป็น116
และ62
ตามลำดับและ116%7 = 62%7 = 6
และเป็นสองทิศทางที่ "เพิ่ม" ลงและไปทางขวา ดังนั้นถ้าว่า-eq
เป็น$true
เราจะใช้ค่าที่สองซึ่งเป็น$b[0..$c]
หรืออาร์เรย์ของตัวละครที่$b
ขึ้นไปยังจุดสิ้นสุด เราได้รับค่า$c
จากค่าแรก$b[($c=$b.length)..0]
ซึ่งจะได้รับการคัดเลือกถ้าอินพุตถ่านเป็น^
หรือ<
(เช่นดังนั้นมันจะผ่านสตริงไปข้างหลัง) สิ่งสำคัญที่ควรทราบคือแม้ว่าจะมีการเลือกค่าที่สองแล้ว แต่$c
ค่านั้นยังคงคำนวณและจัดเก็บไว้ดังนั้นเราจึงสามารถใช้ค่านี้เป็นทางลัดเช่นนี้ได้อีกครั้ง
ดังนั้นตอนนี้เรามีตัวละครมากมายไม่ว่าจะไปข้างหน้าหรือข้างหลัง จากนั้นเราก็-join
อักขระเหล่านั้นพร้อมกับผลลัพธ์ของดัชนีอาร์เรย์แบบไดนามิกอื่น ครั้งนี้เรากำลังเลือกโดยพิจารณาว่าค่า ASCII สำหรับ$a
นั้นต่ำกว่า90
หรือไม่ (ค่าจริง ๆ จะใช้งานได้จริงฉันเลือกอันนี้เพราะ) เนื่องจาก>
และ<
ทั้งสองมีค่าด้านล่าง90
, -lt
คือ$false
, ดังนั้นเราจึงเลือกสตริงที่ว่างเปล่า""
, และดังนั้น char-array จึงถูกต่อกัน มิฉะนั้นเราจะเลือกอักขระขึ้นบรรทัดใหม่"`n"
เพื่อเข้าร่วม char-array พร้อมกับการขึ้นบรรทัดใหม่
สตริงผลลัพธ์นี้ถูกทิ้งไว้บนไพพ์ไลน์และเอาต์พุตเป็นค่าปริยาย
ตัวอย่าง
PS C:\Tools\Scripts\golfing> .\orthogonal-orientation.ps1 "^" "TimmyD"
D
y
m
m
i
T