Görev
Trafik kavşak yapısını alan ve araçların geçeceği sırayı veren bir program veya işlev yazın.
Çıkış aşağıdaki biçimde en az dört satır içermelidir #. x->y\n
, #
nokta ve ardından bir sıra numarası sayıdır .
, x
ve y
karakterlerdir ["N", "E", "S", "W"]
. Karakterlerle ayrılmalıdırlar ->
. Bir dizi dizisi döndürmezseniz, her satırın sisteminize \n
(yeni bir satır karakteri) veya eşdeğeri ile bitmesi gerekir .
Giriş aşağıdaki formu almalıdır:
- Bölüm 1: Her biri N, E, S, W (saat yönünde) sırayla kaynak yollar için hedef yolu olan dört karakter. İzin verilen karakterler
N
,S
,W
,E
veya. Alan, belirli bir yolda araç bulunmadığı anlamına gelir. Örneğin
S WE
, dize , N aracının Güney'e gitmek istediği anlamına gelir, alan E aracının olmadığıW
anlamına gelir, S'ninE
Batıya gitmek istediği anlamına gelir, Batı'nın Doğu'ya gitmek istediği anlamına gelir. - Bölüm 2 - hangisinin acil durum aracının hangisi olduğu anlamına gelen bir boşluk veya tek harf.
- Bölüm 3 - Hangi iki yolun önceliği olduğunu belirleyen iki karakter (örneğin
NE
, Kuzey ve Doğu'nun hem Güney hem de Batı'dan daha yüksek öncelikleri olduğu anlamına gelir). Sizin için daha kolaysa, daha düşük öncelikli yolları kullanabilirsiniz (bu durumdaSW
).
Bir çözülemeyen durumda sizin gibi, kullanıcıya açıktır tek satırlık dize dönmelerine izin verilmesi unsolvable
, no solution
ve benzeri. JavaScript kullanıcıları dahili undefined
sabit alabilir.
Bu bir kod golf, yani bayt cinsinden en kısa cevap kazanır.
Trafik kuralları
Lütfen bazı kuralların ülkenizdeki trafik kurallarına uymayabileceğini unutmayın. Bazıları mücadeleyi kolaylaştırmak için basitleştirildi. Bu soruyu gerçek hayattaki trafik sistemi için bir rehber olarak kullanmayın.
- Meydan okuma için yalnızca sağ taraftaki trafiği kullanmanıza izin verilir.
- Trafik kavşağı bir noktada toplanan tam dört yoldan oluşur. Onlar işaretlenmiştir
N
( "Kuzey" gibi),S
,W
,E
. Bu harfler yukarıdaki çıktı örneğinin yerinex
ve yerine kullanılmalıdıry
.
- Her yolda en fazla bir araç var. Her yolda bir taşıt olduğu garanti edilmez. Her araç dört yönden herhangi biriyle, yani; sola dönün, sağa dönün, düz gidin veya U dönüşü yapın .
- İki aracın yolları kesişmiyorsa (çarpışmazlar), aynı anda gidebilirler. İki araç varsa yollar çarpışmaz (liste tam olmayabilir, ancak bu yalnızca size bir ipucu vermek için kasıtlıdır):
- zıt yönlerden gelir ve her ikisi de dümdüz gider veya en az biri sağa döner
- zıt yönlerden gelip her ikisi de sola dönün,
- zıt yönlerden gelir ve bunlardan biri herhangi bir yöne döner veya U dönüşü yapar, diğeri U dönüşünü yapar,
- dik açılardan gelir, soldan biri sağa döner, diğeri U dönüşü yapmaz
Aşağıdaki yolların çarpışmamasıyla ilgili bazı örnekler. Lütfen üçüncü çizimde, N'nin U dönüşü yapmasına rağmen herhangi bir N yolunun E yoluyla çarpışacağını unutmayın.
- İki yol çarpışırsa, diğer kuralları kullanmak gerekir. İki araç aynı öncelikli yoldaysa (aşağıya bakınız), araca şu şekilde bir hak verilir:
- sağ taraftaki yoldan geliyorsa, ortogonal yönlerden geliyorlarsa
- diğer sola dönerse sağa döner
- diğeri U dönüşü yaparsa düz gider veya sağa döner.
Aşağıdaki iki örnekte de E aracının, S aracına geçiş hakkı vardır.
Aşağıdaki örnekte önce W, sonra N, sonra E ve son S gider.
Bu özel durum için programınızın çıktısı şöyle olmalıdır:
1. W->S
2. N->S
3. E->S
4. S->S
Tüm sürücüler dönüş sinyallerini kullanır ve diğerlerinin nereye gitmek istediğini bilir (basitlik için sol ve U dönüşlerini ayırt etmenin mümkün olduğunu varsayıyoruz).
Bazen yollara yukarıdaki kurallardan daha önemli olan öncelikli işaretler verilir. Önceliği yüksek olan bir yolun öncelikli bir işareti vardır ( öncelikli işaret resmi ). Öncelikli yol düz devam etmezse, ayrıca ek işaretler gibi, kullanılan bu bir . Daha düşük önceliğe sahip olan yollarda verim işareti veya dur işareti vardır (eşdeğerdir). Hiçbiri veya tam olarak iki farklı yol daha yüksek önceliğe sahip olmayacaktır. Programınızın kullanıcısı, hangi yolların daha yüksek (veya daha düşük) öncelikleri olduğunu girebilmelidir.
- Öncelikli yoldan gelen bir aracın sol tarafında olsa bile, düşük öncelikli yoldan gelen bir araca geçiş hakkı vardır.
- Aynı önceliğe sahip yollardan gelen iki aracın yolları çarpışırsa, sağ üst kurallar etkindir.
Aşağıdaki örnekte S ve W yolları öncelik işaretlerine sahiptir, bu da N ve E üzerindeki araçların onlara yol göstermesi gerektiği anlamına gelir. S aracı, W aracına göre önceliğe sahiptir, çünkü sağ tarafındadır, önce gelir. Sonra W'ye gider, çünkü E'den daha yüksek önceliğe sahip bir yoldadır, N taşıtının E yönünden hakkı vardır, çünkü sağ tarafındadır. Sonuncusu E. olarak
Bu özel durum için programınızın çıktısı şöyle olmalıdır:
1. S->W
2. W->N
3. N->S
4. E->W
- Bir (ve daha fazla olmayan) aracın, hangi yönden geldiği veya hangi yönden geldiğine ve hangi işarete sahip olduğuna bakılmaksızın önceliği olan acil durum aracı olması olasıdır (her zaman önce gider). Program, kullanıcının hangi aracı acil durum aracı olduğunu girmesine izin vermelidir. Son örnekte N'nin acil bir araç olduğunu göz önünde bulundurarak, N önce N, sonra S, W ve son E olarak geçiyor.
N'de acil durum aracı olan bu özel durum için programınızın çıktısı şöyle olmalıdır:
1. N->S
2. S->W
3. W->N
4. E->W
- İki aracın aynı anda gitmesine izin verilirse (yolları çarpışmaz ve diğer araçlara yol açmak zorunda kalmazlar), programınız bunu bulmalı ve aynı sıra numarasına sahip olarak iade etmelidir.
Aşağıdaki örnekte N ve E gibi E ve S veya W ve E yolları çarpışmaz. S'nin N'ye ve W'nin de S'ye yol vermesi gerektiği için, S E ile aynı anda gidemez. N ve E olabilir. İlk başta N ve E beraber gider, S ve W en sonuncusudur.
Programınızın doğru çıktısı:
1. N->W
1. E->E
2. S->W
3. W->N
Satırların sırasını seçmekte özgürsünüz
1
(N->W / E->E
eşdeğerdirE->E / N->W
)
- Bazen trafik, hiçbir aracın gitmesine izin vermeyen çözülemez bir duruma neden olabilir. Gerçek hayatta, sürücülerden birinin gönüllü olarak istifa etme hakkı istifa ettiği zaman çözülür. Burada,
unsolvable
sorunuzun ilk bölümünde belirtildiği gibi programınız çıktı vermelidir .Aşağıda çözülemez durumlara bir örnek verilmiştir. E, W'ye yol vermeli, W, S'ye yol vermeli ve S, E'ye yol vermelidir.