#60 Ahora mismo lo estaba haciendo del tipo:
1- Lee caracter
1.1- si es [ que coja todo el bucle e interpretalo
Pero no sé en que puedo fallar <.<
#60 Ahora mismo lo estaba haciendo del tipo:
1- Lee caracter
1.1- si es [ que coja todo el bucle e interpretalo
Pero no sé en que puedo fallar <.<
Se me pasó completamente #13 y revisando los posts lo he visto. Tiene buena pinta y por lo que veo los participantes manejan. ¿Se puede apuntar cualquiera?
Aún así, te animo a que te apuntes a alguna de estas
#60 si lo dices por stdin, tienes abajo un link que pone "haga click aquí para pegar entrada (stdin)". Imagino que funcionará también con Octave.
nada no hay manera de coger el input en ideone con octave, no le da la gana.
Os pongo mi solución igualmente en Octave
http://ideone.com/HI1ZCm (no lee el stdin, tarda en correr un poquillo)
#63 buena, aunque te falta la parte de ancho de celda/IO y la de 10 = \n.
Para STDIN haz aunque sea que lea de un string, si no la solución no es válida
voy a participar en esta kata , ya que la anterior no me dio tiempo a participar. pero tengo las siguientes dudas:
alguien me lo puede explicar, con algún ejemplo o algo ? porque no lo pillo :s
#65 La kata consiste en crear un programa intérprete de código brainfuck. Seria como si elkaoD te pidiera que hicieras un programa que lee PHP y lo ejecuta, pero en vez de PHP, es brainfuck
La cinta, con esto se refiere a la memoria que puede usar el programa, en este caso 30000 bytes, esto quiere decir que el programa en brainfuck solo podrá tener ese espacio, y la cinta es que si el programa en brainfuck intenta acceder a la posición 30000 de la memoria, el puntero volverá a 0, por lo que solo podrá almacenar memoria entre la 0 y la 29999.
El tema de I/O es como vas a pasarle el programa en brainfuck, si como parámetro en la consola, si poniendo una ruta de fichero (y tu programa leera el contenido del fichero antes de ponerse a ejecutarlo).... etc
Y el ancho ya te lo dicen en #67 XD
#65 Lo de la cinta justo lo que explica #66.
La entrada es stdin, la entrada estándar, como cuando en Linux haces echo "cadena de entrada" | programa
o en Windows también programa < archivo
.
http://es.wikipedia.org/wiki/Entrada_est%C3%A1ndar
Ojo, la entrada de tu programa no tienes por qué leerla de la entrada estándar de tu SO, puede ser un array, un string... sólo es para ilustrar el paralelismo con la entrada estándar.
Las operaciones en Brainfuck son la coma (,) para leer UN byte de la entrada, y el punto (.) para escribir UN byte en la salida.
El ancho de I/O es el tamaño de entrada/salida. Un ancho de 8 bits significa que tanto la entrada como la salida pueden ser un número entre 0 y (28)-1.
¿Por qué difiere del tamaño de celda? Porque un archivo se lee byte a byte por huevos. Para la entrada no tiene importancia (porque las reglas dicen que toda entrada están entre 0-255, no hace falta asegurarse) pero para la salida... ¿qué pasa si quieres imprimir 256? Eso no cabe en un byte... y no puedes imprimir dos bytes en uno La salida debe ser por tanto 0 (overflow).
#69 cada cual lo implementa como le sale de los cojones (en win hay \r\n) así que he decidido eliminar la regla por no poder comprobarla en condiciones. No hace falta que tratéis \n especialmente.
Para todos: con respecto a PRIME, recordad que la entrada tiene que acabar en \n (10, 0x0a) si no, entra en un bucle infinito (el programa usa \n para saber cuando ha acabado el string del número, como el \0 en C).
Bueno, pues aquí va
Uso: bf(string, [byte, byte, byte...])
Devuelve un objeto: {out: [...], tape: [...]}
, ambas un array de bytes.
La podéis probar copiando el código de https://gist.github.com/alvaro-cuesta/4745047 en http://coffeescript.org/#try: , haciendo click en Run y veréis el resultado en la consola de JS (en Chrome se abre con F12). Imprime Hello World!, Fibonacci hasta 89, un triángulo de Sierpinski y los primos hasta 20. Incluye str2byte y byte2str para convertir la entrada/salida.
Pues aquí esta mi
y aquí la
La velocidad de ejecución no es nada fiable. En el pc de cmo7 tarda la mitad que en el mio xD
No me metais mucha mierda si mi código es feo y tocho. Es así de largo para optimizar la velocidad de ejecución. De todos modos seguiré intentando optimizarlo mas. Acepto sugerencias
Ni mucho menos busco que vaya rápido, sólo quería que me funcionara, y pillé la idea de #72 (aunque yo se la sonsaqué a cmo7 xDD) de
e
Y me planto, no pienso modificarlo para optimizarlo ni nada xD
Edit: V2 #78
Edit: V3 #86 (soporte para caracteres que no son de bf y pequeña optimización del código (elimino espacios sobrantes únicamente xd)
#72 me mola la idea de la optimización. Yo lo hice en JS (¡compilando con strings a una función JS directamente!) pero no sólo no gané rendimiento sino que perdía. Tengo que probar en Node, pero en browser iba como un 30% peor.
¿Como cuánto te tardan los primos hasta 200?
#74 Lo del mapeo lo deseché por que requiere que muchas variables sean elementos de la clase y eso se traduce a muchisimos "self." en cada operación. Tengo una versión del código que hace exactamente eso y ademas de ser ilegible con tanto self es mas lento. Lo único bueno es que el método run se reduce mucho.
#76 eso os pasa por usar clases http://stackoverflow.com/questions/4020419/closures-in-python
EDIT: rectifico, me informa The-Force que las closures en Python son read-only. Ains...
estaba jugando con la siguiente idea pero no tengo más tiempo para dedicarle. A ver si alguien se anima
#79 Yo ya lo pensé pero tampoco pensé que sería legal xDD
A cambio un no del todo funcional (ya que no soporta bucles anidados, no, no he conseguido hacerlo): http://ideone.com/QRuwoX
Siguiendo la idea de #79 he hecho esto en JS que creo que sigue todas las normas
Para probarlo http://jsfiddle.net/AaMzG/
Bueno, he estado unos mesecillos sin postear en el foro (he tenido bastante aparcados mis proyectos, aunque si que he hecho un par de cosas que ya pondre en la Guía de desarrollo de juegos indie) y que mejor manera de volver que con una kata, asi que aqui va la mia en C++:
La clase Program se usa así:
Program *programa=new Program("archivo_programa","archivo_input");
programa->Execute();
En el codigo que he puesto ejecuta el PRIME.BF (entrada "20\n", el triangulo de Sierpinski y el Fibonacci.
Imagen del output:
El codigo esta bastante cacosamente optimizado (cada vez que se encuentra un '[' busca el ']' correspondiente en ved de precalcularlo y cosas asi), pero bueno, es lo primero que me salio y no hay ganas de optimizarlo mas xD