pengantar
Baru-baru ini, saya skyping dengan sekelompok teman dan kami bosan dan tidak ada hubungannya, jadi kami "menemukan" sebuah "permainan" (beberapa orang di komentar menunjukkan bahwa permainan ini dapat dimainkan secara online dan sangat populer, jadi kami secara pasti tidak menciptakannya, meskipun saya belum pernah melihatnya). Alasan saya memasukkan kata "permainan" dalam tanda kutip adalah karena itu bukan permainan komputer yang sebenarnya, tetapi dimainkan di Wikipedia.
Ini sangat mudah dimainkan: Seseorang memilih beberapa artikel Wikipedia sebagai tujuannya. Mari kita asumsikan Code Golf untuk contoh ini. Semua pemain kemudian harus mulai dari artikel acak (dengan menekan Artikel Acak di bilah sisi atau pergi ke URL ini ) dan harus sampai ke "tujuan" secepat mungkin menggunakan hanya artikel yang ditautkan dari artikel tempat Anda berada saat ini . Aturan termasuk:
- Fungsi pencarian tidak diizinkan (jelas)
- Anda hanya dapat mengklik tautan di teks utama artikel (khususnya semua teks di dalamnya
<div id="bodyContent">
) - Jika halaman acak Anda atau halaman lain yang Anda temui tidak memiliki tautan yang valid (tautan mati, putaran, dll.) Atau tidak ada tautan sama sekali yang dapat Anda putar lagi.
Tantangan
Di sinilah Anda masuk: sayangnya saya sangat buruk dalam permainan ini, tapi saya juga penipu kotor. Jadi saya ingin Anda menerapkan bot ini untuk saya. Saya juga seorang programmer, jadi tentu saja hard disk saya penuh dengan hal-hal seperti kode, perpustakaan dan semacamnya dan saya hanya punya beberapa byte memori untuk cadangan. Oleh karena itu tantangan ini adalah Code Golf, jawaban dengan byte paling sedikit menang.
Detail Implementasi:
- Tentu saja Anda tidak perlu mengimplementasikan bot cerdas yang mengetahui koneksi antar topik dan secara otomatis mendeteksi rute optimal. Pemaksaan kasar lebih dari cukup untuk tujuan tantangan ini
- Dalam permainan yang sebenarnya, waktu diperhitungkan. Program Anda seharusnya tidak perlu lebih dari 1 jam untuk menemukan artikel (ini untuk menghindari celah seperti pencari acak yang akan "akhirnya" menemukan tujuannya)
- Jika tidak ada jalur ke tujuan (mis. Tautan mati atau loop), Anda dapat memilih apa yang harus dilakukan dari daftar di bawah ini:
- Berhenti (skor tetap sama)
- Dapatkan artikel acak lain dan coba lagi dan jangan lakukan apa pun di loop (skor - = 10)
- Dapatkan artikel acak lainnya pada tautan mati atau putaran (deteksi loop otomatis) (skor - = 50)
- (Dengan "skor" Maksud saya jumlah byte Anda di sini)
- 20 byte bonus lainnya akan dikurangi jika Anda "melacak" rute, sehingga Anda mencetak judul setiap halaman yang Anda kunjungi.
- Pustaka jaringan standar dapat digunakan (untuk menghindari celah seperti "Saya membuat pustaka jaringan saya sendiri yang merayapi artikel wikipedia")
- Satu-satunya hal yang berhubungan dengan jaringan yang harus dilakukan program Anda adalah mengirim permintaan HTTP untuk mengunduh halaman wikipedia
- Jika program Anda menemukan halaman, itu harus keluar, tetapi entah bagaimana menandakan bahwa itu selesai (mencetak karakter "f" atau judul halaman sudah cukup)
- Celah standar harus dihindari
Bersenang-senang bermain golf!
(Ini adalah pertanyaan pertama saya di sini, jadi tolong tunjukkan celah dan peringatan yang jelas dalam komentar sebelum mengeksploitasi mereka - terima kasih: D)
Jawaban:
Python 373 -> 303
Bunyinya tujuan Wikipedia dari
input()
(input pengguna) dan harus dalam format/wiki/dest
. Jadi, sesuatu seperti/wiki/Code_golf
atau/wiki/United_States
. Itu juga menggunakan satu ruang untuk indentasi danhttp://enwp.org
bukannya URL lengkap Wikipedia untuk menyimpan byte.Menggantung sekali-sekali, dan saya tidak tahu mengapa. Mungkin karena batasan kurs Wikipedia?
Saya menemukan halaman Boston Red Sox Wikipedia dalam waktu 9 menit 20 detik, dan halaman Amerika Serikat dalam waktu kurang dari 10 detik, jadi seharusnya tidak terlalu lama untuk menemukan Code Golf ...
sumber
/wiki/Special:Random
url. Akibatnya, setelah mengunjungi banyak url, itu akan memakan seluruh RAM Anda.from ... import*
.import mechanize as m
dan menugaskanm.Browser()
untuka
jadi ketika saya sebuta.open()
saya berlaku memanggilmechanize.Browser().open()
sekarang aku hanya mengimpor semuamechanize
dan untuk melewatkan... as m
bagian.