Rund um die Uhr codieren

47

Schreiben Sie ein einzeiliges Programm mit zwei oder mehr Zeichen, das keine Zeilenabschlusszeichen enthält und keine Eingabe benötigt. Zum Beispiel könnte Ihr Programm sein:

MyProgram

Wenn Ihr Programm in die Formen eingeteilt ist, die die Zeiger einer Uhr bei 12, 3, 6 und 9 Uhr machen, muss sie die entsprechende Stundenzahl ausgeben. Andere Zeiten müssen nicht unterstützt werden.

Speziell:

  • Wenn Ihr Programm wie ein Uhrzeiger um 12 Uhr angeordnet ist (🕛)

    m
    a
    r
    g
    o
    r
    P
    y
    M
    

    Laufen sollte es ausgeben 12.

  • Wenn Ihr Programm wie ein Uhrzeiger um 3 Uhr angeordnet ist (🕒)

    m
    a
    r
    g
    o
    r
    P
    y
    MyProgram
    

    Laufen sollte es ausgeben 3.

  • Wenn Ihr Programm wie ein Zeiger um 6 Uhr angeordnet ist (🕕)

    m
    a
    r
    g
    o
    r
    P
    y
    M
    y
    P
    r
    o
    g
    r
    a
    m
    

    Laufen sollte es ausgeben 6.

  • Wenn Ihr Programm wie ein Uhrzeiger um 9 Uhr angeordnet ist (🕘)

    ........m
    ........a
    ........r
    ........g
    ........o
    ........r
    ........P
    ........y
    margorPyM
    

    Laufen sollte es ausgeben 9.

Anmerkungen

  • Das erste Zeichen in Ihrem Programm steht immer in der Mitte der Uhr. (Beachten Sie, dass es Mim 6-Uhr-Beispiel nur einen gibt .)

  • Ein beliebiges Nicht-Newline-Zeichen kann verwendet werden, um das Programm für die 9-Uhr-Anordnung einzurücken. In den Beispielen .wird aber Leerzeichen verwendet oder /oder #wäre genauso gültig.

  • Bei der 3-Uhr-Anordnung sollten sich keine Zeichen im leeren oberen rechten Bereich befinden. (dh leer lassen, nicht mit Leerzeichen füllen.)

  • Die anfängliche Programmanordnung ( MyProgramwie sie ist) muss nichts tun. Nur die Anordnungen für 12, 3, 6 und 9 Uhr müssen eine korrekte, genau definierte Ausgabe haben.

  • Code, der nur als Funktion oder REPL-Befehl funktioniert, ist nicht zulässig. Jedes der vier Arrangements sollte sofort einsatzbereit sein.

Das kürzeste Programm in Bytes gewinnt. zB MyProgramhat eine Länge von 9 Bytes.

Calvins Hobbys
quelle
27
Ich habe keine Ahnung, wie ich damit anfangen soll
Nic Hartley,
1
Ist es in Ordnung, wenn ein Zeichen gedruckt und dann mit der Rücktaste gelöscht wird?
Feersum
5
Hier ist ein CJam-Skript, mit dem alle vier Codes aus einer einzigen Zeile und einem Füllzeichen generiert werden können: cjam.tryitonline.net/… Sie können es gerne in den Beitrag aufnehmen.
Martin Ender
4
Ich wollte das in Brainfuck versuchen, aber es stellte sich heraus, dass die Herausforderung mein Gehirn gefickt hatte, bevor BF es konnte.
Katze
2
@cat Ich glaube, das ist unmöglich, weil Programme 3und 6für Brainfuck nicht unterscheidbar wären, da sie sich nur in Leerzeichen unterscheiden.
Martin Ender

Antworten:

37

GolfScript, 11 10 Bytes

21;;3#9];6

Wird #als Füllzeichen verwendet.

12 Uhr

6
;
]
9
#
3
;
;
1
2

Probieren Sie es online!

Wie es funktioniert.

  • 6wird auf den Stapel geschoben, ;wirft ihn weg.

  • ] Wickelt den Stapel in ein Array ein (wirkt sich nicht auf die Ausgabe aus).

  • 9und 3werden auf den Stapel geschoben ;und ;verwerfen sie.

  • Schließlich 1und 2werden auf den Stapel geschoben und implizit ohne Trennung gedruckt.

3 Uhr

6
;
]
9
#
3
;
;
1
21;;3#9];6

Probieren Sie es online!

Wie es funktioniert

  • 6wird auf den Stapel geschoben, ;wirft ihn weg.

  • ] Wickelt den Stapel in ein Array ein (wirkt sich nicht auf die Ausgabe aus).

  • 9und 3werden auf den Stapel geschoben ;und ;verwerfen sie.

  • 1und 21auf den Stapel geschoben werden, ;;wirft sie.

  • 3 wird auf den Stapel geschoben.

  • # Beginnt einen Kommentar bis zum Ende der Zeile.

6 Uhr

6
;
]
9
#
3
;
;
1
2
1
;
;
3
#
9
]
;
6

Probieren Sie es online!

Wie es funktioniert

  • 6wird auf den Stapel geschoben, ;wirft ihn weg.

  • ] Wickelt den Stapel in ein Array ein (wirkt sich nicht auf die Ausgabe aus).

  • 9und 3werden auf den Stapel geschoben ;und ;verwerfen sie.

  • 1, 2Und 1sind auf dem Stapel abgelegt.

  • ;und ;verwerfen Sie die letzten 1und 2.

  • 3und 9werden auf den Stapel geschoben.

  • ]und ;wickeln Sie den Stapel in ein Array und verwerfen Sie es, löschen Sie den Stapel.

  • 6 wird auf den Stapel geschoben.

9 Uhr

#########6
#########;
#########]
#########9
##########
#########3
#########;
#########;
#########1
6;]9#3;;12

Probieren Sie es online!

Wie es funktioniert

  • Alle Zeilen bis auf die letzten sind Kommentare.

  • 6wird auf den Stapel geschoben, ;wirft ihn weg.

  • ] Wickelt den Stapel in ein Array ein (wirkt sich nicht auf die Ausgabe aus).

  • 9 wird auf den Stapel geschoben.

  • # Beginnt einen Kommentar bis zum Ende der Zeile.

Dennis
quelle
25

> <> , 20 Bytes

X   n-+g+aa0g+9a2c!v

Es gibt Unbedruckbares darin, nämlich:

  • Nach dem Xist\x06\t
  • Nach dem cist\x03

Der gleiche Teil des Quellcodes wird jedes Mal ausgeführt. Dabei werden gzwei Teile des Quellcodes verwendet, um zu bestimmen, was von 12 subtrahiert werden soll.

v                         Make IP move downwards
 !\x03                    Jump over the \x03
      c                   Push 12
       2a9+g              Get the char at position (2, 19), i.e. the \t for
                          3 o'clock, the \x03 for 9 o'clock, 0 otherwise
            0aa+g         Get the char at position (0, 20), i.e. first char on
                          the line after the X, \x06 for 6 o'clock
                 +        Add
                  -       Subtract from the 12
                   n      Output as number
                    \t    Unrecognised instruction - errors out

12 uhr | 3 uhr | 6 uhr | 9 Uhr (sieht aufgrund der Lasche falsch aus)

Sp3000
quelle
7
"12 Stimmen 0 Antworten? Warten Sie, bis Sp beweist, dass es trivial ist." –Helka, im Chat
Alex A.
1

ROOP , 54 Bytes

OW    3#H V  1#1  H#6  WO#H V>V1#OW V>V9#OW   2#OW   1

Wird <als Füllzeichen verwendet.

12 uhr | 3 uhr | 6 uhr | 9 Uhr

12 Uhr

Die 1und die 2, die sich in der Nähe der Spitze befinden, fallen für 3 Zyklen. Wenn sie den WOperator erreichen, gibt der Operator die Nummer ein O, die die Ausgabe darstellt.

Die 1in diesem Teil

1


V

H

fiel für 2 Zyklen, der VBediener bewegt es nach unten und aktiviert beim nächsten Zyklus den HBediener, der das Programm beendet.

3 Uhr

Osind auch Objekte, die sich bewegen und fallen. Da der Code jetzt eine Zeile mit mehr als einem Zeichen enthält, werden alle anderen Zeilen mit Leerzeichen gefüllt. Alle Obewegen sich nach rechts und fallen, was dazu führt, dass die WBediener keinen Platz zum Senden des 1und haben 2.

Das Einzige O, das sich nicht bewegt, ist das, das in der Mitte gefangen ist. Das 3obige fällt für 4 Zyklen an W.

Dann füllen die Zahlen, die fallen, die 4 Felder zwischen Wund 3. Wenn es gefüllt ist, kann eine andere Nummer über alle gehen und den HBediener erreichen, der das Programm beendet.

6 Uhr

1


H
#
6


W
O

Sehr ähnlich der 12, die 6fällt auf die Wund die 1auf die H. Dies geschieht in 2 Zyklen und beendet das Programm, bevor der Fall 12 eintritt.

9 Uhr

<9
<V
<>
<V
< 
<W
<O
<#
<1
<V
<>
<V
< 
<H

(Ich zeige eine einzelne Spalte, <weil die anderen nichts tun).

Der Vnimmt den 9und bewegt ihn zum darunter liegenden Rohr, das das Objekt nach links ablenkt. Die Pipe <bewegt das Objekt nach unten und das nächste nach rechts. Der VBediener fügt das 9unten stehende Feld ein und sendet es an den Ausgang.

Der 1macht gleiche Bewegungen und erreicht den H, der das Programm beendet. Da die Pipes Objekte im selben Zyklus bewegen, dauert dies alles einen einzigen Zyklus.

DarkPhantom
quelle