欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[Brainfuck]明文字符串信息转BF语言 实例代码

程序员文章站 2024-03-21 16:37:22
...

简单写了几种不同的方法,目的是为了生成好看、简短一些的BF语言。

目前来看,方法五生成的语言会更好看一些,长度也相对简短。

以后想到其他什么方法再回来补上。

可能会去写一个键索引,目测能更短。

[Brainfuck]明文字符串信息转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();
	}
}