Dipukul di lutut dengan panah tampaknya menjadi pilihan cedera sekarang. Karena itu, saya mengusulkan tantangan golf berikut.
Anda memiliki seorang petualang yang terlihat seperti ini:
O
/|\
/ | \
|
|
/ \
/ \
Diberikan file teks yang berisi satu busur (digambar sebagai }
simbol), satu set dinding (digambar sebagai #
simbol) dan satu petualang, tulis kode terkecil yang menghitung sudut dan kecepatan awal di mana Anda harus menembakkan panah untuk memukul dia di lutut.
Asumsikan yang berikut:
- Setiap karakter dalam file adalah 0,5 x 0,5 meter.
- Panah ditembakkan dari pusat
}
, yaitu offset dari0.25m, 0.25m
- Gravitasi adalah
10ms^-2
- Panah berbobot
0.1kg
- Panah adalah sebuah titik, yaitu tabrakan hanya terjadi ketika koordinat panah memasuki salah satu blok.
- Kecepatan awal maksimum adalah
50m/s
- Sudut mungkin antara 0 (lurus ke atas) dan 180 (lurus ke bawah)
- Memukul bagian mana pun dari kaki petualang dianggap memukul lutut.
- Dinding (
#
karakter) memakan satu blok 0,5 mx 0,5 m. - Panah dapat berjalan di atas "atas" file, tetapi tidak ada yang menghentikan input dari mulai dengan plafon
#
karakter. - Anda tidak dapat menembus dinding dengan panah.
- Memukul bagian petualang lainnya tidak diperbolehkan!
- Anda harus menampilkan kesalahan jika memukul lututnya tidak mungkin.
Input contoh:
#
} O
# /|\
/ | \
# |
# |
/ \
/ \
Jangan ragu untuk bertanya jika perlu :)
code-golf
path-finding
Polinomial
sumber
sumber
#############
...Jawaban:
Python, 599 karakter
The
X(K,L)
rutin mengambil parabolaK=(a,b,c)
mewakili y = ax ^ 2 + bx + c dan segmen garisL=(a,b,c,d)
yang mewakili segmen antara (a, b) dan (c, d) . Rintangan (O
) dan target (T
) direpresentasikan sebagai segmen garis. Semua jarak diskalakan dengan faktor 2.Input contoh memberikan lintasan berikut (secara default, satu kecepatan minimum):
Anda dapat membalikkan
R
untuk mendapatkan jalur kecepatan maksimum:sumber
8**5
untuk mendapatkan 64kB)w=v+1
dan mengganti 3 contohv+1
denganw
. Saya tidak banyak kode Python, jadi saya mungkin salah.