Машина
Машина типа бильярдного шара состоит только из символов \
_
/
вместе с прописными и строчными буквами, пробелами и числом 1
.
\
и /
пандусы. Мяч, идущий сверху, будет отклоняться либо вправо, либо влево соответственно. Для обеих рамп, если мяч идет с любой стороны, он будет отклонен вниз.
_
это логический элемент. Логика, которую он выполняет, - самая не бильярдоподобная часть компьютера. Сначала мяч, идущий слева или справа, продолжает в том же направлении. Мяч, идущий сверху, будет остановлен. Затем, после окончания его выполнения (см. «Запуск машины» ниже), если число шаров, пересекающих / приземляющихся на нем, является положительным четным числом, то один единственный шар высвобождается из нижней части элемента.
Пространство ничего не делает. Любые шары, идущие с любого направления, падают прямо под действием силы тяжести.
Строчные буквы являются входными данными. Все входы будут либо 1, либо 0.
Прописные буквы выводятся. Выведенное число будет количеством бильярдных шаров, попавших в его местоположение.
Номер 1
выпускает дополнительный бильярдный шар в этом месте. Это представляет логическую 1.
Кроме того, все персонажи \_/
приводят к тому, что любой шар, падающий с любого направления, падает из-за силы тяжести.
Шары никогда не объединяются, не разделяются и не сталкиваются. Они создаются только при освобождении от входа _
, или 1
. Они уничтожаются только тогда, когда падают прямо на _
.
Пример машины-
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
В машине никогда не будет пустых строк, но из _
-за этого может показаться, что есть пустая строка.
Запуск машины
Машина запускается слоями или рядами. Все движения бильярдного шара в верхнем слое выполняются до того, как что-либо произойдет во втором слое.
Машина
ab
\_A
C
выполняется следующим образом:
Во-первых, он запрашивает ввод a
в форме a:
. Затем пользователь будет вводить 1 или 0 (с последующим вводом). Это повторяет это для ввода b
. Это конец первого слоя. Я собираюсь предположить, что пользователь ввел 1 для обоих входов.
Затем он прослеживает путь первого шарика (из a
), который проходит вдоль \
, поперек _
, в A
и падает в точку под A
. Затем он отслеживает путь для второго шара (из b
), который идет прямо вниз _
и заканчивается. Это конец второго слоя.
Теперь, перед третьим слоем, так как на _
нем было два шарика, он выпускает один шарик. На выходе A
был один шарик пересекает его, поэтому он выводит A:1
.
Для третьего слоя он отслеживает путь первого шара (от _
), который проходит через C
и падает прямо вниз. Второй мяч (который провалился A
) также падает прямо вниз.
Теперь, перед четвертым слоем, поскольку на выходе C
был один шарик, он выводит C:1
.
Поскольку четвертый слой пуст, программа завершается.
Общий результат должен выглядеть
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
Цель
Ваша цель состоит в том, чтобы взять машину из STDIN и смоделировать ее, беря входные данные и вывод на печать по мере необходимости в STDOUT. Первая часть ввода в вашу программу будет состоять из запускаемой машины, за которой следует пустая строка. Любые введенные буквы должны приводить к тому, что ваша программа запрашивает ввод в виде имени ввода, за которым следует двоеточие. Любые выходные данные должны быть показаны в форме имени выходного файла, за которым следует двоеточие, за которым следует количество шаров, проходящих над этим местом.
Это гольф.
Примеры
Проводной переход
ab
\/
AB
Ворота XOR
ab1
\_/
C
Полный сумматор
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
\_/
?