BrainFlow
ब्रेनफ्लो क्या है?
BrainFlow जोड़ा कार्यक्षमता और भ्रम के लिए 3 अतिरिक्त आदेशों के साथ BrainF ** k (BFk) का विस्तार है।
क्या आज्ञा?
सामान्य BFk कमांड के अलावा , हमारे पास भी है:
^ सेल में कूदता है # सेल में मूल्य के आधार पर। Ex: यदि हम 4 के मान के साथ सेल # 0 पर हैं, तो ^ हमें सेल # 4 पर ले जाएगा।
= सेल के मूल्य को सेल के इंडेक्स पर सेट करता है। Ex: यदि हम 0 के मान के साथ सेल # 4 पर हैं, तो = हमारे मान को 4 पर सेट करेगा।
& हमारे वर्तमान सेल में मूल्य के आधार पर सेल के मूल्य के बराबर वर्तमान सेल पर मान सेट करेगा। (यह एक कठिन शब्द है, इसलिए यहां एक उदाहरण है!) Ex: हम सेल # 33 पर हैं और इस सेल में हमारा वर्तमान मूल्य 7 है, और सेल # 33 में हमारे वर्तमान मूल्य को सेल # 7 में जो भी मान है, सेट कर देगा।
वैकल्पिक चुनौतियां
निम्नलिखित में से किसी को पूरा करने से निर्दिष्ट बाइट आपके बाइट काउंट पर लागू होगी।
Interpreter written in BrainFlow
(नमूना से व्याख्या की जा सकती है और कम से कम एक सार्थक होता है ^ = या &): स्कोर / 3
Interpreter written in BrainF**k:
स्कोर / २
Doesn't contain any English letters (in either upper or lower case):
स्कोर - २०
Doesn't contain any of the BrainFlow / BFk commands in the interpreter itself:
स्कोर - ५०
उदाहरण
एक उदाहरण जावा दुभाषिया:
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;
}
}
गोल्फ के करीब भी नहीं लेकिन एक अच्छी शुरुआत प्रदान करनी चाहिए।
सबसे कम अंतिम स्कोर जीतता है, जहां लागू चैलेंज में कटौती को ध्यान में रखने के बाद स्कोर आपके कार्यक्रम में बाइट्स की संख्या है।
परिक्षण
निम्नलिखित ब्रेनफ्लो कार्यक्रम को स्टडिन से '+' वर्ण पढ़ने के बाद निर्दिष्ट आउटपुट प्रिंट करना चाहिए:
<<,++++[>++++[>++++<-]<-] 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
आउटपुट:
ðñðòñðòðôóòñóñôóðòõóñõðôôóòñööõôöðóöðõðùõñô÷ùõóñöóùñô÷øôøõôòöõóðòöóñ÷ðõôûôòú÷úø÷öùøöùñøðùúðûðþöûñùýøðòñ
subset
गया extension
। प्रतिक्रिया के लिए धन्यवाद।
++&
अपनी उम्र+++&
को पुनः प्राप्त करने के लिए या उस महीने को पुनः प्राप्त करने के लिए कर सकता हूं जिसका मैं जन्म हुआ था (मान लिया गया) निश्चित रूप से 64 वीं सेल 0 के डिफ़ॉल्ट मूल्य पर है)