นี่คือหัวของฉัน:
\ /-- -|
/ -\ | | |
\ \ \ \ |
--\ | \ | |
/ |--| / / |
/|- //--| / |
| | || //\ |
| \ /| // \ |
มันประกอบด้วยขนแปดเส้นอย่างแน่นอน ผมของฉันยาวเกินไป โปรดตัดความยาวแต่ละเส้นที่ฉันระบุ
อินพุต
แหล่งท่องเที่ยวหลักในส่วนนี้คือศีรษะของผมจริง นี่คือการแสดงกราฟิกสีตามรหัสพร้อมกับอนิเมชั่นสำหรับคนขี้เกียจ:
และนี่เป็นข้อมูลจำเพาะเต็มรูปแบบสำหรับชุดของเส้นขน:
- ขนของแต่ละบุคคลซึ่งเราจะเรียกเส้นจะถูกทำออกมาจาก
/
,\
,|
และ-
อักขระ ASCII ที่รู้จักกันต่อจากนี้ไปเป็นอะตอม - ทั้งหัวของได้ยิน (ทุกเส้นรวม) จะเป็น
c
คอลัมน์โดยr
แถวที่c
≥ 1 และr
≥ 2 - แต่ละเส้นจะ ...
- เริ่มที่แถวสุดท้ายของส่วนหัว (แถว
r
- 1) - มีความยาว
l
ที่l
≥ 2
- เริ่มที่แถวสุดท้ายของส่วนหัว (แถว
- อาจถูกแยกวิเคราะห์ด้วยวิธีการต่อไปนี้:
- เริ่มต้นที่ด้านล่างของสาระ นี่จะเป็น
/
,|
หรือ\
, ซึ่งเราจะเรียกรูต (มีการแยกวิเคราะห์เส้นจากซ้ายไปขวาจัดเรียงตามรูท) - ค้นหาอะตอมที่ชี้ไปที่รูต
|
อะตอมชี้ขึ้นและลง-
จุดอะตอมซ้ายและขวา ( แต่ไม่สามารถชี้ไปที่รากตั้งแต่รากจะไม่สามารถอยู่ในแถวล่าง)/
จุดอะตอมซ้ายขึ้นและลงขวาและ\
อะตอมไม่ตรงข้าม- จะมีอะตอมหนึ่งตัวที่ชี้ไปยังอะตอมรูตเสมอ
- ค้นหาอะตอมที่ไม่ได้ใช้งาน (อันที่ยังไม่ได้เป็นส่วนหนึ่งของสาระการเรียนรู้) ที่ชี้ไปยังอะตอมนี้และไม่ต่ำกว่าอะตอมนี้ (ขนไม่สามารถงอกลงมาด้านล่างได้
- หากมีศูนย์คุณถึงจุดสิ้นสุดของเส้น!
- หากมีอย่างใดอย่างหนึ่งนี่คืออะตอมถัดไปของสาระ ทำซ้ำขั้นตอนที่ 3 ด้วยอะตอมนี้ (อะตอมนี้ถูกทำเครื่องหมายเป็น "ใช้แล้ว" เพื่อจุดประสงค์ของขั้นตอนที่ 3 เนื่องจากเป็นส่วนหนึ่งของกลุ่มสาระ)
- จะไม่มีอะตอมที่ไม่ได้ใช้งานอยู่ที่นี่ทุกจุดในหัว
- เริ่มต้นที่ด้านล่างของสาระ นี่จะเป็น
รูปแบบการป้อนข้อมูลจะเป็น:
- หัวผม สามารถป้อนตามที่เป็น (อินพุตหลายบรรทัดด้วยการขึ้นบรรทัดใหม่ตามตัวอักษร) หรือด้วยตัวคั่นที่คุณเลือกแทนบรรทัดใหม่ โปรดทราบว่าหัวจะเป็นรูปสี่เหลี่ยมผืนผ้าเสมอ เช่นช่องว่างต่อท้ายจะถูกเพิ่มตามความจำเป็น (ผมเส้นตรงที่ด้านขวาเป็นเพียงการกำจัดช่องว่างต่อท้ายพิเศษเพื่อหลีกเลี่ยงความสับสน)
- ตัวเลข≥ 1 ระบุจำนวนเส้นผมที่จะตัดผม จะอธิบายรายละเอียดในส่วนถัดไป
คุณอาจยอมรับอินพุตให้กับฟังก์ชั่นใช้ STDIN / STDOUT ฯลฯ (อะไรก็ได้ที่สมเหตุสมผล )
เอาท์พุต
เอาท์พุทของคุณจะเป็นหัวของผมด้วยการใช้ทรงผม ในการตัดผมให้ลดความยาวของเส้นผมแต่ละเส้นตามจำนวนที่ระบุ (ซึ่งจะเป็น 1 หรือมากกว่านั้น) โดยเริ่มจากจุดสิ้นสุดของเส้นผมที่เคลื่อนที่ไปยังราก แต่มักจะออกรากเหมือนเดิม!
นี่คือตัวอย่างง่ายๆ พูดอินพุตสำหรับหัวคือ
\
/
|
|
ด้วยอินพุตที่สองของ2
คุณจะตัดอะตอมสองอันจากเกลียวคลื่นและได้ผลลัพธ์
|
|
และด้วยอินพุตของ42
เอาต์พุตก็จะเป็นเช่นนั้น
|
โปรดทราบว่าช่องว่างก่อนและหลังศีรษะไม่เกี่ยวข้องอย่างสมบูรณ์; คุณสามารถตัดบรรทัดใหม่พิเศษหรือเพิ่มช่องว่างภายในเพิ่มเติม มันไม่สำคัญตราบใดที่ศีรษะยังคงอยู่เหมือนเดิม (คุณอาจทำทุกอย่างที่คุณต้องการด้วยการเว้นวรรคตามด้วย)
กรณีทดสอบ
สำหรับกรณีทดสอบทั้งหมดจะมีการใช้ตัวอย่างที่แสดงในตอนต้นของโพสต์นี้
ความยาวตัดผม = 1:
/- |
/ \ | |
\ \ \ \ |
--\ | \ | |
/ |-- / / |
|- //--| / |
| | || // |
| \ /| // \ |
ความยาว 3:
|
\ |
--\ | \ |
/ |-- / / |
|- // | / |
| || // |
| \ /| // \ |
ความยาว 7:
|- / |
| | / |
| \ /| // \ |
ความยาว 1337:
| \ /| // \ |
เกณฑ์การให้คะแนน
นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ!
-
ในเส้นที่สามจากจุดซ้ายที่|
ในเส้นที่สี่จากทางซ้าย
-
ไม่ใช่สิ่งที่จะชี้ไปที่ ยกตัวอย่างเช่น|
ไม่ได้ชี้ไป/
ในสาระแรก /
แต่มันเป็นสิ่งที่ชี้ไปตาม (ใช่ฉันรู้ว่ามันสับสนฉันต้องทำซ้ำ GIF หลายครั้งเพราะฉันสับสนแม้กระทั่งตัวเอง!) วิธีที่ง่ายกว่าที่จะเข้าใจสิ่งนี้อาจเป็นเพียงการดูที่ด้านบนของสาระที่สอง
-
ควรจะเข้าร่วมกับสาระที่สี่ไม่ใช่ที่สาม