首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Geo散列发生器

Geo散列发生器
EN

Code Golf用户
提问于 2017-01-15 14:02:21
回答 1查看 670关注 0票数 8

XKCD漫画:

目标:

给定日期,当前的道琼斯指数开盘,以及你当前坐标为四舍五入的整数,就会产生一个“地散列”。

输入:

通过任何合理的方式输入(STDIN、函数参数、标志等)以下内容如下:

  • 现在的日期。这必须是系统时钟的日期,所以假设输入是正确的。
  • 最近的道指开盘(必须至少支持小数点2位)
  • 你当前经纬度的楼层。

为了使输入更容易,您可以通过任何合理的结构化格式进行输入。下面是一些示例(您可以创建自己的示例):

代码语言:javascript
复制
["2005","05","26","10458.68","37",-122"]
2005-05-26,10458.68,37,-122
05-26-05 10458.68 37 -122

算法:

考虑到您的论点,您必须执行漫画中所示的“Geo散列”算法。算法如下。

  1. 在这个结构中格式化日期和道指开盘:YYYY-MM-DD-DOW。例如,它可能看起来像2005-05-26-10458.68
  2. 对上面的内容执行md5哈希。删除任何空格或解析字符,并将其分成两部分。例如,您可能有以下字符串:db9318c2259923d08b672cb305440f97
  3. 将每个字符串附加到0.并转换为十进制。使用上面的字符串,我们得到以下信息:0.db9318c2259923d00.8b672cb305440f97,它们被转换成十进制,近似为0.85771326770700234440.5445430695592821056。您必须将其截断前8个字符,生成0.8577130.544543
  4. 将输入给出的坐标与我们刚刚生成的小数组合起来:37 + 0.857713 = 37.857713-122 + 0.544543 = -122.544543

备注:

  • 为了防止代码长得令人无法忍受,您可以使用内置的md5哈希。
  • 禁止标准漏洞(硬编码、调用外部资源)。
EN

回答 1

Code Golf用户

发布于 2017-01-15 16:35:02

Python 2,129个字节

代码语言:javascript
复制
import md5
d,q,c=input()
h=md5.new(d+'-'+q).hexdigest()
print map(lambda p,o:o+'.'+`float.fromhex('.'+p)`[2:8],(h[:16],h[16:]),c)

输入以'2005-05-26','10458.68',('37','-122')形式给出(使用示例)。

使用MD5计算md5.new().hexdigest()哈希,然后执行必要的转换。我可以使用h而不是h[:16]来保存五个字节,但我不确定这是否会影响十进制转换中最重要的六个数字。

把它放进去! (用eval()调用代替input())

票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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