Bu zorluk, Zachtronics oyunu Infinifactory oyunundan gevşek bir şekilde esinlenmiştir .
Size temsil edilen dikdörtgen konveyör ızgarasının üstten görünüşü verilir >v<^
. Boşluklarla temsil edilen, taşıyıcıları olmayan hücreler olabilir. İşte bir örnek:
> <vv <
v ^ >v v
>v^^>vv^
^>^ v
> v<v >>
>v v<^
Bu kurulum, sınırsız sayıda boşlukla çevrilidir.
Ayrıca, kılavuzun üst sol köşesindeki konveyörlere yerleştirilen dikdörtgen bir kargo parçasının ebatları verilmiştir. Göreviniz, kargonun şimdiye kadar dinlenip gelmediğini veya bir döngü içinde hareket edip etmeyeceğini bulmak.
Elbette, kargo bir kerede birden fazla konveyörü kapsayacak gibi gözüküyor, işte her adımda kargonun yönünü bulmak için kurallar:
Karşı konveyörler birbirini iptal eder. Öyleyse, 3x2'lik bir kargo aşağıdaki yamalardan herhangi birini kapsıyorsa (netlik için kısa çizgiler ve borularla özetlenir), sonuç aynı olacaktır:
+---+ +---+ +---+ |>>^| | ^| |v^^| |^<<| |^ | |^^v| +---+ +---+ +---+
Aynısı bunlar için de geçerli:
+---+ +---+ +---+ |v^<| | | |><>| |>>>| |>> | |>><| +---+ +---+ +---+
Yükün altındaki bir konveyörün tam konumu önemli olmadığı için, hangi çiftleri iptal ettiğiniz önemli değildir.
Bu iptal diğer kurallardan önce uygulanır. Bu nedenle, diğer kurallar için en fazla iki yönde konveyörler olacaktır.
- Kargo hiç bir konveyörü kapsamıyorsa (tüm konveyörler iptal edildiğinden, yalnızca boşlukları kapladığından veya tamamen ızgaradan çıktığından dolayı), durmaya başlar.
Kargo bir yönden diğerine göre daha fazla konveyör kaplarsa, kargo bu yönde hareket eder. Örn, 3x2'lik bir kargo aşağıdaki yamayı kaplarsa
>> ^>^
daha vardır, çünkü sağa hareket edeceğini
>
daha^
. Öte yandan, eğer kaplanmışsa>>^ ^
bu kural geçerli olmaz, çünkü
>
ve arasında bir bağ var^
.Bu, yalnızca bitişik yönler arasında bir bağ bulunduğu hallerde kalır (zıt yönler arasındaki bir bağ iptal edilirdi). Bu durumda, kargo zaten ilerliyor ekseninde hareket eden tutar. Örneğin bir sağ hareket halinde ya da sola hareket eden 3x2 kargo şimdi yama kapsayan
>>^ ^
sağa doğru hareket ederdi. Bu yamaya gelmiş veya aşağı yukarı hareket etmiş olsaydı, şimdi yerine yükselirdi. Bu tür bir çatışma simülasyonun ilk aşamasında meydana gelirse, kargonun sağa doğru hareket ettiğini varsayalım.
Detaylı örnekler
Konveyör ızgarasını en üstte ve 3x2 yükte düşünün. Aşağıdaki işlemin adım adım görselleştirilmesidir. Her adım, şebekenin kargo tarafından temsil edilen #
, kargo kapsamındaki konveyörleri gösteren küçük bir kutu, iptal edildikten sonra konveyörlerle birlikte başka bir kutu ve kargonun nereye hareket ettiğini belirleyen kuraldan oluşur:
###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
Bu noktada, kargo son iki çerçeve arasında bir halka girer.
Şimdi bunun yerine 2x3 kargo düşünün:
##<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
Son adımda, kural 2 geçerlidir çünkü kargo şebekeden ayrılmıştır, bu nedenle dinlenmeye başlar ve bir döngü olmaz.
Kurallar ve Varsayımlar
Girişiniz, yükün genişliği ve yüksekliği ile birlikte yukarıda açıklandığı gibi taşıyıcı ızgara olacaktır. Bu üç parametreyi uygun bir sıra ve biçimde alabilirsiniz. Izgara için, çizgi ile tek bir karakter dizisi okuyabileceği bu araçlar bireysel ızgara hücreleri yine karakterlerle temsil edilen sürece, yeni satır veya diğer karakterler veya şeritlerinin bir dizi ya da bir karakterler dizileri bir dizi ile ayrılmış >v<^
ve alanlarda.
Sen çıkışı gerektiği truthy en az iki kare veya bir döngü içinde kurulum sonuçları ise değer falsy değere kargo dinlenmeye gelecek eğer.
Kılavuzun boşluklu bir dikdörtgene yatacağını ve kargonun başlangıçta ızgaraya sığacağını kabul edebilirsiniz.
STDIN (veya en yakın alternatif), komut satırı argümanı veya işlev argümanı yoluyla giriş alarak ve sonucu STDOUT (veya en yakın alternatif), fonksiyon dönüş değeri veya function (out) parametresi ile çıktı alarak bir program veya işlev yazabilirsiniz.
Bu kod golf, yani en kısa cevap (bayt cinsinden) kazanır.
Test Kılıfları
Test vakaları ızgaralarla gruplandırılmıştır.
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
Ek bir test durumu kümesi olarak, ızgaranın yalnızca boşluktan oluştuğu herhangi bir girişin sahte bir sonuç vermesi gerektiğini düşünün.
Tüm test durumlarını manuel olarak kontrol ettim, bu yüzden bir hata yaptığımı düşünüyorsan haberim olsun.
[^^/v<]
olur [[0,1] [0,1];[0,-1] [-1,0]]
mu? Yoksa STDIN, bir dize girişi, bir karakter dizisi girişi, vs. olup olmadığı bize mi geliyor, ama yine de ^, v,> ve <şeklinde mi olması gerekiyor?
><^v
veya boşlukla temsil edilmelidir . Bunu açıklığa kavuşturacağım.