Redstone - это материал в игре Minecraft, и он используется для многих сложных приспособлений. Для этой программы вам нужно будет смоделировать только три элемента: проволоку из красного камня (отмечена буквой R), факел из красного камня (отмечена буквой T) и блок (отмечен буквой B).
Вот список основных правил работы Redstone:
A redstone torch sends power to any adjacent redstone wire.
TRRRR
^This redstone wire is powered.
Redstone wire can only hold power for 15 blocks.
TRRRRRRRRRRRRRRRR
^This last wire is unpowered, because the torch is >15 blocks away.
A block is said to be powered if a powered redstone wire is found adjacent to it.
TRRRB
^This block is powered.
If a block next to a redstone torch is powered, then the torch stops emitting power.
T
R
R
R
B <This block is powered.
T <This redstone torch does not emit power because of the block next to it.
R <This redstone is unpowered because the torch is not providing power.
R
Входные данные будут передаваться в двухмерных массивах размером до 64x64, например так:
TRRR
B
TBRTRR
R
RRRRRRRRR
R
RRRRRR
Гарантируется, что на входе не будет никаких «часов» или редстоуна, приводимого в действие горелкой, указывающей на блок, на котором горелка включена. На каждом входе будет только одна цепь красного камня.
Ваша программа должна изменить каждый символ на 1 или 0, 1, указывающий, является ли этот элемент питаемым / излучающим, и 0, если он не включен или не излучает.
Этот вход должен иметь такой вывод:
1111
1
100000
1
111111111
1
001111
Это код-гольф, поэтому, как всегда, выигрывает самый короткий код.
источник
"TRR\nB B\nRRT"
?111\n0 1\n000
это выход; кажется, это звучит в рамках правил. Я наложу ограничение на вход, говоря, что у вас не может быть никаких ситуаций, напримерTRR B R RRR
, когда он мигает несколько раз.Ответы:
Хаскелл, 400
map(map h.transpose).transpose.(\l->[g l|g<-id:f(map(const ' ')$head l)++map map (f ' ')])
заменяет каждый фрагмент списком, за которым следуют четыре соседних элемента, затем сопоставляет его с помощью h. h говорит для каждой плитки, как она реагирует на соседей: факелы отключаются («T», а не «t»), когда рядом находится блок питания («b»), провода («d» для мертвых через «s») не копируются неправильно их самый сильный сосед (хотя он не может стать хуже мертвого) и т. д.iterate
повторяет этот шаг,(!!(64^2+16))
отбирает итерацию, на которой ациклические контуры сходятся, и я полностью так написал, чтобы дать интуитивную границу, а не приземлиться на 400.источник
Питон, 699
Это всего лишь быстрый проход (пока не хватило времени). Это может вероятно использовать намного больше игры в гольф.
источник
f=set
и создатьl=lambda x:zip(x,[0]*len(x))
. Ну, у тебя все равно будет более 700 символов. Кроме того, вы оставили бесполезное пространство на... or not (a,z)in o
.f=set
побрило бы несколько символов, и у вас есть еще один бесполезный персонаж @not (a,z)in o
Python 2, 556 байт
Увидеть это в действии
print()
источник
input()
иprint
. Кроме того, такstr(int(bool(j[1:]!=u)))
же, как`int(j[1:]!=u)`
.str(
, но хороший момент оbool(
.`x`
(используя обратные пометки, это псевдоним дляrepr
) - это то же самое, чтоstr(x)
(для маленьких целых чисел, по крайней мере. Это отличается для определенных объектов, длинных, генераторов и т. д.). Другой гольф:if g!=0
такой же, какif g
. Вы также можете иметьk=lambda h,l,z:max(...
print ''
? Может ли это бытьprint''
?