Wie viele Geeks vielleicht wissen, führen die meisten Seiten (95% meiner Meinung nach) auf Wikipedia zu einer Philosophie wie dieser:
Klicken Sie auf den ersten nicht kursiven oder in Klammern gesetzten Link, der zu einem anderen normalen Artikel führt: (dh nicht File: oder Special:, aber Dinge wie Wikipedia: sind in Ordnung) und wiederholen Sie diesen, bis Sie Philosophie getroffen haben.
Das Skript muss:
- Nehmen Sie eine erste Seite als Eingabe
- Gib den Namen jedes Artikels aus, den du erhältst
- Und drucken Sie, wie viele Artikel es gekostet hat, um zur Philosophie zu gelangen, und wenn es nicht so war.
Sie beginnen mit 1000 Punkten und verlieren einen für jedes Zeichen im Code. Bonuspunkte für:
Schleifen von Gegenständen erkennen und anhalten: +50
Erkennen von sich wiederholenden Artikeln und Anfordern, ob der Benutzer zum nächsten Link zum Artikel gehen soll: +170
Zulassen eines Standards für die vorherige Prüfung als Befehlszeilenargument oder Ähnliches: +140
Höchste Punktzahl gewinnt.
quelle
Antworten:
Ruby, 1000 -
303299337 - 50373 - 170382 - 170 - 140379 - 170 - 140 Zeichen =697701713797928931Ich bin mir sicher, dass noch viele Verbesserungen vorgenommen werden müssen.
(Dies erfordert Nokogiri)
Beispiellauf:
Beispiel eins, wo ich zu einem anderen Link gehen musste
Tricks, die ich verwendet habe:
p a
um nur nicht kursive Links zu erhalten, da sich alle nicht kursiven Links im eigentlichen Artikel immer in Absatzelementen in Wikipedia befinden.quelle
"BASH " - (falls nicht verwechselt: 1000 - 397 + 170 + 140 = 913 Punkte)"BASH" - (falls nicht verwechselt: 1000 - 386 + 170 + 140 = 924 Punkte)"BASH" - (Wenn nicht falsch angegeben: 1000 - 381 + 170 + 140 = 929 Punkte)
BASH wird absichtlich in Anführungszeichen gesetzt, da dies eine Mischung aus Werkzeugen ist, die in * nix-Shells verwendet werden, jedoch in ein Bash-Skript eingeschlossen sind.
Bearbeiten 1:
http://
alscurl
Standardwert zu diesem.href=
Übereinstimmung bei Ankern wurde in "f=
as" geändert.<a>
Andere normale Attribute, die auf " as" enden, sind nicht vorhandenf
. (Es besteht die Möglichkeit von benutzerdefinierten Tags. Bisher noch keine gesehen.)!Phil
stattNoPhil
. Dies ist ein wenig schrullig wie One zB auch sagen könnte!
,0
,N
,!P
oder ähnliches.-s
aufcurl
könnte entfernt werden durch drei weitere Bytes zu reduzieren, aber das wäre einen unordentlichen Ausgang ergeben. Ich bin mir nicht sicher, ob das ein Problem ist.Unter Verwendung von Macken würde Code bei 379 Bytes und 931 Punkten enden.
Ich könnte auch die Verwendung des (hoffentlich) passenden Navigationsfelds in @plannapus implementieren, indem ich sechs Bytes hinzufüge (wobei sechs Punkte abgezogen werden).
(p|ul).*?<(\1)
Bearbeiten 2:
Verwenden Sie
${#c[@]}
, um Trennungsgrade anstelle von Zählern zu drucken$i
.Unter Verwendung von Macken würde Code bei 374 Bytes und 936 Punkten enden.
Ich beschwöre Cthulhu und greife zu einer regulären + bash / shell / * nix-Lösung.
Gestohlen:
<p>
Trick von @Doorknob of Snow .Umgesetzt:
Bedarf:
bash
v.grep
mit-P
(PCRE) Unterstützung.sed
curl
cut
Verwendung:
Inline-Code. In Datei kopieren.
chmod +x filename
. Laufen Sie von./script /wiki/…
der Bash-Shell.Erweiterter und erklärter Code:
quelle
JavaScript 726 (444 Zeichen [556] + 170)
Jetzt weiß ich, dass dies möglicherweise nicht als Lesezeichen gilt, aber ich habe es trotzdem genossen, daran zu basteln.
Verwendung: Navigieren Sie zu der Seite, von der aus Sie beginnen möchten, und führen Sie in der Konsole Folgendes aus:
Für JavaScript ist die Ausgabe wie folgt:
Bei dieser Lösung wird davon ausgegangen, dass Sie auf einer erkannten Schleife zum nächsten Link springen möchten. Wenn Sie jedoch den Link am
true
Ende ändern, wirdfalse
stattdessen ein Bestätigungsfeld angezeigt (ziemlich ärgerlich ...) Zweitbonus oder nicht. Ich nehme nicht an.Eingerückt:
Also habe ich ursprünglich den Teil über das Ignorieren von Elementen in Parens verpasst, was es viel wortreicher gemacht hat, also hoffe ich, diese Filterfunktion herunterzufahren (oder sie hoffentlich ganz zu ersetzen).
Arbeiten in Chrome und Firefox (getestet in Firefox 26)
quelle
813 Zeichen
Prüfungsergebnis: 1000-813 + 50 + 170 + 140 = 547 :(
Keine externen Bibliotheken. Schleifenerkennung .
Das erste Argument ist der Quellartikel, das zweite ist der Zielartikel.
Golf Version:
Verständliche Version:
Beispiellauf "Sky" bis "Philosophie":
quelle
Scala (294 Zeichen => 1000-294 + 140 = 846 Punkte)
Die aktualisierte Lösung, die automatisch den nächsten Link übernimmt, wenn einer bereits verwendet wurde. Danke für die 140 Bonuspunkte.
Logik: Nimm den ersten "/ wiki" -Link, der kein ":" enthält (also ignoriert er "Datei:" -Link). Spülen und wiederholen mit Rekursion, wobei jedes Mal die Zählung + 1 zurückgegeben wird. Ich habe eine Liste aller vorherigen Ausgaben griffbereit, damit das Programm nicht in eine Endlosschleife gerät.
Regulärer Ausdruck: Ich habe 2 Formen des regulären Ausdrucks.
"<p>.*?\"/wiki/([^:]*?)\".*?/p>"
Hier finden Sie Links innerhalb der<p>
Tags"p>.*?/wiki/([^:]*?)\""
Dies ist ein etwas experimentelleres Tag, das sich bewährt hat, aber unterschiedliche Ergebnisse liefert, da es manchmal Links aus der rechten Infoleiste aufruft. Dies sind reguläre Artikel, daher glaube ich, dass sie immer noch gültig sind. Wenn dies nicht der Fall ist, kann das OP (oder jemand anderes) mir einen Kommentar hinterlassen und ich kann meine Lösung auf ein besseres Reg-Ex aktualisieren.Ich werde den zweiten regulären Ausdruck verwenden, bis ich einen Testfall finde, in dem es nicht funktioniert oder die OP erwähnt, dass das Aufnehmen von Links von der Seitenleiste nicht zulässig ist (meiner Meinung nach sind die Infoleisten immer noch Teil von der eigentliche Artikel selbst; eher eine Zusammenfassung).
Minimierte Quelle:
Lesbare Quelle:
Beispielausgabe:
Eingang
Ausgabe
quelle
args(0)
, um das erste Argument zu erhalten, Ihreobject
undmain
Definitionen zu entfernen, und ich denke, Sie können die auch entfernen:Int
. pastebin.com/YqywKcG8: Int
. Wusste nicht, dass Sie einen rekursiven Anruf tätigen. Mein Pastebin stammt ebenfalls aus Ihrer alten lesbaren Quelle, aber es gelten dieselben Konzepte.:Int
dort hinzuzufügen . Später heute werde ich auch eine lesbare Form der 333-Zeichen-Lösung hinzufügen, die ich habe. Vielen Dank für die Vorschläge @KChalouxobject Q extends App { ... }
ist völlig unnötig, wenn Sie den Code mit dem Interpreter ausführen, anstatt ihn mit scalac zu kompilieren. Lauf einfach mitscala <filename> [args..]
R, 379 Zeichen; 1000-379 + 170 = 791 Punkte
Version, bei der Benutzer gefragt werden, wie sie beim Erkennen einer Schleife vorgehen sollen
Mit Einrückungen und Kommentaren:
Beispiellauf:
R, 325 Zeichen; ??? Punkte
Version, die standardmäßig die erste nicht redundante Verbindung verwendet (dh keine Schleife).
quelle