Ich bin ein sehr gelegentlicher Code-Golfer und sehe nur dann häufig Beiträge, wenn sie in der Seitenleiste "Hot Network Questions" auf StackOverflow angezeigt werden. Normalerweise komme ich zu spät zum Spiel, und da ich nur Python kenne, kann ich kaum antworten, da es bereits mehrere Python-Antworten gibt. Ihre Herausforderung besteht darin, herauszufinden, ob eine Frage es wert ist, von mir beantwortet zu werden.
Eingang:
- Ihr Code (Funktion oder Programm) nimmt einen Eingabeparameter an
i
Ausgabe:
- Wahrheits- oder Falschwert für Fragen-ID
i
. Wahrheit ausgeben, wenn die Frage mehr als 5 Antworten, mehr als 3 Fragenpunkte und eine oder weniger Antworten in Python enthält (keine Unterscheidung zwischen Versionen).
Regeln / Erläuterungen:
- Das Eingabeformat kann beliebig sein (stdin, Datei, Befehlszeile), sollte jedoch in Ihrer Antwort angegeben werden. Datentypen und führende / nachfolgende Leerzeichen spielen keine Rolle.
- Angenommen, die Fragen-ID ist gültig für
codegolf.stackexchange.com
. - Ignorieren Sie sprachspezifische Fragenanforderungen. (dh wenn eine Frage auf Stimmen und Antworten trifft und keine Python-Antworten hat, weil es nur Java ist, führt dies immer noch zur Wahrheit).
- Eine Antwort ist eine Python-Antwort, wenn "python" (case insenstive) vor der ersten Zeile des Beitrags steht.
- Dies ist Code Golf, also gewinnt der kürzeste Code in Bytes.
Musterkoffer *
id = 79082 => True
id = 78591 => False (less than 5 answers, also hella hard)
id = 78410 => True
id = 76428 => False (greater than 1 Python answer)
id = 78298 => False (not high enough question score)
* Zum Zeitpunkt der Veröffentlichung überprüft, möglicherweise geändert
code-golf
internet
classification
wnnmaw
quelle
quelle
Antworten:
05AB1E ,
167160159158156154143 BytesVerdammt, fast so lange wie eine normale Sprache ...Mist ...
mehraktuell die die schlagen Ruby - Antwort von 1 Byte.Jetzt länger als die Ruby-Antwort, gell! .Ich sollte jetzt wahrscheinlich ins Bett gehen.
Danke an @wnnmaw für das Speichern von 1 Byte und danke an @R. Kap für das Speichern weiterer 2 Bytes!
Code:
Oder mit mehr Lesbarkeit:
Erläuterung:
Zunächst wird hier viel Text komprimiert, was sich in gutem alten Python niederschlägt. Die unkomprimierte Version ist:
Dieser Teil:
Fügt tatsächlich einen Stapelwert ein, kopiert ihn in die URL und ruft alle HTML-Daten ab. Die HTML-Daten werden mit oben auf den Stapel gelegt
#.append(f.read())
.Wir zählen die Anzahl der Antworten und die Anzahl der Vorkommen von
class="answer"
.Um die Anzahl der Stimmen zu zählen, teilen wir die Daten einfach auf "nützlich und klar" und behalten nur die Ziffernwerte von
[0:99]
using bei®"useful and clear"¡`99£þ
. Dies ist die Anzahl der Upvotes.Schließlich müssen wir jede Antwort überprüfen, ob der Text
"Python"
vor dem schließenden Kopftext vorhanden ist. Um alle Antworten zu erhalten, teilen wir einfach die Daten aufclass="post-text"
und teilen jede von ihnen erneut auf<
. Wir entfernen die ersten beiden Elemente, um den Teil zu ermitteln, in dem die Sprache angezeigt wird, und prüfen, ob die Kleinbuchstabenversion in dieser Zeichenfolge enthalten ist.So, jetzt sieht unser Stack für id = so aus
79273
:Dies ist auch bei eingeschaltetem
-d
ebug-Flag im Interpreter zu sehen.Es geht also nur darum, die Daten zu verarbeiten:
Verwendet die CP-1252- Codierung. Sie können den Dolmetscher hier herunterladen .
quelle
;)
ppcg.lol/q/id
Komprimierung Bytes sparen ?Python 3.5,
280272260242240 Bytes:( Vielen Dank an Adnan für den Trick, den
*
Operator in Vergleichen zu verwenden, was zu 2 gespeicherten Bytes führt! )Einfach genug. Verwendet die in Python integrierte
urllib
Bibliothek, um zur Website der Frage zu gelangen, und verwendet dann reguläre Ausdrücke, um die Anzahl der Stimmen, die Anzahl der Antworten und die Anzahl der Python-spezifischen Antworten in dem von der Website zurückgegebenen dekodierten Text zu ermitteln. Schließlich werden diese Werte mit den Bedingungen verglichen, die zum Zurückgeben einestruthy
Werts erforderlich sind , und wenn sie alle Bedingungen erfüllen, werden sieTrue
zurückgegeben. AnsonstenFalse
ist.Das Einzige, worüber ich mir Sorgen machen könnte, ist, dass die regulären Ausdrücke in Bezug auf die Anzahl der pythonspezifischen Antworten zum Speichern von Bytes viel Spielraum bieten. Daher kann es zuweilen etwas ungenau sein, obwohl dies wahrscheinlich ausreicht die Zwecke dieser Herausforderung. Wenn Sie jedoch ein viel genaueres wünschen, habe ich eines unten hinzugefügt, obwohl es länger ist als das obige. Die unten gezeigte Größe beträgt derzeit 298 Bytes, da für die Zählung von Python-Antworten ein viel längerer regulärer Ausdruck verwendet wird, für den Sie nicht wissen konnten, wie lange ich dafür gebraucht habe, als für meine ursprüngliche Funktion. Dieser sollte für mindestens 80% bis 90% aller Testfälle funktionieren.
Aber was ist mit diesen Fragen mit mehreren Seiten voller Antworten? Keines der oben genannten Verfahren funktioniert in dieser Situation sehr gut, wenn sich beispielsweise 1 Python-Antwort auf der ersten Seite und eine andere auf der zweiten Seite befindet. Nun, ich habe mir die Freiheit genommen, dieses Problem zu beheben, indem ich eine andere Version meiner Funktion (siehe unten) erstellt habe, die jede Seite mit Antworten, sofern mehrere vorhanden sind, auf Python-Antworten überprüft. Dies hat sich in vielen der von mir beschriebenen Testfälle bewährt habe es geworfen. Nun, ohne weiteres, hier ist die neue und aktualisierte Funktion:
Ziemlich lange, nicht wahr? Ich habe nicht viel mit Codegolf zu tun, obwohl ich, wenn Sie wollen, ein bisschen mehr Golf spielen kann. Ansonsten liebe ich es und könnte nicht glücklicher sein. Oh, ich hätte fast vergessen, dass dies als zusätzlichen Bonus auch die Gesamtzahl der Python-Antworten auf die Frage, die Gesamtzahl der Stimmen auf die Frage und die Gesamtzahl der Antworten auf die Frage ausgibt, wenn die Frage
id
einer Frage mit mehr als einer Seite entspricht von Antworten. Wenn die Frage sonst nur aus einer einzigen Seite mit Antworten besteht, wird nur dertruthy/falsy
Wert ausgegeben . Diese Herausforderung hat mich wirklich ein bisschen mitgerissen.Diese nehmen jeweils die Frage
id
in Form einer Zeichenfolge an .Ich würde
Try It Online!
hier Links für jede Funktion setzen, aber leider weder das Abrufen von Ressourcen über Pythons Bibliothek erlaubenrepl.it
noch .Ideone
urllib
quelle
http://codegolf.stackexchange.com/q/
die Frage abrufen. Auch isthttp://
obligatorisch?unknown url type
Fehlermeldung.ppcg.lol/q/id
funktioniert auchJulia, 275 Bytes
Dies ist eine Funktion, die eine Ganzzahl akzeptiert und einen Booleschen Wert zurückgibt. Es stellt eine Verbindung zur Stack Exchange-API her und bei jedem Ausführen der Funktion werden 2 API-Anforderungen gestellt. Führen Sie sie daher nicht zu oft aus, da sonst Ihre 300 Anforderungen / Tag-Quote erschöpft sind.
Ungolfed:
quelle
ppcg.lol
reichte die API-Version nicht aus , nachdem ich erfahren hatte, dass sie einen kurzen Link zu allem, was mit Codegolf zu tun hat, darstelltSchläger, 339 Bytes
Golf hat noch viel zu bieten.
quelle
Ruby + HTTParty ,
170146145142139138 + 11 (-rhttparty
Flag) =181157156153150149 ByteIch glaube nicht, dass es Kantenfälle gibt, die dazu führen würden, dass meine Regex-Muster brechen. Ich hoffe ...
Auf den von @WashingtonGuedes bereitgestellten Shortlink aktualisiert und festgestellt, dass sich HTTParty nicht beschwert, wenn ich mit
//
anstatt mit beginnehttp://
.Aktualisiert für etwas sicherere reguläre Ausdrücke. Ich habe sowieso Bytes gespart, indem ich festgestellt habe, dass HTTParty-Antwortobjekte von String erben, was bedeutet, dass ich sie nicht einmal zum
.body
Abgleichen des regulären Ausdrucks verwenden muss!@manatwork wies auf eine zufällige Hinzufügung von Charakteren hin, die ich hinterlassen habe und die aus Gründen des Golfspiels
i
jetzt als Zeichenfolge akzeptiert werden muss.Regexes aktualisiert.
Die gleiche Länge.-1 Byte durch Ausschneiden eines Parens.Zusätzliche Hinweise:
"post-text"
, mit der wir übereinstimmtenst.*xt"
. Eine sicherere Version hätte danach ein Leerzeichen eingefügt, aber das opfern wir für den Golfsport.net/http
Module verwendet, da die angegebene URL ordnungsgemäß umgeleitet wird."up*?\d
war die kürzeste Sequenz, die ich gefunden habe und die der Anzahl der Stimmen entsprach. Wir brauchen nur den ersten, daher haben die Antworten zum Glück keinen Einfluss darauf.quelle
ppcg.lol/q/#{i}
funktioniert auchppcg.ga/q#{i}
vielleicht? (Ich kenne Ruby nicht)ppcg.lol/q#{i}
ist anwendbar, denke ich? (a/#b
ist das gleiche wiea#b
)"
ruiniert den/"e-c.*?(\d+)/
regulären Ausdruck. By the way, die Forderung sagen über den Eingang , dass „Datentypen (...) spielt keine Rolle.“ Also besser den i - Parameter als String übergeben, so dass Sie die Substitution mit Verkettung ersetzen:"//ppcg.lol/q/"+i
.Groovy,
179161157Dank Timtech werden 17 Zeichen gespart.
Das Schlüsselwort def ist ebenfalls nicht erforderlich.
quelle