Nachdem alle Aufgaben eingereicht wurden, wird ein Wörterbuch erstellt, das die Schülernummer dem Hash ihrer Datei zuordnet.
Dieses Wörterbuch, diese Hashmap oder dieses Mapping (wie auch immer Ihre Sprache es nennt) sieht folgendermaßen aus:
{100: "aabb", 104: "43a", 52: "00ab", 430: "aabb", 332: "43a"}
Der Schlüssel ist die Schülernummer und der Wert ist der Hash.
Unsere Aufgabe ist es, die Betrüger auszusuchen! Die Betrüger sind diejenigen, die identische Hashes haben.
Bei gegebener Eingabe {100: "aabb", 104: "43a", 52: "00ab", 430: "aabb", 332: "43a"}
sollte die Funktion den folgenden Text zurückgeben (oder drucken):
100 has identical files to 430
104 has identical files to 332
Beachten Sie, dass die Dateien, in denen die Hashes eindeutig sind, nicht erwähnt werden.
Auch hier ist die Reihenfolge wichtig :
{100: "aabb", 202: "aabb", 303: "ab", 404: "aabb"}
sollte den folgenden Text zurückgeben (drucken):
100 has identical files to 202,404
Es ist falsch , eines der folgenden Elemente zu drucken:
202 has identical files to 100,404
100 has identical files to 404, 202
Sie sollten es so drucken, wie es im Wörterbuch angezeigt wird. In einigen Sprachen ist das Durchsuchen eines Wörterbuchs zufällig. In diesem speziellen Fall können Sie die Eingabemethode so ändern, dass Sie es ordnungsgemäß durchgehen können.
Mehr Beispiele:
{} # prints nothing
{100: "ab", 303: "cd"} # prints nothing again
{100: "ab", 303: "cd", 404: "ab"}
100 has identical files to 404
{303: "abc", 304: "dd", 305: "abc", 405: "dd", 606: "abc"}
303 has identical files to 305,606
304 has identical files to 405
Der kürzeste Code gewinnt!
quelle
303 has identical files to [305, 606]
statt ausgeben303 has identical files to 305,606
?Antworten:
JavaScript (Babel-Knoten) , 113 Byte
Nimmt die Eingabe als Array von Arrays im
[key, value]
Format auf. Go go Gadget Double FlatMap!Probieren Sie es online aus!
JavaScript (Babel-Knoten) , 114 Byte
Übernimmt die Eingabe als natives JS-Objekt.
Probieren Sie es online aus!
quelle
flatMap
flatMap
wird noch nicht allgemein unterstützt. Ich bin mir sicher, dass es kürzere Wege gibt, aber es wird spät und ich kann nicht mehr denken. : pPython 2 ,
127126 BytesProbieren Sie es online aus!
Nimmt eine Liste der geordneten Paare
(<studentNumber>,<hash>)
als Eingabe.quelle
if','in
Retina 0,8,2 , 71 Bytes
Probieren Sie es online aus! Nimmt Eingaben in separaten Zeilen vor, aber der Link enthält eine Testsuite, die die Beispiele für Sie aufteilt. Erläuterung:
Wiederholen Sie diese Übereinstimmung, bis keine Ersetzungen mehr vorgenommen werden können.
Suchen Sie nach Paaren übereinstimmender Hashes und hängen Sie den Schlüssel der zweiten Übereinstimmung mit einem Komma-Trennzeichen an den Schlüssel der ersten Übereinstimmung an.
Löschen Sie alle Hashes.
Behalten Sie nur die Zeilen mit Kommas bei.
Ersetzen Sie das erste Komma in jeder Zeile durch den gewünschten Text (einschließlich Leerzeichen).
quelle
R ,
145132129126124 BytesProbieren Sie es online aus!
Es wird ein benannter Vektor als Eingabe verwendet (Namen sind die Schlüssel).
Wenn
", "
bei mehreren Duplikaten ein Trennzeichen (mit einem Leerzeichen nach dem Komma) zulässig ist, können wir diesen Code verwenden und 10 Byte speichern:R , 114 Bytes
Probieren Sie es online aus!
quelle
05AB1E , 34 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Sehen Sie diese 05AB1E Antwort von mir (Abschnitt Wie das Wörterbuch benutzen? ) Zu verstehen , warum
“ÿ€°Ê¼‡œ€„ “
ist"ÿ has identical files to "
.quelle
Ruby ,
9896 BytesProbieren Sie es online aus!
Übernimmt die Eingabe als Ruby Hash und kehrt durch Drucken zurück.
quelle
Gelee , 39 Bytes
Probieren Sie es online aus!
quelle
C # (Visual C # Interactive Compiler) , 130 Byte
Probieren Sie es online aus!
Das Seltsame an dieser Frage ist, dass die Beispiele in einem JSON-Format als Schlüssel / Wert-Paare angegeben werden, was normalerweise impliziert, dass sie ungeordnet sind ... In diesem Fall ist jedoch die Reihenfolge wichtig. Als solches verwende ich eine Liste von Tupeln für die Eingabe und eine Liste von Zeichenfolgen als Ausgabe.
quelle
Perl 5, 100 +1 (-n) Bytes
Probieren Sie es online aus!
quelle
Japt , 34 Bytes
Probieren Sie es online aus!
Im Moment ist die Reihenfolge der Zeilen etwas inkonsistent, aber innerhalb einer Zeile wird sie korrekt ausgegeben. Wenn die Zeilen der Ausgabe in einer bestimmten Reihenfolge sein müssen, werden einige weitere Bytes benötigt. Die Eingabe ist nur ein Array von
[id, hash]
PaarenErläuterung:
quelle
Perl 6 ,
115110103 Bytes-2 Bytes dank Jo King
Probieren Sie es online aus!
Nimmt eine Liste von Paaren auf, da Hashes ungeordnet sind. Eine Liste mit Listen mit zwei Elementen würde einige Bytes sparen, scheint jedoch unidiomatisch. Gibt eine Liste von Zeilen zurück.
9588 Bytes, wenn die Reihenfolge der Zeilen im Ergebnis keine Rolle spielt:Probieren Sie es online aus!
quelle
.[1..*]
zu.skip