MiniStringFuck
Jump to navigation
Jump to search
MiniStringFuck (or MSF-) is an esoteric programming language with only two commands, operating on one cell.
Instructions
Instruction | Action |
---|---|
+ |
Increment the memory cell. If it reaches 256, wrap to 0. |
. |
Output the character in the cell. |
Examples
Hello, World!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++.+++++++..+++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++.+++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
Alphabet (uppercase)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.
Golfing
To golf code you need to input the code to this program that does the job for you.
Implementation
Here is an implementation in Python 2.7.12.
# coding=utf-8 """ MiniStringFuck interpreter by Έρικ Κωνσταντόπουλος, © 2001-2015 """ # Let's import the required modules from sys import argv, stdout # Let's get teh code! code_ = open(argv[1]) code = code_.read() # Free some memory! Not required, but I would recommend it. # Un-comment the below line to disable memory freeing. #""" del stdin #""" # Never tamper with this line! # Initialize the cell cell0 = 0 # Code fastener; not really required. # Un-comment the line below to disable it, although I recommend to leave it enabled. #""" for i in xrange(len(code)): while code[i:i + 256] == '+' * 256: # We don't need 256 +s in a row... code = code[:i] + code[i + 256:] # ...so we trash them! #""" # Please do not remove or un-comment this line! # Interpreter for i in code: if i == '+': # + cell0 += 1 # Increments the cell. cell0 %= 256 # There are no ASCII characters over 255, so we wrap. if i == '.': # . stdout.write(chr(cell0)) # Outputs the character in the cell. code_.close()
Here's an implementation in C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace MiniStringFuck_Interpreter { class Program { static void Main(string[] args) { StreamReader sr = new StreamReader(args[0]); string code = sr.ReadToEnd(); code = code.Replace(((char)13).ToString(), ""); int cell = 0; foreach (char c in code) { if (c == '+') { if (cell == 255) { cell = 0; } else { cell++; } } else if (c == '.') { Console.Write((char)cell); } } Console.ReadLine(); } } }
Miscellaneous
Generator
# coding=utf-8 """ MiniStringFuck generator by Έρικ Κωνσταντόπουλος, © 2006-2013 """ # Module importing from sys import stdout, stdin, stderr # String getting string = stdin.read() # Memory freeing #1 #""" # Uncomment this line to disable! del stdin #""" # Never modify line 12. # String checking (ASCII only) for i in string: if ord(i) not in range(256): stderr.write('Your string contains non-ASCII characters.') exit() # Memory freeing #2 #""" # Uncomment this line to disable! del stderr #""" # Never modify line 23. # Character storing char = 0 # Code generating for i in string: while chr(char) != i: char += 1 char %= 256 stdout.write('+') stdout.write('.')
Optimizer
# coding=utf-8 """ MiniStringFuck optimizer by Έρικ Κωνσταντόπουλος, © 2001-2004 """ # Module imports from sys import argv, stdout, stdin file = open(argv[1]) if len(argv) >= 2 else stdin if len(argv) >= 3: out = open(argv[2], 'w') elif file != stdin: out = open(argv[1] + '_cmp', 'w') else: out = stdout # Free precious RAM!! del stdout code = file.read() # Memory freeing del stdin # Main for i in xrange(len(code)): while code[i] not in '+.': brtoggle = False if i == len(code) - 1: continue_ = '' brtoggle = True else: continue_ = code[i + 1:] code = code[:i] + continue_ if brtoggle: break if i == len(code) - 1: break code = '.' + code while code[-1] != '.': code = code[:-1] code = code[1:] while '+' * 256 in code: code = code.replace('+' * 256, '') #File O out.write(code)