xkcd to ulubiony komiks internetowy, a ty napiszesz program, który przyniesie nam nieco więcej humoru.
Twoim celem w tym wyzwaniu jest napisanie programu, który weźmie liczbę jako dane wejściowe i wyświetli ten xkcd i jego tytuł-tekst (tekst narzuty).
Wkład
Twój program weźmie na wejściu dodatnią liczbę całkowitą (niekoniecznie taką, dla której istnieje prawidłowy komiks) i wyświetli ten xkcd: na przykład wejście 1500 powinno wyświetlać komiks „Upside-Down Map” na stronie xkcd.com/1500, a następnie wydrukuj tekst tytułu na konsoli lub wyświetl go wraz z obrazem.
Due to their proximity across the channel, there's long been tension between North Korea and the United Kingdom of Great Britain and Southern Ireland.
Przypadek testowy 2, dla n = 859:
Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or ;;"''{<<[' this mouseover text."
Twój program powinien także być w stanie funkcjonować bez żadnych danych wejściowych i wykonywać to samo zadanie dla najnowszego xkcd znalezionego na xkcd.com, i zawsze powinien wyświetlać najnowszy, nawet gdy nowy idzie w górę.
Nie musisz pobierać obrazu bezpośrednio z witryny xkcd.com, możesz korzystać z innej bazy danych, o ile jest ona aktualna i istniała, zanim wyzwanie się zwiększyło. Skracanie adresów URL, czyli adresy URL bez celu innego niż przekierowanie do innej lokalizacji, są niedozwolone.
Możesz wyświetlać obraz w dowolny sposób, w tym w przeglądarce. Być może nie , jednak bezpośrednio wyświetlać część innej strony w iframe lub podobnym. WYJAŚNIENIE: nie możesz otworzyć istniejącej strony, jeśli chcesz korzystać z przeglądarki, musisz utworzyć nową stronę . Musisz także wyświetlić obraz - wysyłanie pliku obrazu jest niedozwolone.
Możesz obsłużyć przypadek, w którym nie ma obrazu dla konkretnego komiksu (np. Jest on interaktywny lub program został przekazany o liczbie większej niż liczba komiksów, które zostały wydane) w dowolny rozsądny sposób, w tym chcesz zgłosić wyjątek lub wydrukowanie co najmniej jednoznakowego ciągu znaków, o ile w jakiś sposób dla użytkownika oznacza, że nie ma obrazu dla tego wejścia.
Możesz wyświetlić tylko obraz i wyprowadzić jego tekst tytułowy lub wysłać komunikat o błędzie dla nieprawidłowego komiksu. Inne dane wyjściowe są niedozwolone.
To wyzwanie dla golfa , więc wygrywa najmniej bajtów.
import antigravity
w Pythonie;)n=404
xkcd.com/404 to strona 404.xkcd is everyone's favorite webcomic
[PotrzebneOdpowiedzi:
Perl + curl + feh,
868475 bajtówWymaga
-p
przełącznika. Uwzględniłem to w liczbie bajtów.źródło
?
pierwszej grupy meczowej. Możesz użyć-p
i$_=$2
zamiastprint$2
, ale tekst tytułu jest drukowany dopiero po zamknięciu feh. Nie jestem pewien, czy to jest poprawne.-p
ale nie byłam pewna, jak OP by się z tym czuł.PowerShell v3 +
11099107103 bajtówDzięki Timmy za pomoc w oszczędzaniu niektórych bajtów za pomocą wbudowanych zadań.
Jeśli nie zostaną przekazane żadne argumenty,
$args
jest ono puste i otrzyma tylko bieżący komiks. Pobierz obraz, dopasowując obraz z tekstem alternatywnym, do pliku w bieżącym katalogu roboczym skryptu. Następnie wyświetl go w domyślnej przeglądarce plików jpg. Tekst alternatywny jest następnie wyświetlany na konsoli.iwr
jest pseudonimem dlaInvoke-WebRequest
Jeśli przekazana liczba (lub jakiekolwiek nieprawidłowe dane wejściowe w tej sprawie) nie są zgodne, proces kończy się niepowodzeniem z co najmniej błędem 404.
źródło
AutoIt , 440 bajtów
Tak, jest długi, ale stabilny.
Przede wszystkim nie używa RegEx do zeskrobywania strony (ponieważ nie mam czasu na testowanie tego na wszystkich komiksach), ale raczej używa API Internet Explorera do iteracji po
img
tagach DOM, aż znajdzie tekst z tytułem.Strumień binarny jest odczytywany z adresu URL obrazu i renderowany do bitmapy za pomocą GDIPlus. Jest to następnie wyświetlane w ładnym, automatycznym interfejsie graficznym z rzeczywistym podpowiedzią, dzięki czemu zachowuje się prawie dokładnie tak, jak strona internetowa.
Oto przypadek testowy (
_(859)
):)
źródło
PowerShell, 93 bajty
93 bajtowa wersja do używania lokalnej przeglądarki zdjęć.
Zaoszczędzono 2 bajty, usuwając niepotrzebne podwójne cudzysłowy, a następnie wykorzystano inną partię
("http:"+$n.src)
zamiast"https://"+$n.src.trim("/")
- ponieważimg
src jest//
już w nim dostępny, a xkcd nie wymaga https.$n=(iwr "xkcd.com/$args").images|?{$_.title};$n.title;saps ("https://"+$n.src.trim("/"))
bardzo podobny do odpowiedzi PowerSta Mattsa (prawdopodobnie powinien to być komentarz, ale niska reputacja)
Zamiast tego otwiera nową kartę / okno w domyślnej przeglądarce i inne rzeczy, oszczędzając niektóre bajty.
iwr
jest pseudonimem dlaInvoke-WebRequest
saps
jest aliasem, dlaStart-Process
którego otwiera się „to” w domyślnym kontekście.źródło
saps
sięiwr
i dołączyć `-OutF x.jpg; ii. X *` do końca, jeśli chcesz go otworzyć w domyślnej lokalnej przeglądarka obrazów.R,
358328310298 bajtówDzięki nowym wierszom i komentarzom:
Zrzuty ekranu przypadków testowych:
dla x = 1500:
dla x pusta:
przypadek, gdy obraz jest JPEG
x = 859:
źródło
plot.new();rasterImage(...)
.xaxs
ayaxs
wynik byłby nadal proporcjonalny.PHP, 95 bajtów
Zapisz jako main.php, uruchom serwer
Otwórz http: // localhost: 8123 / main.php? Id = 1500
źródło
Python 2.7,
309299295274 bajtówPełny program Zdecydowanie bardziej golfowy, ale po tak długim czytaniu komiksów xkcd nie mogłem tego przepuścić (kto wie, czy będzie to pomocne w przyszłości dla łatwego przeglądania xkcd).
Jeśli żadne dane nie zostaną przekazane, otrzyma bieżący komiks Jeśli poprawny numer komiksu zostanie przekazany jako dane wejściowe, wówczas otrzyma ten komiks. Jeśli przekazane zostanie niepoprawne wejście (nie numeryczny komiks w prawidłowym zakresie), zgłasza błąd.
Wszelkie sugestie dotyczące zmniejszenia liczby bajtów są mile widziane! Wrócę (i dodam wyjaśnienie), gdy będę miał więcej czasu.
-10 bajtów dzięki @Dopapp
-21 bajtów dzięki @Shebang
źródło
try:...
iexcept:...
dotry:n=...
orazexcept:n=''
, oszczędzając ci łącznie 10 bajtówtry
oświadczenie? Specyfikacja programu mówi, że zawsze otrzymasz dodatnią liczbę całkowitą.raw_input()
? Domyślnie użytkownik może nacisnąć[Enter]
i i takn
będzie zawierać pusty ciąg. Jeśli usuniesz blok try-try it=u.urlopen(h+x+n).read() -> t=u.urlopen(h+x+raw_input()).read()
zejdziesz do 274 bajtów.https
. Jest jednak nadal aktualny, ponieważ działał w momencie publikacji. Aby to działało teraz, zmień wiersz 3 na początekh='https://'
na bajt +1.PHP, 42 bajty
Zapisz do pliku i uruchom go na wybranym serwerze internetowym
źródło
JavaScript + HTML, 124 + 18 = 142 bajty
Rozwiązanie krzyżowe dzięki odpowiedzi Kaiido tutaj .
17 bajtów (
//crossorigin.me/
) można zapisać, jeśli można odjąć proxy wymagane do połączenia z xkcd.com ( meta post na ten temat ).Test Snippet
źródło
Python 3 + żądania + PIL,
192186 bajtówOtwiera przeglądarkę obrazów (zależnie od tego, która z nich jest domyślna w systemie, na którym jest uruchomiona), zawierającą komiks, i publikuje tekst tytułu na konsoli.
źródło
Wolfram Language 45 bytes (Mathematica)
Zastosowanie z numerem:
Użycie bez numeru:
źródło