ความท้าทายนี้เป็นแรงบันดาลใจอย่างอิสระโดย Zachtronics เกมInfinifactory
คุณจะได้รับมุมมองจากบนลงล่างของตารางสี่เหลี่ยมของสายพาน, >v<^
ตัวแทนจาก อาจมีเซลล์ที่ไม่มีสายพานแสดงด้วยช่องว่าง นี่คือตัวอย่าง:
> <vv <
v ^ >v v
>v^^>vv^
^>^ v
> v<v >>
>v v<^
การตั้งค่านี้ล้อมรอบด้วยปริภูมิจำนวนอนันต์
ยิ่งไปกว่านั้นคุณจะได้รับขนาดของชิ้นส่วนรูปสี่เหลี่ยมผืนผ้าที่วางลงบนสายพานที่มุมซ้ายบนของตาราง งานของคุณคือการคิดออกว่าสินค้าจะมาพักหรือว่ามันจะจบลงด้วยการเคลื่อนที่เป็นวง
แน่นอนว่าการขนส่งสินค้ามีแนวโน้มที่จะครอบคลุมหลายสายพานในคราวเดียวดังนั้นนี่คือกฎสำหรับการกำหนดทิศทางของการขนส่งสินค้าในแต่ละขั้นตอน:
สายพานตรงข้ามยกเลิกซึ่งกันและกัน ดังนั้นหากสินค้า 3x2 ครอบคลุมแพทช์ใด ๆ ต่อไปนี้ (เค้าร่างที่มียัติภังค์และท่อเพื่อความชัดเจน) ผลลัพธ์จะเหมือนกัน:
+---+ +---+ +---+ |>>^| | ^| |v^^| |^<<| |^ | |^^v| +---+ +---+ +---+
สิ่งเดียวกันนี้สำหรับ:
+---+ +---+ +---+ |v^<| | | |><>| |>>>| |>> | |>><| +---+ +---+ +---+
เนื่องจากตำแหน่งที่แน่นอนของสายพานลำเลียงใต้ตู้สินค้านั้นไม่เกี่ยวข้องจึงไม่สำคัญว่าคุณจะยกเลิกคู่ไหน
การยกเลิกนี้ใช้ก่อนกฎอื่น ๆ ดังนั้นสำหรับกฎอื่น ๆ จะมีเพียงสายพานลำเลียงในสองทิศทางเท่านั้น
- หากสินค้าไม่ครอบคลุมสายพานใด ๆ เลย (อย่างใดอย่างหนึ่งเนื่องจากสายพานทั้งหมดยกเลิกเพราะมันครอบคลุมเฉพาะช่องว่างหรือเพราะมันเคลื่อนย้ายออกจากตารางอย่างเต็มที่) ก็มาถึงส่วนที่เหลือ
หากสินค้าครอบคลุมสายพานลำเลียงมากกว่าหนึ่งทิศทางมากกว่าอีกทิศทางหนึ่งสินค้านั้นจะเคลื่อนที่ไปในทิศทางนั้น เช่นถ้าสินค้า 3x2 ครอบคลุมแพตช์ต่อไปนี้
>> ^>^
ก็จะย้ายไปทางขวาเพราะมีมากขึ้นกว่า
>
^
ในทางกลับกันถ้ามันครอบคลุม>>^ ^
กฎนี้จะใช้ไม่ได้เพราะมีการผูกระหว่างและ
>
^
กรณีนี้จะเหลือเฉพาะกรณีที่มีการผูกระหว่างทิศทางที่อยู่ติดกัน ในกรณีนี้สินค้าจะเคลื่อนที่ไปตามแกนที่มันเคลื่อนไหวอยู่แล้วตัวอย่างเช่นหากสินค้า 3x2 เคลื่อนไหวขวาหรือซ้ายเคลื่อนไหวตอนนี้ครอบคลุมปะ
>>^ ^
มันจะย้ายไปทางขวา ถ้ามันมาถึงบนแพทช์นี้เลื่อนขึ้นหรือลงมันจะเลื่อนขึ้นแทน หากความขัดแย้งประเภทนี้เกิดขึ้นในขั้นตอนแรกของการจำลองสมมติว่าสินค้าเคลื่อนไปทางขวา
ตัวอย่างรายละเอียด
พิจารณาตะแกรงของสายพานลำเลียงที่ด้านบนและบรรทุกสินค้า 3x2 ต่อไปนี้คือการสร้างภาพข้อมูลทีละขั้นตอนของกระบวนการ แต่ละขั้นตอนประกอบด้วยกริดโดยมีสินค้า#
เป็นกล่องเล็ก ๆ ซึ่งแสดงให้เห็นถึงสายพานที่ปกคลุมด้วยตู้สินค้าอีกกล่องที่มีสายพานหลังจากยกเลิกและกฎที่กำหนดว่าสินค้าเคลื่อนไปที่ใด:
###vv < > <vv < > <vv < > <vv < > <vv < > <vv <
###^ >v v ###^ >v v v ^ >v v v ^ >v v v ^ >v v v ^ >v v
>v^^>vv^ ###v^^>vv^ ###v^^>vv^ ###^^>vv^ ###^>vv^ >###>vv^
^>^ v ^>^ v ### ^>^ v ###^>^ v ###>^ v ###^ v
> v<v >> > v<v >> > v<v >> > v<v >> > v<v >> > v<v >>
>v v<^ >v v<^ >v v<^ >v v<^ >v v<^ >v v<^
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
|> <| | | | v | | v | | >| | >| | >v| | >v| |>v^| |> ^| |v^^| | ^^|
| v | | v | | >| | >| | | | | | | | | | ^| | | | ^>| | >|
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
Rule 3 Rule 4 Rule 3 Rule 4 Rule 4 Rule 3
================================================================================
> <vv < > <### < > <vv <
v ###v v v ###v v v ###v v
>###>vv^ >v^^>vv^ >###>vv^
^>^ v ^>^ v ^>^ v
> v<v >> > v<v >> > v<v >>
>v v<^ >v v<^ >v v<^
+---+ +---+ +---+ +---+ +---+ +---+
|^ >| | >| |vv | | v | |^ >| | >|
|v^^| | ^^| |^ >| | >| |v^^| | ^^|
+---+ +---+ +---+ +---+ +---+ +---+
Rule 3 Rule 4 Rule 3
เมื่อมาถึงจุดนี้สินค้าเข้าสู่วงระหว่างสองเฟรมสุดท้าย
ตอนนี้ให้พิจารณาสินค้า 2x3 แทน:
##<vv < >##vv < > <vv < > <vv < > <vv < > <vv <
## ^ >v v ##^ >v v ##^ >v v v ^ >v v v ^ >v v v ^ >v v
##>v^^>vv^ ##v^^>vv^ ##v^^>vv^ ##v^^>vv^ ##^^>vv^ >v^^>vv^
^>^ v ^>^ v ## ^>^ v ## ^>^ v ##^>^ v ##^>^ v
> v<v >> > v<v >> > v<v >> >##v<v >> > ##<v >> > ##<v >>
>v v<^ >v v<^ >v v<^ >v v<^ >v v<^ ## v<^
+--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+
|> | |> | | <| | | |v | |v | | >| | >| |>v| |>v| | | | |
| v| | v| |v | |v | | >| | >| | | | | | | | | | v| | v|
| | | | | >| | | | | | | | | | | | v| | v| |>v| |>v|
+--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+
Rule 4 Rule 3 Rule 4 Rule 3 Rule 3 Rule 3
================================================================================
> <vv < > <vv < > <vv <
v ^ >v v v ^ >v v v ^ >v v
>v^^>vv^ >v^^>vv^ >v^^>vv^
^>^ v ^>^ v ^>^ v
> ##<v >> > v<v >> > v<v >>
## v<^ ## v<^ >v v<^
## ## ##
## ##
##
+--+ +--+ +--+ +--+ +--+ +--+
| v| | v| |>v| |>v| | | | |
|>v| |>v| | | | | | | | |
| | | | | | | | | | | |
+--+ +--+ +--+ +--+ +--+ +--+
Rule 3 Rule 4 Rule 2
ในขั้นตอนสุดท้ายกฎ 2 บังคับใช้เนื่องจากสินค้าเคลื่อนย้ายออกจากกริดดังนั้นจึงหยุดพักและไม่มีการวนซ้ำ
กฎและข้อสมมติฐาน
ข้อมูลของคุณจะเป็นตารางลำเลียงตามที่อธิบายข้างต้นพร้อมกับความกว้างและความสูงของสินค้า คุณสามารถรับพารามิเตอร์ทั้งสามนี้ตามลำดับและรูปแบบที่สะดวก สำหรับกริดหมายความว่าคุณสามารถอ่านสตริงเดี่ยวที่มีบรรทัดคั่นด้วยการขึ้นบรรทัดใหม่หรืออักขระอื่นหรืออาเรย์ของสตริงหรืออาเรย์ของอาร์เรย์ของอักขระตราบใดที่แต่ละกริดเซลล์ยังคงแสดงโดยตัวอักษร>v<^
และ ช่องว่าง
คุณควรส่งออกtruthyค่าถ้าผลการติดตั้งในวงอย่างน้อยสองเฟรมหรือเป็นfalsyค่าถ้าสินค้าจะมาถึงส่วนที่เหลือ
คุณอาจสมมติว่ากริดจะถูกเสริมเข้ากับสี่เหลี่ยมที่มีช่องว่างและสินค้าจะพอดีกับกริดในตอนแรก
คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น, รับอินพุตผ่าน STDIN (หรือทางเลือกที่ใกล้เคียงที่สุด), อาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ของฟังก์ชันและส่งผลลัพธ์ผ่าน STDOUT (หรือทางเลือกที่ใกล้เคียงที่สุด), ค่าส่งคืนของฟังก์ชันหรือพารามิเตอร์
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ
กรณีทดสอบ
กรณีทดสอบถูกจัดกลุ่มตามกริด
Grid (2x2):
>v
^<
Width Height Loop?
1 1 True
1 2 True
2 1 True
2 2 False
Grid (3x3):
> v
^ <
Width Height Loop?
1 1 False
1 2 False
1 3 False
2 1 False
2 2 True
2 3 True
3 1 False
3 2 True
3 3 False
Grid (4x3):
>^>v
v^v
^ <<
Width Height Loop?
2 2 False
Grid (6x5):
>v>v>v
^v^v^v
^v^v^v
^>^>^v
^<<<<<
Width Height Loop?
1 1 True
1 2 False
2 1 True
2 2 True
2 4 True
2 5 False
3 1 False
3 2 True
3 3 True
3 5 True
6 2 False
6 3 True
6 5 False
Grid (10x6):
> <vv <
v ^ >v v
>v^^>vv^
^>^ v
> v<v >>
>v v<^
Width Height Loop?
1 1 False
2 3 False
2 6 False
3 2 True
5 4 False
6 1 True
10 6 False
ในฐานะชุดทดสอบเพิ่มเติมเพิ่มเติมให้พิจารณาว่าอินพุตใด ๆ ที่กริดประกอบด้วยเพียงช่องว่างเท่านั้นจะต้องให้ผลลัพธ์ที่ผิดพลาด
ฉันได้ตรวจสอบกรณีทดสอบทั้งหมดด้วยตนเองแล้วโปรดแจ้งให้เราทราบหากคุณคิดว่าฉันทำผิด
[^^/v<]
กลายเป็น[[0,1] [0,1];[0,-1] [-1,0]]
? หรือคุณหมายถึงมันขึ้นอยู่กับพวกเราไม่ว่าจะเป็น STDIN, อินพุตสตริง, อินพุตอักขระ char, ฯลฯ แต่ก็ยังต้องอยู่ในรูปแบบของ ^, v,> และ <?
><^v
หรือช่องว่าง ฉันจะอธิบายอย่างนั้น