Rainbow Array sample

f(r,n)=10f(r1,n)+f(r,n+1)f(r,n+1)if n=8 and r=0if n=8 and r0if r0if r=0

using System;
public class RainbowB
{
    public const int MOD = 1000000007;
    static int N, T;
    static int[]R = new int[] {1,2,3,4,5,6,7};
    static int[][] m= new int[10][];
    public static void Main()
    {
        for(int i = 0; i < 10; i++)
            m[i] = new int[1000010];
        N = Int32.Parse(Console.ReadLine());
        N = (N + 1) / 2;
        if(N - 7 < 0)
            Console.WriteLine(0);
        else
            Console.WriteLine(DP(0,N - 7));
    }

    public static int DP(int i, int res) {
        int ii = i, ress = res;
        for(i = 7; i >= 0; i--){
            for(res = 0;res <= ress; res++){
                if(i == 7){
                    if(res != 0)
                        m[i][res] = 0;
                    else
                        m[i][res] = 1;
                    continue;
                }
                if(res != 0) {
                    m[i][res] = (m[i][res-1] % MOD + m[i+1][res] % MOD) % MOD;
                } else {
                    m[i][res] = m[i+1][res] % MOD;
                }
            }
        }
    return m[ii][ress];
    }
}

Rainbow Array sample

f(r,n)=10f(r1,n)+f(r,n+1)f(r,n+1)if n=8 and r=0if n=8 and r0if r0if r=0

using System;
public class RainbowB
{
    public const int MOD = 1000000007;
    static int N, T;
    static int[]R = new int[] {1,2,3,4,5,6,7};
    static int[][] m= new int[10][];

    public static void Main()
    {
        for(int i = 0; i < 10; i++)
            m[i] = new int[1000010];
        N = Int32.Parse(Console.ReadLine());
        N = (N + 1) / 2;
        if(N - 7 < 0)
            Console.WriteLine(0);
        else
            Console.WriteLine(DP(0,N - 7));
    }

    public static int DP(int i, int res) {
        int ii = i, ress = res;
        for(i = 7; i >= 0; i--){
            for(res = 0;res <= ress; res++){
                if(i == 7){
                    if(res != 0)
                        m[i][res] = 0;
                    else
                        m[i][res] = 1;
                    continue;
                }
                if(res != 0) {
                    m[i][res] = (m[i][res-1] % MOD + m[i+1][res] % MOD) % MOD;
                } else {
                    m[i][res] = m[i+1][res] % MOD;
                }
            }
        }
    return m[ii][ress];
    }
}

Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In a mauris ut felis imperdiet molestie. In non nisi pharetra mi fringilla vestibulum. In ac diam mi. Suspendisse tincidunt dolor mauris, vel tempor mauris dapibus in. Proin luctus ullamcorper lacus eget eleifend. Mauris gravida mollis lorem iaculis ultricies. Nulla at volutpat tellus. Vestibulum et elementum neque, ac tempor tortor. Cras sit amet cursus odio, vel convallis orci. Quisque fermentum luctus erat sit amet cursus. Vestibulum sodales mauris nulla. Maecenas tincidunt, ante ut tincidunt tempor, augue purus sagittis leo, tempus gravida massa leo et nisl.
Nullam egestas gravida scelerisque. Nam sed pellentesque dolor. Integer viverra nisl vitae pellentesque luctus. Ut varius condimentum risus, vel aliquam arcu consequat et. Suspendisse quis est dictum, dictum turpis nec, facilisis ante. Suspendisse aliquam, neque pellentesque auctor congue, est mi sodales augue, a venenatis nisl neque eu justo. Nulla fermentum quis libero interdum dapibus. Proin arcu nibh, elementum vel massa id, mattis aliquam ipsum. Suspendisse potenti. Phasellus eget nisi porttitor, tincidunt nulla at, facilisis dui. Phasellus aliquam dui in laoreet hendrerit. Praesent feugiat elit ut cursus accumsan.
Suspendisse potenti. Suspendisse rhoncus sodales neque. Phasellus a feugiat libero. Donec sollicitudin, nunc id cursus dapibus, tortor mauris bibendum ligula, sit amet fringilla erat tortor non turpis. Pellentesque vehicula convallis urna. Mauris vel velit ac eros tristique lobortis. Nunc vel tortor ornare, pellentesque dolor sed, molestie odio. Fusce posuere gravida metus, eget fringilla nibh vulputate sit amet. Etiam vestibulum consectetur tellus pellentesque faucibus. Fusce eget turpis ipsum. Curabitur quis laoreet tellus, quis porttitor tellus. Vivamus at luctus ligula, vel porttitor neque. Vivamus consequat, mauris nec venenatis feugiat, lectus diam pellentesque urna, eu faucibus risus diam vel nisi. Morbi est nunc, commodo sit amet velit eget, suscipit pretium leo. Morbi scelerisque, ipsum sed scelerisque congue, massa velit blandit lectus, eget dapibus libero nulla ac turpis.

Aprende ruso


De nuevo en época de vacaciones aproveché el tiempo y me puse a completar cursos en MVA, uno de ellos, llamado Designing Your XAML UI with Blend Jump Start me motivó a crear una aplicación un tanto diferente a las que ya había hecho, y es que esta es visualmente más atractiva.

La aplicación en cuestión se llama Aprende Ruso, y como su nombre lo indica, es una pequeña guía para los que apenas van iniciando en el aprendizaje de esa extraño idioma. La aplicación tiene cosas simples, como las letras, algunos números y frases comunes, la idea es que la iré extendiendo conforme aprenda más de el lenguaje.

Técnicamente la aplicación hace uso de algunos controles para Windows 8.1 y Windows Phone 8.1, además de que ambos proyectos comparten la misma lógica, bajo el concepto de las Universal Apps de Windows, es por ello que al momento de que descargas la app en una de esas dos plataformas tienes automáticamente disponible la descarga para la otra. Por cierto, tengo todo el código fuente en un repositorio de GitHub, por si le quieres echar un ojo, mejorarla o contribuir con el desarrollo.

Usa los enlaces para descargar la app para tu dispositivo:


¡Saludos!
@fferegrino :)

Extendiendo Construct 2 con C++

Últimamente me he dedicado de lleno a aprender sobre videojuegos, desde el diseño y planeación hasta el desarrollo y publicación. A la par he estado trabajando en un juego para Windows/Windows Phone 8.1 llamado Falling Dodge desarrollado casi por completo en Construct 2.

Y digo casi por completo porque hay algunas cosas que no es sencillo realizar dentro de C2 o bien, no entendemos de primera mano cómo se hace. Por ello decidí aprovechar los runtime components delegando cargas de trabajo pesado o complicado a C++. Con ello podemos aprovechar toda la facilidad de manejo de canvas, colisiones, sprites y otras tantas que nos otorga Construct 2 mientras que dejamos la carga pesada de operaciones matemáticas, algoritmos complejos, etc. al runtime component.

Como ya les había contado antes, podemos llamar a rutinas escritas en C++ mediante JavaScript y para llamarlas desde Construct 2 a nuestro juego debemos crear un plugin que haga uso de él. En el gráfico más abajo trato de explicar un poco mejor cómo es que se realiza. Podrá parecer bastante, pero lo que está rodeado con un borde amarillo es lo único que nos toca hacer a nosotros (bueno, eso y referenciar los proyectos manualmente).


A modo de ejemplo, me he creado un "juego" que nos pide colocar una cierta cantidad de árboles y luego los une formando el árbol de mínima expansión empleando el Algoritmo de Kruskal. He dejado todo el código necesario en GitHub dentro del repositorio kruskal-cpp2 o bien, descargar todo el proyecto en zip además de que ya saben que cualquier duda o comentario pueden dejarlo acá o escribirme y con gusto responderé.

¡Saludos!
@fferegrino :)

win-plus-c2, un plugin para Construct 2 y las Universal Apps


Hacía mucho que no le metía la mano a Construct 2 y ahora que lo volví a hacer, gracias a la unidad de aprendizaje Ingeniería de Software, me di cuenta que si bien es una herramienta extremadamente útil para realizar juegos y prototipos rápidos utilizando HTML5 tiene ciertas limitantes a la hora de querer realizar una aplicación preparada para cualquier tienda de apps.

La gran ventaja que nos presentan sus creadores es la posibilidad de extender nuestro juego a través del Construct 2 Javascript SDK y el empleo de plugins. Y es precisamente eso lo que tuvimos que ya que nuestra aplicación debía cumplir ciertos requisitos de diseño para contar como un proyecto de buena calificación.

El plugin se enfoca por completo en extender Construct 2 para el desarrollo de aplicaciones para Windows Store y más recientemente de la Windows Phone Store (aunque ahora estará centrado en las aplicaciones universales). El plugin nos ayuda a presentar mensajes en la pantalla, identificar cuando la aplicación pierde foco, cuando la pantalla es cambiada de tamaño, entre otras cosas.

El código está en GitHub win-plus-c2 junto con los archivos .c2addon listos para instalar y un poco de documentación. Desde luego, espero que quieran contribuir al desarrollo con código o sugerencias.

¡Saludos!
@fferegrino :)

Hora de formatear

Terminando el ciclo escolar fue hora de formatear mi computadora personal, era necesario después de casi un año sin hacerlo. La novedad fue que ahora no tuve que respaldar nada de información en un disco externo gracias a OneDive, Dropbox y GitHub. Casi todos mis archivos escolares de este semestre estaban alojados en OneDrive, mientras que algunos otros estaban en Dropbox, para el código de los proyectos usé GitHub (hay un proyecto que inclusive está ahora en una tienda de apps). 

Por primera vez el formateo fue más rápido  de lo ya era. En menos de 15 minutos ya estaba con la computadora como nueva. Este es el software que le instalé:

  • SO: Windows 8.1 Pro
  • De IDEs: Microsoft Visual Studio Ultimate 2013 Update 2, Construct 2, NetBeans 8.0 y ADT Bundle
  • Navegadores: Internet Explorer y Google Chrome
  • Editores: Notepad++
  • Otros: Office Professional 2013, VirtualBox, GitHub for Windows, Paint.NET, WinMerge, Dropbox
  • Además de los compiladores libres de C y C++ que vienen con Cygwin.

No es mucho pero será suficiente para divertirme estas vacaciones con algunos de los proyectos que espero contar por acá más adelante.


¡Saludos!
@fferegrino :)