>基本想法阐述

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语句构建-(无字天书)相关推荐

  1. 凹语言、图灵机和 BF 语言

    凹语言是国内 Gopher 发起的纯社区构建的开源国产编程语言项目(没有公司背景.没有任何赞助).凹语言是国内第一个实现纯浏览器内编译.执行全链路的自研静态类型的编译型通用编程语言.本文尝试通过凹语言 ...

  2. 基于 JavaScript 语言的快速物联网开发架构

    随 JavaScript 语言的流行,及物联网领域的崛起,我们能看到它们结合的可能性,同时也发现它特别适合于物联网开发.因此,在这篇文章里,笔者将主要从以下三个方面进行介绍: 典型的物联网架构,及多种 ...

  3. 基于Erlang语言的视频相似推荐系统 | 深度

    作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) [导语]:作者在上一篇文章<基于内容的推荐算法>中介绍了基于内容的推荐算法的实现原理.在本篇文 ...

  4. 基于Java语言构建区块链(四)—— 交易(UTXO)

    基于Java语言构建区块链(四)-- 交易(UTXO) 2018年03月11日 00:48:01 wangwei_hz 阅读数:909 标签: 区块链比特币 更多 个人分类: 区块链 文章的主要思想和 ...

  5. 基于Java语言构建区块链(五)—— 地址(钱包)

    基于Java语言构建区块链(五)-- 地址(钱包) 2018年03月25日 18:02:06 wangwei_hz 阅读数:1292更多 个人分类: 区块链bitcoin比特币 文章的主要思想和内容均 ...

  6. c语言排序算法 应用与实现,基于C语言排序算法改进与应用.doc

    基于C语言排序算法改进与应用 基于C语言排序算法改进与应用 摘 要:介绍了程序语言中排序的原理及应用,阐述了基于C语言的三种主要排序方法,提出了每种排序方法的改进,计算出改进后算法的时间复杂度,编写了 ...

  7. 将 改为c语言表达式,基于c语言表达式求解课程设计修改.doc

    基于c语言表达式求解课程设计修改 摘 要 通过数据结构这门课程,我们较深入的了解到了栈,栈是一种重要的线性结构,它广泛应用于各种软件系统中,因此在面向对象的程序设计中,它们是多型数据类型. 本次试验我 ...

  8. c语言凸包算法,基于C语言的凸包算法实现

    基于C语言的凸包算法实现 非计算机专业,代码有些的不好的地方,大佬轻喷^ _ ^ 根据要求,需要使用C语言实现凸包算法--Graham扫描法,本文将从算法理解.实现思路.遇到的问题及其解决方案三个方面 ...

  9. c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...

    gd工程职业技术学院毕业论文 基于C语言的推箱子游戏设计 Design of the push box Based on Combined Language 作者姓名: 学科专业: 应用电子技术 学院 ...

最新文章

  1. Arc Engine 中添加气泡提示框
  2. oracle照片字节大小值,Oracle每条记录的平均字节数
  3. 矿Spring入门Demo
  4. Java其他API介绍
  5. 将Java程序作成exe文件的几种方法【转载】
  6. 【bzoj3224】普通平衡树——treap
  7. lisp抛物线插值_抛物线插值法
  8. 3Eclipse的下载、安装、配置
  9. html5 教程网站
  10. 随心所欲玩复制 详解robocopy (完)
  11. 数据库同步功能要慎用
  12. BCH编码与译码(MATLAB实现)
  13. Python在word的指定位置插入图片
  14. java无法找到加载主类是什么意思,在Java程序运行时遇到的“Could not find or load main class(无法找到或者加载主类)”是什么意思?...
  15. jawbone app for android,jawbone手环app
  16. word文档加密保护不能编辑问题
  17. 信号完整性和电源完整性基本介绍
  18. 做转子力学分析,你选APDL还是Workbench仿真?
  19. 输入框@选人功能实现
  20. 面试心得---按时交付代码的重要性

热门文章

  1. 外贸助手 - 网页版
  2. Muduo - Reactor模式
  3. 应用密码学期末速通复习
  4. 学医的考计算机二级选哪个好,想学医在高中要选什么科目 怎么选最好
  5. 我们专访了神龙云服务器产品负责人,看懂阿里云发布的“神龙”到底“神”在哪里
  6. 力扣851.喧闹和富有(DFS)
  7. 【AIGC】6、Segment Anything | Meta 推出超强悍可分割一切的模型 SAM
  8. CloudCompare二次开发之如何配置PCL点云库?
  9. gmod的css模块放哪,gmod模式如何更换 Gmod模块怎么安装 附gmod模块安装步骤教程
  10. java实现十六进制转十进制