API Perburuan telur Paskah!
Ada API di http://easter_egg_hunt.andrewfaraday.com yang akan menyediakan perburuan telur Paskah khusus, hanya untuk Anda ...
Anda dapat melihat dokumen API di alamat di atas, atau coba dari sini.
API:
Semua panggilan ke API ini adalah permintaan GET, yang akan mengembalikan string JSON.
Contoh-contoh ini berada di taman 5x5, hanya untuk ilustrasi. API akan benar-benar beroperasi di kebun 100x100 (dari indeks 1 hingga 100)
/new_game
Secara internal, API menghasilkan taman, dan menyembunyikan telur di dalamnya.
Dalam contoh ini telur berada pada 4, 4
+----------+
| |
| |
| |
| |
| E |
| |
| |
| |
| |
| |
+----------+
Panggilan
/new_game
Kembali
{game_id: 'abcde'}
/guess/:game_id/:x/:y
API terlihat di taman dan memberi tahu Anda seberapa dekat Anda.
Jika Anda menebak 2 melintasi dan 8 ke bawah, taman itu terlihat seperti ini
+----------+
| |
| |
| |
| |
| E |
| |
| |
| g |
| |
| |
+----------+
Panggilan
/guess/abcde/2/8
Kembali
{x: 'higher', y: 'lower'}
Ini berarti: * x Anda terlalu rendah (posisi telur lebih tinggi) * y Anda terlalu tinggi (posisi telur lebih rendah)
Panggilan yang benar:
/guess/abcde/4/4
Kembali
{x: 'right', y: 'right', turns: 10}
Aturan
Tulis program untuk menemukan telur Paskah dengan API.
- Gunakan bahasa apa pun.
- Cobalah untuk menulis kode yang ringkas, tetapi dapat dibaca.
- Program Anda HARUS memanggil '/ new_game' setiap saat, dan menggunakan game_id yang dikembalikan dalam semua panggilan 'tebak'. Tidak mengintip di kebun!
- Cobalah untuk menyelesaikan game secara konsisten dengan jumlah panggilan sekecil mungkin.
- Ini bukan kode golf.
Jawaban kompetitif?
Untuk berada dalam peluang menang inilah yang perlu kita ketahui:
- Kode apa yang Anda gunakan (Dalam jawaban Anda, atau tautan github jika lebih besar dari yang Anda inginkan untuk dijawab).
- Jalankan kode Anda 10 kali, dan catat game_id dan skor setiap kali.
-game_id- : -score-
misalnya
abbbbbbbb : 10
abbbbbdd : 5
(Catatan: Game_ids diperlukan untuk memverifikasi hasil)
Skor akan dihitung sebagai berikut:
- Dua hasil tertinggi dan terendah akan diabaikan.
- 6 skor yang tersisa akan ditambahkan bersamaan.
- Ini skor kamu.
- Skor terendah menang.
Tambahan
Tl, dr: Aplikasi ini agak jelek.
API ditulis dalam waktu sekitar 90 menit, dan digunakan pada Raspberry Pi 2. Harap bersikap lembut dengan server API saya. Jika Anda mengalami hal yang buruk ini, Anda dapat merusaknya untuk semua orang.
Juga, ini diterapkan dengan NOIP untuk mensimulasikan alamat IP statis, tetapi kadang-kadang ini akan keluar sebentar. Itulah yang saya dapatkan untuk menggunakan web hosting tanpa anggaran.
Hanya untuk cekikikan, inilah analisis statistik sederhana dari permainan yang dimainkan ... http://easter_egg_hunt.andrewfaraday.com/stats
sumber
Jawaban:
APL + MENANG
Bekerja dengan memulai di tengah dan menyatu pada lokasi dengan menetapkan batas atas atau bawah ke nilai terakhir dan menambah atau mengurangi setengah perbedaan ke batas yang sesuai dengan tebakan terakhir pada setiap iterasi.
Fungsi ini menggunakan fungsi berikut untuk melakukan panggilan API:
Hasil untuk 10 percobaan adalah:
sumber
Ruby (+ JSON, HTTParty) - Nilai: 40 (6 + 7 + 7 + 7 + 7 + 6)
Ini adalah tantangan yang menyenangkan. Saya menggunakan pencarian biner untuk menemukan telur dan mendapatkan hasil ini:
Berikut kodenya :
sumber
Python 3 (+ permintaan), 39 poin
Skor 39 (7 + 7 + 7 + 6 + 6 + 6 - 7-7-6-6)
Sumber:
sumber
PHP
Menggunakan file_get_contents dan json_decode .
Sejauh yang saya tahu , strategi optimal membutuhkan paling banyak 7 gerakan, dengan rata-rata 5,8 bergerak pada satu sumbu, dan rata-rata 6,4786 bergerak pada dua sumbu.
Sampel dari 10
Nilai: 6 + 6 + 6 + 6 + 6 + 7 = 37
Golf, 245 byte
Output Sampel
sumber
Haskell, Total Skor
6640(Sunting: Melewatkan bagian tentang menjatuhkan hasil tertinggi dan terendah dalam penilaian)
Saya hanya menggunakan pencarian biner. Tidak yakin apakah ada cara untuk menjadi lebih baik dari 6,5 per coba rata-rata tanpa curang (saya kira saya bisa terus menjalankan set 10 sampai saya mendapatkan skor yang lebih baik, tapi di mana kesenangannya?).
Ah, omong-omong tantangannya sangat menyenangkan. Idenya cukup sederhana untuk menjadi inklusif bagi semua orang, dan saya biasanya tidak berurusan dengan API web dalam pekerjaan saya dan saya hanya ingin alasan untuk mencobanya
servant
, jadi terima kasih untuk itu :) Mungkin tidak terlalu bagus jika Anda ' Saya berharap untuk kompetisi, tapi saya pikir tantangan seperti ini dapat digunakan untuk mengumpulkan sampel kode untuk pemula dan hal-hal seperti itu.Skrip yang dapat dieksekusi (menjalankan satu game dan melaporkan gameId dan skor):
Hasil
sumber
JavaScript, 35 poin
Memposting kode yang tidak serigala tidak cocok dengan saya! : D
Penilaian: 5 + 6 + 6 + 6 + 6 + 6 = 35
Sangat beruntung, menarik skor 3 pada tes terakhir saya sebelum memposting!
Cobalah
Menggunakan agak versi golfed dari kode di atas!
Tampilkan cuplikan kode
sumber
Karat
Ketika itu terjadi, Rust memiliki perpustakaan deserialisasi yang benar-benar bagus
serde
yang banyak membantu program ini. Algoritma itu sendiri adalah pencarian biner yang agak mudah, kecuali dijalankan dua kali - sekali untukx
dan sekali untuky
.Makro URL memiliki kasus khusus tanpa string format karena dapat dilakukan secara gratis, dan ketika tidak memformat string akan disimpan dalam penyimpanan statis.
Cargo.toml
main.rs
Ringkasan
5 + 6 + 7 + 7 + 7 + 7 = 39
sumber
Python 2
Vesrion golf - 276 byte
Versi + komentar yang lebih mudah dibaca
Hasil
Ringkasan
Agak diharapkan: D
6 + 6 + 6 + 7 + 7 + 7 = 39
sumber