Gim anak-anak tertentu, sering disebut "Huckle Buckle Beanstalk", dimainkan dengan dua pemain. Berikut adalah deskripsi singkat tentang bagaimana permainan itu dimainkan:
- Satu pemain ditunjuk sebagai "penyembunyi", dan yang lainnya "pencari".
- Pencari keluar dari ruangan sementara penyembunyi menyembunyikan benda kecil yang dipilih sebelumnya, "harta".
- Penyembunyi kemudian mencoba mencari objek sementara pencari memberi mereka petunjuk bermanfaat:
- Jika pencari mendekati harta, penyembunyi akan memanggil "lebih hangat!"
- Jika pencari bergerak menjauh dari harta karun, penyembunyi akan memanggil "dingin!"
- Begitu pencari menemukan harta itu, mereka mengumumkan bahwa mereka telah menemukannya.
Anak-anak Anda ingin Anda bermain game ini dengan mereka, namun, Anda sangat sibuk menjawab pertanyaan pada codegolf.SE sebagai gantinya. Jadi, Anda memutuskan untuk menulis program untuk bermain game dengan mereka. Namun, Anda ingin menggunakan waktu sesedikit mungkin mengetik, jadi Anda mencoba membuat program sesedikit mungkin karakter.
Kita dapat mendefinisikan ruang di mana game dimainkan sebagai bidang persegi toroidal dua dimensi. Koordinat 0,0
adalah sudut kiri bawah, dan koordinat 99,99
adalah sudut kanan atas. Harta itu ditempatkan pada posisi tertentu di n,m
mana n
dan m
keduanya bilangan bulat positif antara 0 dan 99 inklusif.
Program Anda akan mendapatkan input dari pemain menggunakan fungsi input pengguna inbuilt-nya (mis prompt()
. raw_input()
, Dll.) Jika bahasa yang Anda pilih tidak memiliki fungsi input pengguna, ambil input dari STDIN sebagai gantinya. Gim akan bekerja sebagai berikut:
- Program "menyembunyikan" harta karun pada suatu posisi
n,m
. - Program meminta pencari untuk memasukkan posisi pencarian awal. Input akan datang dalam bentuk di
x y
manax
dany
bilangan bulat positif. - Program menghasilkan "benar" jika posisi pencarian awal
x,y
sama dengan posisi hartan,m
dan berakhir. Jika tidak: - Program akan meminta pencari untuk pindah. Input datang dalam bentuk
a b
di manaa
danb
adalah bilangan bulat yang mungkin negatif . Ini mewakili vektor arah yang dicari oleh pencari (a
adalah arah x danb
adalah arah y). - Jika posisi yang dihasilkan dari pencari berada di harta karun, program output "benar" dan berakhir. Jika tidak:
- Program menghasilkan "pendingin" jika pencari bergerak menjauh dari harta karun, atau "lebih panas" jika mereka bergerak menuju harta karun.
- Lanjutkan ke langkah 4.
Kata-kata "bergerak menjauh" dan "bergerak ke arah" mungkin bersifat ambisius. Untuk tantangan ini, jika posisi yang dihasilkan dari pencari setelah bergerak lebih dekat ke harta daripada posisi mereka sebelum mereka bergerak, mereka bergerak menuju harta. Kalau tidak, mereka akan pindah. (Ya, ini berarti bahwa jika posisi resultan dan sebelumnya berada pada jarak yang sama, program akan menampilkan "cooler").
Ini kode golf, jadi kode terpendek menang. Ajukan pertanyaan jika spesifikasinya tidak jelas.
Jawaban:
Javascript,
275279Bukan pemenang dengan cara apa pun, tetapi ini harus memulai sesuatu. Menggunakan trik dengan
eval()
dan mendefinisikan100
sebagai "konstan" untuk memotong beberapa byte. Versi tidak dikumpulkan di bawah ini.Sunting: Saya menjadi korban operasi string + angka Javascript, karenanya mengapa
D()
tidak bekerja dengan baik. Saya juga memperbaiki bug di mana "lebih panas" ditampilkan sebelum "benar". Ini menambahkan 4 byte.sumber
n
danm
keduanya diatur ke nol (untuk tujuan pengujian), dan0 1
dimasukkan sebagai posisi awal, keduanya0 -1
dan0 1
kembali lebih dingin.colder == cooler
Python 3 - 238 byte
Kode:
Tidak Disatukan:
Contoh dijalankan:
Saya tidak akan mengatakan bahwa strategi saya dalam menemukan harta adalah partikularitas cepat ...
sumber
Groovy -
278266262Golf:
Tidak Disatukan:
Percobaan:
sumber
Groovy - 343 karakter
Berasal dari jawaban LittleChild .
Golf:
Tidak Disatukan:
Contoh dijalankan, di mana program memancarkan target untuk ilustrasi. Dari pemahaman saya tentang OP, input awal adalah absolut, dan input selanjutnya adalah relatif. Juga, grid membungkus.
jalankan A:
jalankan B:
sumber
APL, 86 karakter
Perhitungan jarak tidak membungkus, tetapi bergerak.
Tidak Disatukan:
Contoh:
sumber
Python 2.7, 227
Saya mendapat fungsi input dan ide untuk menerapkan modulo dalam perhitungan jarak daripada pembaruan lokasi dari jawaban matsjoyce.
Kami hanya perlu jarak untuk perbandingan: Apakah kami berada di lokasi yang tepat? Apakah kita lebih dekat dari sebelumnya? Untuk kedua hal ini, kami mendapatkan hasil yang sama dengan membandingkan kuadrat jarak seperti halnya membandingkan jarak. Perhitungan akar kuadrat yang diperlukan untuk mendapatkan jarak aktual tidak perlu.
Tidak Disatukan:
Contoh dijalankan:
sumber
ECMAScript 6, 262
Tidak Disatukan:
sumber
C
193176171Saya yakin harus ada penghematan pada pembuatan nomor acak. Terlepas dari itu, kuncinya adalah membaca di x & y hanya diperlakukan sebagai offset dari 0, jadi saya hanya perlu satu pemindaian. Itu berarti bahwa saya harus menekan pencetakan lebih panas atau lebih dingin pada iterasi pertama.
Perubahan:
Masukkan lokasi ke x & y secara langsung dan kemudian geser kembali ke (0,0) daripada meletakkannya di m & n dan gunakan x & y untuk mencarinya.
Saya menyadari bahwa saya mencetak "lebih panas" dan "benar" sehingga saya harus menambahkan tiga karakter tambahan di sini.
Menulis ulang pencetakan untuk memasukkan semua kondisi di dalamnya, menyimpan panggilan ekstra untuk menempatkan ().
sumber
JavaScript ES6, Firefox Terbaru,
177173164 karakterJelas, ini tidak bisa mengalahkan APL. Bahasa itu gila! Mungkin dikembangkan hanya untuk pertanyaan kode-golf: D: P
Tapi inilah solusi saya dalam JavaScript ES6. Jalankan di Firefox Nightly terbaru (atau mungkin juga versi rilis) di Web Console atau Scratchpad.
Saya ingin melewati versi yang tidak diserang untuk saat ini. Komentari jika Anda ingin melihat versi yang tidak disembunyikan :)
EDIT : Banyak bermain golf! berkurang 9 karakter. Masih melihat apakah lingkup golf lebih jauh.
sumber
Python 226
Itu
import
terlihat sangat panjang dan bodoh, tetapi sebenarnya menyelamatkan saya 8 karakter.:D
Contoh game:
sumber
Sinclair / ZX Spectrum BASIC - 305 byte
Karena Spectrum menyimpan setiap kata kunci sebagai satu byte, ini membantu menjaga ukurannya tetap rendah. Setelah dimasukkan, cari tahu ukurannya dengan
sumber