黑匣子是一个棋盘游戏,你的任务是揭示所有的线索。
黑匣子是一个隐藏原子的棋盘游戏,你的任务是输入,所有的原子,揭示所有的线索。
原子可以是任何一个字符,而不是像这样的换行符(用于分隔符)。
O....
...O.
..O..
.....
....O
当代码显示所有线索(见下文)时,上述给定输入的输出可以是:
HRHH1
H 1
R H
H H
2 R
H H
H2HRH
或
[["H", "R", "H", "H", "1"], ["1", "H", "H", "R", "H"], ["H", "R", "H", "2", "H"], ["H", "2", "H", "R", "H"]]
忽略这个数字,这并不意味着什么,这个数字必须是非唯一的,并且必须以>9的弯道工作。
原子与射线以三种方式相互作用。射线对原子的直接影响就是“命中”。
.........
.........
.O.....O.
.........
.........
...O.....H 1
.........
.......O.
因此,射线1发射到左边的盒子结构中,直接击中一个原子,产生一个由"H“指定的”命中“。击中原子的射线不会从盒子里冒出来。
射线实际上并没有击中原子,但直接传递到球的一侧,所产生的相互作用称为“偏转”。这种射线/原子相互作用的偏转角是90度。射线2被左边的原子偏转,如图所示,离开了盒子。
2
.........
.........
.O.....O.
.........
.........2
...O.....
.........
.......O.
ASCII艺术中的
2
....^....
....^....
.O..^..O.
....^....
....\<<<<2
...O.....
.........
.......O.
射线与原子相互作用的最后一种类型是由"R“指定的”反射“。这种情况发生在两种情况下。如果一个原子位于网格的边缘,任何光线直接指向它旁边的网格都会引起反射。
.........
.........
.O.....O.
.........
.........
...O.....
.........
.......O.
RHR
354
左边的射线3和4都会产生反射,这是由于边缘的原子。射线5会对原子产生影响。
导致反射的另一种情况是,两种偏转抵消掉。在左边的网格中,射线6由于与网格中的原子相互作用而产生反射。
6
R
.....
..O.O
.....
.....
.....
不产生撞击或反射的射线被称为“绕行”。这些可能是单个或多个偏转,或错过。一个绕道有一个入口和一个出口位置,而点击和反射只有一个进入位置用于一个命中,一个入口/退出位置用于一个反射。
8 8
.........
.........
.O.....O.
.........9
.........
...O.....
.........9
.......O.
当然,当这些行为相互作用时,会产生更复杂的情况。射线8导致两个偏折,射线9也是如此。
有些射线走在扭曲的轨道上,就像左边的射线1。
.........
.........
.O.....O.
.........
1.........
...O.....
.........
.......O.
1
请注意,上面这个由五个挠度组成的复杂集合看起来就像一个单一的偏转,如左边的射线2所示。事情并不总是像在黑匣子里看起来那么简单。
.........
.........
.........
.....O...
1.........
.........
.........
.........
1
反射和点击也可能更复杂。光线2被第一个原子偏转,由下两个原子反射,再被原原子偏转,产生反射。
.O...
.....R 2
.....
.O.O.
.....
下面的射线3被第一个原子偏转,然后被第二个原子偏转,然后击中第三个原子,产生一击。
...O.
O....
.....
3 H.....
...O.
ASCII艺术中的
8 8
..v...^..
..\>>>/.
.O.....O.
......../9
........v
...O....v
........\9
.......O.
.........
.........
.O.....O.
../>>>\..
1>>/...v..
...O..v..
..../</..
....v..O.
1
.........
.........
.........
.....O...
1>>>>\....
....v....
....v....
....v....
1
O....
...O.
..O..
.....
....O
->
HRHH1
H 1
R H
H H
2 R
H H
H2HRH
O
->
H
H H
H
OOO
O O
OOO
->
HHH
H H
H H
H H
HHH
..O..
O...O
..O..
->
HRHRH
R R
H H
R R
HRHRH
...
...
...
->
123
4 4
5 5
6 6
123
....
O...
...O
....
->
H1HH
R 1
H R
R H
2 R
HH2H
```
发布于 2022-03-10 18:21:37
E=enumerate
S=lambda b,x:(x+1==len(b)or x==0)*[1,-1][x>0]
def F(b,C,v,x,y,q,w,c=0):
if int==type(b[x][y])and c:b[x][y]=[v,'R'][C==(x,y)];return
if b[x][y]=='O':b[C[0]][C[1]]='H';return
T=[]
for i in[1,-1]:
X=x+(i*(q==0)+(q!=0)*q);Y=y+(i*(w==0)+(w!=0)*w)
if X>=0 and Y>=0:
try:T+=[i]*(b[X][Y]=='O')
except:1
T*=b[x+q][y+w]=='.'
if not c and T:b[C[0]][C[1]]='R';return
if T:
Q,W=0,0
if len(T)==2:Q=q-1*(q!=0)*q;W=w-1*(w!=0)*w
else:Q=(q==0)*T[0]*-1;W=(w==0)*T[0]*-1
F(b,C,v,x,y,Q,W,c+1);return
F(b,C,v,x+q,y+w,q,w,c+1)
def g(b):
for x,j in E(b):
for y,k in E(j):
if k and type(k)==int:F(b,t:=(x,y),b[x][y],*t,S(b,x),S(b[0],y))
return b
K=lambda b:'\n'.join(''.join(map(str,[[j,' '][y in[0,len(a)-1]]for y,j in E(a)]if i in[0,len(b)-1]else[[' ',j][y in[0,len(a)-1]]for y,j in E(a)]))for i,a in E(b))
f=lambda b,c=0:K(g((A:=[[0]+[(c:=c+1)for _ in b[0]]+[0]])+[[(M:=(c:=c+1))]+i+[M]for i in b]+eval(str(A))))
https://codegolf.stackexchange.com/questions/243911
复制相似问题