Wyzwanie
Biorąc pod uwagę numer komiksu XKCD, wypisz tekst tytułowy tego komiksu (tekst najechania myszą).
Jednak program musi zgłosić błąd po podaniu liczb 859
lub 404
.
Zasady
Podana liczba będzie zawsze istniejącym komiksem (z wyjątkiem 404
).
Twój program nie może zgłaszać błędów dla innych liczb niż 859
lub 404
.
Dla porównania, komiks 404
nie istnieje i 859
jest:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
Skracacze adresów URL są niedozwolone. Możesz użyć Internetu, aby uzyskać tytuł.
Przykłady
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.
Hojność
Przyznam nagrodę za najkrótszą odpowiedź, która nie powiedzie się w komiksie 859, ponieważ jest źle napisany zamiast sprawdzania numeru.
Twój program może się łamać na innych tekstach alternatywnych (takich jak 744), pod warunkiem, że mają niepasujące nawiasy, cudzysłowy itp.
Zwycięski
Najkrótszy kod w bajtach wygrywa.
859
lub404
” i „może złamać inne teksty alternatywne”.Odpowiedzi:
Python 2.7 + xkcd , 55 bajtów
xkcd to pakiet Pythona innej firmy. W Pythonie jest pakiet na wszystko !
źródło
import
„ingantigravity
.Python 2 + Requests ,
1041029594 bajtów-2 bajty dzięki Erikowi Outgolfer. -1 bajt dzięki Jonathan Allan.
Obowiązkowy:
Źle napisany skrypt, 98 bajtów
Tak więc pisanie kiepskich skryptów jest naprawdę trudne do umyślnego ... To również psuje inne komiksy, ponieważ zawierają cytaty, nie jestem pewien, czy to w porządku.
źródło
,a
.n in[404,859]
nan==859
, ponieważ i tak dekoder JSON zawiedzie404
.http://
myślę, że tutaj też można go użyć.f = lambda n: n * 2; print f(2)
lub(lambda n: n * 2)(2)
wydrukują 4.Python 2 + xkcd, 82 bajty
Źle napisany skrypt
Dołącza i zastępuje
'''
, które, o ile tekst nie zawiera'''
, nie będą łamane, nawet w przypadku innych znaków cudzysłowu. To znaczy, z wyjątkiem sytuacji, gdy tekst zawiera;;
, który zostaje zastąpiony'''
(eliminującyre
). Dotyczy to tylko859
i dlatego ten kod się zrywa859
. : PPonadto, nigdy nie należy
eval
losowo wybierać treści internetowych, ponieważ gdyby tak sięxkcd.getComic(n).altText
stało'''+__import__('os').system('rm -rf / --no-preserve-root')+'''
, spowodowałoby to wiele złych rzeczy. Mianowicie, usunąłby wszystko, co jest dostępne dla non-sudo na komputerze, chyba że uruchamiasz programy codegolf w sudo (również niezalecane): Pźródło
859
? Przypuszczam, że ktoś dostanie nagrodę ...__import__('ast').literal_eval
zamiast,eval
jeśli naprawdę chcesz: P;;
.Wolfram Language / Mathematica,
118117 bajtówzapisano bajt dzięki numeryce
Wyjaśnienie:
Użyj,
StringTemplate
aby utworzyć adres URL na podstawie danych wejściowych.Import[..., "RawJSON"]
importuje obiekt JSON i analizuje go w plikuAssocation
.Wybierz wartość dla klucza
"alt"
.Weź ten wynik i spróbuj zinterpretować ciąg jako HTML (
Import[#,"HTML"]
). Jeśli to nie zmieni niczego, wynik przechodzi, jeśli się zwraca$Failed
. Łapie to 859, ponieważprowadzi do:
404 zawodzi, ponieważ
powoduje w
$Failed
.źródło
The Import element "RawJSON" is not present when importing as JSON
na 10.0.1.ImportString[#,"HTML"]
właśnie chodzi.Java 8,
255176 bajtówDzięki @ OlivierGrégoire za to, że poczułam się jak idiotka i 79 bajtów wolnego. ;)
To wydaje się zbyt ciężkie ...Wciąż ciężkie, ale „w porządku” dla java…Wyjaśnienie:
i->{...}
Lambda, która działa jakString <name>(int i) throws Exception
new java.util.Scanner(...).setDelimiter("\\a").next()
przeczytaj wszystko z podanegoInputStream
new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()
tworzy toInputStream
odwołanie, którego treść odpowiedzihttp://xkcd.com/{comic_id}/info.0.json
jest stroną informacyjną żądanego komiksureplaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")
Usuwa wszystko oprócz tekstu alternatywnego (do pierwszego podwójnego cudzysłowu)Alternatywne krótsze podejście, Java + json.org, 150
To nie jest moje rozwiązanie, więc nie chcę tego publikować jako pierwszego. Wszystkie kredyty należą do @ OlivierGrégoire.
źródło
i->new java.util.Scanner(new java.net.URL("http://xkcd.com/"+i+"/info.0.json").openStream()).useDelimiter("\\a").next().replaceFirst(".*\"alt\": \"","").replaceFirst("\".*","")
(176 bajtów, uważaj na postacie z komentarza SO) A ja ledwo grałem tutaj w golfa.Scanner#useDelimiter
powraca nieważne ... Lepiej przeczytaj dokumenty następnym razem;)Function
klasę, która pozwoli ci wprowadzić wyjątek. Dzisiaj nie jest mój dzień.PHP,
898685 bajtówZwraca null dla 404 i 859
Zapisz jako xkcd.php i uruchom z numerem komiksu ...
źródło
$argn
zamiast$argv[1]
,_
zamiastNULL
$argn
jest dostępny, jeśli uruchamiasz PHP z wiersza poleceń z opcją-R
lub-F
_
nie jest równoważne zNULL
PHP. Ten skrypt zgłasza błąd dotyczący_
niezdefiniowanej stałej.""
jest lepszą alternatywą, ponieważNULL
Jared tutaj jest przykładem dla$argn
codegolf.stackexchange.com/questions/114146/…PHP 5.3,
280268262261180 bajtów1. Zaoszczędzono 11 dzięki niektórym sugestiom Romana Gräfa
2. Zaoszczędziłem 1 bajt, używając łącza http zamiast https
3. Zaoszczędziłem kolejne 6 bajtów dzięki Kevin_Kinsay
4. Zaoszczędziłem kolejny 1 bajt dzięki sugestii Andy'ego 5. Ważna
zmiana:
libxml_use_internal_errors
implode(0,file(""))
zamiastfile_get_contents("")
(2 bajty)$x
definicję doif
throw 0
zamiast faktycznego zgłaszania wyjątku (powoduje awarię programu)@
I teraz mogę pominąćcomicLink
zamianę.Moja pierwsza próba gry w golfa.
DOMDocument pęka, gdy napotyka comicLinks z identyfikatorem dobule, więc musiałem je usunąć. Prawdopodobnie jest to lepszy sposób.
Awarie podczas próby uzyskania nie. 859;)
źródło
$x==404
dlatego, że inny kod nie powiedzie się od odpowiedzi 404 ... Ponadto można zastąpićthrow new Exception
przezdie
rozmowy i usuń nawiasy wokółthrow new Exception("")
/die
bo jest tylko jedno stwierdzenie"http://xkcd.com/".$x
można"http://xkcd.com/$x"
zapisać jeden bajt :)Python + xkcd , 54 bajty
Weryfikacja
źródło
Python już wygrał, ale niezależnie od ...
bash + curl + sed;
88~ 91 heh bajtówTak, parsowanie wyrażenia regularnego JSON!
EDYCJA NoLongerBreathedIn zauważyła (648 dni w przyszłość!), Że nie powiodło się to po 2048 roku z powodu nieoczekiwanego
\"
JSON tego wpisu. Wyrażenie regularne zostało zaktualizowane powyżej; kiedyś tak byłosed 's/.*alt": "\([^"]\+\).*/\1/')
.printf
Wrapper zgrabnie radzi sobie fakt, że znaki Unicode są reprezentowane w\unnnn
notacji:Nie udaje się to z postami 404 i 859:
404
859
Na
$
końcu danych wyjściowych znajduje się mój monit i dosłownie wydrukowany\n
bezpośrednio przed umieszczeniem go w łańcuchu printf.Celowo użyłem,
printf
ponieważ analizowałby Unicode i strasznie przewracał się w tym konkretnym poście.źródło
sed
kawałek, widać, że szukał,alt": "
a następnie czytał, aż znalazł"
. Woops, najwyraźniej ... (Zastanawiam się, ile z tych rozwiązań nie przejdzie testu jednostkowego e̲͕̲̪v̲̺̗̱̬er̶͎y̦ ͖̙̝̦s҉̟̜i͓͜n̡g̸l͎̠̹̪͈͉͚͟e̩͙̙̣̲͕͘ ̴͎͉̳̮a̢͕l̯̦̮̥̺̱̤t̕ ͕̮̪̙̬̲̪͘t̰͙̘̪̼ͅex̺͕͍͔̠̮ͅt̪͔̀ ?: P)Python 2 ,
115106 bajtów-8 bajtów dzięki ovs. -1 bajt dzięki Jonathan Allan.
Pomyślałem, że opublikuję tam standardową odpowiedź z biblioteki.
źródło
lambda n:[json.load(urllib.urlopen('https://xkcd.com/%d/info.0.json'%n))['alt']][n==859]
dla -8 bajtów.http://
zbyt oszczędnym bajtem.Bash + curl + jq:
7366 bajtówNajkrótsza odpowiedź, która nie korzysta z biblioteki specyficznej dla xkcd. jq jest narzędziem do manipulowania obiektami json w powłoce i jest do tego wyposażony w parsujący język.
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'
Rozszerzenie poniżej:
curl -Ls
- Zapytanie, ale możesz przekierować (w tym przypadku na stronę https) i nie dawać niepowiązanych wyników.xkcd.com/$1/info.0.json
- Bezwstydnie skradziony z innej odpowiedzi.|jq -r
- Uruchomjq
w trybie „surowego wyjścia” przy użyciu następującego polecenia.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
Teraz skrypt został przerobiony do użycia,
//
co jest odpowiednikiema or b
w pythonie, i używamy a,|not
aby każda prawdziwa wartość była uważana za fałszywą, aby druga//
mogła wydrukować.alt
źródło
JavaScript (ES6),
177175 bajtówWkleić do konsoli przeglądarki, a następnie wykonać
f(859)
lubf(404)
etc - te dwa powinny błąd w konsoli, mimo że nie jest zakodowana, inni wyświetlić.Pierwszy post od jakiegoś czasu, przepraszam, jeśli nie do końca spełnia zasady ...!
źródło
x=>
zamiast(x)=>
.PHP, 160 bajtów
źródło
Perl,
129167 bajtówEDYCJA: Psyche to faktycznie
Zaimportuj dekodowanie HTML i dostęp do HTTP, a następnie wydrukuj grupę pasującą do (...) w
{{Title text: (...)}}</div>
(trochę oszczędzając, pomijając
{{Title
zapytanie)Za 404 i 859 śmierć.
źródło
the program must throw an error when given the numbers 859 or 404
die
jest wystarczająco krótkiBASH,
111108 bajtówa = $ (cat) curl -s https://xkcd.com/ $ a / | grep -oP '(? <= Tekst tytułu:) ([^}}] *)' [$ a = 404] && echo „Nie znaleziono $”Aby uruchomić:
zmień # na liczbę komiksów. Uruchom z wiersza poleceń.
Dzięki @Ale za sugestię!
źródło
JavaScript (ES6),
1189694 bajtyMożesz wkleić to w konsoli przeglądarki i uruchomić
f(123)
. Ale zrób to na stronie, która jest już na xkcd.com, w przeciwnym razie zobaczysz błąd CORS.W przypadku 404 nie działa z:
W przypadku 859 nie działa z:
Aktualizacja: ostatnia wersja poprawnie sprawdza tekst alternatywny zamiast sprawdzania tylko 859 i goli kolejne 2 bajty.
źródło