Einführung
Ein Glockenturm wird seine Glocken jede Stunde klingelt, n
mal, mit n
der der aktuellen Stunde auf einer 12 - Stunden - Uhr sein.
Zum Beispiel klingelt eine Glocke 5 Mal um 17 Uhr und 10 Mal um 10 Uhr.
Aufgabe
Geben Sie in einem geeigneten Format zweimal an, wie oft die Glocke läuten soll, einschließlich Start- und Endzeit
Beispiele
"10am-12pm"
10+11+12= 33
[01:00, 05:00]
1+2+3+4+5 = 15
[11, 15]
11+12+1+2+3 = 29
[10:00pm, 10:00am]
10+11+12+1+2+3+4+5+6+7+8+9+10 = 88
Wenn der Anfang mit dem Ende identisch ist, geben Sie einfach die Anzahl der Glockenspiele für diese Stunde ein:
[5pm, 5pm]
5 = 5
Wie Sie sehen, können Sie eine Eingabemethode auswählen, die Ausgabe muss jedoch eine Ganzzahl sein (oder eine akzeptable Alternative). Zeilenumbrüche und Leerzeichen sind zulässig.
Hinweis:
- Eingaben können vom Nachmittag eines Tages bis zum Morgen des nächsten Tages erfolgen.
- Die Differenz zwischen den beiden Zeiten wird niemals mehr als 24 Stunden betragen.
- Die Eingabe ist flexibel, solange Sie genau angeben, in welchem Format die Eingabe erfolgt.
- Ihre Eingabe muss eine klare Unterscheidung zwischen AM und PM aufweisen.
pm
bis gehen könnenam
und somit auf einen zweiten Tag übergehen.Antworten:
JavaScript (ES6),
38-35ByteAddiert rekursiv die aktuelle Anzahl der Klingelzeichen zur Gesamtsumme. Genannt wie
f(11,15)
; Mitternacht ist dargestellt als24
. Ich habe einen Teil des~-
Tricks von @ xnors Python-Antwort erhalten .Testschnipsel
Code-Snippet anzeigen
Nicht rekursive Version (Firefox 30+), 56 Bytes
Entspricht der folgenden ES6-Funktion:
quelle
Python 2, 46 Bytes
Basierend auf meiner Antwort von JS. Die rekursive Formel f für die Lösung ist wie folgt definiert:
quelle
Python 2,
Gleichwertig5954 Bytesquelle
a=
Teil nicht.a=
. Es darf ein reines Lambda sein.y%24
.05AB1E , 13 Bytes
Mit viel Hilfe von Emigna .
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
Python, 42 Bytes
Eine rekursive Funktion , die zwei Zahlen von 0 bis 23. Der Ausbau der nimmt
~x
‚s zu-x-1
erhaltenDer Ausdruck
(a+1)%12+1
wandelt eine Zeit in die Anzahl der Klingeltöne1
um12
. Dann wird die Untergrenze modulo 24 inkrementiert und die Funktion für das rekursive Ergebnis hinzugefügt. Das heißt, es sei denn, die aktuelle Stunde ist die Endstunde. In diesem Fall hören wir auf.Ich habe versucht, stattdessen eine rein arithmetische Lösung zu schreiben, aber bisher habe ich nur lange und unordentliche Ausdrücke gefunden.
quelle
or
. Schön!Haskell,
4843 BytesDie Verwendung erfolgt
startHour % endHour
mit beiden Eingaben im 24-Stunden-Format.edit: @ xnors Verbesserung hinzugefügt, 5 Bytes gespart
quelle
e
Zeitpunkt zu änderne<s
, können Sie den Bereich filterns%e=sum[mod(x-1)12+1|x<-[s..e+24],x<=e||s>e]
. Es speichert dann ein Byte zu Verschiebung von 1 x nach unten:s%e=sum[mod x 12+1|x<-[s-1..e+23],x<e||s>e]
.C #, 73 Bytes
Zulässige Eingabe: ganze Zahlen im Bereich [0,23].
Diese Lösung verwendet kein LINQ.
Volles Programm mit Testfällen:
quelle
Jelly ,
17 16 1514 BytesTryItOnline
Wie?
quelle
MATL , 14 Bytes
Das Eingabeformat entspricht dem dritten Beispiel in der Challenge, dh zwei Zahlen im 24-Stunden-Format.
Probieren Sie es online!
Erläuterung
Nehmen Sie Eingaben
22
,10
als Beispiel.quelle
PHP, 90 Bytes
Eingabeformat '[1,24]' zwischen 1 und 24
Bei dieser Herausforderung hasse ich es, warum PHP gegen andere Sprachen locker ist. Ich zeige lieber alle meine Ideen. Vielleicht findet ein anderer PHP-Crack eine kürzere Lösung.
99 Bytes
113 Bytes a way mit min und max
okay , diese verrückte Idee funktioniert mit einer Reihe 149 Bytes das Array füllt
$y[0]
und$y[1]
wenn ,$_GET["b"][0]<=$_GET["b"][1]
wenn$y[1]
istnull
können wir dieses Array - Summen-array_diff_key($y[0],array_slice($y[0],$b[1],$b[0]-$b[1]-1,1))
Dies könnte bis 124 Bytes Golf gespielt werden
Jetzt können wir das Array mit nur zwei Ints verkleinern. 101 Bytes Machen Sie 2 Summen
$x[0]
und$x[1]
list($f,$g)=$_GET[b];
wenn
$v=($f>$g
dann add value to$x[$i<$f&$i>$g]
else add value to$x[$i>=$f&$i<=$g]
the output wird fallweise ermitteltecho$x[!$v];
Danach habe ich eine Möglichkeit gefunden, das Ergebnis direkt mit 112 Bytes zu berechnen
rekursive 103 Bytes
quelle
PHP, 69 Bytes
Die Listenextraktion wurde von Jörg Hülsermanns Antwort inspiriert, aber der Rest der Gemeinsamkeiten ist das Ergebnis einer konvergenten Entwicklung. Da es viel kürzer ist und die Bedingungen in der Schleife unterschiedlich sind, veröffentliche ich es als separate Antwort.
Nimmt Eingaben als 24-Stunden-Zeiten vor (gut mit 0 oder 24). Laufen Sie wie folgt:
quelle
$i>$a?24:0
hat die gleiche Länge wie($i>$a)*24
wiki.php.net/rfc/short_list_syntax Vielleicht möchten Sie die Shortlist-Syntax verwenden, die neu in[$x,$i,$a]=$argv;
7.1-2 Bytes ist. Bevor ich nicht getestet habe, würde ich sie nicht verwenden. Jetzt hasse ich mich mehr, als ich es auf diese Weise gefunden habe.Java,
72717876 BytesBearbeiten :
e
/clock
initialisiert.Ungolfed:
quelle
a
undd
undb
? Die vollständige Methode ist sinnvoll, aber ich denke, Sie müssen sich Ihr Golf-Lambda noch einmal ansehen und tatsächlich versuchen, es auszuführen, es sei denn, ich vermisse ernsthaft etwas. Für weiteres Golfen:(time+1)
kann werden++time
.a+=a?
seinb+=a?
. Sie können auch 2 Bytes Golf spielen, indem Sie diewhile
in eine körperlosefor
(a,b,c,d)->{int e;b+=a?12:0;d+=c?12:0;for(;b!=d;e+=b%12,b=++b%24);return e;}
QBIC ,
9047 BytesHier ist die Antwort, die nur die Gesamtzahl der Klingelzeichen ausgibt:
Die Eingabe ist im Bereich
1-24
;a
undb
sind die Eingänge (::
im Code),c
verfolgt am / pm,d
ist die Gesamtzahl der Klingeltöne. Wenn wir alle Stunden heruntergezählt haben, wird_Xd
das Programm beendet und dabei gedrucktd
.OK, ich habe die Frage falsch verstanden und dachte, der
1+2+3...=
Text sei Teil der Ausgabe, also schrieb ich Folgendes:Jetzt werde ich die richtige Antwort codieren ...
quelle
Pyth - 11 Bytes
Test Suite .
quelle
23, 1
gibt beispielsweise aus ,144
wann es ausgegeben werden soll24
. (Ein solcher Fall sollte natürlich in den Tests sein!)76 Bytes
quelle
a=23
undb=0
scheint das offensichtlichste Beispiel zu sein.Perl, 36 Bytes
Beinhaltet +1 für
-p
Geben Sie die Start- und Endzeit im 24-Stunden-Format in einer Zeile in STDIN an:
toll.pl
:quelle
Java 7, 64 Bytes
Rekursive Methode basierend auf der Antwort von @ETHproductions auf Python 2 . Verwendet einen 24-Stunden-Takteingang.
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
Stapel,
16891 BytesBearbeiten: 77 Byte gespeichert, indem für die Antwort in ein geschlossenes Formular gewechselt wird.
%1
und%2
sind die beiden Befehlszeilenparameter@
Deaktivieren Sie die Standardeinstellung von Batch, bei der der Befehl wiederholt wirdcmd/c
Fool Batch, um das Ergebnis der Berechnung sofort auszudruckenset/a
Führen Sie eine numerische Berechnung durchx=(%1+23)%%24,
Normalisieren Sie die Startstunde auf die Anzahl der Stunden seit 1:00 Uhr morgens (1:00 Uhr würde auch funktionieren, aber 11 ist nicht kürzer als 23).y=x+(%2+24-%1)%%24,
Normalisieren Sie die Endstunde so, dass sie vor der Startstunde liegt, und fahren Sie gegebenenfalls mit dem nächsten Tag fortz=y%%12+1,
Anzahl der Glocken, die zur Endstunde geschlagen wurden(y/12-x/12)*78+
Anzahl der Glocken aufgrund zusätzlicher halber Tagez*~-z/2-
Anzahl der Glocken von 1 Uhr bis einschließlich der Endstunde(x%%=12)
Eine weniger als die Anzahl der Glocken, die zur Startstunde geschlagen wurden*-~x/2
Anzahl der Glocken, die von 1 Uhr bis zur Startstunde geläutet worden wären, jedoch ohne Startstundequelle
C 56 Bytes
quelle
> <> , 48 + 2 = 50 Bytes
Es wird erwartet, dass die Eingabe beim Programmstart auf dem Stack vorhanden ist, also +2 Byte für das
-v
Flag. Die Eingabe besteht aus zwei Ganzzahlen, die die Stunde im 24-Stunden-Format10am - 10pm
angeben10 22
.Probieren Sie es online!
quelle
Cubix ,
4544 BytesDank @ETHproductions 1 Byte gespart
Mein erster Ausflug nach Cubix ...
Oder kubisch:
Sie können es am Online-Dolmetscher ausprobieren . Die Eingabe erfolgt im 24-Stunden-Format, wobei die Endzeit an erster Stelle steht. Zum Beispiel sollte der Eingang von 17.00 bis 01.00 Uhr sein
1 17
.Vorherige Version, 45 Bytes:
quelle
)$424tU4OI0Iuq;;-!^;^%&21u+rr;ss!;sqU>&%r$@;
Qbasic, 112 Bytes
quelle
Python, 73 Bytes
Es wäre so viel kürzer , wenn wir nicht zu unterstützen , haben
pm
zuam
. Ich benutze Rekursion, um es zu unterstützen.Probieren Sie es online aus
Ohne Unterstützung
pm
vonam
(45 Bytes):quelle