Pokemon video oyunlarında oyuncu, vahşi hayvanları küçük toplara zorlamak ve onları savaşmak için eğitmek için dünyaya gönderilir. Elbette herkes , kimsenin savaş için Pokemon oynamadığını bilir . Serinin asıl çekimi pokemonun kendisini yakalaması! İşiniz, yakalama girişimi sırasında pokeball simüle etmektir. Bu zorluk, aşağıdaki gibi olan V kuşağı yakalama formülünü kullanacaktır:
HP_max
hedef pokemonun maksimum HP'sine eşittir. HP_current
hedef pokemon'un mevcut HP'sine eşittir. rate
pokemonun yakalanma hızı bonus_ball
, atılan pokeball çarpanı, bonus_status
hedef pokemon uyuyorsa veya donuyorsa 2.5, hedef pokemon felç olmuş, zehirlenmiş veya yanmış ise 1.5, aksi takdirde 1'dir.
Bulduktan sonra a
, üç taneye kadar "sallama kontrolü" yapmanız gerekir. Bir sallama kontrolünün başarılı olma olasılığı 65536 / (255 / a)^(1/4)
. Bu kontrollerden herhangi biri başarısız olursa, pokemon topu terk eder. Üç kontrol de başarılı olursa, pokemon yakalanır!
Not: Herhangi bir bölme yapıldığında, sonuç 1/4096 katına yuvarlanır. Bu genellikle önemsiz bir ayrıntıdır, ancak programınızda dikkate alınmalıdır.
Buradaki zorluk, sallama kontrollerini yapan ve kontrollerin durumunu belirlemek için basan bir program yazmaktır. Stdin'de, programınız pokemonun maksimum HP'sini, hedef pokemonun yakalanma oranını ve pokeball adını alacaktır (en azından aşağıda ayrıntıları). Pokeball adı her zaman bir dizedir, maksimum HP ve yakalama hızının hem tam sayı olduğu garanti edilir. Bu girdi herhangi bir sırayla gelebilir ve herhangi bir sınırlandırıcı karakter (ler) ile tutarlı olduğu sürece sizin için uygundur. Girişin doğru olduğunu varsayalım, hata işlemeye gerek yoktur.
Desteklemeniz gereken telefon bloklarının adları ve bunların yakalama çarpanları burada listelenmiştir:
Poke | 1
Great | 1.5
Ultra | 2
Master | 255
Hedefin uykuda ve 1 HP'de olduğunu varsayabilirsiniz. Çıktı için beklenen format şudur:
(First check failed)
(no output)
(Second check failed)
*shake*
(Third check failed)
*shake*
*shake*
*shake*
(All checks pass)
*shake*
*shake*
*shake*
Click!
(Bu bir yazım hatası değildir, programınız hiçbir zaman yalnızca iki sarsıntı vermemelidir.)
Bu kod-golf , yani puanınız programınızın kaynak kodunun bayt sayısı. En düşük puan kazanır.
Bonuslar!
Bunu söyleyen edebilir Pokemon 1 HP ve uykuda olan varsayalım. Alternatif olarak, kullanıcının pokemon'un mevcut HP ve girişini yapmasına izin verebilirsiniz bonus_status
. Pokemon'un mevcut HP'si her zaman maksimum HP'sine eşit veya daha az bir tam sayı bonus_status
olacaktır ve her zaman 2.5, 1.5 veya 1 olacaktır. 2.5 Eğer tedarik edilmemişlerse. Bunlardan birini uygulamak için puanınızdan 15 , her ikisi için de 25 puan çıkarabilirsiniz .
Ek olarak, kritik yakalamalar da gerçekleştirebilirsiniz. Kritik bir yakalama meydana gelirse, sadece bir sallama testi gerçekleştirilir. Başarısız olursa, program sessizce çıkar. Geçilirse, çıktı:
*shake*
Click!
Kritik eserler, oyuncu daha fazla pokemon topladıkça daha yaygın hale gelir, ancak sadelik uğruna "hepsini yakaladıklarını" varsayabiliriz. 0 ile 2047 arasında rastgele oluşturulmuş bir sayı a
(ilk hesaplamanın sonucu olarak) 2.5 ile çarpıldığında daha azsa , bu kritik bir yakalamadır. Kritik yakalama desteği , puanınızı 25 puan kaldırmanıza olanak tanır .
Desteklemeyi seçebileceğiniz çok sayıda başka pokebar var. İsimleri ve yakalama çarpanları burada listelenmiştir:
Safari | 1.5
Sport | 1.5
Lure | 3
Net | 3
Dusk | 3.5
Dive | 3.5
Moon | 4
Fast | 4
Quick | 5
Love | 8
Desteklediğiniz bu topların her biri için, puanınızdan (5 + topun isminin uzunluğunu) çıkarabilirsiniz.
Son olarak, vuruşlar için, bu bonusların tümüne ulaşmak (stdin'den geçerli HP ve bonus_status, kritik yakalamalar ve 10 isteğe bağlı topun tümü), 150 puanlık bir bonus için size puanınızdan 7 puan ek ödül kazandıracak .
Örnek Giriş / Çıkış
Sadece hepimizin aynı sayfada olmasını sağlamak için.
$ ./balls <<< "19,Ultra,255"
*shake*
*shake*
*shake*
Click!
İyi şanslar ve mutlu golf!
65536 / (255 / a)^(1/4)
1'den büyük olduğu, onay otomatik olarak başarılı. İkinci soru ile ne demek istediğinizi anlamadım.
rnd < p
, kontrolün rnd
0 ve 1 aralığında başarılı olduğu anlamına gelir .
65536 / (255 / a)^(1/4)
rasgele sayı az olursa, o zaman titreme testi başarılı
65536 / (255 / a)^(1/4)
ama bağırsaklarım 1'den büyük olduğunu söylüyor. Rasgele sayı daha büyükse veya daha düşükse kontrol başarılı mı?