首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为RFC 1924 IPv6地址实现编码器

为RFC 1924 IPv6地址实现编码器
EN

Code Golf用户
提问于 2016-01-27 09:40:09
回答 2查看 1K关注 0票数 8

Introduction

现在每个人都应该知道IPv6了。IPv6有很长很麻烦的地址。1996年,一些非常聪明的人发明了一个方案来更好地在RFC 1924中对他们进行编码。由于我无法理解的原因,这还没有被广泛采用。为了帮助采用,您的任务是用您选择的语言实现转换器。由于存储非常昂贵,特别是在源代码存储库中,显然您必须尽可能少地使用它。

挑战

为RFC1924中指定的地址格式编写编码器。输入是一个无聊的标准格式的IPv6地址。

维基百科被盗这是:

IPv6地址表示为由四个十六进制数字组成的八个组,每个组代表16位(两个八进制)。这些组用冒号(:)分隔。IPv6地址的一个例子是:

代码语言:javascript
复制
2001:0db8:85a3:0000:0000:8a2e:0370:7334

十六进制数字不区分大小写,但IETF建议使用小写字母。八个四位数组的完整表示可以通过几种技术简化,消除了表示的部分。可以省略组中的前导零。因此,示例地址可以写成:

代码语言:javascript
复制
2001:db8:85a3:0:0:8a2e:370:7334

零组一个或多个连续零值组可以使用两个连续冒号(::)替换为单个空组。因此,示例地址可以进一步简化:

代码语言:javascript
复制
2001:db8:85a3::8a2e:370:7334

本地主机(回环)地址0:0:0:0:0:0:1和IPv6未指定地址0:0:0:0: 0:0:0:0 :0:0:0:1和::。这种双冒号替换只能在一个地址中应用一次,因为多次出现会造成一个不明确的表示。

必须正确处理表示中省略的零!

输出是高级IPv6格式的RFC1924地址。

与RFC一样,这是:

编写IPv6地址的新标准方法是将它们视为128位整数,用基本85符号编码,然后使用85个ASCII字符对其进行编码。将85 base85数字编码的字符集按升序定义为:

代码语言:javascript
复制
         '0'..'9', 'A'..'Z', 'a'..'z', '!', '#', '转换过程是一个简单的除法过程,在每一步取剩下的部分,然后再对商进行分割,然后读取页面,就像对任何其他基本转换一样。您可以在RFC中使用建议的转换算法,或者您可以想到的任何其他转换算法。它只需要得到正确的输出!示例输入输出这是RFC的一张:输入:1080:0:0:0:8:800:200 C:417 A或1080:8:800:200 C:417 A输出:4)+k&C#VzJ4br>0wv%Yp您的程序可以接受输入并以任何标准方式返回输出。因此,可以从stdin和output读取到stdout,也可以将代码实现为一个函数,该函数将输入作为参数并返回输出。获奖标准和往常一样,标准漏洞是不允许的这是密码-高尔夫所以最短的正确代码字节赢!这是我的第一个挑战,所以请告诉我在描述中的任何问题/含糊不清之处。, '%', '&', '(',
         ')', '*', '+', '-', ';', '<', '=', '>', '?', '@', '^', '_',
         '`', '{', '|', '}', and '~'.

J120

转换过程是一个简单的除法过程,在每一步取剩下的部分,然后再对商进行分割,然后读取页面,就像对任何其他基本转换一样。

J221

您可以在RFC中使用建议的转换算法,或者您可以想到的任何其他转换算法。它只需要得到正确的输出!

K122示例输入输出K223

这是RFC的一张:

输入:

J124

1080:0:0:0:8:800:200 C:417 A或1080:8:800:200 C:417 A

J225

输出:

J126

4)+k&C#VzJ4br>0wv%Yp

J227

您的程序可以接受输入并以任何标准方式返回输出。因此,可以从stdin和output读取到stdout,也可以将代码实现为一个函数,该函数将输入作为参数并返回输出。

K128获奖标准K229

和往常一样,标准漏洞是不允许的

这是密码-高尔夫所以最短的正确代码字节赢!

这是我的第一个挑战,所以请告诉我在描述中的任何问题/含糊不清之处。

EN

回答 2

Code Golf用户

发布于 2022-11-04 20:00:59

Pip,108个字节

代码语言:javascript
复制
YaR"::""*:"YyR"*"":0"X7-(":"Ny)Yy^":"Fiy{W#i<4iPU0bPBi}((J,t).AZ.z."!#$%&()*+-;<=>?@^_`{|}~")@((Jb)FB16TD85)

没有IP地址类/库,仍然很有竞争力。

在网上试试!

票数 2
EN

Code Golf用户

发布于 2022-11-02 21:09:26

红宝石 -ripaddr,109个字节

代码语言:javascript
复制
->s{IPAddr.new(s).to_i.digits(85).reverse.map{([*0..9,*?A..?Z,*?a..?z]*""+"!#$%&()*+-;<=>?@^_`{|}~")[_1]}*""}

在网上试试!

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

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

复制
相关文章

相似问题

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