Saya pegolf kode yang sangat kasual, dan tidak sering melihat posting sampai mereka muncul di sidebar "Pertanyaan Jaringan Panas" di StackOverflow. Biasanya, saya terlambat ke permainan, dan karena satu-satunya bahasa yang saya tahu adalah Python, ada sedikit gunanya saya menjawab karena sudah ada beberapa jawaban Python. Tantangan Anda adalah mencari tahu apakah sebuah pertanyaan pantas saya jawab.
Memasukkan:
- Kode Anda (fungsi atau program) akan mengambil satu parameter input
i
Keluaran:
- Nilai Truthy atau Falsey untuk id pertanyaan
i
. Keluaran Kebenaran jika pertanyaan memiliki lebih dari 5 jawaban, lebih dari 3 skor pertanyaan, dan satu atau kurang jawaban dalam Python (tidak ada perbedaan antara versi).
Aturan / Klarifikasi:
- Format input bisa masuk akal (stdin, file, command line), tetapi harus ditentukan dalam jawaban Anda. Tipe data dan spasi putih terkemuka / tertinggal tidak masalah.
- Asumsikan id pertanyaan valid untuk
codegolf.stackexchange.com
. - Abaikan persyaratan pertanyaan khusus bahasa. (yaitu jika sebuah pertanyaan memenuhi suara dan jawaban, dan tidak memiliki jawaban Python karena hanya Java, itu masih menghasilkan Kebenaran).
- Sebuah jawaban memenuhi syarat sebagai jawaban Python jika "python" (case insenstive) muncul di mana saja sebelum baris baru pertama dari posting.
- Ini adalah kode golf, jadi kode terpendek dalam byte menang.
Contoh Kasus *
id = 79082 => True
id = 78591 => False (less than 5 answers, also hella hard)
id = 78410 => True
id = 76428 => False (greater than 1 Python answer)
id = 78298 => False (not high enough question score)
* Diverifikasi pada saat posting, mungkin telah berubah
code-golf
internet
classification
wnnmaw
sumber
sumber
Jawaban:
05AB1E ,
167160159158156154143 byteSial, hampir selama bahasa normal ...Sial ...
lebih lamamengalahkan jawaban Ruby dengan 1 byte.Sekarang lebih lama dari jawaban Ruby, argh! .Saya mungkin harus pergi tidur sekarang.
Terima kasih kepada @wnnmaw untuk menghemat 1 byte dan terima kasih kepada @R. Kap untuk menyimpan 2 byte lagi!
Kode:
Atau dengan lebih mudah dibaca:
Penjelasan:
Pertama-tama, banyak teks sedang dikompresi di sini, yang diterjemahkan menjadi Python tua yang bagus. Versi tidak terkompresi adalah:
Bagian ini:
sebenarnya muncul nilai stack, menyalinnya ke url dan mengambil semua data HTML. Data HTML didorong di atas tumpukan menggunakan
#.append(f.read())
.Kami menghitung jumlah jawaban , dengan menghitung jumlah kemunculan
class="answer"
.Untuk menghitung jumlah suara, kami hanya membagi data pada "berguna dan jelas" dan hanya menyimpan nilai digit
[0:99]
menggunakan®"useful and clear"¡`99£þ
. Ini adalah jumlah upvotes.Akhirnya, kita perlu memeriksa setiap jawaban jika teks
"Python"
ada sebelum teks header penutup. Untuk mendapatkan semua jawaban, kami hanya membagi dataclass="post-text"
dan membagi masing-masing lagi<
. Kami menghapus dua elemen pertama untuk mendapatkan bagian di mana bahasa ditampilkan dan memeriksa apakah versi huruf kecil ada di string ini.Jadi, sekarang tumpukan kita terlihat seperti ini untuk id =
79273
:Ini juga bisa dilihat dengan
-d
bendera ebug menyala di interpreter.Jadi, itu hanya masalah pemrosesan data:
Menggunakan pengodean CP-1252 . Anda dapat mengunduh juru bahasa di sini .
sumber
;)
ppcg.lol/q/id
kompresi?Python 3.5,
280272260242240 byte:( Terima kasih Adnan untuk trik menggunakan
*
operator dalam perbandingan yang menghasilkan 2 byte yang disimpan! )Cukup sederhana. Menggunakan
urllib
pustaka bawaan Python untuk pergi ke situs pertanyaan, dan kemudian menggunakan ekspresi reguler untuk menemukan jumlah suara, jumlah jawaban, dan jumlah jawaban khusus Python dalam teks yang diterjemahkan yang dikembalikan dari situs web. Akhirnya, nilai-nilai ini dibandingkan dengan kondisi yang diperlukan untuk mengembalikantruthy
nilai, dan jika mereka memenuhi semua kondisi, makaTrue
dikembalikan. KalauFalse
tidak demikian.Satu-satunya hal yang saya khawatirkan di sini adalah bahwa ekspresi reguler memberikan banyak cara dalam hal jumlah jawaban spesifik python untuk menyimpan byte, sehingga mungkin sedikit tidak akurat pada waktu-waktu tertentu, meskipun mungkin cukup baik untuk tujuan dari tantangan ini. Namun, jika Anda ingin yang lebih akurat, saya telah menambahkan satu di bawah ini, meskipun lebih lama dari yang di atas. Yang ditunjukkan di bawah saat ini adalah 298 byte karena menggunakan ekspresi reguler yang jauh lebih lama - yang Anda tidak tahu berapa lama waktu yang saya butuhkan - untuk menghitung jawaban Python daripada fungsi asli saya demi akurasi. Yang ini harus bekerja untuk setidaknya 80% hingga 90% dari semua kasus uji yang dilemparkan padanya.
Tetapi, bagaimana dengan pertanyaan-pertanyaan itu dengan beberapa halaman jawaban? Tak satu pun dari yang di atas akan berfungsi dengan baik dalam situasi itu, jika, katakanlah, 1 jawaban python ada di halaman pertama dan yang lain ada di yang kedua. Yah, saya mengambil kebebasan untuk memperbaiki masalah ini dengan membuat versi lain dari fungsi saya (diperlihatkan di bawah) yang memeriksa setiap halaman jawaban, jika ada banyak jawaban, untuk jawaban Python, dan itu telah dilakukan dengan cukup baik pada banyak kasus uji saya. telah melemparkannya. Nah, tanpa basa-basi lagi, inilah fungsi baru dan yang diperbarui:
Cukup lama, bukan? Saya tidak terlalu suka golf code dengan ini, meskipun, jika Anda mau, saya bisa sedikit menurunkan golf. Kalau tidak, saya menyukainya, dan tidak bisa lebih bahagia. Oh, saya hampir lupa, sebagai bonus tambahan, ini juga menampilkan jumlah total jawaban Python pada pertanyaan, total suara pada pertanyaan, dan total jumlah jawaban pada pertanyaan jika pertanyaan
id
terkait dengan pertanyaan dengan lebih dari 1 halaman jawaban. Kalau tidak, jika pertanyaan hanya terdiri dari satu halaman jawaban, itu hanya menghasilkantruthy/falsy
nilai. Saya benar-benar agak terbawa dengan tantangan ini.Masing-masing mengambil pertanyaan
id
dalam bentuk a string .Saya akan meletakkan
Try It Online!
tautan di sini untuk setiap fungsi, tetapi sayangnya, tidak adarepl.it
atau tidakIdeone
mengizinkan pengambilan sumber daya melaluiurllib
perpustakaan Python .sumber
http://codegolf.stackexchange.com/q/
untuk mengambil pertanyaan. Juga, apakahhttp://
wajib?unknown url type
kesalahan.ppcg.lol/q/id
juga berfungsiJulia, 275 byte
Ini adalah fungsi yang menerima integer dan mengembalikan boolean. Itu terhubung ke Stack Exchange API dan setiap kali menjalankan fungsi membuat 2 permintaan API, jadi jangan jalankan berkali-kali atau Anda akan menghabiskan kuota 300 permintaan / hari Anda.
Tidak Disatukan:
sumber
ppcg.lol
sebagai tautan singkat ke semua hal codegolf, versi API tidak cukupRacket, 339 Bytes
Masih banyak golf.
sumber
Ruby + HTTParty ,
170146145142139138 + 11 (-rhttparty
flag) =181157156153150149 byteSaya tidak berpikir ada kasus tepi yang akan menyebabkan pola regex saya rusak, saya harap ...
Diperbarui ke shortlink disediakan oleh @WashingtonGuedes dan menemukan bahwa HTTParty tidak mengeluh jika saya mulai dengan
//
bukanhttp://
.Diperbarui untuk regex yang sedikit lebih aman. Saya menyimpan byte dengan cara menemukan bahwa objek respons HTTParty mewarisi dari String, yang berarti saya bahkan tidak perlu menggunakan
.body
ketika mencocokkan regex!@manatwork menunjukkan penambahan karakter yang tidak disengaja yang telah saya tinggalkan, dan demi golf,
i
harus diterima sebagai String sekarang.Regex yang diperbarui.
Sama panjang.-1 byte dengan memotong paren.Catatan tambahan:
"post-text"
, yang kami cocokkan denganst.*xt"
. Versi yang lebih aman akan menambah ruang setelahnya, tapi kami mengorbankan itu demi golf.net/http
modul asli karena penanganan pengalihan yang tepat untuk URL yang diberikan."up*?\d
adalah urutan terpendek yang saya temukan yang sesuai dengan jumlah suara. Kami hanya membutuhkan yang pertama, jadi untungnya jawaban tidak memengaruhi ini.sumber
ppcg.lol/q/#{i}
juga berfungsippcg.ga/q#{i}
mungkin? (Saya tidak tahu Ruby)ppcg.lol/q#{i}
apakah menurut saya berlaku? (a/#b
Sama sepertia#b
)"
merusak/"e-c.*?(\d+)/
ekspresi reguler. By the way, kebutuhan katakanlah tentang input bahwa “jenis data (...) tidak masalah.” Jadi lebih baik lulus parameter i sebagai string, sehingga Anda dapat mengganti substitusi dengan Rangkaian:"//ppcg.lol/q/"+i
.Groovy,
179161157Terima kasih kepada Timtech 17 karakter yang disimpan.
Def kata kunci juga tidak perlu.
sumber