[Brainfuck]基于Whitespace语言保密思想的BF语句构建-(无字天书)
>基本想法阐述
BF语句只有八个状态,这就代表了我们可以用三位二进制数字来存储这些信息:
- < 000
- > 001
- + 010
- - 011
- [ 100
- ] 101
- . 110
- , 111
如果你还不清楚什么是Brainfuck,可以回来看看这一篇文章:
http://blog.csdn.net/shenpibaipao/article/details/73692164
然后了解一下如何将常见字符串转化为BF语句:
http://blog.csdn.net/shenpibaipao/article/details/73698430
-------------------------------------------------------------
基于Whietespace只识别空格和tab制表符的思想,我们完全可以用空格代替0,tab代替1,使得信息得到优先储存,但又无法被打印机打印出来。
但有个问题就是现在利用三个字符去替换原本的一个字符,显然会使原文体积变为原来的三倍。
所以我们需要做一些数据压缩。
注意到只有两个状态:空格与制表符,所以利用霍夫曼压缩,可以最有效的减小体积(本质上又是将其还原为二进制的0 1 序列状态)。
-------------------------------------------------------------
我写了一些简单的方法,最终的转化比是:
1:5:14:42
明文:压缩后的WhitespaceBF语句:BF语句:未压缩的WhitespaceBF语句
>效果展示:
看着是一片空白,然而这却真真正正是存储了Brainfuck程序语句的一段代码。
是不是非常有趣。
编程有时候就是一种非常有趣的事情。: )
>示例方法代码:
将BF语句转化为WhitespaceBF语句:
public static String toWhite(String s){String outS="";for(int i=0;i<s.length();i++){if(s.charAt(i)=='<')outS+=" ";//0else if(s.charAt(i)=='>')outS+=" \t";//1else if(s.charAt(i)=='+')outS+=" \t ";//2else if(s.charAt(i)=='-')outS+=" \t\t";//3else if(s.charAt(i)=='[')outS+="\t ";//4else if(s.charAt(i)==']')outS+="\t \t";//5else if(s.charAt(i)=='.')outS+="\t\t ";//6else if(s.charAt(i)==',')outS+="\t\t\t";//7}return outS;}
WhitespaceBF转化为BF语句:
public static String toBF(String s){String outS="";System.out.println("white_len="+s.length());for(int i=0;i<s.length();i+=3){String temp=s.substring(i,i+3);if(temp.equals(" "))outS+="<";else if(temp.equals(" \t"))outS+=">";else if(temp.equals(" \t "))outS+="+";else if(temp.equals(" \t\t"))outS+="-";else if(temp.equals("\t "))outS+="[";else if(temp.equals("\t \t"))outS+="]";else if(temp.equals("\t\t "))outS+=".";else if(temp.equals("\t\t\t"))outS+=",";}return outS;}
[Brainfuck]基于Whitespace语言保密思想的BF语句构建-(无字天书)相关推荐
- 凹语言、图灵机和 BF 语言
凹语言是国内 Gopher 发起的纯社区构建的开源国产编程语言项目(没有公司背景.没有任何赞助).凹语言是国内第一个实现纯浏览器内编译.执行全链路的自研静态类型的编译型通用编程语言.本文尝试通过凹语言 ...
- 基于 JavaScript 语言的快速物联网开发架构
随 JavaScript 语言的流行,及物联网领域的崛起,我们能看到它们结合的可能性,同时也发现它特别适合于物联网开发.因此,在这篇文章里,笔者将主要从以下三个方面进行介绍: 典型的物联网架构,及多种 ...
- 基于Erlang语言的视频相似推荐系统 | 深度
作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) [导语]:作者在上一篇文章<基于内容的推荐算法>中介绍了基于内容的推荐算法的实现原理.在本篇文 ...
- 基于Java语言构建区块链(四)—— 交易(UTXO)
基于Java语言构建区块链(四)-- 交易(UTXO) 2018年03月11日 00:48:01 wangwei_hz 阅读数:909 标签: 区块链比特币 更多 个人分类: 区块链 文章的主要思想和 ...
- 基于Java语言构建区块链(五)—— 地址(钱包)
基于Java语言构建区块链(五)-- 地址(钱包) 2018年03月25日 18:02:06 wangwei_hz 阅读数:1292更多 个人分类: 区块链bitcoin比特币 文章的主要思想和内容均 ...
- c语言排序算法 应用与实现,基于C语言排序算法改进与应用.doc
基于C语言排序算法改进与应用 基于C语言排序算法改进与应用 摘 要:介绍了程序语言中排序的原理及应用,阐述了基于C语言的三种主要排序方法,提出了每种排序方法的改进,计算出改进后算法的时间复杂度,编写了 ...
- 将 改为c语言表达式,基于c语言表达式求解课程设计修改.doc
基于c语言表达式求解课程设计修改 摘 要 通过数据结构这门课程,我们较深入的了解到了栈,栈是一种重要的线性结构,它广泛应用于各种软件系统中,因此在面向对象的程序设计中,它们是多型数据类型. 本次试验我 ...
- c语言凸包算法,基于C语言的凸包算法实现
基于C语言的凸包算法实现 非计算机专业,代码有些的不好的地方,大佬轻喷^ _ ^ 根据要求,需要使用C语言实现凸包算法--Graham扫描法,本文将从算法理解.实现思路.遇到的问题及其解决方案三个方面 ...
- c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...
gd工程职业技术学院毕业论文 基于C语言的推箱子游戏设计 Design of the push box Based on Combined Language 作者姓名: 学科专业: 应用电子技术 学院 ...
最新文章
- Arc Engine 中添加气泡提示框
- oracle照片字节大小值,Oracle每条记录的平均字节数
- 矿Spring入门Demo
- Java其他API介绍
- 将Java程序作成exe文件的几种方法【转载】
- 【bzoj3224】普通平衡树——treap
- lisp抛物线插值_抛物线插值法
- 3Eclipse的下载、安装、配置
- html5 教程网站
- 随心所欲玩复制 详解robocopy (完)
- 数据库同步功能要慎用
- BCH编码与译码(MATLAB实现)
- Python在word的指定位置插入图片
- java无法找到加载主类是什么意思,在Java程序运行时遇到的“Could not find or load main class(无法找到或者加载主类)”是什么意思?...
- jawbone app for android,jawbone手环app
- word文档加密保护不能编辑问题
- 信号完整性和电源完整性基本介绍
- 做转子力学分析,你选APDL还是Workbench仿真?
- 输入框@选人功能实现
- 面试心得---按时交付代码的重要性
热门文章
- 外贸助手 - 网页版
- Muduo - Reactor模式
- 应用密码学期末速通复习
- 学医的考计算机二级选哪个好,想学医在高中要选什么科目 怎么选最好
- 我们专访了神龙云服务器产品负责人,看懂阿里云发布的“神龙”到底“神”在哪里
- 力扣851.喧闹和富有(DFS)
- 【AIGC】6、Segment Anything | Meta 推出超强悍可分割一切的模型 SAM
- CloudCompare二次开发之如何配置PCL点云库?
- gmod的css模块放哪,gmod模式如何更换 Gmod模块怎么安装 附gmod模块安装步骤教程
- java实现十六进制转十进制