Arka fon
Uzakta bir galakside (ve muhtemelen bir evrende) ... bir uzay gemisi ve bir grup gezegen vardı. Gemideki bir arıza, uzay gemisinin yakıtının bitmesine neden oldu. Şimdi kaçmak zorunda olduğu bir gezegen kümesinin yakınında tehlikeli derecede yavaş bir hızda hareket ediyor! Mürettebatın kaderi ne olacak?
Meydan okuma
USS StackExchange'te lider programcısınız. Bu nedenle, bir gezegene karayı çarpmaya mahkum olup olmadığınızı, gezegen sisteminden kaçıp kaçmayacağınızı veya sonsuza kadar yörüngeye sıkışıp kalmayacağınızı ortaya çıkaran bir simülatör yazmak istersiniz.
Bununla birlikte, uzay geminizdeki patlama, çok sınırlı hesaplama kaynaklarının olduğu anlamına gelir. Programınız mümkün olduğunca küçük olmalıdır. Ayrıca, bu, simülasyonları çalıştırmak için girmenin tek olası yolunun ASCII sanatı aracılığıyla olduğu anlamına gelir.
Simülasyon
Çoklu evrenin bu çeyreğinde, ASCII sanatına uyum sağlamak için fizik yasaları biraz değiştirilir. Bu, kozmosun hücrelere ayrıldığı anlamına gelir. Hareket, hücre birimlerinde tarif edilecek ve zaman, zaman adımları biriminde olacaktır.
Geminin kendisinin momentumu var. Eğer gemi önceki zaman adımında x ekseninde +2 hücreleri ve y ekseninde -1 hücresini ((2, -1) olarak kısaltılmış) hareket ettirdiyse ve yerçekimi alanı yoksa, gemi tam olarak sonraki hızda aynı hız.
Hemen etrafını çevreleyen sekiz hücre üzerinde yerçekimsel bir alan uygulayan birkaç gemi olacak, bu da geminin hızını etkileyecek ve gemiyi gezegene yaklaştıracak. Bir gezegenin sadece "kuzeyi" olmak, bir alanın (-1,0) kuvvetiyle gemiyi bir hücre "güneye" çekmesine neden olur. Bir gezegenin sadece "kuzeydoğu" olması, geminin bir hücresini "güneye" ve bir birimi "batıya" (-1, -1) kuvvetiyle çekmesine neden olur.
Yerçekimi alanları, hücreyi yerçekimi ile terk ettiği için geminin momentumuna bir vektör ekler. Bir gemi daha önce (2, -1) hücreleri hareket ettirdiyse ve şimdi (-1,1) 'in yerçekimi alanındaysa, bu sonraki adım adımında (1,0) hücreleri hareket ettirecektir. Gemi birden fazla gezegene yakınsa, eklenecek birden fazla vektör olacaktır.
Giriş
STDIN'de, gezegenlerin koordinatlarını ve geminizin mevcut hızını gösterecek bir ASCII gezegen sisteminin sanat temsilini alacaksınız. @ İşaretleri şeklinde birkaç gezegen olacakken, av ^ <> işareti şeklinde bir uzay gemisi olacak. Geminin sembol seçimi geminin mevcut hızını gösterir (yerçekimi eklenmeden önce). Örneğin, <, bir hücrenin batıya doğru hızı anlamına gelirken, ^, bir hücrenin kuzeye doğru bir hızı anlamına gelir. Tüm boş alanlar, her satırın aynı genişlikte olmasını sağlayan noktalardan oluşacaktır. Boş satır girişin sonunu temsil eder. İşte bir giriş örneği:
.................
...@.@........v..
......@..@..@@...
..@..............
.......@..@......
.................
Çıktı
Çıktı, geminin yerçekiminden kaçıp kaçmayacağını, karayı bir gezegene çarpıp çakmayacağını veya sonsuza kadar yörüngeye döneceğini söyleyen STDOUT'ta tek bir kelime olacak.
Yerçekiminden kaçmak, haritadan hareket eden gemi olarak tanımlanır. Gemi kaçarsa, programınız "kaçış" kelimesini yazdırmalıdır.
Çöküş inişi, bir geminin doğrudan bir gezegenin üzerinden geçmesi veya bir zaman adımı sırasında aynı hücreye girmesidir. Her seferinde geminin nerede olduğunu hesaplamanın yeterli olmadığını unutmayın. (5,5) hızında hareket eden bir gemi, (1,1) 'de bulunan bir gezegene çarpacak olsa da, doğrudan hesaplama, o hücreyi asla ziyaret etmeyeceği anlamına gelecektir. Hızı (5,6) olan bir gemi, gezegene karayı çarpmayacaktır. Eğer uzay gemisi kazanız inerse, o zaman program "crash" kelimesini yazdırmak gerekir.
Yörüngeyi tespit etmek en zor olanı olabilir. Yörünge, uzay gemisi aynı hücreyi iki kez ve aynı hızda ziyaret ettiğinde gerçekleşir. Gemi yörüngede ise "yörünge" kelimesini yazdırmalısınız.
Yukarıdaki örnek için çıktı:
escape
açıklama
Yukarıdaki örnekte, uzay gemisinin her zaman adımında nereye gittiğini gösteren bir harita:
^
.................
...@.@........v..
....^.@..@..@@...
..@..<.<<<.<.v...
.......@..@......
.................
Güneye gitti, batıya döndü, bir koridordan aşağıya indi, kuzeye döndü ve yerçekimi nedeniyle yüksek hızda gezegenlere dar bir şekilde kaçtı.
Muayene için daha fazla vaka
...
^@.
...
orbit
...........
.>@.@......
.@......@..
....@......
crash (it crashes into the easternmost planet)
...
.@.
.v.
crash (momentum can't overcome gravity)
........
..@.....
..<.....
...@....
........
orbit (it gets trapped in a gravity well between two planets)
Kurallar, Düzenlemeler ve Notlar
Bu kod golf. Standart kod golf kuralları geçerlidir. Programlarınız yazdırılabilir ASCII'de yazılmalıdır. Herhangi bir harici veritabanına erişmenize izin verilmiyor.
İletimi Sonlandır