Соревнование
Учитывая доску вещицы, как показано ниже:
| |
| /\ / |
| \ /|
| \ \ /\ \ |
| \ / \ |
|\ / / \ |
| \ / \ |
| \ |
| \ / \ /\ \ |
|\ / / \ /|
| / |
| /\ / / |
| / |
|\ / / / |
| |
----------------------
Ваша задача - превратить список «бросков» в счет.
Доска всегда будет 20 символов (плюс 2 ребра) шириной, но переменной высоты. Каждый «бросок» - это число, обозначающее, где мяч падает на доску, начиная с 0 для крайнего левого угла и до 19 для крайнего правого. Каждый шар будет падать прямо вниз, если он не встретит a /
или a \
. При столкновении /
мяч перемещается на одну колонку влево, а \
мяч перемещается на одну колонку вправо. После смещения мяч продолжает двигаться прямо вниз, как и раньше. Счет за бросок зависит от того, где мяч коснулся нижней части доски.
Баллы за каждую финишную позицию следующие:
| |
----------------------
01234567899876543210
и одинаковы для всех плат. Первая и последняя строки всегда будут пустыми. Мяч гарантированно достигнет дна независимо от того, откуда он упал, поэтому не будет ни досок, на которых он может быть пойман \/
, \|
ни |/
комбинаций.
вход
Ввод будет осуществляться через STDIN и будет состоять из доски, за которой следует пустая строка, за которой следует список чисел, представляющих броски, через пробел.
Выход
Ouput должен быть общим счетом для данной игры.
Пара примеров
вход
| |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| |
| |
----------------------
1 4 2 19 0 2 4 3 17 13 16
Выход
9
вход
| |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
----------------------
15 10 3 8 18 19 0 6 7 10
Выход
72
вход
| |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| |
----------------------
1 4 18 17 14 2 0 19 15
Выход
18
Тестовые сценарии
Я использовал несколько тестовых сценариев, написанных Джои и Вентеро (надеюсь, они не против ...), чтобы создать несколько тестов для этой задачи: -
Использование: ./test [your program and its arguments]
Это Codegolf - выигрывает самое короткое решение.
Ответы:
GolfScript,
6059 символовЯ был так искушен написать решение, которое работает путем переопределения символов
/
,\
иspace
, но на самом деле это довольно дорого (особенно если вы больше не можете использовать оригинал\
).31%4%(
это рваный из раствора Кита Рэндалла и отображает коду ASCII дляspace
,/
и\
к0
,-1
,1
соответственно. (См. Историю редактирования).источник
./test ruby golfscript.rb peter.gs
? Вместо этого я провел несколько тестов в качестве входных данных../test-bagatelle.sh `which golfscript.rb` bagatelle2.gs
Python 2,
147 132130 символовисточник
s+=min(p,19-p)
?for r in l[:-3]:p-=" /".find(r[p])
следует сохранить несколько символов19-p+1 == 20-p
Питон,
165159 символовОн начинается с ряда баллов и работает снизу вверх, вычисляя, какими будут баллы для шаров, начинающихся в каждом ряду.
источник
list(sys.stdin)
вместоreadlines()
Рубин,
123117115107999897источник
i-='\ /'...
вместо этого вы можете использовать еще один символ