jother编码
2016-05-22 11:31
295 查看
一切来自这个比赛的安利..
javascript用 ! [] + - * 表示0~1000的数字
编码长度不超过75个字符
样例:
然后找到这个博客
发现了一种jother编码的神奇东西
那么对于
当然在
一生万物
但是对于这道题还是有字数限制…
75个字符…用sublime对于上面的测试了一下9就有45个字符了
话说google到一个网站….它使用了括号生成jother编码
尝试了一下是可以吧
所以一个思路就是通过拼接来实现三位数
但是前文已经提到,9就有45个字符了,那999通过这样的转换只能是
长度刚好150,是原来的两倍
然后还可以用乘法符号和减法
所以999可以表示成1000-1
这样就只有49个字符啦= =
明显还是C++可以实现的…
乘以10还不如加0…
乘法优化
2*2生成的4比4要长…(因为要加括号)
2*3生成的6比1+…+1生成的6短(一个字节)
2*4生成的8比1+…+1生成的8短
3*3生成的9比1+1+…+1生成的9要短
减法优化
10-1,10-2,10-3显然更小
所以下面总结一下构造
加法不需要加
减法需要在后面加括号
dp[a][b] = dp[a]+dp[b]+3
b 等于1时候+1
拼接/乘法的时候需要在外面加
dp[a][b] = dp[a]+dp[b]+5
a 或 b 等于1时候+3
a == b == 1 时候+1
但是拼接之后是字符串,还需要补上+[]来换元成数字,故再+3
所以这还是一道字符串处理的动态规划= =
但是看上去这样还是不能满足75的要求,所以这里需要分解因数= =
比如777 =
第一个分解长度是105第二个是7*111 长度是59,满足要求
有空补上接下来的DP步骤,感觉是一个完全背包的多次优化…
javascript用 ! [] + - * 表示0~1000的数字
编码长度不超过75个字符
样例:
+![] +!![]
然后找到这个博客
发现了一种jother编码的神奇东西
[]是一个匿名函数,
+把它变成0,
!把它变成false……
//chrome console测试 [] > [] +[] > 0 ![] > false
那么对于
![]再加一个!就应该是true了,然后在加+便是1
当然在
+[]前面加一个!也能变成1
//chrome console测试 !+[] > true +!+[] > 1 +!![] > 1
一生万物
//前文提及博客通过加法生成的0~9 "+[]", //0 "+!![]", //1 "!![]+!![]", //2 "!![]+!![]+!![]", //3 "!![]+!![]+!![]+!![]", //4 "!![]+!![]+!![]+!![]+!![]", //5 "!![]+!![]+!![]+!![]+!![]+!![]", //6 "!![]+!![]+!![]+!![]+!![]+!![]+!![]", //7 "!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]", //8 "!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]" //9
但是对于这道题还是有字数限制…
75个字符…用sublime对于上面的测试了一下9就有45个字符了
话说google到一个网站….它使用了括号生成jother编码
尝试了一下是可以吧
()换成
[]的
所以一个思路就是通过拼接来实现三位数
[+!![]+[]]+[!![]+!![]+[]]+[!![]+!![]+!![]+[]] "123"
但是前文已经提到,9就有45个字符了,那999通过这样的转换只能是
[!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[]]+[!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[]]+[!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[]]
长度刚好150,是原来的两倍
恍恍惚惚
然后还可以用乘法符号和减法
所以999可以表示成1000-1
[+!![]+[]]+[+[]+[]]+[+[]+[]]+[+[]+[]]-[+!![]+[]]
这样就只有49个字符啦= =
明显还是C++可以实现的…
乘以10还不如加0…
乘法优化
2*2生成的4比4要长…(因为要加括号)
2*3生成的6比1+…+1生成的6短(一个字节)
[!![]+!![]]*[!![]+!![]+!![]]
2*4生成的8比1+…+1生成的8短
[!![]+!![]]*[!![]+!![]+!![]+!![]]34
3*3生成的9比1+1+…+1生成的9要短
[!![]+!![]+!![]]*[!![]+!![]+!![]]只有35个字符
减法优化
10-1,10-2,10-3显然更小
[+!![]]+[+[]]-[+!![]+!![]+!![]]
[+!![]]+[+[]]-[+!![]+!![]]28
[+!![]]+[+[]]-+!![]20
所以下面总结一下构造
//0,1,2,3,4,5没有什么技巧 +[] //0 +!![] //1 !![]+!![] //2 !![]+!![]+!![] //3 !![]+!![]+!![]+!![] //4 !![]+!![]+!![]+!![]+!![] //5 //6 = 2 * 3 [!![]+!![]]*[!![]+!![]+!![]] //6 //7 = 10 - 3 8 = 10 - 2,9 = 10 - 1 [+!![]]+[+[]]-[+!![]+!![]+!![]] //7 [+!![]]+[+[]]-[+!![]+!![]] //8 [+!![]]+[+[]]-+!![] //9 //10 = [1] + 0
加法不需要加
[]cost=1
减法需要在后面加括号
dp[a][b] = dp[a]+dp[b]+3
b 等于1时候+1
拼接/乘法的时候需要在外面加
[]来实现
dp[a][b] = dp[a]+dp[b]+5
a 或 b 等于1时候+3
a == b == 1 时候+1
但是拼接之后是字符串,还需要补上+[]来换元成数字,故再+3
所以这还是一道字符串处理的动态规划= =
但是看上去这样还是不能满足75的要求,所以这里需要分解因数= =
比如777 =
+[[[+!![]]+[+[]]-[+!![]+!![]+!![]]]+[[+!![]]+[+[]]-[+!![]+!![]+!![]]]+[[+!![]]+[+[]]-[+!![]+!![]+!![]]]]=
[[+!![]]+[+[]]-[+!![]+!![]+!![]]]*[[+!![]]+[+!![]]+[+!![]]]
第一个分解长度是105第二个是7*111 长度是59,满足要求
有空补上接下来的DP步骤,感觉是一个完全背包的多次优化…
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享