Wie geht es Ihnen?

20

Martin hat ein schönes Snippet erstellt , mit dem Sie die Punktzahl für Antworten auf Herausforderungen verfolgen können. Das ist großartig, aber wäre es nicht besser, wenn Sie selbst den Überblick behalten könnten?

Erstellen Sie ein Programm, das die Anzahl der Bytes an sich mit den restlichen Antworten auf diese Frage vergleicht und "Ich bin die Antwortnummer n" zurückgibt.

Regeln:

  • Die Byteanzahl in Ihrer eigenen Antwort kann im Code fest codiert werden

  • Die Funktion kann die URL als Eingabe verwenden oder sie kann fest codiert sein. Die Zeichen für die URL werden nicht für die Byteanzahl gezählt, daher ist die Verwendung eines URL-Kürzers nicht erforderlich.

  • URL-Adressen zu Antworten können nicht fest codiert werden

  • Die Punktzahl für die Antworten finden Sie in der Kopfzeile (genau wie in Martins Snippet).

  • Der Antwortkopf muss das richtige Format haben (siehe unten).

  • Wenn es möglich ist, das Programm online auszuführen, teilen Sie uns bitte einen Link zu einem Online-Compiler (oder ein Code-Snippet, das aus der Antwort ausgeführt werden kann). Wenn dies nicht möglich ist, zeigen Sie bitte, wie die Funktion aufgerufen wird, und zeigen Sie die Ausgabe Ihres eigenen Compilers an (zum Zeitpunkt der Veröffentlichung der Antwort. Sie müssen sie nicht aktualisieren, es sei denn, Sie möchten es natürlich).

  • Sie müssen die Antwort tatsächlich mit den anderen Antworten auf diese Frage vergleichen. Es I'm answer number 1.ist nicht legal , ein Skript in einer bestimmten Sprache zu schreiben .

  • Wenn andere Antworten die gleiche Anzahl von Bytes haben wie Sie, können Sie wählen, ob Sie der Beste oder der Schlechteste von ihnen sein möchten.

Der Header muss formatiert sein:

# Language Name, N bytes

Durchgestrichen usw. können nicht verwendet werden. Wenn sich die Codegröße ändert, zeigen Sie sie in Fettdruck unter der Überschrift an oder geben Sie sie auf andere Weise an.

Die Ausgabe muss sein I'm answer number n., wobei die Nummer ndie Position ist (nachfolgende Zeilenumbrüche / Leerzeichen sind OK). Die kürzeste Antwort lautet also "Ich bin die Antwort Nummer 1.", die zweite "Ich bin die Antwort Nummer 2." etc.

Dies ist Codegolf, daher gewinnt die kürzeste Antwort in Bytes.

Stewie Griffin
quelle
Wenn andere Antworten die gleiche Anzahl von Bytes haben wie Sie, können Sie wählen, ob Sie der Beste oder der Schlechteste von ihnen sein möchten. Vielleicht sollte das Datum nach dem Absenden ein Spagat sein, damit Sie nicht zwei Antworten haben, die behaupten, dieselbe Zahl zu sein. Oder Sie können den Standard verwenden, dass beide für den höheren Platz gebunden sind, wenn sie gebunden sind.
mbomb007
2
Ich bin mir nicht sicher, ob das funktionieren wird. Die meisten (guten) Online-Dolmetscher erlauben es nicht, andere Webseiten zu locken, aber in der Herausforderung heißt es, dass der Code auf einem Online-Dolmetscher ausgeführt werden muss.
ein Spaghetto
Sprechen wir darüber im Chat.
ein Spaghetto
Müssen Anführungszeichen um die URL gezählt werden? Einige Antworten schließen sie derzeit von der Zählung aus, andere schließen sie ein.
HDV

Antworten:

2

Perl, 107 Bytes

use LWP;print"I'm answer number ",1+grep($_<107,LWP::UserAgent->new->get('http://codegolf.stackexchange.com/q/60204')->content=~/<h1>.+, (\d+)/g),'.';

Etwas weniger Golf gespielt:

use LWP;
$agent = new LWP::UserAgent();
$response = $agent->get('http://codegolf.stackexchange.com/q/60204');
@answers = $response->content =~ m/<h1>.+, (\d+)/g;
print "I'm answer number ", 1+grep($_<107, @answers), '.';

Beispielnutzung

$ perl my_rank.pl
I'm answer number 1.
primo
quelle
7

Python 2, 145 Bytes

from requests import*
print"I'm answer number %s."%(sorted([int(a["body"].split(",")[1].split()[0])for a in get('http://api.stackexchange.com/2.2/questions/60204/answers?pagesize=99&order=desc&sort=activity&site=codegolf&filter=!SWJ_BpAceOT6L*G2Qa').json()["items"]]).index(145)+1)

Ausgabe von 2015-10-10 17:30:00 UTC:

I'm answer number 1.

Ich habe keine URL für meine Punktzahl gezählt. Bitte geben Sie an, wie viel ich hinzufügen soll. Hat eine eigene Partitur, setzt voraus, dass sie bereits veröffentlicht ist. Bricht ab, wenn mehr als 99 Antworten gepostet werden.

Blau
quelle
6

AutoIt, 175 Bytes

(202 Bytes - 27 für die URL)

#include<String.au3>
$0=_StringBetween
$1=1
For $2 In $0(BinaryToString(InetRead("http://q.codegolf.xyz/60204")),'<h1>',' b')
$1+=$0($2,', ','')[0]<175?1:0
Next
ConsoleWrite("I'm answer number "&$1&".")

Ausgabe vom 09.10.2015 17:47:00 UTC:

I'm answer number 1.
mınxomaτ
quelle
Ich habe noch nie von Autolt gehört, aber es ist richtig, dass dies nicht funktioniert, wenn der Name der Sprache ein Komma enthält. (Ich weiß nicht, ob es solche Sprachen gibt, daher bin ich mir nicht sicher, ob es darauf ankommt)
Stewie Griffin
@StewieGriffin Ja, aber ich kann mich auch an keine Sprache mit Komma erinnern ;-). Wenn einer kommt, werde ich es ändern.
Mittwoch,
@minxomat Der Name sieht so aus, als hätte er einen lanstelle eines I, also habe ich ihn falsch gelesen. Der einzige Grund, warum mir das aufgefallen ist, ist der Wikipedia-Artikel mit einer Serife.
mbomb007
Ich warte nur darauf, dass jemand eine Sprache mit einem Komma erfindet, um diese Antwort zu sabotieren ...
Darrel Hoffman
@ DarrelHoffman Nun, es müsste ein Komma und ein Leerzeichen in seinem Namen haben ^^
mınxomaτ
4

JavaScript (ES7), 149 Byte

283 Bytes - 134 für die URL. Ich habe noch nie zuvor HTTP-Anfragen verwendet, aber hier geht es weiter ...

x=z=>alert(`I'm answer number ${[for(y of z.items)y.body.match(/, (\d+)/)[1]].sort().indexOf("149")+1}.`);document.write('<script src="//api.stackexchange.com/2.2/questions/60204/answers?pagesize=100&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T&callback=x">\x3C/script>')

In Firefox 41 erfolgreich getestet.

Zuerst werden die Überschriften aller Antworten durchsucht, um die Anzahl der Bytes zu ermitteln. Anschließend wird die erste Position mit der Anzahl der Bytes 243 149 ermittelt. Derzeit werden nur die ersten 100 Antworten überprüft, und es wird ein Fehler angezeigt, wenn jemand unter 100 fällt Bytes, aber es funktioniert jetzt. ;)

Vielen Dank an @GeorgeReith für die viel kürzere Technik. Alte Version mit AJAX (243 Bytes):

x=new XMLHttpRequest,x.onreadystatechange=_=>{if(x.readyState==4&&x.status==200)alert(`I'm answer number ${[for(y of JSON.parse(x.responseText).items)y.body.match(/, (\d+)/)[1]].sort((a,b)=>a-b).indexOf("243")+1}.`)},x.open("GET","//api.stackexchange.com/2.2/questions/60204/answers?pagesize=100&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T",!0),x.send()
ETHproductions
quelle
Sieht gut aus ... obwohl möglicherweise kaputt geht, wenn jemand eine weitere 151-Byte-Antwort sendet
George Reith
@ GeorgeReith Nah, sollte es nicht. Das OP sagt, dass Verbindungen in beide Richtungen unterbrochen werden können, und dies wird sich einfach vor den anderen stellen.
ETHproductions
Ah, er hat das herausgeschnitten. Trotzdem ist es wahrscheinlich besser, nach Erstellungsdatum zu sortieren, um die Wahrscheinlichkeit zu erhöhen, dass Ihr Erstellungsdatum gefunden wird, anstatt nach einem der wenigen, die zuvor gepostet und die Antwort bearbeitet haben.
George Reith
@GeorgeReith If other answers have the same number of bytes as your own, you can choose if you want to be best or worse of them.Das ist noch im Hauptpost; verstehe ich etwas falsch?
ETHproductions
Keine Entschuldigung, ich habe die Editierhistorie gelesen und war verwirrt.
George Reith
4

PHP, 158 159 164 Bytes

I'm answer number <?for(;$h[]=json_decode(fread(gzopen('http://api.stackexchange.com/2.2/questions/60204/answers?pagesize=99&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T',r),1e4),1)[items][+$i++][body];);echo array_sum(preg_filter(~„ÑÕß×£›ÔÖ߆‹šŒÃЗÎÑÕ‚Œš,~ÛÎÃÎÊÇ,$h)),~Ñ;

127 Bytes von 'http://api.stackexchange.com/2.2/questions/60204/answers?pagesize=99&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T'nicht gezählt

Formatierte Version mit ungolfed Saiten:

<?
for(;
    $h[]=json_decode(
        fread(
            gzopen(
                'http://api.stackexchange.com/2.2/questions/60204/answers?pagesize=99&order=desc&sort=votes&site=codegolf&filter=!--pn9sqW9y0T',r
            ), 1e4
        ), 1
    )[items][+$i++][body];
);
echo"I'm answer number ",
    array_sum(
        preg_filter('{.* (\d+) bytes</h1.*}se','$1<159', $h)
    ),
    ".";
  • Lädt die JSON-Antwort (einmal pro Antwort, um dank @Blackhole 5 Bytes zu sparen)
  • Sammelt Antwortkörper in $h
  • Ersetzt den gesamten Text durch "1" (true), wenn die Byteanzahl <= 159 ist, oder "" (false), wenn dies nicht der Fall ist
  • summiert die Ergebnisse

Die Zeichenfolgen wie ¶Ø’ßž‘Œˆšß‘Š’šßsind in PHP gültige Konstantennamen, aber da die Konstanten nicht existieren, werden sie als Zeichenfolgenliteral behandelt. ~invertiert sie, diesmal in "I'm answer number "(Speichern eines Bytes für jeweils ein Anführungszeichen)

Verwendung

php -derror_reporting=0 howareyou.php

Ich antworte Nummer 1.

Fabian Schmengler
quelle
Ist die $aVariable wirklich notwendig? Warum machst du das nicht einfach $h[]=json_decode(…)[items][+$i++][body]? Was sind das für seltsame Charaktere?
Blackhole
Guter Punkt. Dies wird eine neue Anfrage für jede Antwort machen, aber wen interessiert das schon :) Die seltsamen Zeichen sind bitweise invertierte Strings. Es handelt sich um gültige Konstantennamen in PHP, die als Zeichenfolgenliterale verwendet werden, wenn sie nicht vorhanden sind, sodass ich die Anführungszeichen speichern kann. Zum Beispiel können " "(3 Bytes) auf (2 Bytes) reduziert werden
Fabian Schmengler
In der Tat habe ich Ihre Erklärung zu dieser Antwort gefunden . Da dies eine ungewöhnliche Methode ist, halte ich es für eine gute Idee, sie hier in Ihrem Beitrag noch einmal zu erläutern :).
Blackhole
Ich denke, du kannst es viel besser machen, wenn du das json_decodeund nur splitauf ':'oder so überspringst , zB: codepad.org/7rZg06by
primo
Gute Idee, aber ich fürchte, es könnte unzuverlässig sein, da die Quellcodes viele Doppelpunkte enthalten. Wenn Sie "Ich bin die Antwortnummer" vor dem sich öffnenden PHP-Tag setzen, werden mindestens zwei Bytes gespart, danke dafür!
Fabian Schmengler
3

Javascript (ES6), 186 Byte

(335 - 149 Bytes für die URL)

a=d=>alert(`I'm answer number ${d.items.map(q=>(y=[q.body.match(/, (\d+)/)[1],(x=q.owner.user_id==11182)])&&x?z=y:y).sort().indexOf(z)+1}.`)
document.write(`<script src="https://api.stackexchange.com/questions/60204/answers?pagesize=100&order=desc&sort=activity&site=codegolf&filter=!)Q2B_A19OPkd2j8JforD00f5&callback=a">\x3C/script>`)

George Reith
quelle
Ich hatte keine Ahnung, dass du es so machen könntest! Darf ich fragen, warum Sie \x3Canstelle von verwendet <?
ETHproductions
@ETHproductions Da der Browser sofort nach dem schließenden Skript-Tag sucht und das Skript sonst nicht ausführt, wird das Schließen des Skript-Tags bis zum Einfügen nach dem Einfügen verschoben. Es verwendet JSONP mit einem Rückruf und es hängt von der API ab, ob es dies unterstützt, aber glücklicherweise tut es Stackexchange. Ehrlich gesagt verstehe ich die Gründe dafür nicht ganz, aber es ist eine legitime Angelegenheit.
George Reith
1

Awk, 153 Bytes

BEGIN{if(u){print"I\047m answer number "system("curl -s "u"|awk -f a")".";exit}FS="1>.*,|es<\/h"}NF==3{r+=($2+0)<153?1:0}END{exit(r<1?1:r)}

Dies sollte in einer Datei gespeichert aund wie folgt ausgeführt werden:

awk -v u=http://codegolf.stackexchange.com/questions/60204/how-are-you-doing -f a

Ich subtrahiere die 68 Bytes für http://codegolf.stackexchange.com/questions/60204/how-are-you-doingund addiere 13 zum Code für das Bootstrapping awk -v u=und -f a.

Weniger Golf, das kann noch kürzer sein:

curl -s http://codegolf.stackexchange.com/questions/60204/how-are-you-doing | awk -F"1>.*,|es<\/h" 'NF==3{r+=(0+$2)<103?1:0}END{print"I\047m answer number "(r<1?1:0)"."}'

Es zieht sich immer in Bindungen vor. Die Anzahl der Bytes ist jeweils fest codiert.

Bei der Golf-Version ruft das Skript sich selbst auf und gibt den Exit-Wert über das System aus. In jedem Fall zählt nur weniger als das fest codierte Wertinkrement r, auf das dann zurückgestellt werden muss, 1wenn es führt.

Dadurch werden die Bytes nicht richtig gefunden, wenn zwischen bytesund </h1>und wahrscheinlich eine Reihe anderer Fälle vorhanden sind, die ich nicht berücksichtigt habe.

Ab Sun Oct 11 05:17:51 UTC 2015diesem gibt dies:

I'm answer number 3.
n0741337
quelle
Da ich zum ersten Mal Golf spiele, teilen Sie mir bitte mit, ob ich gegen Regeln, Lücken, Zählungen usw. verstoßen habe oder welche Verbesserungen ich vornehmen könnte.
n0741337
Ich denke, Sie müssen "Ich bin die Antwortnummer" anstatt "Ich bin die Nummer" drucken.
Lirtosiast
@ ThomasKwa Hah! Ich wusste, dass es zu schön war, um wahr zu sein. Danke und behoben. Erfordert das Hinzufügen von Bytes ein Durchgestrichen?
n0741337
Sie brauchen keine, so wie Sie keine Durchstreichung brauchen, wenn Sie nur Bytes spielen.
Lirtosiast
1

GNU Awk, 156 Bytes

(Inspiriert von der Awk-Lösung von n0741337 .)

Dieser erledigt alles selbst, ohne einen externen Befehl auszuführen.

BEGIN{d="/inet/tcp/0/"h"/80"
print"GET "p" HTTP/1.1\nHost:"h"\n"|&d
while(d|&getline)n+=match($0,/1>.*, ([0-9]+)/,m)&&m[1]<156
print"I'm answer number",n+1}

Erwartet Hostname und Pfad als separate Werte. Da sie kostenlos zur Verfügung stehen, verstößt dies hoffentlich nicht gegen die Regeln.

Probelauf:

bash-4.3$ awk -v h=codegolf.stackexchange.com -v p=/questions/60204/how-are-you-doing -f number.awk 
I'm answer number 4
Mann bei der Arbeit
quelle