6
This is an interesting one.
I have written a short program in objective-c to encode a string into a brainf_ck string, this is what it looks like:
NSString *input; // set this to your input string
NSMutableString *output = [[NSMutableString alloc] init];
int currentPosition = 0;
for (int i = 0; i<[input length]; i++) {
int charPos = [input characterAtIndex:i];
int amountToGo = charPos-currentPosition;
if (amountToGo > 0) {
for (int b = 0; b<amountToGo; b++) {
[output appendString:@"+"];
}
}
else {
int posVal = abs(amountToGo);
for (int b = 0; b<posVal; b++) {
[output appendString:@"-"];
}
}
currentPosition += amountToGo;
[output appendString:@"."];
}
NSLog(@"%@", output);
[output release];
Now I could ask you to optimize that code.
Or, I could ask you to optimize the bf code it produces?
EXAMPLE: Output of 'Hello World!' from my code (365 chars)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++.+++++++..+++.-------------------------------------------------------------------------------.+++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++.+++.------.--------.-------------------------------------------------------------------.
EXAMPLE 2: Now, looking at that code, I could probably shorten it by putting reset to zeros in, for a start... (290 chars - 75 improvement)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++.+++++++..+++.[-]++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++.+++.------.--------.[-]+++++++++++++++++++++++++++++++++.
But this takes it a step further... output of 'Hello World!' from some sample code I found on the internet: (111 chars, 179 on last, 254 on original!)
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Now, I don't know how that loop works, but it does. My question is this:
- Explain how the loop in the last example works.
- Write some code that can turn any string into highly optimized brainf_ck, like the last example.
Please see http://meta.stackexchange.com/q/24079/2509 concerning the spelling on the language on Stack Exchange sites, and I am making this CW in keeping with our policy on "tips" questions.
– dmckee --- ex-moderator kitten – 2011-08-15T20:21:35.607sorry - thanks for editing if that was you – Alex Coplan – 2011-08-15T21:10:14.593