Ihr Programm / Ihre Funktion usw. nimmt 2 Eingaben entgegen. Die erste ist eine Liste, wer wann zu meiner Party gekommen ist. Beispiel:
Kevin 13:02
Ruby 5
Sam 3
Lisa 6
Bob 12
Was bedeutet das? Das bedeutet, dass Kevin zuerst zu meiner Party kam (um 13:02 Uhr, 24 Stunden), dann 5 Minuten später zu Ruby, dann 3 Minuten später zu Sam, dann 6 Minuten später zu Lisa und zuletzt 12 Minuten später zu Bob.
Der zweite Eingang wird sein, als meine Party begann. Beispiel:
13:15
(24 Stunden). Ihre Ausgabe muss die Liste der Personen sein, die sich verspätet haben. (Jeder, der genau pünktlich ist, ist in Ordnung.) Beispielberechnungen (nur zum Beispiel, diese nicht ausgeben)
Kevin 13:02
Ruby 13:07
Sam 13:10
Lisa 13:16
Bob 13:28
Lisa und Bob kamen nach 13:15
, daher sollte dieses Programm "Lisa, Bob" ausgeben.
Eingangsannahmen
- Eingabe 1 ist immer ein Name (regulärer Ausdruck
[A-Z][a-z]*
), dann ein Leerzeichen, dann eine 24-Stunden-Zeit im Formularhours:minutes
in der ersten Zeile, dann ein Name, ein Leerzeichen und eine positive Ganzzahl (Anzahl der Minuten später) in den nächsten Zeilen . Es wird immer mindestens 1 Zeile geben. - Wenn Sie möchten, können Sie Eingabe 1 mit einem beliebigen anderen Zeichen anstelle eines Zeilenumbruchs übernehmen.
- Eingang 2 wird im Format sein
hours:minutes
. - Sie können Ihre Eingaben als eine durch ein beliebiges Zeichen getrennte Zeichenfolge annehmen, wenn Sie möchten. Dies ist optional.
- Mach dir keine Sorgen über Tag Crossover. Meine Partys nie nach
23:59
.
Ausgaberegeln
- Die Ausgabe kann ein Funktionsrückgabewert oder eine an STDIN zurückgegebene Zeichenfolge, eine Datei usw. sein. Sie müssen eine Zeichenfolge oder ein Array / eine Liste zurückgeben.
- Wenn Sie eine Zeichenfolge zurückgeben, muss es sich um jede Person handeln, die sich verspätet hat (Reihenfolge spielt keine Rolle), getrennt durch ein nicht-alphanumerisches Trennzeichen.
- Wenn Sie ein Array / eine Liste zurückgeben, muss es sich um eine Liste aller Personen handeln, die sich verspätet haben.
(regex [A-Z][a-z]*
)" Bedeutet dies, dass Namen leer sein können?23:59
?Antworten:
MATL , 31 Bytes
Die erste Eingabe verwendet Leerzeichen anstelle von Zeilenumbrüchen (gemäß der Abfrage zulässig).
Die Ausgabe verwendet einen Zeilenumbruch als Trennzeichen.
Probieren Sie es online!
Erläuterung
quelle
JavaScript (ES6),
98 bis97 Byte1 Byte dank Neil gespeichert
Übernimmt die Liste der Gäste
l
und dieh
Partyzeit in der Currysyntax(l)(h)
. Erwartet einen nachgestellten Zeilenumbruch in der Liste. Gibt eine durch Leerzeichen getrennte Liste von Namen zurück, zLisa Bob
.Formatiert und kommentiert
Demo
quelle
(.*) (.*)\n
funktioniert?(.*)
der gesamten Zeile entsprechen.PHP,
118 98 9591 BytesNimmt Eingaben von Befehlszeilenargumenten entgegen (Sie können diese als durch Leerzeichen getrennte Zeilen interpretieren, wenn Sie möchten). druckt Namen ohne Trennzeichen. Laufen Sie mit
-r
oder testen Sie es online .edit 1: speicherte 20 Bytes beim direkten Drucken
edit 2: speicherte 3 Bytes durch Entfernen des Trennzeichens
edit 3: speicherte 4 Bytes, indem ausgenutzt wurde, dass einfache Ganzzahlen keine gültigen Daten für sind
strtotime
Nervenzusammenbruch
quelle
c, 178 Bytes
Probieren Sie es online aus
quelle
JavaScript ES6, 185 Byte
Probieren Sie es online!
quelle
f('Kevin 13:02\nRuby 5\nSam 3...
PowerShell ,
215196180 ByteProbieren Sie es online!
Etwa 1/3 davon ist Input-Parsing, daher bin ich mir nicht sicher, wie weit ich noch Golf spielen kann.
Nimmt Eingaben
$a
als durch Kommas getrennte Zeichenfolge von Namen und Zeiten / Minuten sowie$b
alshh:mm
Zeichenfolge an. Erstens haben wir-split
$a
auf,
, speichern Sie das erste Ergebnis in$x
und die restlichen in$a
, mit einer expliziten Wieder Besetzung$a
als einarray
(so dass die Schleife später richtig funktioniert). Wir , die initialisieren unsere hashtable$z
, Satz$i
und$j
sein$x
-split
auf Leerzeichen, und stellen Sie$z[$i]
die zudate
der$j
(gespeicherte in$y
später für die Anwendung).Dann durchlaufen wir die restlichen
$a
. Bei jeder Iteration machen wir es ähnlich --split
die Zeichenfolge im Leerraum legt den entsprechenden$z
Index so fest, dass er um so mehr Minuten länger ist, als wir gerade sind. Dies verwendet einen verkürzten Eigenschaftsnamen- Trick, um einige Bytes zu speichern,|% *es $j
anstatt.AddMinutes($j)
.Schließlich verwenden wir
.GetEnumerator()
(wieder mit dem Trick) unsere Hash - Tabelle undWhere-Object
wählen diese Einträge mit einem besseren Han aus (dh, sie kommen zu spät zur Party). Wir wählen dann nur das s davon aus. Die Ausgabe erfolgt als implizites Array, zwischen dem standardmäßig Zeilenumbrüche eingefügt werden.value
-g
t
$b
.Name
Write-Output
Vielen Dank an Briantist, der mich daran erinnert hat, dass [array] eine Sache ist. Und ein paar mehr für verkürzte Eigenschaftsnamen.
quelle
$x,[array]$a=$a-split','
?[array]
eine gültige Besetzung ist. Haha. Zu viel Golf, denke ich.GetEnumerator
und binAddMinutes
gute Kandidaten für die%
MethodensyntaxPython 2 ,
140, 148,144 BytesProbieren Sie es online!
Eingabeformat:
quelle
'Kevin 13:47;Ruby 5;Sam 3;Lisa 6;Bob 12;14:00'
Druckt nichts, obwohl Lisa und Bob immer noch zu spät sind.Bash,
135124115 BytesProbieren Sie es online!
quelle
CJam,
66545854514946 BytesEingang 1 wird durch STDIN gegeben, Eingang 2 wird als Zeichenkette auf dem Stapel gegeben. Die Ausgabe ist ein Array auf dem Stapel. Trennzeichen für Eingabe 1 ist ein Leerzeichen, z
Kevin 13:02 Ruby 5 Sam 3 Lisa 6 Bob 12
.Stack-Trace:
Erläuterung:
K
konvertiert zwischen einer Zeithh:mm
und einer Zahl, die angibt, wie viele Minuten seit Mitternacht verstrichen sind.[782 5 3 6 12]
.[782 787 790 796 808]
die Zeiten, zu denen alle gekommen sind.quelle
JavaScript,
285283 BytesÜbernimmt die Liste der Gäste
i
und diep
Partyzeit in der Currysyntax(i)(p)
. Gibt eine durch Kommas getrennte Liste von Namen zurück, zLisa,Bob
.Ich weiß, dass es ziemlich lang ist und momentan mit ziemlicher Sicherheit der letzte Platz ist, aber genau das könnte ich mir einfallen lassen.
quelle
C # ,
269267 BytesGolf gespielt
Ungolfed
Ungolfed lesbar
Vollständiger Code
Releases
- 2 bytes
- Dank VisualMelon269 bytes
- Anfangslösung.Anmerkungen
quelle
using D=System.DateTime;
Direktive hinzufügen (vergessen Sie nicht, dasvar
s zu ersetzen !). Sie sollten wirklich Typen für die Lambda-Parameter bereitstellen, um diesen Code vollständig eindeutig zu machen (dh(string l,string f)
). Ich denke auch, dass es einen kleinen Fehler gibt, den Sieh>s
lieber alsh>=s
(1 Byte speichern!) Laut "(Jeder, der genau pünktlich ist, ist in Ordnung.)" Benötigen. Schaffst du dash.Ticks<1
? Vielleicht finden Sie eine NullableDateTime
billiger als die VerwendungDateTime.Min
, aber ich habe hier nicht die vollständigen Auswirkungen überprüft. Mit der using-Klausel==D.Min
sollte das auch funktionieren.h>s
Ich werde das machen.h.Ticks<1
und dieses auch.usings
und bei Lambdas kann ich nichts finden, was dies explizit auf Meta ausdrückt, aber diese Frage deutet nachdrücklich darauf hin, dass dies zulässig ist. Es besteht ein vernünftiger Konsens darüber, dass explizite Parametertypen erforderlich sein sollten (ich sollte hinzufügen, dass ich fest dafür bin). Im Übrigen sind Mods dazu da, die Dinge aus der Sicht von SE zivil zu halten und nicht die eigenen Regeln von PPCG durchzusetzen.usings
, vor allem, weil ich dann das Gefühl hätte, dass es einen vollständigen Code erfordern würde, und deshalb sage ich, ich bezweifle, dass ich eine Funktion als Lösung durchziehen könnte - vielleicht zwei Blöcke hinzufügen, einen fürusing
s und einen anderen für die Lambda-Funktion? Über den Konsens denke ich, das Hinzufügen der fehlendenFunc<...> f = ...;
würde es lösen, obwohl der vollständige Name angegeben werden sollteSystem.Func<...> f = ...;
string s
wenn Sie nur eine gut benannte Funktion haben (nur mit C # 7 (6? Ich kann mich nicht erinnern) -Syntax), wenn Sie Lambdas und Usings nicht mischen möchten.CJam ,
4341 BytesProbieren Sie es online!
Erläuterung
quelle
Lua,
211206 BytesErster Codegolf des Jahres sollte für mich noch golffähig sein.
Bearbeiten: 5 Bytes mit einer Kurzform für gespeichert
string.match
Erklärungen
Wenn Sie diesen Code ausprobieren möchten, können Sie das folgende Snippet verwenden
quelle
Java,
346304284275 BytesAusführliches Live
quelle
String[] n,
undString[] a
?Integer.parseInt(n)
mitnew Short(n)
. Und basierend auf den Kommentaren der Herausforderung,LisaBob
ist auch eine gültige Ausgabe, so dass Sie das ändern können ,println
zuprint
.Batch, 163 Bytes
Übernimmt die Eingabe für STDIN. Erste Zeile ist die Startzeit der Party, dann die Gästeliste. Verwendet @ Arnauld's Trick, um hh: mm in Minuten umzuwandeln.
Batchs bevorzugte Eingabe hierfür wäre eine Reihe von Befehlszeilenparametern (beginnend mit der Uhrzeit der Party, dann jeder Gast und jede Uhrzeit als separate Argumente). Dies würde nur 129 Bytes dauern:
quelle
Groovy, 121 Bytes
quelle
PowerShell,
170 bis160 ByteProbieren Sie es online!
quelle