Coding katas: MV Coders on Fire II

BLZKZ

#90 tu y yo vamos empate, ¿quién ganará?

elkaoD

#90 es decir, ¿el de BLZKZ tarda 252 segundos? :P

Debo añadir que el tiempo de ejecución está dentro de lo normal para un lenguaje interpretado, interpretando Brainfuck.

Resultados kata: INTERPRETA BRAINFUCK

Bueno, de esta kata saco una conclusión: Python está de moda xD

Ya hemos acabado la segunda kata, al final ha habido bastante participación. Por lo que veo os váis rotando de kata en kata :)

Bueno, al lío, los resultados para la 2ª kata (interpreta brainfuck, #50):

Redoble de tambor...

¡Gracias todos por participar! Code07 se nos ha dormido en los laureles y ha perdido el puesto como el mayor nerdo. Comienza la lucha :)

Como siempre, en unos minutos posteo kata.

3 1 respuesta
cm07

#92 Force y yo hicimos no hace mucho un curso de compiladores con Python, y a Amazon lo he obligado por motivos "empresariales" a aprenderlo xD

elkaoD

KATA: Gradientes ASCII

1. El programa recibirá (por stdin, parámetro de función...): ANCHO, ALTO (ints), X_CENTRO, Y_CENTRO, RADIO (floats) y GRADIENTE (cadena/array de caracteres). RADIO es opcional.

2. Debe imprimir por pantalla una matriz de caracteres de tamaño ANCHOxALTO.

3. La matriz es una representación de un espacio de ANCHOx(2*ALTO) UL (Unidades de Longitud) sobre el que se distribuirá el gradiente (como curiosidad, ALTO*2 porque la mayoría de fuentes monospaced son el doble de altas que de anchas y al imprimir quedará bonito).

4. La esquina superior izquierda de la matriz será (0,0), creciendo x e y hacia la derecha y abajo respectivamente.

5. X_CENTRO e Y_CENTRO definen el centro del gradiente en el espacio (¡en celdas de la matriz, no en UL!).

6. Si no se especifica RADIO, el radio del gradiente (en UL) es igual a la mayor distancia entre el centro y las cuatro esquinas de la matriz (es decir, la matriz completa debe quedar cubierta por el grandiente).

7. Cada caracter de la matriz de salida debe ser el caracter correspondiente del GRADIENTE de entrada, dividiendo el radio del gradiente (con el centro y radio especificados) en tantos tramos como caracteres haya en GRADIENTE. El tramo para cada caracter debe tener la misma longitud (en UL).

8. Para las celdas fuera del gradiente se debe imprimir un espacio en blanco ( ' ' )

Ejemplos de ejecución

Ejemplo 1
Ejemplo 2
Ejemplo 3
Ejemplo 4
3D en ASCII

Entrega

  • Todo programa posteado se debe acompañar de AL MENOS una screenshot de la salida para las entradas de ejemplo 1 y 3.

  • La kata acabará el miércoles 20 de febrero a las 23:59 y se publicará una nueva kata inmediatamente, con la misma duración.

1
The-Force

Código y resultados en Ideone
Siguen siendo necesarias las screens?

4 1 respuesta
elkaoD

#95 suficiente :)

R

En este ejemplo, os sale una única fila de '-' en la esquina inferior izquierda mientras que en la derecha salen 7, teniendo en cuenta lo de la represntación x2, No es mas correcta esta?

spoiler

Tnhx #98

2 respuestas
cm07

#97 Etiquetas [ code] y [/code ] antes y despues.

1 respuesta
aitorman

Aquí va la mía en C++ otra vez. Todas van bien menos la del 3D, no se porque pero si meto el caracter · en el input en ideone compila, pero la salida queda en blanco (en el cmd funciona perfectamente así que supongo que será algo de ideone).

1 1 respuesta
cm07

#99 Debe ser cosa de la codificación que usa usando para el código fuente. Hay caracteres no ASCII de por medio.

cm07

Codigo en Ideone

cm07 te educa y entretiene (o lo intenta)
5
The-Force

#97 teniendo en cuenta que el ancho es 75 y el alto 35*2 = 70, cabe mas gradiente a la ancho que a lo largo luego es normal que por la derecha aparezca mas cantidad de '-' que por la parte inferior.

Si haces el ejemplo con ancho 75 y alto 37 (37*2 = 74) el resultado ya es mas parecido

Algo que estuve cacharreando anoche:

elkaoD

Bueno, me puse a hacer una versión dinámica para editar los parámetros en textboxes, pero creo que se me ha ido de las manos (source).

Sí, definitivamente.

Se me ha ido de las manos.

9 1 respuesta
Lecherito

A Ideone no lo puedo subir el código, ya que hay que compilar con la opción -lm para poder usar la librería math.h y eso ideone no lo admite, pero os pongo screen del código y las screen de algunos de los ejemplos.

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

#define _(x) strlen(x)
#define __ float
#define noles int
#define ll '\0'

__ d(__ x,                    __ y,noles i,noles j){return         sqrt(pow(x
-i,_("  ")                    )+pow (y-j,_("  "))); } __            m(__ as, 
__ b, __ c                    ,__                    d){            return (as
b)?((c>d)                    ?((                    as>            c)?as:c):(
(as>d)?as:                    d))                    :((            c>d)?((b>c
)?b:c):((b                    >d)                    ?b:            d));}noles
main(noles                    argc                   ,              char* argv
[]){noles                     M,G                    ,i,            j;__ D,ASD
,caca;M=atoi                  (argv                  [_(            "M")]);G =
atoi(argv[                    (2)]                   )*_            ("  ");D =
atof(argv[                    3]);                   ASD            =atof(argv
[_("IDA!")                    ])*_(                  "  "           );char* QQ
 = argv[5]                    ;if(                   argc           ==_("       "
)){caca=atof                  (argv                  [_(            "      ")]);
}else{caca=                   m(d(D                  ,ASD           ,M,G),d(D,
ASD,ll,ll),                   d(D ,                  ASD,           G,ll),d(D,
ASD,ll,M));}__ asdf=          caca/_(QQ);for(i=_(" ");i<G           ;i+=_("\"\"")){for(j=ll;
j<M;j++){noles q = (          noles)d(D, ASD, i, j)/asdf;           /*HOOLA*/putchar((q>=_(
QQ))?' ':QQ[q]);}/**/         /*   LE FU DUDES; LE FU  */           putchar('\n');}return 0;}

Screen del codigo:

Ejemplos:

Codigo legible
1 1 respuesta
BLZKZ

#104 da fak

no puedes poner el código sin ofuscar como una persona normal? ni que te fueramos a plagiar

1 1 respuesta
Lecherito

#105 Me di cuenta tarde y el código está en clase xD

The-Force

Ejecutable y proyecto de unity3d 4 en DropBox

En principio solo quería hacer el gradiente sobre una textura, pero despues de ver la kata de KaoD con sus evals me dio envidia y la hice dinámica tb xD

El código esta bastante chapu y probablemente lleno de bugs :/

P.D: El corazon en la captura es de total casualidad

3 1 respuesta
aitorman

Una cosa que me he estado preguntando, no creeis que es mejor hacer las katas de menor duración? porque practicamente todos posteamos las nuestras en los primeros días (y sino suele ser porque empezamos mas tarde, no porque no de tiempo) y hay que esperar bastante tiempo hasta la próxima. Yo la haría de 4 o 5 dias en ved de una semana (o podría ser variable segun la dificultad que tenga). ¿Qué os parece?

2 1 respuesta
elkaoD

#108 yo también lo pensé, pero también hay una ronda que postea a última hora. Imagino que si se acorta la semana, esos de última hora también postearán antes así que... a partir de ahora pongo dos katas por semana, ¿ok?

1 2 respuestas
cm07

#109 También dependerá de la magnitud del problema y de como tenga uno la vida en ese momento.

Vamos, que no prometo hacerlas todas xD

1 respuesta
Amazon

Importante lo que dice #110

Yo esta kata me metí a hacerla pero tengo una época bastante ocupada así que no me dio (ni me va a dar) tiempo de entregarla

aitorman

#109 great! Si se ve que baja demasiado la participacion siempre se puede volver a lo anterior

elkaoD

#107 no me canso de jugar, menudo vicio xD

1 respuesta
The-Force

#113 Si te sale alguna funcion wapa pegala :D

por cierto que meti par de atajos para senos y cosenos: S y C son la tipica funcion de seno y coseno, S2 y C2 tienen 3 parametros (t,min,max) donde el rango de valores devueltos es [min,max]

elkaoD

Resultados kata: GRADIENTES ASCII

Los resultados parea la 3ª kata (gradientes ASCII, #94) son:

Redoble de tambor...

Como comprenderéis voy a dejar de contar la puntuación (por razones obvias).

Como comento en #109, a partir de ahora se harán dos katas por semana, ambas con duración de 4 días (al no ser múltiplo de 7 rotará) aunque me sigo planteando incluso rebajarlo a 3 días (como hasta ahora, iré calibrando).

Espero que vuestro orgullo personal os mantenga participando (no como BLZKZ que ya van varias que dice que participa y siempre se raja).

Como siempre, gracias a todos por particpar :)

elkaoD

KATA: Fractal de Mandelbrot

La kata consiste en lazar ar... en mostrar el conjunto de Mandelbrot (en español).


Colorines y otras cosas chulas.

El conjunto de Mandelbrot es el más conocido de los conjuntos fractales y está definido de esta forma: sea c un número complejo, a partir de este se construye una sucesión:

 z(0) = 0
 z(n+1) = z(n)^2 + c

Se dice que el punto c del plano complejo pertenece al conjunto de Mandelbrot sí y sólo si esta sucesión queda acotada para ese punto, es decir, no diverge (o dicho de otra forma, tiene un límite superior, no tiende a infinito, etc.)

Para información más detallada, por supuesto, lo mejor es consultar los enlaces de la Wikipedia (recomiendo evitar ver pseudocódigos, le quita la gracia a hacer la kata, ¿no?).

Reglas

En esta kata no hay reglas, es freestyle, así que la decisión de cómo mostrar el fractal será a cargo de cada participante (aunque obviamente debe mostrar ambos ejes del plano complejo).

Vale, he mentido, un par de reglas. El usuario debe poder definir (ya sea en forma de variable, argumento de función, argumento de command-line...) como mínimo:

  • 1. La resolución de salida (sea cual sea vuestra forma de mostrar la salida).

    1. La cota superior/iteración máxima.

Bonus points: si se muestran los puntos fuera del conjunto en base a su velocidad de divergencia.

Entrega

  • Todo programa posteado se debe acompañar de AL MENOS una screenshot de la salida o resultado en intérprete online.

  • La kata acabará el domingo 24 de febrero a las 23:59.

MTX_Anubis

#103 Has leido a Bret Victor? Te gustará lo que dice ;)

1 respuesta
elkaoD

#117 no lo conocía, estoy viendo "learnable programming" y me ha recordado a una conferencia que vi sobre un IDE basado en esto (¡y funcional, no eran videos!) que se programaba un videojuego.

La verdad es que la idea es cojonuda, aunque no creo que esto sea una alternativa al "real-world programming" como propone (para mí el real-world programming es inherentemente distribuído, y asíncrono y por tanto no visualizable).

Pero en cuando a la crítica a Processing y otros entornos da en el clavo.

ItNaS

Mi primer intento

http://ideone.com/tH3Uam

1
Khanser

Voy a colgar una pic de mi mandelbrot de 768*512, el codigo no lo cuelgo hasta pasado mañana que sino os volveis perezosos :D

Update!

Cuelgo el codigo

PD: Lo he lanzado en "la nube" en pythonanywhere, quiero meterle un gradiente basado en las iteraciones, pero alli va lentisimo XD (todo porque en mi curro no me deja bajarme la libreria de python ILP)

Benchmark lanzado en pythonanywhere:
14 segundos imagen de 1536x1024 con 20 iteraciones
248 segundos imagen de 8192x4096 con 30 iteraciones

2