BrainFlow
Apa itu BrainFlow?
BrainFlow adalah perpanjangan dari BrainF ** k (BFk) dengan 3 perintah tambahan untuk menambah fungsionalitas dan kebingungan.
Perintah apa?
Selain perintah BFk normal , kami juga memiliki:
^ Melompat ke sel # tergantung pada nilai dalam sel. Mis: Jika kita berada di sel # 0 dengan nilai 4, ^ akan melompat kita ke sel # 4.
= Menetapkan nilai pada sel ke indeks sel. Mis: Jika kita berada di sel # 4 dengan nilai 0, = akan menetapkan nilai kita menjadi 4.
& Akan menetapkan nilai pada sel saat ini sama dengan nilai pada sel berdasarkan pada nilai di sel kami saat ini. (Yang ini sulit untuk dikatakan, jadi inilah contohnya!) Mis: Kami berada di sel # 33 dan nilai kami saat ini di sel ini adalah 7, & akan menetapkan nilai kami saat ini di sel # 33 untuk nilai apa pun yang ada di sel # 7.
Tantangan Opsional
Menyelesaikan salah satu dari yang berikut ini akan menerapkan bonus yang ditentukan untuk jumlah byte Anda.
Interpreter written in BrainFlow
(Dapat ditafsirkan oleh sampel dan mengandung setidaknya satu bermakna ^ = atau &): Skor / 3
Interpreter written in BrainF**k:
Skor / 2
Doesn't contain any English letters (in either upper or lower case):
Skor - 20
Doesn't contain any of the BrainFlow / BFk commands in the interpreter itself:
Skor - 50
Contoh
Contoh penerjemah Java:
import java.util.Scanner;
public class Interpreter {
private String exp;
private int[] values = new int[256];
private int index = 0;
private Scanner in;
public Interpreter(String exp, Scanner in){
this.exp = exp;
this.in = in;
}
public void run(){
//Reset index and values
for(int i = 0; i < values.length; i++){
values[i] = 0;
}
this.index = 0;
System.out.println("Starting...");
this.process(this.exp, false);
System.out.println("\nDone.");
}
private void process(String str, boolean loop){
boolean running = loop;
do{
for(int i = 0; i < str.length(); i++){
switch(str.charAt(i)){
case '>':increaseIndex();break;
case '<':decreaseIndex();break;
case '+':increaseValue();break;
case '-':decreaseValue();break;
case '[':
String s = str.substring(i);
int j = this.getClosingIndex(s);
if(this.values[this.index] == 0){
i +=j;
break;
}
process(s.substring(1, j), true);
i += j;
break;
case '.':
int v = this.values[this.index];
System.out.print((char)v);
break;
case ',':this.values[this.index] = this.in.next().charAt(0);break;
case '^':this.index = this.values[this.index];break;// Jumps to the index specified in the current cell.
case '=':this.values[index] = this.index;break;// Sets the value at cell #x to x
case '&':this.values[index] = this.values[this.values[index]];break;// If cell contains X, makes value of current cell equal to value in cell X
default:
//Ignore others
break;
}
}
if(this.values[this.index] == 0){
running = false;
}
}while(running);
}
private void increaseIndex(){
if(++this.index >= this.values.length){
this.index = 0;
}
}
private void decreaseIndex(){
if(--this.index < 0){
this.index = this.values.length - 1;
}
}
private void increaseValue(){
int newVal = this.values[this.index] + 1;
if(newVal >= this.values.length){
newVal = 0;
}
this.values[this.index] = newVal;
}
private void decreaseValue(){
int newVal = this.values[this.index] - 1;
if(newVal < 0){
newVal = this.values.length - 1;
}
this.values[this.index] = newVal;
}
private int getClosingIndex(String str){
int openings = 0;
int closings = 0;
for(int i = 0; i < str.length(); i++){
char c = str.charAt(i);
if(c == '['){
openings++;
}else if(c == ']'){
closings++;
}
if(openings == closings){
return i;
}
}
return -1;
}
}
Bahkan tidak dekat dengan golf tetapi harus memberikan titik awal yang baik.
Skor final terendah menang, di mana skor adalah jumlah byte dalam program Anda setelah pengurangan Tantangan yang berlaku telah diperhitungkan.
Pengujian
Program BrainFlow berikut harus mencetak output yang ditentukan setelah membaca karakter '+' dari stdin:
<<,++++[>++++[>++++<-]<-] Set cell #0 to a value dependent on input
>>>+[[-]&>=]+& Set every other cell to that value
[ Start loop
+^ Add one to current value and jump to that cell index
. Print the value at that cell
& Copy value from specified cell
] End loop
Keluaran:
ðñðòñðòðôóòñóñôóðòõóñõðôôóòñööõôöðóöðõðùõñô÷ùõóñöóùñô÷øôøõôòöõóðòöóñ÷ðõôûôòú÷úø÷öùøöùñøðùúðûðþöûñùýøðòñ
subset
menjadi extension
. Terima kasih untuk umpan baliknya.
++&
untuk mengambil umur saya atau+++&
untuk mengambil bulan di mana saya dilahirkan. (Asumsikan tentu saja sel ke-64 berada pada nilai default 0)