Кодирование круглосуточно

47

Напишите однострочную программу длиной два или более символов, которая не содержит разделителей строки и не требует ввода. Например, ваша программа может быть:

MyProgram

Когда ваша программа упорядочена по формам, которые стрелки часов принимают в 12, 3, 6 и 9 часов, необходимо вывести соответствующий номер часа. Не нужно поддерживать другие времена.

В частности:

  • Когда ваша программа устроена как стрелки часов в 12 часов (🕛)

    m
    a
    r
    g
    o
    r
    P
    y
    M
    

    запуск должен вывести 12.

  • Когда ваша программа устроена как стрелки часов в 3 часа (🕒)

    m
    a
    r
    g
    o
    r
    P
    y
    MyProgram
    

    запуск должен вывести 3.

  • Когда ваша программа устроена как стрелки часов в 6 часов (🕕)

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

    запуск должен вывести 6.

  • Когда ваша программа устроена как стрелки часов в 9 часов (🕘)

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

    запуск должен вывести 9.

Примечания

  • Первый символ в вашей программе всегда находится в центре часов. (Обратите внимание, что Mв примере с 6 часами есть только один ).

  • Любой не-символ новой строки может быть использован для отступа программы для 9-часового соглашения. В примерах .используется, но пробел или /или #будет таким же действительным.

  • Для 3-часового соглашения ни один символ не должен находиться в пустой верхней правой области. (т.е. держите это пустым, не заполняйте это пробелами.)

  • При первоначальном расположении программы ( MyProgramкак есть) ничего делать не нужно. Только 12, 3, 6 и 9 часов должны иметь правильный, четко определенный вывод.

  • Код, который работает только как функция или команда REPL, не допускается. Каждое из четырех устройств должно быть готово к запуску в виде полных программ, как есть.

Самая короткая программа в байтах побеждает. Например, MyProgramимеет длину 9 байтов.

Кальвин Хобби
источник
27
Я понятия не имею, как вообще начать это делать
Ник Хартли,
1
Это нормально, если символ печатается, а затем стирается с помощью возврата?
feersum
5
Вот сценарий CJam для генерации всех четырех кодов из одной строки и дополнительного символа: cjam.tryitonline.net/… Не стесняйтесь включать его в сообщение.
Мартин Эндер
4
Я собирался попробовать это в Brainfuck, но оказалось, что вызов трахнул мой мозг раньше, чем BF смог.
кот
2
@cat Я считаю, что это невозможно, потому что программы 3и 6были бы неразличимы для Brainfuck, поскольку они отличаются только пробелами.
Мартин Эндер

Ответы:

37

GolfScript, 11 10 байт

21;;3#9];6

Используется #как отступающий символ.

12:00

6
;
]
9
#
3
;
;
1
2

Попробуйте онлайн!

Как это устроено.

  • 6помещается в стек, ;сбрасывает его.

  • ] оборачивает стек в массив (не влияет на вывод).

  • 9и 3помещаются в стек ;и ;отбрасывают их.

  • Наконец, 1и 2помещаются в стек, и неявно печатается без разделения.

3 часа

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

Попробуйте онлайн!

Как это устроено

  • 6помещается в стек, ;сбрасывает его.

  • ] оборачивает стек в массив (не влияет на вывод).

  • 9и 3помещаются в стек ;и ;отбрасывают их.

  • 1и 21помещаются в стек, ;;сбрасывает их.

  • 3 помещается в стек.

  • # комментарий начинается до конца строки.

6:00

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

Попробуйте онлайн!

Как это устроено

  • 6помещается в стек, ;сбрасывает его.

  • ] оборачивает стек в массив (не влияет на вывод).

  • 9и 3помещаются в стек ;и ;отбрасывают их.

  • 1, 2И 1помещаются в стек.

  • ;и ;откажитесь от последнего 1и 2.

  • 3и 9помещаются в стек.

  • ]и ;обернуть стек в массив и выбросить его, очистив стек.

  • 6 помещается в стек.

9:00

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

Попробуйте онлайн!

Как это устроено

  • Все строки, кроме последней, являются комментариями.

  • 6помещается в стек, ;сбрасывает его.

  • ] оборачивает стек в массив (не влияет на вывод).

  • 9 помещается в стек.

  • # комментарий начинается до конца строки.

Деннис
источник
25

> <> , 20 байт

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

Там есть непечатные материалы, а именно:

  • После того, Xкак\x06\t
  • После того, cкак\x03

Одна и та же часть исходного кода запускается каждый раз, используя gдве части исходного кода, чтобы определить, что вычесть из 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 часов | 3 часа | 6 часов | 9 часов (выглядит смещенным из-за вкладки)

Sp3000
источник
7
"12 голосов 0 ответов? Подождите, пока Sp не докажет, что это тривиально, пожалуйста." –Helka, в чате
Алекс А.
1

ROOP , 54 байта

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

Используется <как отступающий символ.

12 часов | 3 часа | 6 часов | 9:00

12:00

1И 2что находятся вблизи верхнее падения в течение 3 циклов. Когда они достигают Wоператора, оператор помещает число в O, которое представляет выход.

В 1этой части

1


V

H

выпал на 2 цикла, Vоператор перемещает его ниже и при следующем цикле активирует Hоператора, завершающего программу.

3 часа

Oтакже объекты, которые движутся и падают. Поскольку в коде теперь есть строка с более чем одним символом, все остальные строки заполняются пробелами. Все Oперемещаются вправо и падают, в результате чего Wоператорам негде отправить 1и 2.

Единственное, Oчто не двигается, это тот, который застрял в центре. 3Выше падает в течение 4 циклов к W.

Затем выпадающие числа заполняют 4 пробела между Wи 3. Когда он заполнен, другой номер может пройти через все из них и добраться до Hоператора, который завершает программу.

6:00

1


H
#
6


W
O

Очень похоже на 12, 6падает на Wи 1к H. Это происходит в 2 циклах, заканчивая программу до 12 случаев.

9:00

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

(Я показываю один столбец, <потому что другие ничего не делают).

В Vподхватывает 9и перемещает его в следующей трубе, которая отклоняет объект влево. Труба <перемещает объект вниз, а следующий вправо. VОператор поставил 9в пространстве ниже , а затем отправляется на выход.

Он 1делает равные движения и достигает того H, что завершает программу. Поскольку трубы перемещают объекты в одном и том же цикле, все это занимает один цикл.

DarkPhantom
источник