Napisz program, który łączy się z tą witryną, pobiera samą odpowiedź, w której jest opublikowany, wypakowuje własny kod źródłowy i drukuje go. Dane wyjściowe muszą być identyczne z kodem źródłowym. Najkrótszy kod (w bajtach) wygrywa.
Zasady:
- Niedozwolone są skracacze adresów URL.
- Odpowiedź musi mieć zwykły format - nagłówek z nazwą i rozmiarem języka, opcjonalnym opisem, blokiem kodu, opcjonalnym opisem i objaśnieniem. Niedozwolone są nienaturalne ograniczniki.
- Dane wyjściowe muszą pochodzić z rzeczywistego bloku kodu opublikowanego na stronie.
- Funkcjonalność nie może zależeć od pozycji na liście odpowiedzi; powinien działać, nawet jeśli istnieje wiele stron, a odpowiedzi nie ma na pierwszej.
- Nowość: specjalna uwaga na odpowiedzi, które mają być uruchamiane w przeglądarce: można wymagać ich uruchomienia w domenie codegolf (aby przestrzegać zasad tego samego pochodzenia), ale domena i ścieżka powinny zostać uwzględnione w rozwiązaniu, aby zrób to uczciwie.
code-golf
quine
internet
self-referential
aditsu
źródło
źródło
Odpowiedzi:
Bash + coreutils + przeglądarka Lynx, 61 bajtów
Dzięki @FDinoff za wskazówki:
źródło
codegolf.stackexchange.com/posts/28164/body
I ignoruje komentarze. Myślę też, że w granicach zasad można go używać ...Rubinowy,
155186195148138110 11097 znakówMusiałem zrobić z tego jedną linię, ponieważ w przeciwnym razie wyświetlałby nowe wiersze jako
\n
zamiast rzeczywistych nowych wierszy.+31 znaków, ponieważ nie zauważyłem, że niektóre znaki uciekają.+9 znaków, aby pozbyć się denerwującego ukośnika.Wyjaśnienie
Upiększmy to najpierw. Będę jednak musiał użyć w tym kodzie nieco ... interesującej notacji. W tym poście nie mogę w ogóle używać średników, z powodów wyjaśnionych później, więc
{SEMI}
zamiast nich użyję średników.Dobra, przejdźmy teraz przez to. Pierwsze dwa wiersze są dość zrozumiałe - pobierają tekst HTML tej odpowiedzi.
Ostatnia linia jest tutaj interesująca. Widzisz ten pozornie bezużyteczny średnik na końcu kodu? Jest to absolutnie wymagane i oto dlaczego.
Najpierw
resp.match
wyodrębnia kod do wydrukowania. Regexp używa tego jest trick:/req.+{SEMI}/
. Pobiera początek kodu,REQuire'net/http'
szukającreq
(re
pobierze mójREputation
). Następnie znajduje koniec kodu, szukając średnika! Ponieważ+
domyślnie jest chciwy, będzie kontynuował, dopóki nie znajdzie średnika oznaczającego koniec kodu. Zobacz, dlaczego nie mogę już używać średników?Po tym nie muszę niczego usuwać z scenografii, dzięki rozwiązaniu Ventero, które już nie używaNie ma już takiej potrzeby z powodu nowego adresu URL. Następnie oryginalny kod został pobrany! (Uwaga: nie mogę również używać ampersand, ponieważ koduje się on w HTML, co powoduje utworzenie średnika).\
. Wszystko, co muszę zrobić, to{AMPERSAND}
zmienić zmianę na{AMPERSAND}amp{SEMI}
, co można osiągnąć po prostu usuwającamp{SEMI}
część.źródło
puts
; można to naprawić za pomocąprint
meh. Udawaj, że w kodzie jest końcowy znak nowej linii, nawet jeśli SE nie będzie w stanie go pokazać.http://codegolf.stackexchange.com/a/28159
dałby taki sam wynik jak twój i pozwoliłby zaoszczędzić trochę znaków.PowerShell -
6962źródło
irm
jest aliasem dlaInvoke-RestMethod
i został wprowadzony z rdzeniem PowerShell v3. computerperformance.co.uk/powershell/powershell3-alias.htmJavaScript -
1231221019592918786114Działa w konsoli przeglądarki na tej stronie. Testowany na najnowszym Chrome
i Firefox.edycja: +28 bajtów, aby dodać pełną domenę.
Firefox nie lubi już mojej sztuczki z URL-em Regex dzięki tej aktualizacji :(
Oto przełomowe 86-bajtowe rozwiązanie:
źródło
codegolf.stackexchange.com/
do adresu URL.Ruby + wget +
gunzip,159868271Korzystanie z końcówki @FDinoff do użycia
http://codegolf.stackexchange.com/posts/28173/body
.Przetestowany. Dzięki @ace i @Bob za optymalizację wiersza poleceń.
źródło
wget
, jak wwget -qO- url
. Ponadto w bash nie potrzebujesz podwójnych cudzysłowów dla adresu URL, więc może to również działać dla Ciebie.http://
.CJam - 53
Tworzę tę wiki społeczności, ponieważ odpowiadam na własne pytanie i tak naprawdę nie chcę konkurować: p Kredyty dla FDinoff za wybór adresu URL.
źródło
);
nie wydaje mi się zbyt uśmiechnięty ...Rebmu, 91 znaków
Z powodu Catch-22 muszę pisać, aby uzyskać adres URL tej odpowiedzi. : - / Dobra, rozumiem.Rebmu jest dialektem Rebola i możesz o nim przeczytać . Odpowiednikiem Rebola tutaj byłoby:
Rebol's PARSE jest rodzajem bardzo kompetentnej odpowiedzi na RegEx. Zaczyna pozycję parsera wejścia (która może być dowolną serią, w tym blokami strukturalnymi ... danymi binarnymi ... lub typami ciągów) . Reguły są językiem, w jaki sposób zmienia się pozycja analizy.
Tagi i adresy URL są w rzeczywistości po prostu napisami pod maską w języku. Ale są „doprawione”, a ponieważ Rebol jest dynamicznie wpisywany, możesz sprawdzić ten typ. READ na przykład wie, że jeśli podasz mu ciąg o smaku URL, to powinien wysłać do programu obsługi schematu, aby dokonać odczytu. (W tym przypadku zarejestrowany dla HTTP). Domyślnie odzyskujesz bajty UTF-8, więc używamy to-string, aby to zdekodować i uzyskać serię punktów kodowych w normalnym ciągu Unicode.
W przypadku dialektu parsowania napotkanie typu znacznika jest po prostu dopasowane, tak jakby był łańcuchem wyglądającym jak znacznik. THRU jest instrukcją oznaczającą „przeskocz do momentu dopasowania wynikającej z niej reguły, a następnie umieść pozycję dopasowania na końcu tego, co właśnie dopasowałeś”. (TO jest analogiem, który pasuje, ale pozostawia pozycję analizy przed elementem).
Pędzimy więc obok
<a name="28154">
. Następnie przeskakujemy obok następnego wystąpienia<code>
, a nasza pozycja analizy jest teraz zlokalizowana zaraz po>
. Polecenie PARSE COPY pozwala nam następnie skopiować dane do innej reguły, w tym przypadku reguła ta jest[TO </code>]
... więc wchodzimy do zmiennej C wszystko do samego początku<
.Fajnie , co? :-)
Technicznie rzecz biorąc, mógłbym bardziej się ogolić, na przykład szukając,
TO "</"
a to oszczędza trzy postacie - nie trzeba dopasowywać całego</code>
tagu końcowego, gdy tylko</
to zrobi. Podobne argumenty można by podać dla tagu początkowego. Ale w Rebmu chodzi o umiejętność gry w golfa ... nawet jeśli początkowo wydaje Ci się, że wygląda dziwnie!AKTUALIZACJA :
/body
sztuczka jest wyjęta z torby, ale podobnie pozostawiam ją taką, jaka jest ... ponieważ myślę, że w ten sposób jest bardziej edukacyjna.źródło
Java teraz 634, 852, miała 1004
Kod został zaktualizowany; dzięki za sugestie. Gra w golfa: teraz zamienia & gt na>
Poddając się testom, dokonam edycji i wkrótce spróbuję zagrać w golfa. Musiałem zmienić x> 1 na x> 2, ponieważ ciąg testowy jest również w moim kodzie. Uwaga: Code golf zastępuje> symbol na & gt.
źródło
//bacchus
?*
importów, aby zaoszczędzić dużo kodu.throws Exception
zamiast próbować sobie z czymkolwiek poradzić. Myślę też, że użycie skanera zamiast buforowanego czytnika byłoby prostsze, zwłaszcza że można ustawić ogranicznik na//bacchus
, co ułatwiłoby trochę ...Python,
175167 bajtówWykorzystuje dwie biblioteki zewnętrzne; Nie przeczytałem, że to nieautoryzowane.
Dłuższy, ale ładniejszy kod:
źródło
questions
W url można zastąpićq
:http://codegolf.stackexchange.com/q/28154
bs4, requests
(wiersz 1) można usunąć, aby zmniejszyć 1 bajt.JavaScript, 228
Działa na tej stronie.
źródło
if(this.readyState == this.DONE)
funkcji.Haskell,
563613 bajtówPrzetestowany. Obsługuje strony poprzez funkcję „najstarszych postów”. Używa struktury linii quine, aby znaleźć to, co wydrukować. Jest
import Control.Monad
tak tylko dlatego, że>>=
generuje>
w HTML.źródło
JavaScript + jQuery,
87, 67Nie jestem pewien, czy wolno mi używać jQuery, ale:
JavaScript + jQuery, jeśli nie zaznaczono na tej stronie:
27, 25Dla zabawy, jeśli byłoby to tutaj wykonane:
$('[id$=28268] pre').html()
źródło
$('body').load('//codegolf.stackexchange.com/posts/28268/body pre')
w3m 45 znaków
źródło
Dart, 164
Myślałem, że spróbuję tego w Dart, fajnie jest używać imo.
Można to uruchomić w konsoli DartEditor, ale wymaga pakietu http dodanego w pubspec.yaml
Wersja bez golfa:
źródło
R 114 znaków
Nie ma tu żadnej magii: pobiera wartość pola między tagami HTML
<code></code>
. Korzysta z bibliotekiXML
(co widać w kodzie dość wyraźnie). Wysyła wynik jako standardowe wyjście.źródło
Java,
300294Ulepszona wersja odpowiedzi Bacchusbeale, która:
Scanner
aby uniknąć konieczności zapętlenia wejściaZaktualizowano:
<code>[...]</code>
jako ograniczników do wyszukiwania (w rzeczywistości używa wyrażenia regularnego „./?[c]ode\W”, aby uniknąć konieczności dekodowania<
i>
- konieczne jest „\ W” zamiast krótszego „.” aby uniknąć dopasowania części adresu URL do postu, niestety, która kosztuje 2 znaki, a nawiasy kwadratowe wokół c uniemożliwiają dopasowanie wyrażenia regularnego).źródło
w3m 55 bajtów
Na podstawie @DigitalTrauma
źródło
Ruby,
237215146132źródło
Przetwarzanie, 90
Edycja: Nareszcie mam!
źródło
bash + awk, 71 bajtów
źródło
http://
.JavaScript, 138
Działa to przy założeniu, że strona ładuje się w czasie krótszym niż 99 ms. Musi być również uruchamiany za pomocą konsoli otwartej na stronie codegolf.SE, z powodu tej samej zasady pochodzenia.
źródło
http://codegolf.stackexchange.com/a/28160
zamiasthttp://codegolf.stackexchange.com/a/28160/12551
Perl 5.10,
155127122117 bajtówKorzystanie
XML::LibXML
.źródło
Shell i xmllint, 82 bajty
źródło
Python, 164
Działa poprzez wyodrębnianie tekstu między znacznikami kodu. Jest dość długi, ale zawsze będzie działał poprawnie, chyba że strona HTML zostanie edytowana bezpośrednio lub nowy blok kodu zostanie dodany przed blokiem poniżej (posiadanie bloku kodu później nie powinno mieć wpływu na wynik programu).
źródło