Ich weiß, dass es viele Herausforderungen bezüglich der "zwei besten Code-Golfer der Welt" gegeben hat, aber diese ist etwas einzigartiger, da sie in der ersten Runde einer Reihe von (zukünftigen) Herausforderungen besteht, an denen beide beteiligt sind.
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die zwei verschiedene Nicht-Whitespace-ASCII-Zeichenfolgen zwischen Dennis ♦ und Martin Ender ♦ zurückgibt . Der schwierige Teil ist, dass Sie die exakte Zeichenfolge "tie" ausgeben müssen, falls die Reputation identisch ist (nicht wahrscheinlich) und die beiden oben genannten nicht-Whitespace-ASCII-Zeichenfolgen sich von "tie" * unterscheiden sollten .
Es können keine Eingaben wie Benutzernamen oder Benutzer-IDs vorgenommen werden. Wie üblich sind URL-Kürzungen verboten, ebenso wie die üblichen Schlupflöcher.
Beispiele:
Let the chosen string for Dennis be "D" and the chosen one for Martin Ender be "M" (should be specified)
If Dennis' rep > Martin Ender's rep => D
If it's the other way around => M
If it's a tie => tie
WICHTIG! Die Abstimmung über Posts von Dennis & Martin zum alleinigen Beeinflussen eines Unentschieden, um die folgenden Lösungen zu testen, stellt eine gezielte Abstimmung dar, die im gesamten Stack Exchange-Netzwerk verboten ist. Wenn Sie testen möchten, ob eine Lösung ordnungsgemäß ausgegeben
tie
wird, ändern Sie die darin enthaltenen IDs in die IDs von zwei Benutzern, von denen Sie wissen, dass sie gebunden sind. Weitere Details finden Sie in diesem Meta-Beitrag .
* Ich glaube, das hätte sowieso niemand benutzt
quelle
Antworten:
05AB1E ,
6564 BytesCode:
Verwendet die 05AB1E- Codierung.
Erläuterung:
•в=6{•
konvertiert die Zahlв=6{
von Basis 255 in Basis 10, was zu 1201208478 führt . Die erste Hälfte ist die ID von Dennis (12012) und die zweite Hälfte ist die ID von Martin (8478). Teilen Sie sie in 5er-Teile auf5ô
, um das folgende Array zu erhalten:Glücklicherweise können wir die führende Null von Martins ID lassen, da dies immer noch funktioniert (überprüfen Sie den Link, bevor Sie auf die führende Null klicken).
Wir durchlaufen nun dieses Array
vy
und konstruieren den folgenden String aus diesem 05AB1E-Code:While
ÿ
ist das aktuelle Element des Iterators (unter Verwendung von String-Interpolation). Probieren Sie es online aus!.w
Liest nach dem Erstellen der Verknüpfung alle Daten aus der Verknüpfung, was zu einer großen Textmenge führt. Um den Ruf davon abzukratzen, müssen wir uns auf die Saite aufteilentitle="reputation"
. Oder in einer komprimierten Version:’„Ö="ˆ"’
. Teilen Sie diesen String (mit¡
) auf und erhalten Sie das zweite Element (mit1è
). Behalten Sie die ersten 100 Zeichen (mitт£
) bei.Unser Text sieht nun ungefähr so aus:
Dieser Teil ist einfach, wir entfernen nur alles außer Ziffern , um die Reputationsnummer zu erhalten, für die wir eine eingebaute (
þ
) haben. Wir beenden die Schleife und wickeln alles in ein Array}})
.Schließlich können wir die Reputationszahlen verarbeiten:
Was ergibt entweder
D
,M
odertie
.quelle
1è) and keep the first **100 characters** (with т£
. " Vollständig in Codeblöcken sein, oder sollte er " zweites Element (mit1è
) und die ersten 100 Zeichen (mitт£
) behalten . " Stattdessen? Ein Tippfehler, aber wenn es so sein soll, bin ich verwirrt.Dennis: 140,033
;Martin: 140,003
, aber ich habe deinen Code hier ausprobiert tio.run/nexus/05ab1e#@/… , es ergibt sichtie
. Sollte es nichtD
stattdessen ausgegeben werden?.w
erfordert einen Webzugriff , der auf TIO beschränkt ist (es wird 05AB1E im abgesicherten Modus ausgeführt). Im Offline-Interpreter sollte es funktionieren.PowerShell v3 +,
14712311910310196 Bytes24 Bytes mit True / False-Ausgabe anstelle der Namen gespeichert.
Sparte weitere 4 durch Restrukturierung der Endkontrolle.
Durch das Abrufen nur der Reputation der beiden Benutzer aus der Anfrage werden 16 gespart, und durch das mehrmalige Verwenden der beiden Benutzer werden
|% r*n
Millionen von Klammern und zwei unbrauchbare Variablen entfernt.-2 dank TessellatingHeckler - mit einem Escape-Zeichen anstelle von zwei Anführungszeichen für die URL wurde auch
@
das nicht benötigte Array entfernt (oopsie)benutzte einen seltsamen
.ToString
Trick, von dem ich nie wusste, dass er bis jetzt von TessellatingHeckler -5 empfohlen wurde , und schließlich unter 100.Version, die Namen zurückgibt:
Dies sieht aufgrund der Kürzung der Parameternamen ziemlich chaotisch aus.
irgendwo
|% r*n
erscheint, dass wir das bekommenReputatioN
, und|% d*
ist dasDisplay_name
Verwendet
Invoke-RestMethod
(Aliasirm
), um die API abzufragen, speichert das Ergebnis mit dem NamenItems
(verwendet|% I*
) in den beiden Variablen$a
&$b
, eine für jeden Golfer. Der TrickToString
(|% T*g
) führt zu einem der WerteD
,M
oderTie
wenn die Zahl ungerade / gerade / ist. Null.quelle
103! = 9.902900716486180407546715254581773349090165822114492483005280554699... × 10^163
bytes lang ..? : PToString
so mit +/- Zahlen gearbeitet, werde mich für die Zukunft erinnern.Python 2 , 160 Bytes
Nicht die kürzeste Python-Antwort, aber die kürzeste, die bisher keine Vermutungen zulässt.
Druckt,
1
wenn Martin mehr Repräsentanten hat,-1
wenn ich das tue.quelle
JavaScript (ES6),
167156146144141132103 BytesDumm
fetch
und seine dummen, teuerPromise
Verkettungs!Nimmt an, dass Dennis & Martin, wie derzeit erlaubt, immer die 2 bestplatzierten Benutzer sein werden. Muss von der Root-Ebene von ausgeführt werden
api.stackexchange.com
. Gibt einPromise
Objekt zurück (wie dies jetzt nach Konsens zulässig ist ),tie
das ein JSON-Objekt enthält, oder das JSON-Objekt für denjenigen, der zur Zeit die meisten Repräsentanten hat. Wenn das JSON-Objekt nicht als gültige Ausgabe betrachtet wird, fügen Sie 5 Bytes für hinzu.link
.link
anstelle des ersten Buchstabens des zurückgebedisplay_name
, wurden 11 Bytes gespart , was auch eine bessere Zukunftssicherheit bietet, wenn die Benutzernamen geändert werden und mit demselben Buchstaben begonnen wird!Versuch es
Alternative
Wenn Dennis & Martin einmal nicht an der Spitze stehen und wir immer noch wissen wollen, wer die meisten Mitarbeiter hat, dann benötigen wir die folgenden Daten zum Preis von zusätzlichen 10 Byte.
quelle
.display_name[0]
zu.display_name
, oder eine noch kürzere Alternative , die für beide von ihnen immer noch einzigartig ist:.link
. ;) Oder nur das gesamte JSON, aber ich bin mir nicht sicher, ob es in das Alert-Popup passt.link
, aber ich wurde mit einer gefilterten API - Abfrage nur die Info kehre ich brauchte.alert
ein JSON-Objekt, wird nur angezeigt[object Object]
.Python 3,
160157151 Bytes-3 Bytes dank @KevinCruijssen
Druckt einen Link zu dem Benutzer, der mehr Reputation hat
Angenommen, sie sind auf # 1 und # 2
Ohne irgendwelche Annahmen zu machen, Python 2, 157 Bytes :
quelle
Python,
226225221 BytesIch denke, das ist zu lang.
Gibt aus,
"True"
ob Martin mehr Wiederholungen als Dennis hat,"False"
ob Dennis mehr Wiederholungen als Martin hat und"tie"
ob sie die gleichen haben (theoretisch. Ich kann das nicht testen: P).https
->http
für 1 Byte danke an @KevinCruijssen!re as r, r.sub
->re, re.sub
für 4 Bytes dank @ovs!quelle
https
zuhttp
? Ich weiß, dass PPCG jetzt vollständig https ist, aber möglicherweise wird es automatisch zu HTTPS umgeleitet, wenn Sie in Python zu HTTP navigieren, genau wie in einem Browser?re as R
. Verwenden Sie einfachimport requests as r,re
andre.sub
cmp
Funktion verwenden, um einige Bytes zu sparen, indem Sie die letzten drei Zeilen durch so etwas wieprint['tie',0,1][cmp(f('8478'),f('12012'))]
PHP, 167 Bytes
druckt -1 für Dennis, 1 für Martin Ender. Krawatte im Falle einer Krawatte
quelle
Python 2 ,
228223204199 BytesIch habe das auf einem mobilen Hotspot gemacht, also ... ist es nicht großartig ...
Angenommen, beide werden immer in der gleichen Hunderttausend sein.Nimmt jetzt nichts an. : DDruckt,
True
wenn Dennis mehr Ansehen hat als Martin,False
ansonsten undTie
wenn sie ... gebunden sind.quelle
Bash + jq ,
140133 BytesFormatiert und erklärt
Erstens haben wir
curldie API W3M(und Verwendung:--compressed
oder kurz--com
zu un-gzip)Das ist etwas JSON. Beachten Sie, dass die Bestellung stabil ist und nicht auf dem Ruf basiert. JQ verarbeitet dann den JSON, für den er gemacht ist.
Wir verwenden
1/x
oben, um einen Division-durch-Null-Fehler zu erzeugen, wenn min == max, also in einer Bindungssituation. Die||echo tie
in Bash fängt das auf.Beachten Sie, dass in diesem Fall eine Warnung auf stderr von JQ gedruckt wird, aber wir betrachten nur stdout das tatsächliche Ergebnis des Programms;)
quelle
w3m
statt verwendencurl --com
, um ein paar Bytes zu speichern. Ich denke auch, dass es erwähnenswert ist, dass dies jq 1.5 erfordert, da jq 1.4 keinen Fehler für die Division durch Null erzeugt.Stackexchange API Data Explorer ,
184180 ByteVielen Dank an Kevin Cruijssen für -4 Bytes
Drucke 1 für Dennis und 2 für Martin
Da ich erst gestern von der SEADE erfahren habe, sollte dies sehr schlagbar sein.
Probieren Sie es hier aus
quelle
'D'
und'M'
zu0
und ändern1
.