Arka fon
Bu zorluk, PPCG 2016'nın En İyisi kategorisinde göründüğü kadar basit değil , mücadelesiyle kazanan pilotun şerefine. 4 no'lu müzik kutum bu şarkıyı çalabilir mi? Tebrikler!
"Hakkımda" sayfasında, bu kullanıcının Game of Life hücresel otomatiği için gerçekten temiz bir simülatörü var . (Cidden, git kontrol et.) Öte yandan, aspillera kelimesi "arrowslit" için İspanyolcadır. Bu gerçeklerin ışığında, bu zorluk Yaşam Oyunu'ndaki oklarla ilgilidir.
Hayat Oyunu
GoL'da bir planör tarafından bir ok ve bir dizi blok tarafından bir duvar göstereceğiz . Tek bir planör duvara yukarıdan yaklaşır ve duvardaki bir boşluktan (oklar açıklığı) geçmeye çalışır. Göreviniz, planörün ok açıklığından geçip geçmediğini veya duvara çarptığını kontrol etmektir.
Giriş
Girişiniz bir GoL yapılandırmasını temsil eden bir bit ızgarasıdır. Herhangi bir makul formatta (herhangi iki farklı yazdırılabilir ASCII karakterinin çok satırlı dizgisi, dizgelerin listesi, 2B tamsayı dizisi, 2B boolean dizisi vb.) Alabilirsiniz. Netlik için, .#
aşağıdaki karakterlerin çok satırlı dizelerini kullanacağım .
Girişin birkaç özelliğe sahip olması garanti edilir. İlk olarak, bazı N ≥ 6 için yüksekliği 2N'dir ve genişliği en az 2N + 2'dir . Giriş , ilk üç sıradaki bir yerde bir planör ve iki orta satırda bir bloklar duvarı olması haricinde, hepsi s olacaktır . Planör güneybatı veya güneydoğuya doğru ilerleyecektir ve konumu, duvarlar sökülürse, alt kenara ulaşmadan önce bir yan kenardan geçmeyecek şekildedir (ancak ızgaraların bir köşesine ulaşabilir). Planör başlangıçta en az bir adım adım ile sol ve sağ kenarlardan ayrılır . Herhangi bir aşamada olabilir..
.
Duvar, .
en az iki sütunla ayrılacakları bir yer hariç, bir sütunla ayrılan bloklardan oluşur .
. Planör gibi, en sol ve en sağdaki bloklar da kenarlardan bir adım .
s ile ayrılır . Sol kenarda her zaman en az bir blok ve sağ kenarda bir blok olacaktır.
Geçerli bir giriş ızgarasının bir örneği:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
Çıktı
Belirtildiği gibi, göreviniz planörün duvara çarptığını veya güney kenarına mı geçtiğini belirlemek. Bu zorluğun amaçları doğrultusunda, konfigürasyon artık simülasyonda ne olacağına bakılmaksızın konfigürasyon artık tek bir planör ve blok duvarından oluşmuyorsa bir çökme meydana gelir. Aşağıdaki diyagramlar güneydoğu planörün iki farklı aşamada çarpışmadan yaşayabileceği en küçük boşlukları göstermektedir (güneybatı planörlerin durumu simetriktir).
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
Planör duvardan uçarsa, bir gerçeğe uygun değer, aksi takdirde sahte bir değer vermelisiniz. Yukarıdaki örnekte, planör duvarın sol tarafına çarpacağından doğru çıktı yanlıştır.
Bu zorluğun amaçları doğrultusunda, girişte GoL'yi 2 * (yükseklik - 3) adım için simüle ederseniz , planörün beklenen konumda alt sıralarda olduğunu ve duvarın sağlam olduğunu varsayabilirsiniz; .
Kurallar ve puanlama
Tam bir program veya bir fonksiyon yazabilirsiniz. En düşük bayt sayısı kazanır.
Test durumları
Test vakalarını GitHub deposunda topladım , çünkü oldukça büyükler. Tek tek dosyalara bağlantılar: