Çocuklarla ilgili giriş
Çocuklarımı bir eğlence parkına götürdüğümde, çocuklar parka yaklaştıkça sinirleniyorlar, park yerinde olduğumuzda ve sinirlenecek bir yer bulamadığımızda sinir zirvesi var. Bu yüzden otopark harcanan zamanı en aza indirmek için en yakın ücretsiz park yeri bulmak için bir yönteme ihtiyacım var.
Teknik giriş
Bunun gibi bir otoparkın temsilini hayal edin:
*****************
* *
* ··CC··C··CC·· *
* ************* *
* ··CCCCCCCCC·· *
* *
**********E******
Bu gösterimde a *
, bir duvar, ·
ücretsiz bir park yeri, bir E
giriş noktası ve C
zaten park edilmiş bir araba anlamına gelir . Her boşluk, park edilecek otomobilin otoparkta hareket etmek için kullanabileceği bir konumdur. Şimdi çok seviyeli bir park yeri oluşturmak için bu konsepti 3D'ye genişletelim:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
Sayılar 1
, 2
ve 3
seviyeleri arasındaki bağlantıları temsil eder. 1
İle birinci kat bağlantısından 1
içine bir araba atlama böylece ikinci kat 1
birinci katta konumda görünür 1
ikinci kat konumunda.
Meydan okuma
Daha önce gösterildiği gibi bir park yeri şeması vererek, aşağıdakilere göre en yakın boş park alanına olan mesafeyi hesaplayan en kısa programı yazın
kurallar
- Giriş bir 3B karakter dizisi veya bir 2B dizgi dizisi veya eşdeğeri olacaktır ve çıkış, aracın en yakın boş park alanına ulaşmak için atması gereken adım sayısını temsil eden tek bir tamsayı olacaktır. Bir 3D karakter dizisi alırsanız, ilk dizin kat numarasını temsil edebilir ve ikinci ve üçüncü dizinler her kat için (x, y) konumunu gösterebilir, ancak bu size bağlıdır.
- İle temsil edilen 9'dan fazla rampa olmayacak
[1-9]
. - Araç
E
pozisyondan başlar (harita başına sadece bir giriş noktası olacaktır) ve beyaz boşlukları kullanarak her seferinde dört yönden birinde hareket eder: yukarı, aşağı, sol, sağ. Araç ayrıca·
pozisyonlara ve[1-9]
pozisyonlara da girebilir . - Her pozisyon değişikliği (adım) 1 olarak sayılır ve araç bir kattan diğerine her gittiğinde, araç bir rampa alması gerektiği için 3 olarak sayılır. Bu durumda, bir yanında bir boşluk gelen hareketi
1
için1
kendisi yüzünden araba görünen bu hareketin bir sonucu olarak, 3 adımda olarak ne paradır1
diğer katta pozisyon. - Araba matris sınırlarının ötesine geçemez.
- Park edilecek araç a ile aynı konumda olduğunda sayı sona erecektir
·
. Ulaşılamayan ücretsiz park yeri yoksa sıfır, negatif bir tam sayı, boş değer veya hata döndürebilirsiniz.
Örnekler
Yukarıdaki örnekte, dördüncü kata gitmek ve yakınındaki en yakın park alanına park etmek daha ucuz olduğu için sonuç 32 olacaktır 3
. Üçüncü kattaki en yakın ücretsiz park yerleri 33 ve 34 mesafededir.
Diğer örnekler:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
Answer: 28 (now the parking space in the 2nd floor is closer)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 4 2 5 3 6 *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
4 * 5 1 6 2 * 3
**********E****** ***************** ***************** *****************
Answer: 24 (now it's better to go to ramp 4 and then to ramp 5 to the third floor)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * * * 3 * 2
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 3 * 2 * 1
**********E****** ***************** ***************** *****************
Answer: 16 (now the parking space in the 4th floor is closer)
1st floor 2nd floor 3rd floor 4th floor 5th floor
************ ************ ************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC 3 *·CCCCCCCC 4 *········C *
* * * * * * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2 *··CCCCCCC 3 *·······CC 4
************ ************ ************ ************ ************
Answer: 29 (both the nearest parking spaces at the 4th and 5th floors are at the same distance)
1st floor 2nd floor 3rd floor
************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC *
* * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2
************ ************ ************
Answer: -1 (no free parking space)
1st floor
************
* *
* *
* E*
************
Answer: -1 (no parking space at all)
1st floor
************
* ····· *
*· ****
* ····· * E
*********
Answer: -1 (the parking lot designer was a genius)
Alternatifler
- Otopark haritasını temsil etmek istediğiniz karakterleri kullanabilirsiniz, cevabınızda sadece seçtiğiniz karakterleri ve ne anlama geldiğini belirtin.
Bu kod golf , bu yüzden her dil için en kısa program / yöntem / lambda / ne olursa olsun kazanabilir!
Algoritma ile ilgili yardıma ihtiyacınız olursa, lütfen C #'daki (ungolfed) uygulamamı kontrol edin .