Codificação 24 horas

47

Escreva um programa de linha única com dois ou mais caracteres que não contenha terminadores de linha e não aceite entrada. Por exemplo, seu programa pode ser:

MyProgram

Quando o seu programa é organizado nas formas que os ponteiros do relógio produzem às 12, 3, 6 e 9 horas, ele precisa exibir o número da hora correspondente. Nenhum outro horário precisa ser suportado.

Especificamente:

  • Quando o seu programa é organizado como ponteiros do relógio às 12 horas (🕛)

    m
    a
    r
    g
    o
    r
    P
    y
    M
    

    executá-lo deve sair 12.

  • Quando seu programa é organizado como ponteiros do relógio às 3 horas (🕒)

    m
    a
    r
    g
    o
    r
    P
    y
    MyProgram
    

    executá-lo deve sair 3.

  • Quando seu programa é organizado como ponteiros do relógio às 6 horas (🕕)

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

    executá-lo deve sair 6.

  • Quando seu programa é organizado como ponteiros do relógio às 9 horas (🕘)

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

    executá-lo deve sair 9.

Notas

  • O primeiro caractere do seu programa é sempre colocado no centro do relógio. (Observe como há apenas um Mno exemplo das 6 horas.)

  • Qualquer caractere que não seja de nova linha pode ser usado para recuar o programa para o arranjo das 9 horas. Nos exemplos .é usado, mas o espaço ou /ou #seria igualmente válido.

  • Para o arranjo das 3 horas, nenhum caractere deve estar na região superior direita vazia. (ou seja, mantenha-o vazio, não o preencha com espaços.)

  • O arranjo inicial do programa ( MyProgramcomo está) não precisa fazer nada. Somente os arranjos das 12, 3, 6 e 9 horas precisam ter saída correta e bem definida.

  • Código que funciona apenas como uma função ou comando REPL não é permitido. Cada um dos quatro arranjos deve estar pronto para executar os programas completos que estiverem.

O programa mais curto em bytes vence. por exemplo, MyProgramtem um comprimento de 9 bytes.

Passatempos de Calvin
fonte
27
Eu não tenho nenhuma idéia de como começar mesmo fazendo isso
Nic Hartley
1
Tudo bem se um caractere for impresso e depois apagado com backspace?
feersum
5
Aqui está um script CJam para gerar todos os quatro códigos a partir de uma única linha e um caractere de preenchimento: cjam.tryitonline.net/… Sinta-se à vontade para incluí-lo no post.
Martin Ender
4
Eu tentaria isso em Brainfuck, mas acontece que o desafio fodeu meu cérebro antes que BF pudesse.
gato
2
@cat Eu acredito que isso é impossível porque os programas 3e 6seriam indistinguíveis para Brainfuck, pois eles diferem apenas no espaço em branco.
Martin Ender

Respostas:

37

GolfScript, 11 10 bytes

21;;3#9];6

Usa #como caractere de preenchimento.

12 horas

6
;
]
9
#
3
;
;
1
2

Experimente online!

Como funciona.

  • 6é empurrado na pilha, ;descarta-o.

  • ] agrupa a pilha em uma matriz (não afeta a saída).

  • 9e 3são empurrados na pilha, ;e ;descartá-las.

  • Finalmente, 1e 2são empurrados na pilha, e implicitamente impressas sem separação.

3 horas

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

Experimente online!

Como funciona

  • 6é empurrado na pilha, ;descarta-o.

  • ] agrupa a pilha em uma matriz (não afeta a saída).

  • 9e 3são empurrados na pilha, ;e ;descartá-las.

  • 1e 21são empurrados na pilha, ;;descarta-os.

  • 3 é empurrado na pilha.

  • # inicia um comentário até o final da linha.

6 horas

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

Experimente online!

Como funciona

  • 6é empurrado na pilha, ;descarta-o.

  • ] agrupa a pilha em uma matriz (não afeta a saída).

  • 9e 3são empurrados na pilha, ;e ;descartá-las.

  • 1, 2E 1são empurrados na pilha.

  • ;e ;descartar o último 1e 2.

  • 3e 9são empurrados na pilha.

  • ]e ;enrole a pilha em uma matriz e descarte-a, limpando a pilha.

  • 6 é empurrado na pilha.

9:00 horas

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

Experimente online!

Como funciona

  • Todas as linhas, exceto a última, são comentários.

  • 6é empurrado na pilha, ;descarta-o.

  • ] agrupa a pilha em uma matriz (não afeta a saída).

  • 9 é empurrado na pilha.

  • # inicia um comentário até o final da linha.

Dennis
fonte
25

> <> , 20 bytes

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

Existem imprimíveis lá, a saber:

  • Após o Xé\x06\t
  • Após o cé\x03

A mesma parte do código-fonte é executada a cada vez, usando gduas partes do código-fonte para determinar o que subtrair de 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

12 horas | 3 horas | 6 horas | 9 horas (parece desalinhado devido à guia)

Sp3000
fonte
7
"12 votos 0 respostas? Espere até Sp provar que é trivial, por favor." –Helka, no 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

Usa <como caractere de preenchimento.

12 horas | 3 horas | 6 horas | 9:00 horas

12 horas

O 1e o 2que estão perto do topo caem por 3 ciclos. Quando alcançam o Woperador, o operador coloca o número em O, que representa a saída.

O 1nesta parte

1


V

H

caiu por 2 ciclos, o Voperador move-o abaixo e no próximo ciclo ativa o Hoperador que encerra o programa.

3 horas

Otambém são objetos que se movem e caem. Como o código agora tem uma linha com mais de um caractere, todas as outras linhas são preenchidas com espaços vazios. Tudo se Omove para a direita e cai, fazendo com que os Woperadores não tenham onde enviar o 1e 2.

O único Oque não se move é o que fica preso no centro. O valor 3acima cai para 4 ciclos até o W.

Então os números que caem estão preenchendo os 4 espaços entre o We 3. Quando preenchido, outro número pode passar por cima de todos eles e chegar ao Hoperador que encerra o programa.

6 horas

1


H
#
6


W
O

Muito parecido com o 12, as 6quedas para o We 1para o H. Isso ocorre em 2 ciclos, finalizando o programa antes que ocorra o caso 12.

9:00 horas

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

(Eu mostro uma única coluna <porque os outros não fazem nada).

Ele Vpega 9e o move para o tubo abaixo, que desvia o objeto para a esquerda. O tubo <move o objeto para baixo e o próximo para a direita. O Voperador coloca o 9espaço abaixo e depois é enviado para a saída.

O 1faz movimentos iguais e atinge o H, que termina o programa. Como os tubos movem objetos no mesmo ciclo, tudo isso leva um único ciclo.

DarkPhantom
fonte