Hablando en esotérico

Hoy traigo un script que programa en lenguajes esotéricos, concretamente en Brainfuck, Ook!, Whitespace y Zombie.

Lo único que hace es escribir un programa que muestre por pantalla lo que el usuario pida, su uso es:

=============================================================================== ./esoprint.py [-h]  [-l ] [-o ] [ [ | -n [...] ] | -n] -h (--help): muestra esta "ayuda" -l (--language): Selecciona el lenguaje -o (--output) : Selecciona el archivo de salida (a stdout por defecto) El resto se toma como información, el -n (--newline) es considerado un salto de línea ===============================================================================

El script se puede descargar [aquí] o al final coloreado

Dejando a parte de Brainfuck y Ook!, de_los_que_se_habló_antes, Whitespace es un lenguaje compuesto únicamente por espacios, tabuladores y saltos de línea, con un conjunto de instrucciones bastante completo [Whitespace_Tutorial] . Zombie está por estar, ni siquiera encontré un intérprete así que no puedo asegurar que funcione, simplemente parecía fácil de programar :).

Y eso es todo.

Tengo que dejar la manía de poner los comentarios en inglés :S ...

[Referencias] http://compsoc.dur.ac.uk/whitespace/ http://esoteric.voxelperfect.net/wiki/Main_Page

===============================================================================

!/usr/bin/env python

-- coding: utf-8 --

"""    esoprint.py, encodes in esoteric language code

Supported languages:    - Brainfuck    - Ook!    - Whitespace    - Zombie # Blindly coded, not tested

Maybe future supported languages:    - Tink    - Piet    - Befunge    - False    - Q-BAL # When I find a interpreter    - Malbolge # Maybe too big...    - Beatnik # Really ¿?    - Unlambda

Not future supported languages:    # It's not a logical thing to make a computer generate this!    - Sheakspere    - Haiku    - Chef    # Make's it boring    - Whenever    # Impossible    - HQ9+    - BIT

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    Copyright (C) 2010 kenkeiras kenkeiras@gmail.com

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE                     Version 2, December 2004

Copyright (C) 2004 Sam Hocevar sam@hocevar.net

Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed.

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. You just DO WHAT THE FUCK YOU WANT TO.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Usage:

./esoprint.py [-h]  [-l ] [-o ] [ [ | -n [...] ] | -n] -h (--help): prints this help -l (--language): Set's output language, currently supported: Ook!, Brainf*ck, Whitespace, Zombie -o (--output) : Set's output file (to stdout by default) Whatever else is considered as data, the -n (--newline) is considered a line jump

"""

Language dictionary elements for BrainFuck-like langs

init: program initalization

inc

dec

push

pop

show

# get [Actually unused]

def usage():     import sys

print sys.argv[0]+" [-h]  [-l ] [-o ] [ [ | -n [...] ] | -n] "     print "-h (--help): prints this help"     print "-l (--language): Set's output language"     print "-o (--output) : Set's output file (to stdout by default)"     print "Whatever else is considered as data, the -n (--newline) is considered a line jump"     print "If no data is entered, it will be received from STDIN"     print "Supported languages:"     print """   - Brainfuck    - Ook!    - Whitespace    - Zombie """

brainfuck = {     "init": "",     "inc":"+",     "dec":"-",     "push":">",     "pop":"<",     "show":".",     "get":",",    #Unused     "loop":"[",  # Unused     "endloop":"]" # Unused }

ook = {     "init": "",     "inc":"Ook. Ook. ",     "dec":"Ook! Ook! ",     "push":"Ook. Ook? ",     "pop":"Ook? Ook. ",     "show":"Ook! Ook. ",     "get":"Ook. Ook! ",    # Unused     "loop":"Ook! Ook? ",  # Unused     "endloop":"Ook? Ook! " # Unused }

Encodes in a Zombie program

def zombie_encode(data):

z = "Dundun is a zombie\n"     z += "    summon\n"     z += "    task talk\n"     for p in data.split("\n"):         z += "        say \""+str( p.replace("\"","\\"") )+"\"\n"     z += "    animate\n"     z += "animate"     return z

Encodes in a Whitespace program

def whitespace_encode(data):     for c in data:         w += "  " # Push into the stack: [Space] [Space]         w += " " # Element, always positive [Space]         # Character to binary (needed)         b = bin( ord( c ) )         w += b[ 2 : ].replace("0"," ").replace("1","\t") #   Space: 0 || Tab: 1         w += "\n" # Element end: [LF]         w += "\t\n  " # Output stack top: [Tab][LF][Space][Space]

w += "\n\n\n" # Ending [LF][LF]     return w

Encodes in a Brainf*ck-like language

def stack_encode(lang, data):     s = lang['init']     n = 0     for c in data:         i = ord( c )         while ( n > i ):             s += lang['dec']             n -= 1

while ( n < i ):             s += lang['inc']             n += 1

s += lang['show']

return s

bf_like = {"brainfuck":brainfuck,"ook":ook} langlist = {"whitespace":whitespace_encode,"zombie":zombie_encode} if name == "main":

import sys     argc=len(sys.argv)     lang=""     data=""     out = ""     i=1     while (i < argc):         if (sys.argv[i] == "-l") or (sys.argv[i] == "--language"):             i += 1             lang = sys.argv[i]

elif (sys.argv[i] == "-o") or (sys.argv[i] == "--output"):             i += 1             out = sys.argv[i]

elif (sys.argv[i] == "-h") or (sys.argv[i] == "--help"):             usage()             sys.exit(0)

elif (sys.argv[i] == "-n") or (sys.argv[i] == "--newline"):             data += "\n"

else:             data = (data+" "+sys.argv[i]).strip()

i+=1     if (lang == ""):         lang = raw_input("Select language: ")

lang = lang.lower()     if (lang not in langlist) and (lang not in bf_like):

print "Unknown language (lenguaje desconocido)"         sys.exit(1)

if (data == ""):         for line in sys.stdin:             data += line

if (data == "\n"):         print "Sin entrada, saliendo..."

sys.exit(0)

if (lang in langlist):         result = langlistlang     else:         result = stack_encode(bf_like[lang],data)

if (out == ""):         print result

else:         f = open(out,"w")         f.write(result)         f.close() ===============================================================================

untagged

Fallos en Deviantshare » « Una ronda de bash ( I )