Diberi pandangan sisi lapangan golf mini dan kekuatan ayunan, tentukan apakah bola akan berhasil masuk ke dalam lubang.
Kursus akan berada dalam format ini:
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Bola mulai langsung sebelum bagian pertama dari tanah di sebelah kiri dan mengikuti kontur jalur sampai mencapai lubang (huruf besar di U
bawah level saat ini dari tanah). Jika mencapai lubang, output nilai yang sebenarnya. Kekuatan ayunan akan menjadi kecepatan awal bola. Bola bergerak ke karakter berikutnya di sebelah kanan di setiap iterasi, kemudian kecepatan diubah tergantung pada karakter yang sekarang aktif. Jika kecepatan mencapai 0
atau kurang sebelum lubang, hasilkan nilai falsey.
_
mengurangi kecepatan oleh1
/
mengurangi kecepatan oleh5
\
meningkatkan kecepatan4
Kursus dapat diisi dengan spasi. Kekuatan ayunan akan selalu menjadi bilangan bulat positif.
Anda tidak perlu khawatir bola akan terlalu cepat masuk ke dalam lubang, berguling mundur atau melompat / memantul dari bukit.
Uji Kasus
Input: 27
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Output: true
----------
Input: 26
____ ____ _
__/ \ / U \
__/ \ / \_
\_/
Output: false
----------
Input: 1
U
Output: true
----------
Input: 1
_
U
Output: false
----------
Input: 22
/U
/
/
/
\/
Output: true
----------
Input: 999
_ _
\ /
\ /
\ /
U
Output: true
----------
Input: 5
/
/U
Output: false
----------
Input: 9
/\/\/\/\/U
Output: false
----------
Input: 16
_/\ _
\ __ /\/\/\ /
\ / \ / \ /
\__/ \ / \____________ _/
\_/ U
Output: true
Ini adalah kode mini-golf, jawaban terpendek dalam byte menang!
sumber
\_/
) dengan langkah-langkah berikut: pisah menjadi larik garis, putar, ratakan, ruang strip.\/\/\/\/\/
lebih efisien daripada kursus__________
.Jawaban:
Pyth, 27 byte
Demonstrasi
Kode ini melakukan sesuatu yang sangat pintar dan tidak aman sama sekali
X
. Lihat di bawah.Penjelasan:
sumber
Q
? Yaitu contoh terakhir dapat menyebabkan beberapa masalah?< ... Q
berfungsi sebagai perbandingan numerik hingga lubang, bukan sepotong. Setelah lubang itu, yang penting adalah hasilnya benar.Haskell,
111109 byteContoh penggunaan:
Bagaimana itu bekerja:
Sunting: @ user81655 ditemukan 2 byte untuk disimpan. Terima kasih!
sumber
Ruby,
10487 karakterContoh dijalankan:
sumber
Japt, 38 byte
Try it here!
Mengalahkan CJam!
Penjelasan
Pada dasarnya mengambil input string, memutarnya 90deg searah jarum jam, menghapus spasi dan baris baru, menghilangkan lubang dan semuanya setelahnya, dan membelah bersama karakter. Kemudian periksa apakah bola pernah mencapai nol atau di bawah menggunakan
every
fungsi.sumber
%
, dan>0
dapat diganti dengan¬
, karena sqrt dari angka non-positif selalu palsu (0 -> 0
,-1 -> NaN
).CJam,
4039 byteInput memiliki kekuatan pada baris pertama dan tentu saja mulai pada baris kedua. Output adalah
0
atau1
.Uji di sini.
Penjelasan
sumber
Retina,
82817774686768 byteCobalah online
>
s - misalnya, 4 adalah>>>>\n
. (apakah ini legal?)+`(?<=(.)*) (?=.*¶(?<-1>.)*(.))
$2
- Ratakan jalurnya - ganti spasi dengan karakter di bawahnya.Setelah tahap ini, data akan terlihat seperti ini:
Kita bisa mengabaikan semuanya setelah yang pertama
U
, kita tidak akan sampai di sana.>
mewakili langkah yang diizinkan untuk kita lakukan, atau energi yang tersisa.\
- masing dengan empat>
- lereng memberi kita energi tambahan.>_
atau>>>>>/
sampai tidak ada lagi_
s dan/
s mengkonsumsi energi.^>*U
- periksa apakah kita dapat mencapaiU
dengan energi positif (atau tanpa energi).Ini akan menampilkan
0
atau1
.Opsi tutup lainnya dengan
9179 byte adalah:Cobalah online
Ini adalah pendekatan yang sama tetapi dengan kelompok penyeimbang alih-alih pengganti yang kontroversial.
Saya yakin keduanya bisa di-pegolf lebih jauh, jadi salah satu dari mereka mungkin berakhir lebih pendek.
sumber
0
atau1
sebagai digit jika itu tidak menimbulkan byte tambahan.ES6, 117 byte
Tidak Disatukan:
Sunting: Disimpan 4 byte berkat to.
sumber
JavaScript (ES6),
108107106 byteIni adalah solusi yang saya buat ketika saya menciptakan tantangan.
Penjelasan
Membawa kekuatan sebagai angka dan tentu saja sebagai string. Pengembalian
1
untuktrue
atau0
untukfalse
. Kursus harus diisi dengan spasi.Uji
sumber
Python (3.5)
169160 byteSolusi rekursif tanpa fungsi transpose (zip)
Tidak disatukan
c untuk kursus, p untuk daya, v untuk kecepatan, h untuk tinggi
Pemakaian
sumber
Pyth, 35 byte
Penjelasan
sumber
Ruby, 85 karakter
Diadaptasi jawaban manatwork
sumber
JavaScript,
266263244 byteTidak disatukan
Pemakaian
sumber
Java, 219 Bytes
Ratakan saja, karena koordinat y tidak penting, sayangnya Java tidak memiliki garis vertikal. Itu juga tidak memiliki String-transpose.
Ulangi jalur yang rata dan catat kecepatan bola.
sumber
Oktaf,
111110 bytePenjelasan:
max
untuk setiap kolom'_/\'
ke[1, 5, -4]
(semua karakter lain kurang dari'_'
yang dipetakan ke0
)True
jika semua jumlah kumulatif dari awal kursus ke cangkir kurang dari kecepatan awal (False
jika tidak).Ini adalah test case yang sudah saya kembangkan mirip dengan yang kedua yang diusulkan oleh @Erwan dan beberapa hasil:
Dan inilah ujian pertama:
sumber
"//_U\\\\\\\_
hasilnya tidak benar karena Anda tidak menghapus karakter setelahU
hal yang sama jika Anda memiliki kursus dengan maksimum lokal seperti_//\\\\\U
U
. Itu yang(1:find(m==85))
dilakukannya; dibutuhkan subarray dari indeks pertama ke lokasiU
. Saya akan memeriksa test case Anda dengan beberapa kecepatan awal dan kembali kepada Anda.cumsum
ke variabel perantara dan kemudian menggunakannya untuk perbandingan akhirall(v>tmp(1:find(m==85)))
.C, 629 Bytes
Tidak Disatukan:
Pada dasarnya saya hanya membuat satu pass untuk mengkonversi string input agar sesuai semuanya dalam satu baris, lalu
sumber
if
/else
misalnya Andax+=*n==' ')?1:*n=='\n'?-x:(olc[x]=*n,1
. Kiat lain: dalam C,unsigned int
dapat ditulisunsigned
, langsung menyimpan 4 byte.Python,
212201188143 byteSebagian besar kredit untuk iterasi skrip ini jatuh ke @Erwan, yang memberi saya pendekatan yang sama sekali berbeda untuk mencoba dan beberapa tips yang menyelamatkan saya 55 byte pada akhirnya.
Tidak rekursif, jadi harus jauh berbeda dari solusi python lainnya.
Tidak digabungkan sedikit:
sumber
o=[''.join(x).split()[0] for x in zip(*c.split('\n'))]
yang menang 40 byte saya pikirbreak
denganreturn p>0
dan menghapusif p...
if"U"==v or p<1
jika ada maksimum lokal seperti_//\\\\\U