[Brainfuck]明文字符串信息转BF语言 实例代码
程序员文章站
2024-03-21 16:37:22
...
简单写了几种不同的方法,目的是为了生成好看、简短一些的BF语言。
目前来看,方法五生成的语言会更好看一些,长度也相对简短。
以后想到其他什么方法再回来补上。
可能会去写一个键索引,目测能更短。
实例代码如下:
package BFTools;
import java.util.LinkedList;
import java.util.List;
public class BFStringBuilder {
private static String source=null;
public static void main(String[] args){
source="Hi,u win";
if(args.length==1){
source=args[0];
}else {
System.out.println("当前命令参数行数 : " + args.length+"\n运行结果:\n");
}
//method1(source);
//method2(source);
method3(source);
method4(source);
method5(source);
}
//纯加法思想
private static void method1(String source){
for(int i=0;i<source.length();i++){
for(int j=0;j<source.charAt(i);j++){
System.out.print('+');
}
if(i!=source.length()-1){
System.out.print(".>");
}else{
System.out.print(".");
}
}System.out.println();
}
//用到了乘法的思想,代码更短
private static void method2(String source){
for(int i=0;i<source.length();i++){
int a=source.charAt(i)/10;
int b=source.charAt(i)%10;
//十位
for(int k=0;k<a;k++){
System.out.print('+');
}
if(a>=1)System.out.print("[>++++++++++<-]>");
//个位
for(int k=0;k<b;k++){
System.out.print('+');
}
if(i!=source.length()-1){
System.out.print(".>");
}else{
System.out.print(".");
}
}System.out.println();
}
//用到了集合的思想,字符串越长,优势越明显
private static void method3(String source){
List<Integer> li=new LinkedList<Integer>();
System.out.print("++++++++++[");
for(int i=0;i<source.length();i++){
int a=source.charAt(i)/10;
int b=source.charAt(i)%10;
li.add(b);
System.out.print('>');
//十位
for(int k=0;k<a;k++){
System.out.print('+');
}
}
for(int i=0;i<source.length();i++){
System.out.print('<');
}
System.out.print("-]");
for(Integer it:li){
System.out.print('>');
//个位
for(int k=0;k<it;k++){
System.out.print('+');
}
System.out.print('.');
}System.out.println();
}
//用到了均值电梯的思想
private static void method4(String source){
int avg=0;
for(int i=0;i<source.length();i++){
avg+=source.charAt(i);
}
avg/=source.length();
int a=avg/10;
int b=avg%10;
for(int i=0;i<a;i++){
System.out.print('+');
}
System.out.print("[>++++++++++<-]>");
for(int i=0;i<b;i++){
System.out.print('+');
}
for(int i=0;i<source.length();i++){
int dis=source.charAt(i)-avg;
for(int k=0;k<Math.abs(dis);k++){
if(dis>0){
System.out.print('+');
}
else System.out.print('-');
}
System.out.print('.');
avg=source.charAt(i);
}System.out.println();
}
//同样用到了集合的思想,但是加上了均值电梯
private static void method5(String source){
int avg=0;
for(int i=0;i<source.length();i++){
avg+=source.charAt(i);
}
avg/=source.length();
int a=avg/10;
int b=avg%10;
for(int i=0;i<a;i++){
System.out.print('+');
}
System.out.print("[>++++++++++<-]>");
for(int i=0;i<b;i++){
System.out.print('+');
}
for(int i=0;i<source.length();i++){
int dis=source.charAt(i)-avg;
int a1=Math.abs(dis)/5;
int b1=Math.abs(dis)%5;
char amp='-';
if(dis>0){
amp='+';
}
System.out.print(">+++++[<");
//十位(5)
for(int j=0;j<a1;j++){
System.out.print(amp);
}
System.out.print(">-]<");
for(int j=0;j<b1;j++){
System.out.print(amp);
}
System.out.print('.');
avg=source.charAt(i);
}System.out.println();
}
}
上一篇: EF常见问题