首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >人行横道效率

人行横道效率
EN

Code Golf用户
提问于 2014-07-14 12:51:12
回答 2查看 603关注 0票数 6

一个标准的道路交叉口包含4个人行道拐角和4个人行横道连接它们。它还可以有2条对角线步道。

代码语言:javascript
复制
    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中)的人行横道的交叉口。输出到标准输出。

运行您的程序可能如下所示

代码语言:javascript
复制
$ crosswalk.mylanguage 01 23
0.0

评分

这是暗号高尔夫。以最少字符的投稿获胜。

详细信息

  • 行人总是呆在人行横道上,走最短的路。
  • 行人可以在对角线相交的地方改变方向(在拐角处)。
  • 如果所有角都没有连接,则取W为无穷大(E为0)。
  • 输入的人行横道边缘总是唯一的,只有6。
  • 输入或转角顺序并不重要。01 32 2123 21 10是一样的。
EN

回答 2

Code Golf用户

回答已采纳

发布于 2014-07-18 15:07:55

Python 3- 424字符

这使用了W的预计算值:

代码语言:javascript
复制
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))))

它可以这样运行:

代码语言:javascript
复制
echo 32 01 31 | python3 filename.py
票数 1
EN

Code Golf用户

发布于 2014-07-16 12:01:01

Python-489

使用所有对最短路径。

代码语言:javascript
复制
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)"""))
票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/34523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档