一个标准的道路交叉口包含4个人行道拐角和4个人行横道连接它们。它还可以有2条对角线步道。
sRRRRs
iOOOOi
dAAAAd
eDDDDe
side0----1walk
ROAD|\ /|ROAD
ROAD| \/ |ROAD
ROAD| /\ |ROAD
ROAD|/ \|ROAD
side2----3walk
wRRRRw
aOOOOa
lAAAAl
kDDDDk并不是所有的6条人行横道都能让行人从任何一个拐角处到达任何其他的地方(假设没有乱走)。如果人行横道少的话,对交通更好,对公路部门更便宜。然而,如果行人能更快地通过,对他们来说是更好的。
以L为十字路口人行横道的总长度。假设交点是一个单位方,那么正交游动的长度是1,而对于对角游走,则是sqrt(2)。
让W是行人在过十字路口时需要走的平均距离。每个拐角处平均挤满行人,每个拐角处的行人都随机前往其他三个拐角中的一个,机会均等。
当L和W低时,我们有一个有效的交叉口。将E = 1 / (W * L)设为特定一组人行横道的人行横道效率。E越高意味着效率越高。
编写一个包含当前人行横道列表并输出效率的程序。
输入将来自01 32 21表单中的stdin (例如),它表示从拐角0到1、3到2和2到1(Z中)的人行横道的交叉口。输出到标准输出。
运行您的程序可能如下所示
$ crosswalk.mylanguage 01 23
0.0这是暗号高尔夫。以最少字符的投稿获胜。
01 32 21和23 21 10是一样的。发布于 2014-07-18 15:07:55
这使用了W的预计算值:
u,s=list(map(list,[map(int,x) for x in input().split()])),2**.5
q,p,o,w,e,r=sum(u,[]),(2*s+1)/3,(s+1)/3,(2*s+3)/3,(s+3)/3,(5*s+1)/6
print(.0 if len(set(q))<4 or len(q)<5 and q[0]^q[1]==q[2]^q[3]!=3 else 1/({66:p,80:p,34:w,48:w,42:e,49:e,10:5/3,17:5/3,72:r,65:r,74:o,81:o,73:p,41:(s+2)/2,64:s,18:4/3,82:(s+2)/3,50:(s+6)/6}[sum([(0,1,8,32)[q[x]^q[x+1]] for x in range(0,len(q),2)])]*sum(map(lambda a:(1,s)[a[0]^a[1]==3],u))))它可以这样运行:
echo 32 01 31 | python3 filename.py发布于 2014-07-16 12:01:01
使用所有对最短路径。
import re
R=re.sub
exec R("I"," in ",R("F","for ","""s,m,i=sum,map,int
r=2**.5/2
n=1e309
g=[0,1,1,n,r],[1,0,n,1,r],[1,n,0,1,r],[n,1,1,0,r],[r]*4+[0]
f="01021323"
o=lambda v:[list(v[x:x+2])FxIrange(0,len(v),2)]
v=o(f+"04142434")
q=m(sorted,R("12|21","14 24",R("03|30","04 34",raw_input())).split())
r=range(5)
u=[m(i,x)FxIv if x notIq]
l=s(g[i(y)][i(x)]Fy,xIq)
Fy,xIu:g[y][x]=n
FaIr:
FbIr:
FcIr:g[b][c]=min(g[b][a]+g[a][c],g[b][c])
w=s(g[i(y)][i(x)]Fy,xIo(f+"0312"))/6.
print 1/(w*l)"""))https://codegolf.stackexchange.com/questions/34523
复制相似问题