Karena banyak Geeks mungkin tahu sebagian besar halaman (95% saya pikir) di wikipedia akhirnya mengarah ke Filsafat seperti ini:
Klik tautan non-italic pertama atau di dalam tanda kurung yang menuju ke artikel normal lainnya: (yaitu bukan File: atau Special :, tetapi hal-hal seperti Wikipedia: boleh) dan ulangi yang itu sampai Anda mencapai filosofi.
Skrip harus:
- Ambil halaman pertama sebagai masukan
- Cetak nama setiap artikel
- Dan cetak berapa banyak artikel yang diperlukan untuk sampai ke Filsafat, dan jika tidak dikatakan demikian.
Anda mulai dengan 1000 poin, dan kehilangan satu untuk setiap karakter dalam kode, poin Bonus untuk:
Mendeteksi pengulangan artikel dan berhenti: +50
Mendeteksi pengulangan artikel dan meminta apakah pengguna harus membuka tautan berikutnya pada artikel: +170
Mengizinkan default pada pemeriksaan sebelumnya sebagai arg baris perintah atau serupa: +140
Kemenangan skor tertinggi.
code-challenge
AlphaModder
sumber
sumber
Jawaban:
Ruby, 1000 -
303299337 - 50373 - 170382 - 170 - 140379 - 170 - 140 karakter =697701713797928931Saya yakin ada banyak perbaikan yang harus dilakukan.
(Ini membutuhkan Nokogiri)
Contoh dijalankan:
Contoh satu tempat saya harus pergi ke tautan yang berbeda
Trik yang saya gunakan:
p a
untuk hanya mendapatkan tautan non-italic, karena semua tautan dalam artikel aktual yang bukan huruf miring selalu dalam elemen paragraf di Wikipedia.sumber
"BASH " - (Jika tidak salah: 1000 - 397 + 170 + 140 = 913 poin)"BASH" - (Jika tidak salah: 1000 - 386 + 170 + 140 = 924 poin)"BASH" - (Jika tidak salah: 1000 - 381 + 170 + 140 = 929 poin)
BASH sengaja mengutip karena ini adalah campuran alat yang digunakan dalam shell * nix tetapi dibungkus dengan skrip bash.
Edit 1:
http://
sebagaicurl
default untuk ini.href=
pertandingan pada jangkar untukf=
sebagai<a>
tidak memiliki lain yang normal atribut berakhir dif
. (Ini kemungkinan tag khusus. Sejauh ini belum melihat.)!Phil
bukanNoPhil
. Yang satu ini aneh bit sebagai Satu juga bisa mengatakan misalnya!
,0
,N
,!P
atau serupa.-s
aktifcurl
dapat dihapus untuk mengurangi tiga byte lagi, tetapi itu akan menghasilkan output yang berantakan. Tidak yakin apakah itu masalah.Menggunakan quirks, kode akan berakhir pada 379 byte, 931 poin.
Saya juga bisa menerapkan @plannapus penggunaan kotak navigasi yang cocok (semoga) dengan
(p|ul).*?<(\1)
menambahkan enam byte (mengurangi enam poin).Edit 2:
Menggunakan
${#c[@]}
untuk mencetak derajat pemisahan, bukan$i
counter.Menggunakan quirks, kode akan berakhir pada 374 byte, 936 poin.
Saya memanggil Cthulhu dan mencari solusi regexp + bash / shell / * nix.
Dicuri:
<p>
trik dari @Doorknob of Snow .Diimplementasikan:
Persyaratan:
bash
v.?grep
dengan-P
dukungan (PCRE).sed
curl
cut
Pemakaian:
Kode sebaris. Salin ke file.
chmod +x filename
. Dijalankan./script /wiki/…
dari bash shell.Kode diperluas dan dijelaskan:
sumber
JavaScript 726 (444 karakter [556] + 170)
Sekarang saya menghargai bahwa ini mungkin tidak valid sebagai bookmarklet, tetapi saya tetap menikmati bermain-main dengannya.
Penggunaan: Navigasikan ke halaman yang ingin Anda mulai dan jalankan yang berikut di konsol:
Untuk JavaScript hasilnya adalah sebagai berikut:
Solusi ini akan menganggap Anda ingin melompat ke tautan berikutnya pada satu loop yang terdeteksi, tetapi jika Anda mengubah
true
pada akhirnyafalse
akan muncul kotak konfirmasi (cukup menjengkelkan ...) tidak yakin apakah itu memenuhi syarat untuk bonus sekunder atau tidak. Saya akan berasumsi tidak.Bertakuk:
Jadi saya awalnya melewatkan bagian tentang mengabaikan item di parens, menambahkan yang membuatnya jauh lebih bertele-tele, jadi saya berharap untuk golf yang fungsi filter turun (atau mudah-mudahan ganti seluruhnya).
Bekerja di Chrome dan Firefox (diuji di Firefox 26)
sumber
C # - 813 karakter
Nilai: 1000-813 + 50 + 170 + 140 = 547 :(
Tidak ada perpustakaan eksternal. Deteksi loop .
Argumen pertama adalah Artikel Sumber, kedua adalah Artikel Target.
Versi golf:
Versi cerdas:
Contoh lari, dari "Langit" ke "Filsafat":
sumber
Scala (294 karakter => 1000-294 + 140 = 846 poin)
Solusi yang diperbarui yang secara otomatis mengambil tautan berikutnya jika sudah digunakan. Terima kasih untuk 140 poin bonus.
Logika: Ambil tautan "/ wiki" pertama yang tidak memiliki ":" di dalamnya (jadi abaikan tautan "File:"). Bilas dan ulangi dengan rekursi mengembalikan hitungan +1 setiap waktu. Saya menyimpan daftar semua keluaran sebelumnya berguna sehingga program tidak masuk ke loop tak terbatas.
Ekspresi Reguler: Saya memiliki 2 bentuk ekspresi reguler.
"<p>.*?\"/wiki/([^:]*?)\".*?/p>"
yang menemukan tautan di dalam<p>
tag"p>.*?/wiki/([^:]*?)\""
yang merupakan tag sedikit lebih eksperimental yang telah terbukti berfungsi tetapi memberikan hasil yang berbeda karena, terkadang, mengambil tautan dari bilah info sisi kanan. Ini adalah artikel biasa jadi saya yakin ini masih berlaku. Jika diputuskan tidak, OP (atau orang lain) dapat memberi saya komentar dan saya dapat memperbarui solusi saya ke reg-ex yang lebih baik.Saya akan menggunakan persamaan reguler kedua hingga menemukan kasus uji yang tidak berfungsi atau OP menyebutkan pengambilan tautan dari bilah samping tidak diizinkan (menurut saya, bilah info masih menjadi bagian dari artikel yang sebenarnya itu sendiri; lebih dari ringkasan).
Sumber yang Diminimalkan:
Sumber yang Dapat Dibaca:
Output sampel:
Memasukkan
Keluaran
sumber
args(0)
untuk mendapatkan argumen pertama, singkirkan definisi Andaobject
danmain
, dan saya pikir Anda juga bisa menghapusnya:Int
. pastebin.com/YqywKcG8: Int
. Tidak menyadari Anda melakukan panggilan rekursif. Pastebin saya juga diambil dari Sumber Baca Anda yang lama, tetapi konsep yang sama berlaku.:Int
sana. Kemudian hari ini, saya juga akan menambahkan bentuk yang dapat dibaca dari solusi 333 char yang saya miliki. Terima kasih atas saran @KChalouxobject Q extends App { ... }
benar-benar tidak perlu jika Anda menjalankan kode dengan juru alih-alih kompilasi dengan scalac. Jalankan saja denganscala <filename> [args..]
R, 379 karakter; 1000-379 + 170 = 791 poin
Versi yang menanyakan pengguna bagaimana melanjutkan ketika perulangan terdeteksi
Dengan lekukan dan komentar:
Contoh dijalankan:
R, 325 karakter; ??? poin
Versi itu, secara default mengambil tautan non-redundan pertama (yaitu non-looping).
sumber