Codifica tutto il giorno


47

Scrivi un programma a linea singola lungo due o più caratteri che non contiene terminatori di riga e non accetta input. Ad esempio, il tuo programma potrebbe essere:

MyProgram

Quando il programma è organizzato nelle forme che le lancette di un orologio compongono alle ore 12, 3, 6 e 9, deve emettere il numero dell'ora corrispondente. Non è necessario supportare altre volte.

In particolare:

  • Quando il programma è organizzato come le lancette dell'orologio alle 12 (🕛)

    m
    a
    r
    g
    o
    r
    P
    y
    M
    

    eseguendolo dovrebbe emettere 12.

  • Quando il programma è organizzato come le lancette dell'orologio alle 3 (🕒)

    m
    a
    r
    g
    o
    r
    P
    y
    MyProgram
    

    eseguendolo dovrebbe emettere 3.

  • Quando il programma è organizzato come le lancette dell'orologio alle 6 (🕕)

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

    eseguendolo dovrebbe emettere 6.

  • Quando il programma è organizzato come le lancette dell'orologio alle 9 (🕘)

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

    eseguendolo dovrebbe emettere 9.

Appunti

  • Il primo carattere nel tuo programma è sempre posizionato al centro dell'orologio. (Nota come ce n'è solo uno Mnell'esempio delle 6).

  • Qualsiasi carattere non newline può essere utilizzato per indentare il programma per la disposizione delle 9. Negli esempi .viene utilizzato, ma lo spazio o /o #sarebbe altrettanto valido.

  • Per la disposizione delle 3, nessun personaggio dovrebbe trovarsi nella regione vuota in alto a destra. (cioè tienilo vuoto, non riempirlo di spazi.)

  • La disposizione iniziale del programma (così MyProgramcom'è) non deve fare nulla. Solo le disposizioni 12, 3, 6 e 9 devono avere un'uscita corretta e ben definita.

  • Il codice che funziona solo come funzione o comando REPL non è consentito. Ognuno dei quattro accordi dovrebbe essere pronto per essere eseguito come programmi completi così come sono.

Vince il programma più breve in byte. ad es. MyProgramha una lunghezza di 9 byte.


27
Non ho idea di come iniziare a farlo
Nic Hartley,

1
Va bene se un personaggio viene stampato e poi cancellato con backspace?
feersum

5
Ecco uno script CJam per generare tutti e quattro i codici da una singola riga e un carattere di riempimento: cjam.tryitonline.net/… Sentiti libero di includerlo nel post.
Martin Ender,

4
Avrei tentato di farlo a Brainfuck, ma risulta che la sfida mi ha fottuto il cervello prima che BF potesse farlo.
gatto,

2
@cat Credo che sia impossibile perché i programmi 3e 6sarebbero indistinguibili da Brainfuck poiché differiscono solo negli spazi bianchi.
Martin Ender,

Risposte:


37

GolfScript, 11 10 byte

21;;3#9];6

Utilizza #come carattere di riempimento.

12 in punto

6
;
]
9
#
3
;
;
1
2

Provalo online!

Come funziona.

  • 6viene messo in pila, lo ;scarta.

  • ] avvolge lo stack in un array (non influisce sull'output).

  • 9e 3vengono spinti in pila ;e ;scartali.

  • Infine, 1e 2sono spinti in pila, e implicitamente stampato senza separazione.

3 in punto

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

Provalo online!

Come funziona

  • 6viene messo in pila, lo ;scarta.

  • ] avvolge lo stack in un array (non influisce sull'output).

  • 9e 3vengono spinti in pila ;e ;scartali.

  • 1e 21vengono spinti in pila, ;;li scarta.

  • 3 viene inserito nello stack.

  • # inizia un commento fino alla fine della riga.

6 in punto

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

Provalo online!

Come funziona

  • 6viene messo in pila, lo ;scarta.

  • ] avvolge lo stack in un array (non influisce sull'output).

  • 9e 3vengono spinti in pila ;e ;scartali.

  • 1, 2E 1sono spinti in pila.

  • ;e ;scarta l'ultimo 1e 2.

  • 3e 9vengono spinti in pila.

  • ]e ;avvolgere la pila in un array e scartarla, eliminando la pila.

  • 6 viene inserito nello stack.

9 in punto

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

Provalo online!

Come funziona

  • Tutte le righe tranne l'ultima sono commenti.

  • 6viene messo in pila, lo ;scarta.

  • ] avvolge lo stack in un array (non influisce sull'output).

  • 9 viene inserito nello stack.

  • # inizia un commento fino alla fine della riga.


25

> <> , 20 byte

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

Ci sono non stampabili lì dentro, vale a dire:

  • Dopo il Xè\x06\t
  • Dopo il cè\x03

La stessa parte del codice sorgente viene eseguita ogni volta, usando gsu due parti del codice sorgente per determinare da cosa sottrarre 12.

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

Ore 12 | 3 in punto | 6 in punto | 9 in punto (sembra disallineato a causa della scheda)


7
"12 voti 0 risposte? Aspetta fino a quando Sp dimostra che è banale per favore." –Helka, in chat
Alex A.

1

ROOP , 54 byte

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

Utilizza <come carattere di riempimento.

Ore 12 | 3 in punto | 6 in punto | 9 in punto

12 in punto

Il 1e il 2che sono vicino alla cima cadono per 3 cicli. Quando raggiungono l' Woperatore, l'operatore inserisce il numero O, che rappresenta l'output.

Il 1in questa parte

1


V

H

è caduto per 2 cicli, l' Voperatore lo sposta in basso e al ciclo successivo attiva l' Hoperatore che termina il programma.

3 in punto

Osono anche oggetti che si muovono e cadono. Poiché ora il codice ha una riga con più di un carattere, tutte le altre righe sono riempite con spazi vuoti. Tutti si Ospostano a destra e cadono, facendo sì che gli Woperatori non abbiano spazio per inviare 1e 2.

L'unico Oche non si muove è quello intrappolato al centro. Quanto 3sopra cade per 4 cicli al W.

Quindi i numeri che cadono riempiono i 4 spazi tra il We 3. Quando è pieno, un altro numero può passare su tutti e raggiungere l' Hoperatore che termina il programma.

6 in punto

1


H
#
6


W
O

Molto simile al 12, le 6cascate al We il 1al H. Ciò si verifica in 2 cicli, terminando il programma prima che si verifichi il caso 12.

9 in punto

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

(Mostro una singola colonna di <perché gli altri non fanno nulla).

I Vpreleva la 9e lo sposta il tubo sotto, che devia l'oggetto verso sinistra. La pipe <sposta l'oggetto verso il basso e il successivo verso destra. L' Voperatore inserisce lo 9spazio sottostante e quindi viene inviato all'output.

La 1rende uguali movimenti e raggiunge la H, che termina il programma. Poiché i tubi muovono gli oggetti nello stesso ciclo, tutto ciò richiede un singolo ciclo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.