Einführung:
Zu Hause haben wir eine Uhr, die zu jeder vollen Stunde den angegebenen Wert anzeigt, aber auch einmal zu jeder halben Stunde. Also von 0:01 bis einschließlich 12:00 trifft es in dieser Reihenfolge zu:
1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12
Herausforderung:
Geben Sie bei einer Ganzzahl n
eine Liste von Zeitrahmen aus, in denen die Gesamtzahl der Treffer gleich ist n
. Beginnen Sie außerdem immer mindestens 1 Minute vor diesem Zeitrahmen und enden Sie mindestens 1 Minute nach diesem Zeitrahmen (und höchstens 29 Minuten).
Wenn die Eingabe beispielsweise lautet n=8
, könnte die Ausgabe wie folgt lauten:
[00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01]
Für welche diese Zeiträume die folgenden Summen haben, sind alle gleich 8
:
[1+1+2+1+3, 1+2+1+3+1, 3+1+4, 1+6+1, 1+7, 7+1, 8]
Herausforderungsregeln:
- Die Ausgabe ist flexibel. Sie können als Time (oder Date / DateTime) -Objekte Zeitstempel, Zeichenfolgen (mit oder ohne führende Nullen), Dezimalstellen mit
.29
/.31
/.59
/.01
(dh0.29-3.01
anstelle von00:29-03:01
) usw. ausgeben . Solange klar ist, ist dies vor und nach dem Zeitrahmen .
Darüber hinaus können Sie den Betrag selbst bestimmen. In allen meinen Beispielen I 1 Minute, aber Sie können auch nur 5 Minuten, 15 Minuten wählen, usw. Das bedeutet auch , können Sie mit.4
/.6
/.9
/.1
(dh0.4-3.1
statt00:24-03:06
) zum Beispiel. Die Liste ist auch flexibel. Kann eine Liste / Sammlung, ein Array, eine durch Trennzeichen getrennte Zeichenfolge sein und zeilenweise nach STDOUT usw. gedruckt werden.
Bitte geben Sie an, welche Ausgabewahl Sie getroffen haben.Hinweis: Es ist nicht erlaubt, die Summen der Zeitrahmen wie oben auszugeben, dies wird nur zur Verdeutlichung erwähnt. Sie müssen die Zeitrahmen ausgeben, auch kurz davor und danach. - Die Streiks drehen sich von
12:00
bis00:30
. Also, wennn=14
zwei der Zeitrahmen11:29-00:31
und sind11:59-01:01
. - Die Eingabe erfolgt in dem Bereich
1 <= n <= 90
, in dem 90 die Gesamtsumme aller möglichen Treffer ist. - Die von Ihnen zurückgegebenen Fristen können in beliebiger Reihenfolge angegeben werden.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
(alle mit 1 Minute vor / nach den Zeitrahmen und führenden Nullen)
Input: 8
Ouput:
[00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01]
Input: 14
Output:
[00:29-04:01, 00:59-04:31, 02:59-05:01, 04:29-06:31, 05:59-07:01, 11:29-00:31, 11:59-01:01]
Input: 90
Output:
[00:29-00:01, 00:59-00:31, 01:29-01:01, 01:59-01:31, 02:29-02:01, 02:59-02:31, 03:29-03:01, 03:59-03:31, 04:29-04:01, 04:59-04:31, 05:29-05:01, 05:59-05:31, 06:29-06:01, 06:59-06:31, 07:29-07:01, 07:59-07:31, 08:29-08:01, 08:59-08:31, 09:29-09:01, 09:59-09:31, 10:29-10:01, 10:59-10:31, 11:29-11:01, 11:59-11:31]
Input: 1
Output:
[00:29-00:31, 00:59-01:01, 01:29-01:31, 02:29-02:31, 03:29-03:31, 04:29-04:31, 05:29-05:31, 06:29-06:31, 07:29-07:31, 08:29-08:31, 09:29-09:31, 10:29-10:31, 11:29-11:31]
Input: 2
Output:
[00:29-01:01, 00:59-01:31, 01:59-02:01]
code-golf
arithmetic
date
clock
Kevin Cruijssen
quelle
quelle
.4
/.6
/.9
/.1
darf (wobei 6 Minuten wie Sie haben gesagt::24
/:36
/:54
/:06
).Antworten:
APL (Dyalog Classic) , 34 Byte SBCS
Probieren Sie es online!
Diese Lösung verwendet
⎕io←1
(1-basierte Indizierung).Von rechts nach links:
⍳12
ist1 2 3...12
⍪
verwandelt es in eine hohe dünne 12x1 Matrix1,
Fügt links eine Spalte mit einer 1 hinzu⍪⍨
Verkettet dieselbe Matrix vertikal, sodass sie jetzt eine 24x2-Matrix ist,
Verflacht die Matrix in der Reihenfolge der Zeilen und wird zu einem Vektor der Größe 48:1 1 1 2 1 3...1 12 1 1 1 2...1 12
+\
Teilsummen:1 2 3 5 6 9...
∘.-⍨
die Unterschiede zwischen jedem Paar von Elementen, eine 48x48-Matrix⍉
transponieren⎕=
eine 48x48-Boolesche Matrix mit 1s, wo immer die ausgewertete Eingabe (⎕
) auftritt⍸
die Koordinatenpaare von wo die Einsen sind.5×
halbiere sie.4 .1∘+¨
Addiere 0,4 zu der ersten und 0,1 zu der zweiten Koordinate in jedem Paar12|
Modulo 12∪
einzigartigquelle
.1
in der Ausgabe dargestellt? Auch schöne Antwort.<sup>SBCS</sup>
genau wie Adáms Antwort schreiben .⍸
ist nicht in Dyalog Classic. Und ja, ich weiß, das ist ausdrücklich erlaubt, ich wollte nur wissen, wie viele Minuten0.1
in der Ausgabe ist;)JavaScript (ES6), 104 Byte
Druckt Zeitintervalle im
H.MM,H.MM
Format.Probieren Sie es online!
Verwendet im Wesentlichen den gleichen Algorithmus wie die unten stehende nicht-rekursive Version.
Nicht rekursive Version, 117 Bytes
Gibt eine durch Leerzeichen getrennte Folge von Zeitintervallen im
H.MM,H.MM
Format aus.Testfälle
Code-Snippet anzeigen
Kommentiert
quelle
APL (Dyalog Unicode) ,
6259 Bytes SBCSVoller Programmteil. Eingabeaufforderungen für
n
. Gibt die Liste der Listen mit zwei Elementen in Dezimalstunden aus.Probieren Sie es online!
⍳24
ɩ 1… 2448⍴
zyklisch r eshape auf Länge 48, das heißt 1 ... 12,1 ... 12.5×
multiplizieren Sie die Hälfte damit⊂
include (um dieses gesamte Array als rechtes Argument für jedes linke Argument zu verwenden)(
Geben Sie),/¨
für jede der folgenden Optionen alle Unterlisten dieser Länge zurück:⍳48
ɩ 1… 48l←
Speichern inl
(für l engths)Jetzt haben wir alle möglichen Listen von Laufzeiten für jede mögliche Lauflänge.
,/
Verketten (wörtlich Verketten-Reduzieren) der Listen von Unterlisten⊃
enthüllen (weil die Reduktion den Rang von 1 auf 0 reduziert hat)(
…)¨
Wenden auf jede folgende Funktion an:⊢/
das letzte (lit. right-reduction) Element (die Endzeit)⊃,
dem ersten Element (der Anfangszeit) voranstellen¯.1 .1+
Fügen Sie diesen negative und positive Zehntel hinzu(
…)/
Filtern Sie diese Anfang-Ende-Paare mit:⍳12
Hinweise 1… 121,¨
stellen Sie1
jedem ein voran∊
ϵ nlist (Abflachen)48⍴
zyklisch r eshape auf Länge 48, das heißt 1,1,1,2 ... 1,11,1,12⊂
include (um dieses gesamte Array als rechtes Argument für jedes linke Argument zu verwenden)l+/¨
für jedes vonl
(1… 48) werden die Summen aller Unterlisten dieser Länge zurückgegeben∊
ϵ nlist (Abflachen)⎕=
Vergleichen Sie die numerische Eingabe damit∪
gibt nur die eindeutigen Elemente zurück (Anfang-Ende-Paare)quelle
0.1
0.5
kann werden.1
.5
Python 3 ,
118116 BytesProbieren Sie es online!
Ein Zeitrahmen ist dargestellt , wie
(t1, t2)
,t1
undt2
wobei Dezimalzahlen darstellen Stunden. Der Versatz beträgt.1
oder 6 Minuten.quelle
Batch, 196 Bytes
Erklärung:
t
ist die Zeit in halben Stunden, beginnend mit0
für00:30
. Die Zahl der Streiks zum Zeitpunkt t ist dann1
,1
,1
,2
,1
,3
usw. Subtrahieren1
der Sequenz gibt0
,0
,0
,1
,0
,2
etc. , die die ganzen Zahlen mit Nullen verschachtelt ist. Dies kann dann durch Multiplikation glied der Sequenz erhalten werden0
,0
,1
,1
,2
,2
usw. mit der Folge0
,1
,0
,1
,0
,1
usw. Diesen beiden Sequenzen leicht unter Verwendung von Modulo berechnet und (integer) Division.Es bleibt dann übrig, alle 23 möglichen Startzeiten zu durchlaufen, dann alle 24 Schlagzeiten zu nehmen und die Anzahl der Schläge von der Eingabe zu subtrahieren und die Zeiten zu drucken, zu denen das Ergebnis Null ist.
Der Code fällt nach der Schleife durch, es wird jedoch kein Schaden angerichtet, da die Eingabe nicht mehr als 90 betragen kann.
quelle
APL NARS, 559 Bytes
h (n) oder l (n) geben alle repräsentativen Intervalle in 0-24 Stunden mit n Taktschlägen zurück. h (n) hat das Uhrzeitformat 0..11.0..59; Stattdessen hat l (n) das Uhrzeitformat 0..23.0..59 test
quelle