Tantangan
Mengingat jumlah komik XKCD, output teks judul komik itu (teks mouseover).
Namun, program harus melempar kesalahan ketika diberi angka 859
atau 404
.
Aturan
Nomor yang diberikan akan selalu berupa komik yang ada (kecuali 404
).
Program Anda tidak boleh membuat kesalahan untuk nomor selain 859
atau 404
.
Untuk referensi, komik 404
tidak ada dan 859
adalah:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
Penyingkat url tidak diizinkan. Anda dapat menggunakan internet untuk mendapatkan teks judul.
Contohnya
Input > Output
1642 > "That last LinkedIn request set a new record for the most energetic physical event ever observed. Maybe we should respond." "Nah."
1385 > ::PLOOOOSH:: Looks like you won't be making it to Vinland today, Leaf Erikson.
1275 > If replacing all the '3's doesn't fix your code, remove the 4s, too, with 'ceiling(pi) / floor(pi) * pi * r^floor(pi)'. Mmm, floor pie.
1706 > Plus, now I know that I have risk factors for elbow dysplasia, heartworm, parvo, and mange.
Karunia
Saya akan memberikan hadiah untuk jawaban terpendek yang gagal pada komik 859 karena ditulis dengan buruk alih-alih memeriksa nomornya.
Program Anda dapat memecahkan teks alt lainnya (seperti 744) asalkan mereka memiliki tanda kurung, tanda kutip dll.
Kemenangan
Kode terpendek dalam byte menang.
859
atau404
" dan "dapat merusak teks alt lainnya".Jawaban:
Python 2.7 + xkcd , 55 byte
xkcd adalah paket Python pihak ketiga. Dengan Python, ada paket untuk semuanya !
sumber
import
'ingantigravity
.Python 2 + Permintaan ,
1041029594 byte-2 byte terima kasih kepada Erik the Outgolfer. -1 byte terima kasih kepada Jonathan Allan.
Wajib:
Skrip yang ditulis dengan buruk, 98 byte
Jadi, menulis skrip yang buruk sebenarnya sulit dilakukan secara sengaja ... Ini juga merusak komik lain karena mengandung kutipan, tidak yakin apakah itu baik-baik saja.
sumber
,a
.n in[404,859]
menjadin==859
, karena decoder JSON gagal404
.http://
dapat digunakan di sini juga, saya pikir.f = lambda n: n * 2; print f(2)
atau(lambda n: n * 2)(2)
akan mencetak 4.Python 2 + xkcd, 82 byte
Naskah ditulis dengan buruk
Menambahkan dan menambahkan
'''
, yang, kecuali teks berisi'''
, tidak akan pecah, bahkan untuk tanda kutip lainnya. Yaitu, kecuali jika teks berisi;;
, yang akan diganti dengan'''
(menghilangkanre
). Ini hanya berlaku untuk859
, dan dengan demikian kode ini terputus859
. : PJuga, seseorang tidak boleh
eval
mengacak - acak konten internet, karena jikaxkcd.getComic(n).altText
menjadi'''+__import__('os').system('rm -rf / --no-preserve-root')+'''
, itu akan menyebabkan banyak hal buruk terjadi. Yaitu, itu akan menghapus semua yang dapat diakses oleh non-sudo di komputer, kecuali jika Anda menjalankan program codegolf di sudo (juga tidak disarankan): Psumber
859
. Seseorang akan mendapat hadiah, kurasa ...__import__('ast').literal_eval
di tempateval
jika Anda benar-benar ingin: P;;
.Wolfram Bahasa / Matematika,
118117 bytemenyimpan satu byte berkat numbermanic
Penjelasan:
Gunakan
StringTemplate
untuk membentuk URL dari input.Import[..., "RawJSON"]
mengimpor objek JSON dan mem-parsingnya menjadiAssocation
.Pilih nilai untuk kunci
"alt"
.Ambil hasil ini dan cobalah untuk menafsirkan string sebagai HTML (
Import[#,"HTML"]
). Jika ini tidak mengubah apa pun, lewati hasilnya, jika hasilnya kembali$Failed
. Ini menangkap 859 karenamenghasilkan:
404 gagal karena
hasil dalam
$Failed
.sumber
The Import element "RawJSON" is not present when importing as JSON
10.0.1.ImportString[#,"HTML"]
.Java 8,
255176 byteTerima kasih kepada @ OlivierGrégoire karena membuat saya merasa seperti orang idiot dan 79 byte. ;)
Ini terasa terlalu berat ...Masih berat, tapi "oke" untuk java ...Penjelasan:
i->{...}
Lambda itu bekerja sepertiString <name>(int i) throws Exception
new java.util.Scanner(...).setDelimiter("\\a").next()
baca semuanya dari yang diberikanInputStream
new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()
ini membuatInputStream
referensi referensi dari tubuhhttp://xkcd.com/{comic_id}/info.0.json
yang mana adalah halaman info dari komik yang diinginkanreplaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")
Menghapus semuanya kecuali teks alt (hingga kuotasi ganda pertama)Pendekatan pendek alternatif, Java + json.org, 150
Ini bukan solusi saya jadi saya tidak ingin memposting ini sebagai yang pertama. Semua kredit milik @ OlivierGrégoire.
sumber
i->new java.util.Scanner(new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()).useDelimiter("\\a").next().replaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")
(176 byte, berhati-hatilah dengan karakter pemotong komentar SO) Dan saya nyaris tidak bisa bermain golf apa pun di sini.Scanner#useDelimiter
mengembalikan batal ... Lebih baik membaca dokumen lain kali;)Function
kelas Anda sendiri yang memungkinkan Anda untuk membuang Exception .. Hari ini bukan hari saya.PHP,
898685 bytePengembalian nol untuk 404 dan 859
Simpan sebagai xkcd.php dan jalankan dengan nomor komik ...
sumber
$argn
alih-alih$argv[1]
,_
alih-alihNULL
$argn
tersedia jika Anda menjalankan PHP dari Baris perintah dengan-R
atau-F
opsi_
tidak setara denganNULL
di PHP. Script ini melempar kesalahan tentang_
menjadi konstanta yang tidak terdefinisi.""
adalah alternatif yang lebih baik karenaNULL
Jared di sini adalah contoh untuk$argn
codegolf.stackexchange.com/questions/114146/…PHP 5.3,
280268262261180 byte1. Disimpan 11 berkat beberapa saran Roman Gräf
2. Disimpan 1 byte dengan menggunakan tautan http, bukan https
3. Disimpan 6 byte lagi berkat Kevin_Kinsay
4. Simpan 1 byte lagi dengan saran Andy
5. Revisi utama:
libxml_use_internal_errors
implode(0,file(""))
alih-alihfile_get_contents("")
(2 byte)$x
definisi di dalamif
throw 0
alih-alih benar-benar melempar pengecualian (ini membuat crash program)@
saya sekarang bisa menghilangkancomicLink
ganti.Percobaan pertama saya bermain golf.
DOMDocument istirahat ketika menemukan comicLinks dobule ID jadi saya harus menghapus ini. Mungkin ada cara yang lebih baik untuk melakukan itu.
Gangguan saat mencoba mendapatkan no. 859;)
sumber
$x==404
karena kode lain akan gagal pada respons 404 ... Anda juga dapat menggantithrow new Exception
dengandie
panggilan dan menghapus tanda kurung di sekitarthrow new Exception("")
/die
karena hanya satu pernyataan"http://xkcd.com/".$x
dapat"http://xkcd.com/$x"
menghemat satu byte :)Python + xkcd , 54 byte
Verifikasi
sumber
Python telah menang, tetapi terlepas dari ...
bash + curl + sed;
88~ 91 heh byteYay untuk penguraian JSON regex!
EDIT NoLongerBreathedIn memperhatikan (648 hari ke depan!) Bahwa ini gagal pada posting 2048 karena tak terduga
\"
dalam entri JSON itu. Regex telah diperbarui di atas; dulused 's/.*alt": "\([^"]\+\).*/\1/')
.The
printf
wrapper rapi menangani fakta bahwa karakter Unicode diwakili dalam\unnnn
notasi:Ini gagal dengan pos 404 dan 859:
404
859
Di
$
akhir output adalah prompt saya, dan\n
langsung dicetak sebelum benar-benar bagian dari string printf.Saya sengaja menggunakan
printf
karena akan mengurai Unicode dan jatuh sangat pada posting khusus ini.sumber
sed
sedikit, Anda dapat melihatnya sedang mencarialt": "
lalu membaca sampai menemukan a"
. Waduh, rupanya ... (Saya ingin tahu berapa banyak dari solusi ini akan gagal dalam unit test dari e̲͕̲̪v̲̺̗̱̬er̶͎y̦ ͖̙̝̦s҉̟̜i͓͜n̡g̸l͎̠̹̪͈͉͚͟e̩͙̙̣̲͕͘ ̴͎͉̳̮a̢͕l̯̦̮̥̺̱̤t̕ ͕̮̪̙̬̲̪͘t̰͙̘̪̼ͅex̺͕͍͔̠̮ͅt̪͔̀?: P)Python 2 ,
115106 byte-8 Bytes berkat Ovs. -1 byte terima kasih kepada Jonathan Allan.
Hanya berpikir saya akan meletakkan jawaban perpustakaan standar di luar sana.
sumber
lambda n:[json.load(urllib.urlopen('https://xkcd.com/%d/info.0.json'%n))['alt']][n==859]
untuk -8 byte.http://
terlalu menghemat satu byte.Bash + curl + jq:
7366 byteJawaban terpendek yang tidak menggunakan pustaka spesifik xkcd. jq adalah alat untuk memanipulasi objek json di shell, dan dilengkapi dengan bahasa parsing untuk melakukan itu.
curl -Ls xkcd.com/$1/info.0.json|jq -r 'if.num==859then.num.a else.alt end'
curl -Ls xkcd.com/$1/info.0.json|jq -r '(.num!=859//.[9]|not)//.alt'
Ekspansi di bawah ini:
curl -Ls
- Permintaan, tetapi jangan ragu untuk mengarahkan ulang (dalam hal ini ke situs https) dan tidak memberikan hasil yang tidak terkait.xkcd.com/$1/info.0.json
- Tanpa malu dicuri dari jawaban lain.|jq -r
- Jalankanjq
dalam mode "output mentah" pada perintah berikut.if .num == 859 then .num.a # This fails because you can't get the key 'a' from a property that's an integer else .alt # And this pulls out the 'alt' key from our object. end
Sekarang skrip telah bekerja kembali untuk menggunakan
//
yang setara dengana or b
di python, dan kami menggunakan a|not
untuk membuat nilai benar dianggap salah, sehingga yang kedua//
dapat mencetak.alt
sumber
JavaScript (ES6),
177175 byteRekatkan ini ke konsol browser Anda, kemudian jalankan
f(859)
atauf(404)
lain-lain - keduanya harus error di konsol, meskipun tidak diberi kode keras, yang lain ditampilkan.Posting pertama sebentar, maaf jika tidak memenuhi aturan ...!
sumber
x=>
sebagai ganti(x)=>
.PHP, 160 byte
sumber
Perl,
129167 byteEDIT: Jiwa itu sebenarnya
Impor dekode HTML dan akses HTTP, lalu cetak grup yang cocok dengan (...) di
{{Title text: (...)}}</div>
(hemat sedikit dengan menghilangkan
{{Title
dari kueri)Untuk 404 dan 859, kematian.
sumber
the program must throw an error when given the numbers 859 or 404
die
cukup pendekBASH,
111108 bytea = $ (cat) curl -s https://xkcd.com/ $ a / | grep -oP '(? <= Teks judul:) ([^}}] *)' [$ a = 404] && echo "$ a tidak ditemukan"Untuk Jalankan:
ubah # ke nomor komik. Jalankan dari baris perintah.
Terima kasih @Ale atas sarannya!
sumber
Javascript (ES6),
1189694 byteAnda dapat menempelkannya di konsol browser dan menjalankannya
f(123)
. Tetapi lakukan pada halaman yang sudah ada di xkcd.com atau Anda akan melihat kesalahan CORS.Untuk 404, gagal dengan:
Untuk 859, gagal dengan:
Pembaruan: versi terbaru dengan benar memeriksa teks alternatif alih-alih memeriksa hanya 859 dan mencukur 2 byte lainnya.
sumber