Кодування навколо годинника


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 год

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 год

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

Спробуйте в Інтернеті!

Як це працює

  • 6висувається на стек, ;відкидає його.

  • ] загортає стек у масив (не впливає на вихід).

  • 9і 3їх натискають на стек ;і ;відкидають їх.

  • 1, 2і 1висуваються на стек.

  • ;і ;відкинути останні 1та 2.

  • 3і 9штовхаються на стеку.

  • ]і ;загорніть стек у масив і відкиньте його, очистивши стек.

  • 6 висувається на стек.

9 годин

#########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 годин (виглядає нерівним через вкладку)


7
"12 голосів 0 відповідей? Зачекайте, поки Sp докаже, що це банально, будь ласка." –Хелька, в чаті
Олексій А.

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 годин

12 год

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 год

1


H
#
6


W
O

Дуже схожий на 12, 6падіння до Wі 1до H. Це відбувається за 2 цикли, закінчуючи програму до того, як відбудеться 12 випадків.

9 годин

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

(Я показую одну колонку <тому, що інші нічого не роблять).

У Vпідхоплює 9і переносить його в наступній трубі, яка відхиляє об'єкт вліво. Труба <переміщує предмет вниз, а наступний праворуч. VОператор поставив 9в просторі нижче , а потім вирушає на вихід.

1Робить рівні руху і досягає H, яка завершує програму. Коли труби переміщують предмети в одному циклі, все це займає один цикл.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.