Bu soru ASCII sanat versiyonundan biraz daha zordur. Sanat yok ve şimdi kayan nokta aritmetiği yapıyorsunuz!
Meydan okuma
USS StackExchange, gemide astronomik bir patlama meydana geldiğinde cg-00DLEF gezegeninin ağırlık alanında ilerliyordu. Geminin baş programlama memuru olarak, cg-00DELF'in güneş sisteminde karaya çarpmak zorunda kalıp kalamayacağınızı tahmin etmek için geminizin yörüngesini simüle etmek sizin görevinizdir. Patlama sırasında geminiz ağır hasar gördü. Uzay gemisinin sınırlı ücretsiz DEEEPRAROM * programı nedeniyle, programınızı mümkün olduğunca az karakterle yazmalısınız.
* Dinamik Olarak Yürütülebilir Elektronik Olarak Silinebilir Programlanabilir Rastgele Erişim Salt Okunur Bellek
Simülasyon
ASCII sanat versiyonu gibi, zaman adımları fikri olacak. Diğer versiyonda, bir zaman adımı nispeten büyük bir süreydi: gemi, bir gezegenin yerçekiminin ötesine tek bir zaman adımında yol alabilirdi. Burada zaman adımı, daha büyük mesafeler nedeniyle çok daha küçük bir zaman birimidir. Bununla birlikte, önemli bir fark, hücrelerin olmamasıdır. Uzay gemisinin mevcut konumu ve hızı, yerçekimi kuvvetleri ile birlikte kayan nokta sayıları olacaktır. Başka bir değişiklik, gezegenlerin artık çok daha büyük bir boyuta sahip olmasıdır.
Simülasyonda en fazla üç gezegen olacak. Üçünün de belirli bir yeri, yarıçapı ve yerçekimi olacaktır. Her gezegenin yerçekimi, doğrudan gezegenin merkezine doğru kuvvet uygulayan bir vektördür. Bu vektörün kuvvetini bulmak için formül (Gravity)/(Distance**2)
, mesafenin gemiden gezegenin merkezine olan tam mesafedir. Bu, yerçekiminin ulaşabileceği yerde bir sınır olmadığı anlamına gelir.
Belirli bir zamanda, uzay gemisinin bir hızı vardır, bu da son zaman adımından şimdiye kadar kat ettiği mesafe ve açıdır. Geminin de momentumu var. Geçerli zaman adımı ile sonraki adım arasında gideceği mesafe, konumundaki tüm yerçekimi vektörlerine eklenen mevcut hızının toplamıdır. Bu, uzay gemisinin yeni hızı olur.
Her simülasyonun 10000 zaman adımı için bir zaman sınırı vardır. Eğer uzay gemisi bir gezegenin içinde seyahat ederse (gezegenin merkezine gezegenin yarıçapından daha yakınsa), o zaman bu gezegene çarpar. Uzay gemisi simülasyonun sonuna kadar herhangi bir gezegene çarpmazsa, yer çekiminden kaçtığı varsayılır. Geminin o kadar mükemmel bir şekilde hizalanması mümkün değildir, 10001'inci zaman adımında çökerken 10000 zaman adımında yörüngede kalmayı başarır.
Giriş
Giriş, STDIN'e dört satır olacaktır. Her satır dört virgülle ayrılmış sayıdan oluşur. İşte sayıların biçimi:
ShipLocX,ShipLocY,ShipVelX,ShipVelY
Planet1LocX,Planet1LocY,Planet1Gravity,Planet1Radius
Planet2LocX,Planet2LocY,Planet2Gravity,Planet2Radius
Planet3LocX,Planet3LocY,Planet3Gravity,Planet3Radius
Üçten az gezegen varsa, kalan çizgiler tüm değerler için sıfırlarla doldurulur. İşte bir örnek giriş:
60,0,0,10
0,0,4000,50
100,100,4000,50
0,0,0,0
Bu, uzay gemisinin (60,0) bulunduğu ve 10 birim / zaman adımında düz "yukarı / kuzey" hareket ettiği anlamına gelir. Biri (0,0) ve diğeri (100,100) 'de bulunan iki gezegen vardır. Her ikisinin ağırlığı 4000 ve yarıçapı 50'dir. Bunların hepsi tamsayı olsa da, her zaman tamsayı olmayacaklardır.
Çıktı
Çıktı, uzay gemisinin çarpışıp inip düşmediğini söylemek için STDOUT'a tek bir kelime olacak. Gemi kazası düşerse, yazdırın crash
. Aksi takdirde yazdırın escape
. Yukarıdaki giriş için beklenen çıktı:
crash
Ne olduğunu merak ediyor olabilirsiniz. İşte uzay gemisi için ayrıntılı bir uçuş günlüğüne sahip bir Pastebin direği. Sayılar, insanların olayı görselleştirmelerine yardımcı olmakta çok iyi değildir, işte burada olan şey: Uzay gemisi, ilk gezegenin yerçekiminden (batıya) ikinci gezegenin yerçekiminin (kuzeydoğusuna) kaçmasını başarıyor. Kuzeye doğru hareket eder ve sonra ikinci gezegenin batısına hafifçe geçer, ancak onu kaçırır. Daha sonra gezegenin kuzey tarafı etrafında kıvrılır ve ikinci gezegenin doğu tarafına çöker.
Muayene için bazı vakalar
60,0,10,-10
0,0,2000,50
100,100,1357.9,47.5
0,0,0,0
kaçış (ters kare yasası nedeniyle, 60 birim uzaktaysanız 2000 çok fazla yerçekimi değildir)
0,0,0,0
100,100,20000,140
-50,-50,50,50
-100,-100,50,50
çarpışma (ilk gezegen çok büyük ve çok yakın)
0,0,0,0
0,0,0,0
0,0,0,0
0,0,0,0
kaçış (bu bir uç durumdur: gezegen yoktur ve açık bir yorum, uzay gemisinin doğrudan gezegenlerin üstünde olduğunu düşündürür)
Kurallar, Kısıtlamalar ve Notlar
Bu kod golf. Standart kod golf kuralları geçerlidir. Programınız yalnızca yazdırılabilir ASCII karakterleriyle yazılmalıdır. Herhangi bir harici veritabanına erişemezsiniz. Herhangi bir dilde girişler yazabilirsiniz (bu zorluğu çözmek için uzmanlaşmış bir dil dışında).
İletimi Sonlandır