Ada permainan yang saya suka mainkan. Itu terjadi pada kotak ukuran terbatas (tapi itu dibungkus, seperti bola). Pada kisi itu, titik acak (hanya bilangan bulat) dipilih. Kemudian, saya, pengguna, diminta untuk memasukkan koordinat. Jika input saya persis sama dengan titik acak, saya diberitahu bahwa saya telah menang. Kalau tidak, saya diberitahu jarak titik-bijaksana antara input saya dan titik acak. Misalnya, jika saya menebak (2,2)
dan titik acak berada (4,3)
, maka jaraknya akan menjadi sqrt[(3-2)^2 + (4-2)^2] = sqrt[5]
.
Permainan berlanjut sampai pemain tiba di lokasi yang benar dari titik tersebut.
Tujuan Membuat versi fungsional permainan yang dijelaskan di atas. Anda harus membuat program lengkap untuk melakukannya. Inilah yang harus dilakukan oleh program Anda:
- Minta dua input: tinggi dan lebar papan. Asalnya ada di kiri atas papan. Input ini tidak akan melebihi
1024
. - Pilih titik acak di papan itu; ini akan menjadi titik untuk ditebak.
- Terima input yang mensimulasikan belokan. Input akan berupa sepasang integer yang dipisahkan ruang atau dua input integer yang terpisah. Menanggapi masukan ini, program akan melakukan satu dari dua hal:
- Jika input cocok dengan titik acak yang dipilih, output pesan menandakan kemenangan pengguna. Saya akan menyarankan "Kamu menang!".
- Jika tidak, keluarkan jarak antara titik input pengguna dan titik acak.
- Setelah pengguna mencapai kemenangan, tampilkan jumlah putaran yang dilakukan pengguna. Program kemudian keluar.
Bonus
Bonus diterapkan sesuai urutan kemunculannya dalam daftar ini
- -150 byte jika program Anda mengambil integer input
D
yang menjelaskan dimensi di mana game berlangsung. Misalnya, jikaD = 3
, maka Anda membuat titik3
bilangan bulat acak , mengambil3
input bilangan bulat, dan menampilkan jarak antara titik-titik itu. - -50% (atau + 50% jika
score < 0
) jika Anda memberikan representasi grafis dari papan (ASCII atau Gambar) yang menunjukkan di mana pengguna sebelumnya telah menebak pada kotak dimensi yang diberikan dan penghitung putaran. (Jika Anda memilih bonus pertama, maka bonus ini hanya berlaku untuk2D
dan1D
mode. Jika Anda menambahkan output grafis 3D, Anda mendapatkan tambahan -50%.) - -60 byte jika Anda dapat memberikan gamemode (dipilih oleh input di awal; yaitu, ketika diberikan
0
, melakukan gamemode biasa; ketika diberikan1
, lakukan gamemode ini) di mana titik bergerak 1 unit dalam arah ortogonal acak per putaran
Lebih lanjut tentang pembungkus
Pembungkus hanya terjadi ketika, dalam bonus ketiga, titik bergerak bergerak melintasi batas mana pun; dalam hal ini, titik bergerak dibengkokkan ke titik masing-masing, seperti:
... ...
..R (move right) R..
... ...
Perilaku membungkus ini tidak mempengaruhi tebakan pengguna, selain dari fakta bahwa titik telah berubah arah.
Papan peringkat
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
# Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
10x10
, titik acaknya adalah (9,4)
, dan saya kira (2,2)
, apakah jaraknya sqrt(13)
atau sqrt(53)
? (Catatan untuk masa depan: jika Anda melakukan sesuatu yang aneh, jangan masukkan keacakan karena itu hampir tidak mungkin untuk memasok kasus uji). 2. Dalam bonus ketiga, haruskah jarak dihitung dan dikeluarkan sebelum atau setelah titik bergerak?