Meine High School und viele andere implementieren eine Art Zeitplan, der als Rotating Block Schedule bezeichnet wird. Dies ist eine Möglichkeit für Menschen, 8 Klassen zu haben, aber 6 Stunden an einem Schultag.
Es gibt vier Tage in einem Blockplan, die sich immer wieder wiederholen und nichts mit den tatsächlichen Wochentagen zu tun haben. Jedem ist eine Nummer zugeordnet [1-4]
.
Der Zeitplan funktioniert so, dass Sie alle Ihre Morgenstunden auflisten, Zeiträume 1-4
: [1, 2, 3, 4]
. Dies ist Ihr Zeitplan für den ersten Tag oder Tag 1. Der Rest der Tage drehen gerade die Liste: [2, 3, 4, 1]
, [3, 4, 1, 2]
, [4, 1, 2, 3]
.
Die letzte Stunde am Morgen wird jedoch "fallen gelassen" und Sie sehen diesen Lehrer an diesem Tag nicht. Daher sind die Tage: [1, 2, 3]
, [2, 3, 4]
, [3, 4, 1]
, [4, 1, 2]
.
Der Nachmittag ist das gleiche, mit der Ausnahme , dass es verwendet Perioden 5-8
statt: [5, 6, 7]
, [6, 7, 8]
, [7, 8, 5]
, [8, 5, 6]
.
Deine Aufgabe
All diese Rotationen sind schwer nachzuverfolgen, daher müssen Sie ein Programm schreiben, um meinen Zeitplan auszudrucken, je nachdem, an welchem Tag er eingegeben wird. Ihr Code muss Homeroom und Lunch an den richtigen Stellen platzieren. Hier ist die genaue Ausgabe, die Ihr Code für Eingaben haben muss 1-4
:
Homeroom Homeroom Homeroom Homeroom
Period 1 Period 2 Period 3 Period 4
Period 2 Period 3 Period 4 Period 1
Period 3 Period 4 Period 1 Period 2
Lunch Lunch Lunch Lunch
Period 5 Period 6 Period 7 Period 8
Period 6 Period 7 Period 8 Period 5
Period 7 Period 8 Period 5 Period 6
Aber warte - noch eine Sache!
Manchmal hat meine Schule am ersten Schultag oder an anderen besonderen Tagen einen "Tag 0". Dies bedeutet nur, dass ich an diesem Tag alle meine Klassen zusammen mit dem Klassenraum und dem Mittagessen haben werde. Ihr Code muss sich mit Tag 0 befassen. Hier ist die Ausgabe für einen Tag 0:
Homeroom
Period 1
Period 2
Period 3
Period 4
Lunch
Period 5
Period 6
Period 7
Period 8
Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes !
1, 2, 3, 5, 6, 7
?Antworten:
Schneemann 1.0.2 , 190 Bytes
Diese Spalte ganz links sieht tatsächlich ziemlich gut aus, nicht wahr?
...
... wen ich veräpple, ich würde lieber in PHP programmieren als dies.
"Lesbare" Version:
Gedanken und Überlegungen:
Erstens muss ich definitiv eine schönere Art des Druckens von Zeilenumbrüchen implementieren. Weil Strings mit Zeilenumbrüchen in einem eingerückten Block super hässlich sind.
Ich mag meinen Trick mit
ae
- Sie sehen denae
Operator selten ohne denE
in echtem Schneemann großgeschriebenen Code. (Sie sehen auch selten Schneemann-Code, der nicht von mir geschrieben wurde, aber das ist nicht der Punkt.)Für die Uneingeweihten hat Snowman zwei Möglichkeiten, Operatoren anzurufen. Modus "Verbrauchen" und Modus "Nicht verbrauchen". Der Modus "Verbrauchen" ruft den Bediener mit den angeforderten Variablen auf und verwirft die Variablen. Der Nicht-Verbrauchsmodus ruft den Operator auf und lässt die Variablen intakt.
Was normalerweise nicht das ist, was Sie mit
ae
(Array-Each) wollen, weil der Block, den Sie für jedes Element aufrufen, dort bleibt und Ihnen im Weg steht und eine wertvolle der acht Variablen verbraucht.Dies ist jedoch eine seltene Situation , in der
ae
ist eigentlich das, was wir wollen (die Kommentare im Code für weitere Erläuterungen siehe).Ich fange wirklich an zu denken, dass Schneemann mehr als zwei Modi benötigt, außer nur "konsumieren" und "nicht konsumieren". Mit
aa
(im Grunde genommen Array-Indizierung) haben Sie beispielsweise nur zwei Möglichkeiten, es aufzurufen:(Snowman verwendet keine Stack / Array-Struktur, aber dies wird hier nur zur Verdeutlichung verwendet.)
Es ist ziemlich häufig, dass Sie möchten
["foo" "f"]
(dh die Indexvariable verwenden, aber nicht die ursprüngliche). Es ist ein sehr komplizierter Prozess, um diesen Ärger loszuwerden,0
wenn Sie den "Nicht-Konsumieren" -Modus verwenden.Ähnliches passiert, wenn Sie "array-each" im Modus "nicht verbrauchen" aufrufen, wie hier beschrieben. Das Array und der Block bleiben auch während der Ausführung des Blocks bestehen . Welches ist ... wirklich, wirklich komisch.
Andererseits ist es das Designziel von Snowman, so verwirrend wie möglich zu sein, daher bin ich mir nicht sicher, ob dies überhaupt ein Problem ist.
quelle
CJam,
6555 BytesProbieren Sie es online im CJam-Interpreter aus .
quelle
Python 3,
193192182168165 BytesNur eine schnelle Lösung.
Python 2, 161 Bytes
quelle
"\n".join
Pyth, 51 Bytes
quelle