<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3393549038927660044</id><updated>2024-10-02T00:32:27.076-06:00</updated><category term="Programación"/><category term="ESCOM"/><category term="UPIITA"/><category term="fferegrino"/><category term="Java"/><category term="Tareas"/><category term="C#"/><category term="Internet"/><category term="Diseño"/><category term="Música"/><category term="Twitter"/><category term="Vídeo"/><category term="web"/><category term="Algoritmos"/><category term="C"/><category term="Javascript"/><category term="Estructura de datos"/><category term="Microsoft"/><category term="Windows 8"/><category term="Ocio"/><category term="Tecnologías para la Web"/><category term="Windows Store"/><category term="C++"/><category term="HTML"/><category term="Programación Avanzada"/><category term="this(punto)blog"/><category term="Android"/><category term="CSS"/><category term="México"/><category term="Windows Phone Store"/><category term="XAML"/><category term="XML"/><category term="recomendacion"/><category term="Análisis de algoritmos"/><category term="App"/><category term="Bases de datos"/><category term="Google"/><category term="Imagen"/><category term="Programación competitiva"/><category term="Windows Phone 8"/><category term="Algoritmia"/><category term="Arreglos"/><category term="Competitive Programming"/><category term="Construct 2"/><category term="Csharp"/><category term="Desarrollo sustentable"/><category term="Facebook"/><category term="Flex"/><category term="GitHub"/><category term="Lex"/><category term="Programacion"/><category term="Redes sociales"/><category term="SQL"/><category term="Sockets"/><category term="links"/><category term=".NET"/><category term="AJAX"/><category term="AppFactory"/><category term="Blogger"/><category term="Bluetooth"/><category term="Chuirer"/><category term="Cliente-Servidor"/><category term="Club de algoritmia"/><category term="Code.org"/><category term="Colas"/><category term="Compartir"/><category term="Flash"/><category term="Fundamentos Económicos"/><category term="Ingeniería de software"/><category term="JSP"/><category term="MVA"/><category term="Mail"/><category term="MiWeb"/><category term="Microsoft Virtual Academy"/><category term="PHP"/><category term="Playstation"/><category term="Programación Orientada a Objetos"/><category term="Prácticas"/><category term="Redes de computadoras"/><category term="ServerSocket"/><category term="Socket"/><category term="Teoría Computacional"/><category term="Videojuegos"/><category term="Visual Studio"/><category term="Windows"/><category term="Windows 8.1"/><category term="Windows Phone 8.1"/><category term="compiladores"/><category term="csedweek"/><category term="descargas"/><category term="ediThor"/><category term="expresiones regulares"/><category term="tweemg"/><category term="3D"/><category term="API"/><category term="ASP"/><category term="Algoritmos genéticos"/><category term="Aplicaciones para comunicaciones de red"/><category term="Arrays"/><category term="Azure"/><category term="Binario"/><category term="Bison"/><category term="BombFlipper"/><category term="Cadenas"/><category term="CodeChef"/><category term="Compresión"/><category term="Computación"/><category term="Computer Science"/><category term="Consulta"/><category term="Cromosoma"/><category term="Cruza"/><category term="Decimal"/><category term="Difusión"/><category term="Editor de texto"/><category term="El Agente"/><category term="Empleo"/><category term="Espacio"/><category term="Estimación de software"/><category term="Fibonacci"/><category term="Fotografía"/><category term="Free software"/><category term="Genetic Algorithms"/><category term="Google Play"/><category term="HTML 5"/><category term="HTML5"/><category term="HTTP"/><category term="Hexadecimal"/><category term="Hilos"/><category term="Hotmail"/><category term="Huffman"/><category term="Ingeniería Web"/><category term="JDOM"/><category term="JSON"/><category term="Juegos"/><category term="Learning to code"/><category term="Letras"/><category term="Linux"/><category term="Listas"/><category term="Microsoft Virtual Academi"/><category term="Métricas de software"/><category term="Móviles"/><category term="Northwind"/><category term="Octal"/><category term="Office"/><category term="OneNote"/><category term="Outlook"/><category term="Personalízalo"/><category term="Phyton"/><category term="Plantillas Texto"/><category term="Podcasts"/><category term="Procesamiento de imágnes"/><category term="Programación dinámica"/><category term="Publicidad"/><category term="Query"/><category term="RGB"/><category term="Redes"/><category term="Runtime Components"/><category term="Ruso"/><category term="SVG"/><category term="Servidor Web"/><category term="Stored procedures"/><category term="Struts"/><category term="T4 Text Templates"/><category term="TSP"/><category term="Tacómetro"/><category term="Universo"/><category term="Visual Basic"/><category term="Windows Universal App"/><category term="csunplugged"/><category term="entrada estándar"/><category term="futbol"/><category term="lov3"/><category term="padres"/><category term="stdin"/><category term="tweets"/><category term="Árboles"/><title type='text'>El blog de Feregrino</title><subtitle type='html'>a * (((a - b) &amp;gt;&amp;gt; 31) &amp;amp; 1) + b * (!(((a - b) &amp;gt;&amp;gt; 31) &amp;amp; 1))</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default?start-index=26&amp;max-results=25'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>136</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-817922447616988506</id><published>2014-09-24T11:17:00.000-05:00</published><updated>2014-09-24T11:17:06.399-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="Code.org"/><category scheme="http://www.blogger.com/atom/ns#" term="csedweek"/><category scheme="http://www.blogger.com/atom/ns#" term="Learning to code"/><category scheme="http://www.blogger.com/atom/ns#" term="Vídeo"/><title type='text'>Coding to learn</title><content type='html'>No soy mucho de ver vídeos, pero a lo largo de este tiempo he encontrado algunos (obviamente relacionados con la programación) que realmente disfruto ver una y otra vez. Los dejo a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Learning to Code, Coding to Learn.&lt;/b&gt;&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/8vXgjfBmzFs?rel=0&quot; width=&quot;540&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;b&gt;There is nothing a Code can&#39;t do.&lt;/b&gt;&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/TteWf_e4BTo?rel=0&quot; width=&quot;540&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;b&gt;Code Stars.&lt;/b&gt;&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/dU1xS07N-FA?rel=0&quot; width=&quot;540&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Los tengo que encontrar en español, o al menos con subtítulos. Lo prometo.
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/817922447616988506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/09/coding-to-learn.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/817922447616988506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/817922447616988506'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/09/coding-to-learn.html' title='Coding to learn'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-3908101948668270725</id><published>2014-07-28T19:31:00.000-05:00</published><updated>2014-07-28T19:33:38.955-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmia"/><category scheme="http://www.blogger.com/atom/ns#" term="Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="Competitive Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="MVA"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8.1"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8.1"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>Reference App (C#, XAML y ¿algoritmia?)</title><content type='html'>Hoy es día de presentarles otra app, en este caso es una que conjunta varias de las cosas que aprendí en &lt;a href=&quot;http://www.microsoftvirtualacademy.com/&quot;&gt;MVA&lt;/a&gt;&amp;nbsp;ya que se trata de una implementación &quot;completa&quot;, es decir la conexión con la base de datos, el servicio web y la aplicación cliente. La idea de la aplicación fue simular una guía de consulta que suelen emplear los competidores en concursos de programación y digo simular puesto que:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;es muy poco probable que en una competencia te permitan sacar tu teléfono o tablet.&lt;/li&gt;
&lt;li&gt;el contenido de la app es bastante genérico, probablemente sea mejor que tu tengas una guía que hayas hecho tu a tu medida&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
En fin, la descripciones de las aplicaciones son:&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;
Reference.Data&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
Ubicadoen el servidor (este proyecto es una librería de clases), el código facilita la conexión a la base de datos alojada en azure, conexión hecha con la ayuda del Entity Framework V 6.1.1&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;
Reference.WebRole&lt;/b&gt;&lt;br /&gt;
Este proyecto aloja el servicio web al cual se realizan las consultas, es decir, se conecta con Reference.Data.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;
Reference.Cloud&lt;/b&gt;&lt;br /&gt;
Es solo un proyecto que envuelve el WebRole y permite que sea publicado como un servicio de la nube de Azure.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;
Reference.Apps.Shared&lt;/b&gt;&lt;br /&gt;
Proyecto compartido que contiene todos los rescursos y clases que tienen en común las aplicaciones para Windows y Windows Phone, recursos como estilos, ViewModels y la conexión al servicio web.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;
Reference.Apps.Windows&lt;/b&gt;&lt;br /&gt;
El proyecto de la aplicación para Windows 8.1 que contiene código específico de para tablet/pc. Hace uso del paquete de Nuget MVVM Light (solo liberías).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;
Reference.Apps.WindowsPhone&lt;/b&gt;&lt;br /&gt;
El proyecto de la aplicación para Windows Phone 8.1 que contiene código específico de para el teléfono. Hace uso del paquete de Nuget MVVM Light (solo liberías).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Reference.Tools.CodeTransformer&lt;/b&gt;&lt;br /&gt;
Una herramient simple para transofrmar el código para que sea almacenado en la base de datos a algo que el servicio web y las aplicaciones puedan entender.&lt;br /&gt;
&lt;br /&gt;
Otra cosa a resaltar es que todo el código está disponible en &lt;a href=&quot;http://reference.codeplex.com/&quot;&gt;CodePlex&lt;/a&gt;&amp;nbsp;para su descarga, y las aplicaciones están también en la tienda. Por el momento la app carece de contendio, cosa que espero ir ampliando a la par de mi aprendizaje en el &lt;a href=&quot;http://blog.fferegrino.org/2014/03/el-club-de-algoritmia-de-la-escom-y-mi.html&quot; target=&quot;_blank&quot;&gt;Club de Algoritmia de ESCOM&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.windowsphone.com/s?appid=fabaf563-f615-4784-b73c-9fa2151e1535&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsHzTafnF2gBi4Lk1U6iInhyGgGydazMGjU0mutr4hmqusIg3t9QtGOdfs_k032w1V6lXhu47ITvhftMFALNb4mg6DYeczPh7_QDmFJuKBS306RJuk6W-Zbf8FCHW5WoM6S2PxJunWpkw/s1600/258x67_WPS_Download_Mexico_revcyan.png&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://apps.microsoft.com/windows/app/reference-app/47e76199-075c-48ec-b252-b249d8e8ffc1&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-VPeGw1FkEe_5BIr-CRMMNFqfyy75Trf8wqGfT4CEjEHJ8ZzcTKo5n9YMGGlLCvfz_HpcUPvVC5dvsqZ8evORFwO-SOn93Yad4Z42x6fYVWEC2wIi0qIo-vziPdSEY8DMnbG4mbP3hxU/s1600/WindowsStore_badge_Spanish_es_Green_med_258x67.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/3908101948668270725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/07/reference-app-c-xaml-y-algoritmia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/3908101948668270725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/3908101948668270725'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/07/reference-app-c-xaml-y-algoritmia.html' title='Reference App (C#, XAML y ¿algoritmia?)'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsHzTafnF2gBi4Lk1U6iInhyGgGydazMGjU0mutr4hmqusIg3t9QtGOdfs_k032w1V6lXhu47ITvhftMFALNb4mg6DYeczPh7_QDmFJuKBS306RJuk6W-Zbf8FCHW5WoM6S2PxJunWpkw/s72-c/258x67_WPS_Download_Mexico_revcyan.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-1201586289130743652</id><published>2014-07-15T15:23:00.000-05:00</published><updated>2014-07-15T15:23:53.893-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="GitHub"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Virtual Academy"/><category scheme="http://www.blogger.com/atom/ns#" term="Ruso"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8.1"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8.1"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone Store"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Store"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Universal App"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>Aprende ruso</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ3cB9xyrau_qycgRjZ2bsazz26ufwP4Nb-m0TBMZJlEpeBwEVaEOA0fGlHHD3KR9qwOLtQFYYid7AFUoqFdqj7QpC-pctraUZxopYX6PbffRwxITif8OIJ6RzmZ47JleyBqBH9YGZLvE/s1600/SplashScreen620.png&quot; /&gt;&lt;/div&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;De nuevo en época de vacaciones aproveché el tiempo y me puse a completar cursos en MVA, uno de ellos, llamado 
&lt;/span&gt;&lt;a href=&quot;http://www.microsoftvirtualacademy.com/training-courses/designing-your-xaml-ui-with-blend-jump-start&quot; style=&quot;text-align: justify;&quot; target=&quot;_blank&quot;&gt;Designing Your XAML UI with Blend Jump Start&lt;/a&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;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.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
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.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
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 &lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/a-ya&quot;&gt;GitHub&lt;/a&gt;, por si le quieres echar un ojo, mejorarla o contribuir con el desarrollo.&lt;br /&gt;
&lt;br /&gt;
Usa los enlaces para descargar la app para tu dispositivo:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://windowsphone.com/s?appId=8888490d-bc3f-4e9f-a60c-84f66535e1b7&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsHzTafnF2gBi4Lk1U6iInhyGgGydazMGjU0mutr4hmqusIg3t9QtGOdfs_k032w1V6lXhu47ITvhftMFALNb4mg6DYeczPh7_QDmFJuKBS306RJuk6W-Zbf8FCHW5WoM6S2PxJunWpkw/s1600/258x67_WPS_Download_Mexico_revcyan.png&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://apps.microsoft.com/windows/app/aprende-ruso/b01c6864-d649-4471-9afa-2d25549fd787&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-VPeGw1FkEe_5BIr-CRMMNFqfyy75Trf8wqGfT4CEjEHJ8ZzcTKo5n9YMGGlLCvfz_HpcUPvVC5dvsqZ8evORFwO-SOn93Yad4Z42x6fYVWEC2wIi0qIo-vziPdSEY8DMnbG4mbP3hxU/s1600/WindowsStore_badge_Spanish_es_Green_med_258x67.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/1201586289130743652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/07/aprende-ruso.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/1201586289130743652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/1201586289130743652'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/07/aprende-ruso.html' title='Aprende ruso'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ3cB9xyrau_qycgRjZ2bsazz26ufwP4Nb-m0TBMZJlEpeBwEVaEOA0fGlHHD3KR9qwOLtQFYYid7AFUoqFdqj7QpC-pctraUZxopYX6PbffRwxITif8OIJ6RzmZ47JleyBqBH9YGZLvE/s72-c/SplashScreen620.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-3209654482115812256</id><published>2014-06-21T19:14:00.000-05:00</published><updated>2014-06-23T09:52:57.181-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="Construct 2"/><category scheme="http://www.blogger.com/atom/ns#" term="Runtime Components"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone Store"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Store"/><title type='text'>Extendiendo Construct 2 con C++</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Ú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.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
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 &lt;i&gt;runtime components&lt;/i&gt; 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.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
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).&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhccLep9FA4UNAhITaDgg81eMORoaRu1ZE9lR-D2tazrVnbrJmnBYEhOKKS-LREuM5SJ8nN4zhoSgTsoOA1jHKe-EEsGpvFFP6UaX_ISKEsRW7NUDJM2d1LN_QTxL6ZfsfqJQKhqpMZ8kU/s1600/kruskal-cpp2.png&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
A modo de ejemplo, me he creado un &quot;juego&quot; 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 &lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/kruskal-cpp2&quot; target=&quot;_blank&quot;&gt;kruskal-cpp2&lt;/a&gt; o bien, &lt;a class=&quot;dwnld&quot; href=&quot;https://github.com/fferegrino/kruskal-cpp2/archive/master.zip&quot; target=&quot;_blank&quot;&gt;descargar todo el proyecto en zip&lt;/a&gt; además de que ya saben que cualquier duda o comentario pueden dejarlo acá o escribirme y con gusto responderé.&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/3209654482115812256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/06/extendiendo-construct-2-con-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/3209654482115812256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/3209654482115812256'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/06/extendiendo-construct-2-con-c.html' title='Extendiendo Construct 2 con C++'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhccLep9FA4UNAhITaDgg81eMORoaRu1ZE9lR-D2tazrVnbrJmnBYEhOKKS-LREuM5SJ8nN4zhoSgTsoOA1jHKe-EEsGpvFFP6UaX_ISKEsRW7NUDJM2d1LN_QTxL6ZfsfqJQKhqpMZ8kU/s72-c/kruskal-cpp2.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-7925241953333930997</id><published>2014-06-12T06:12:00.000-05:00</published><updated>2014-06-12T06:12:23.763-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="Construct 2"/><category scheme="http://www.blogger.com/atom/ns#" term="ESCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="Ingeniería de software"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Store"/><title type='text'>win-plus-c2, un plugin para Construct 2 y las Universal Apps</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVltsyH2YIId-xeCfGf8iI5R5kvk6LAjl8VBZ-hoqxTShXSjes8rYmidVhVyhL2xzm2WQLRmES8xk_virE6HZQv0VuXYOHQKETGioPSacKVlGWGvwC_-BgHkEoJO2Ii8rFxwnDrzhA9aU/s1600/PluginIcon.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVltsyH2YIId-xeCfGf8iI5R5kvk6LAjl8VBZ-hoqxTShXSjes8rYmidVhVyhL2xzm2WQLRmES8xk_virE6HZQv0VuXYOHQKETGioPSacKVlGWGvwC_-BgHkEoJO2Ii8rFxwnDrzhA9aU/s1600/PluginIcon.png&quot; height=&quot;320&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
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.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
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.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
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.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
El código está en GitHub &lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/win-plus-c2&quot;&gt;win-plus-c2&lt;/a&gt; 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.&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/7925241953333930997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/06/win-plus-c2-un-plugin-para-construct-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/7925241953333930997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/7925241953333930997'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/06/win-plus-c2-un-plugin-para-construct-2.html' title='win-plus-c2, un plugin para Construct 2 y las Universal Apps'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVltsyH2YIId-xeCfGf8iI5R5kvk6LAjl8VBZ-hoqxTShXSjes8rYmidVhVyhL2xzm2WQLRmES8xk_virE6HZQv0VuXYOHQKETGioPSacKVlGWGvwC_-BgHkEoJO2Ii8rFxwnDrzhA9aU/s72-c/PluginIcon.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-3866015584750986557</id><published>2014-06-08T12:20:00.001-05:00</published><updated>2014-06-08T12:20:21.664-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="fferegrino"/><category scheme="http://www.blogger.com/atom/ns#" term="this(punto)blog"/><title type='text'>Hora de formatear</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
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).&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por primera vez el formateo fue más rápido &amp;nbsp;de lo ya era. En menos de 15 minutos ya estaba con la computadora como nueva. Este es el software que le instalé:&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;SO: Windows 8.1 Pro&lt;/li&gt;
&lt;li&gt;De IDEs: Microsoft Visual Studio Ultimate 2013 Update 2, Construct 2, NetBeans 8.0 y ADT Bundle&lt;/li&gt;
&lt;li&gt;Navegadores: Internet Explorer y Google Chrome&lt;/li&gt;
&lt;li&gt;Editores: Notepad++&lt;/li&gt;
&lt;li&gt;Otros: Office Professional 2013, VirtualBox, GitHub for Windows, Paint.NET, WinMerge, Dropbox&lt;/li&gt;
&lt;li&gt;Además de los compiladores libres de C y C++ que vienen con Cygwin.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No es mucho pero será suficiente para divertirme estas vacaciones con algunos de los proyectos que espero contar por acá más adelante.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/3866015584750986557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/06/hora-de-formatear.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/3866015584750986557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/3866015584750986557'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/06/hora-de-formatear.html' title='Hora de formatear'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-852870670375427364</id><published>2014-05-03T16:10:00.001-05:00</published><updated>2014-05-03T16:10:44.709-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmia"/><category scheme="http://www.blogger.com/atom/ns#" term="Blogger"/><category scheme="http://www.blogger.com/atom/ns#" term="Club de algoritmia"/><category scheme="http://www.blogger.com/atom/ns#" term="Competitive Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación competitiva"/><title type='text'>Puro AC, un nuevo blog</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
A pesar de mi poca experiencia en la solución de problemas de programación competitiva he decidido crear un blog para explicar algunos de los que vaya resolviendo de entre todas las plataformas que hay en línea tratando de explicar lo escencial del problema, detallar la solución, la complejidad de esta y el códdigo (o en su caso, pseudocódigo), siguendo la manera en que se escriben las editoriales de cada problema en Code Chef, como la entrada anterior a esta, mi editorial del problema Chef and Digits.&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A esta iniciativa se sumará mi amigo y compañero de equipo &lt;a href=&quot;http://ferprogramming.blogspot.mx/&quot;&gt;Adrián Fernandez&lt;/a&gt;&amp;nbsp;(@ferProgramming en Twitter), quien además propuso que en el blog también se explicaran además algunos algoritmos, estructuras y técnicas de programación que ambos estamos aprendiendo en el Club de Algoritmia, del que &lt;a href=&quot;http://blog.fferegrino.org/2014/03/el-club-de-algoritmia-de-la-escom-y-mi.html&quot;&gt;ya les había hablado antes&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
En el blog he invertido algo de tiempo, dejándolo a punto con algunos extras y mejoras, como &lt;i&gt;MathJax&lt;/i&gt; para que se vean mucho mejor las expresiones matemáticas, &lt;i&gt;google-code-prettify&lt;/i&gt; para mejorar la apariencia del código escrito y el traductor de Google Translate, para traducir cualquier entrada a cualquier idioma disponible. Sin dejar de mencionar los plugins sociales para hacer que compartir una entrada en particular sea sencillo y a la vez descriptivo para quien lo lea.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Otro punto importante es que modifiqué la plantilla para que fuera adaptable a dispositivos móviles con un diseño responsivo. Además es posible imprimir la explicación ya que con el uso de @media queries pude crear una versión del blog que fuera amigable para imprimir (tamaño adecuado, colores en blanco y negro, etc...)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Sin más les dejo el enlace al blog, que hasta el momento cuenta con 3 entradas explicando soluciones a problemas, a la espera de que mi compañero publique algo más.&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://puroac.blogspot.mx/&quot;&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-large;&quot;&gt;&lt;b&gt;PuroAC&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;PD: Si te gustaría anexarte a la iniciativa, deja un mensaje en esta entrada o escríbeme por donde quieras. Entre más seamos, mejor.&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/852870670375427364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/05/puro-ac-un-nuevo-blog.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/852870670375427364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/852870670375427364'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/05/puro-ac-un-nuevo-blog.html' title='Puro AC, un nuevo blog'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-5287584815515604240</id><published>2014-04-14T11:57:00.002-05:00</published><updated>2014-04-16T21:00:56.822-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Arrays"/><category scheme="http://www.blogger.com/atom/ns#" term="Arreglos"/><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="CodeChef"/><category scheme="http://www.blogger.com/atom/ns#" term="Competitive Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación competitiva"/><title type='text'>Chef and Digits (ADIGIT) - Editorial</title><content type='html'>&lt;b&gt;Link al problema&lt;/b&gt;:&amp;nbsp;&lt;a href=&quot;http://www.codechef.com/problems/ADIGIT&quot; target=&quot;_blank&quot;&gt;ADIGIT (Practice)&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Link al editorial en CodeChef&lt;/b&gt;:&amp;nbsp;&lt;a href=&quot;http://discuss.codechef.com/questions/41182/adigit-editorial&quot; target=&quot;_blank&quot;&gt;ADIGIT - Editorial&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Dificultad&lt;/b&gt;:&lt;b&gt; &lt;/b&gt;Fácil&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Problema&lt;/b&gt;:&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Dados $N$ ($N ≤ 10^5$) dígitos y $M$ ($M ≤ 10^5$) consultas que consisten en un entero $x$ ($1 ≤ x ≤ N$), que llamaremos &lt;i&gt;step &lt;/i&gt;(paso), imprimir el resultado de $B1 - B2$, donde:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;$B1$ := Sumatoria de todos los $b = a_x - a_y$ tal que $x &amp;gt; y$ y&amp;nbsp;$b &amp;gt; 0$&lt;/li&gt;
&lt;li&gt;$B2$ := Sumatoria de todos los $b = a_x - a_y$ tal que $x &amp;gt; y$ y&amp;nbsp;$b &amp;lt; 0$&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Solución&lt;/b&gt;:&lt;br /&gt;
Veamos el siguiente caso, con entrada a =&amp;nbsp;0123152397&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-ZDWG_3OZ8_M/U0v34J7QX_I/AAAAAAAACzo/faspQNhECqs/s1600/1.png&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Calculando los valores para todos los pasos tenemos lo siguiente:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-QWkFrPkGfMY/U0v5QdpnqvI/AAAAAAAACzw/ztt6alWslqc/s1600/2.png&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
En la tabla anterior he marcado dos casillas, para observar a detalle lo que sucede:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Para el paso 4 tenemos: $B1 = (3 -0) + (3 - 1) + (3 - 2) = 6$ y $B2 = 0$ lo cual nos da el valor de $6$&lt;/li&gt;
&lt;li&gt;Para el paso 8 tenemos: $B1 = (3 - 0) + (3 - 1)+ &amp;nbsp;(3 - 2) + (3 - 1) + (3 - 2) = 9$ y $B2 = (3 - 5) = - 2$, por lo tanto tenemos $B1 - B2 = 11$&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observando las ecuaciones anteriores, podemos notar que el paso 11 se compone del paso 3 en las sumas $(3 - 0) + (3 - 1)+ (3 - 2)$ más otras 3 sumas, así que ¿qué pasaría si los almacenamos para no volver a calcularlo todo? Basándonos en eso, almacenamos los resultados en otro arrelgo.&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ahora, ¿cómo es que sabemos que tenemos un valor ya calculado?, esto es sencillo de encontrar y ocurre cuando los números $a_x$ y $a_y$ son iguales. Si los calculamos de manera secuencial, es decir de 1 hasta N, estaremos garantizando que para cada paso los pasos previos ya estarían precalculados, como solo hay 10 dígitos distintos, en el peor de los casos terminaremos sumando 10 veces. Al terminar el precálculo, para cada consulta que nos hagan la respuesta será obtenida en tiempo constante&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Complejidad: &lt;/b&gt;$O(10 * N) + O(M)$&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Código (C++)&lt;/b&gt;:&lt;br /&gt;
Definiremos un arreglo &lt;span class=&quot;code&quot;&gt;A&lt;/span&gt;, donde &lt;span class=&quot;code&quot;&gt;A[i]&lt;/span&gt; es es valor de paso i-ésimo del problema y &lt;span class=&quot;code&quot;&gt;s&lt;/span&gt;, un arreglo de &lt;span class=&quot;code&quot;&gt;char&lt;/span&gt;, donde &lt;span class=&quot;code&quot;&gt;s[j]&lt;/span&gt; es la posición del dígito j-esimo.
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp; tab-size: 8&quot;&gt;void precalc(){
 int t = 0;
 for(int step = 0; step &amp;lt; n; step++){
  int ans = 0;
  for(int i = step-1; i &amp;gt;= 0; i--){
   t = (s[step] - &#39;0&#39;) - (s[i] - &#39;0&#39;);
   if(t == 0){
    ans += A[i];
    A[step] = ans;
    break;
   }
   ans += abs(t);
   A[step] = ans;
  }
 }
}&lt;/pre&gt;
Haciendo que para responder a las consultas &lt;span class=&quot;code&quot;&gt;q&lt;/span&gt;, solo será necesario imprimir el valor almacenado en &lt;span class=&quot;code&quot;&gt;A[q-1]&lt;/span&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp; tab-size: 8&quot;&gt;int main(){
 scanf(&quot;%d%d&quot;,&amp;amp;n,&amp;amp;m);
 scanf(&quot;%s&quot;,s);
 precalc();
 while(m--){
  scanf(&quot;%d&quot;,&amp;amp;q);
  printf(&quot;%d\n&quot;,A[q-1]);
 }
 return 0;
}&lt;/pre&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/5287584815515604240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/04/chef-and-digits-adigit-editorial.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/5287584815515604240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/5287584815515604240'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/04/chef-and-digits-adigit-editorial.html' title='Chef and Digits (ADIGIT) - Editorial'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-ZDWG_3OZ8_M/U0v34J7QX_I/AAAAAAAACzo/faspQNhECqs/s72-c/1.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-3059910706408309238</id><published>2014-04-11T16:39:00.000-05:00</published><updated>2014-04-13T15:45:12.215-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="entrada estándar"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación competitiva"/><category scheme="http://www.blogger.com/atom/ns#" term="stdin"/><title type='text'>Leyendo de la entrada estándar con scanf y fgets</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Hace tiempo,&amp;nbsp;&lt;a href=&quot;http://blog.fferegrino.org/2014/03/el-club-de-algoritmia-de-la-escom-y-mi.html&quot;&gt;les contaba que me inicié en la programación competitiva&lt;/a&gt;, en la cual, la mayoría de problemas nos piden leer información de la entrada estándar o&amp;nbsp;&lt;i&gt;stdin&lt;/i&gt;&amp;nbsp;seguramente me lo van a creer... yo no sabía cómo hacerlo de una manera &quot;correcta&quot; &lt;b&gt;(._. )&lt;/b&gt;, en especial cuando de cadenas se trataba. En este post trataré de explicar cómo es que lo hago (y he aprendido que lo hacen) en C o C++.&lt;/div&gt;
&lt;h4&gt;
La función &lt;span class=&quot;code&quot;&gt;scanf&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta función mágica llega a nosotros gracias a la librería &amp;lt;stdio.h&amp;gt; en C o &amp;lt;cstdio&amp;gt; en C++, resulta la manera básica de recuperar valores. Nos sirve para todo tipo de entradas y si no tienes algo muy complicado de leer, esta es tu mejor opción, recuerda que esta función trata de leer el tipo de dato que le especifiques hasta que encuentra un salto de línea o un espacio en blanco. El uso de esta función depende de los &lt;a href=&quot;http://www.cplusplus.com/reference/cstdio/printf/&quot;&gt;especificadores de formato&lt;/a&gt;&amp;nbsp;para recuperar los valores que deseas.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Por ejemplo, supongamos que tenemos la siguiente entrada&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush: c&quot;&gt;10 3161565164181
aab baa aba
&lt;/pre&gt;
y este código para leerlo&lt;br /&gt;
&lt;pre class=&quot;brush: c&quot;&gt;int a;
long long int b;
char cadena[15];
scanf(&quot;%d %lld&quot;, &amp;amp;a, &amp;amp;b);&amp;nbsp;
scanf(&quot;%s&quot;, cadena); // &#39;cadena&#39; es ya una referencia a memoria
&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Una vez que se ejecute, en a tendremos 10, en b tendremos 3161565164181 y cadena será &quot;aab&quot; (¡porque solo lee hasta el espacio en blanco!).
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;
La función &lt;span class=&quot;code&quot;&gt;fgets&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Pero, qué pasa si la entrada es un poco más complicada, como la del problema&amp;nbsp;&lt;a href=&quot;http://uva.onlinejudge.org/index.php?option=com_onlinejudge&amp;amp;Itemid=8&amp;amp;page=show_problem&amp;amp;problem=410&quot;&gt;Wetlands of Florida&lt;/a&gt;&amp;nbsp;en la que vienen secuencias de caracteres seguidas inmediatamente por un par de números enteros:&lt;/div&gt;
&lt;pre class=&quot;brush: c&quot;&gt;// ...
LLLLLLLLL
3 2
// ...
&lt;/pre&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para ello se ocupa la función &lt;span class=&quot;code&quot;&gt;fgets&lt;/span&gt; (que es parecida a &lt;span class=&quot;code&quot;&gt;gets&lt;/span&gt;, solo que más segura), en combinación con &lt;span class=&quot;code&quot;&gt;sscanf&lt;/span&gt; que funciona de manera similar a &lt;span class=&quot;code&quot;&gt;scanf&lt;/span&gt; solo que esta &quot;lee&quot; de una secuencia de caracteres y no de &lt;i&gt;stdin&lt;/i&gt;. En cuanto a &lt;span class=&quot;code&quot;&gt;fgets&lt;/span&gt;, sus parámetros son: la dirección de memoria, la cantidad de caracteres que esperamos leer como máximo, y el flujo del que los vamos a extraer, de tal manera que tenemos algo así:
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush: c&quot;&gt;int i, j;
char entrada[10];
fgets(entrada,10,stdin);
// Procesamos &#39;entrada&#39;, que contiene la siguiente secuencia de caracteres: 
// &#39;L&#39;,&#39;W&#39;,&#39;W&#39;,&#39;W&#39;, &#39;L&#39;, &#39;L&#39;, &#39;L&#39;, &#39;L&#39;, &#39;W&#39; y &#39;\n&#39; &amp;lt;= ¡Sí! el salto de línea
// Recuperamos los enteros:
fgets(entrada,10,stdin);
sscanf(entrada,&quot;%d %d&quot;,&amp;amp;i,&amp;amp;j);
&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ya para finalizar es necesario remarcar esto: &lt;b&gt;fgets recupera hasta que encuentra el salto de línea&lt;/b&gt;. Repito: &lt;b&gt;fgets recupera hasta que encuentra el salto de línea&lt;/b&gt; por lo que es necesario eliminarlo &quot;a manita&quot; con &#39;\0&#39; si es que no es lo que deseamos de él.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Espero que les sirva como a mi me ha servido, ya que hay que recordar que una parte importante de resolver los problemas es saber interpretar de manera adecuada la entrada que nos dan, así como saber introducirla dentro de nuestra probable solución a este.
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/3059910706408309238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/04/leyendo-de-la-entrada-estandar-con.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/3059910706408309238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/3059910706408309238'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/04/leyendo-de-la-entrada-estandar-con.html' title='Leyendo de la entrada estándar con scanf y fgets'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-4394396254959341108</id><published>2014-03-16T13:51:00.000-06:00</published><updated>2014-03-16T13:51:48.261-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ESCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="Estimación de software"/><category scheme="http://www.blogger.com/atom/ns#" term="Ingeniería de software"/><category scheme="http://www.blogger.com/atom/ns#" term="Métricas de software"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone Store"/><title type='text'>Métricas y estimación de software [y otra app]</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
En el ámbito del desarrollo de software (y en especial cuando se habla de proyectos grandes), es necesario conocer el tamaño de un proyecto de desarrollo, por diversos motivos, entre los que podemos encontrar algunos como los siguientes:&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Debemos conocer el costo del proyecto para presentar una propuesta al cliente&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Deseamos saber cuántos programadores necesitamos para completar el proyecto&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Buscamos una fecha de finalización aproximada para fijar los plazos de entrega&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esto podría sonar fácil si es que llevamos ya bastante experiencia en el desarrollo de software, ya que podríamos estimar al aire los datos anteriores. Sin embargo, en el campo de la ingeniería de software existen unas herramientas llamádas &lt;b&gt;métricas&lt;/b&gt;, que nos ayudan a resolver muchas dudas como las propuestas anteriormente.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nuestra amiga Wikipedia nos dice que: Una métrica es la medida de alguna propiedad de alguna parte de software o de sus especificaciones. Dado que mediciones cuantitativas son escenciales en todas las ciencias (ehem, iIngeniería de software). La meta de las métricas es producir información objetiva, reproducible y cuantificable que tiene aplicaciones valiosas en la calendarización, realización de presupuestos, aseguramiento de la calidad, manejo de personal...&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
En mi opinión sirven para dar un estimado rápido y aproximado, puesto que muchas de ellas parecen ser muy idealistas o nos piden datos que en realidad son cualitativos y realizar una conversión a cantidades medibles resulta muy subjetivo y complicado. Pero de que tienen utilidad, la tienen y muy amplia y aceptada.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;tl:dr: &lt;/b&gt;Para la unidad de aprendizaje Ingeniería de Software que curso en la ESCOM, la maestra nos solicitó como un proyecto extra la realización de una aplicación que calculara métricas y estimación de un proyecto Software. Y pues ya ven como es uno, la cosa era sencilla y pues un rato de ocio no se le niega a nadie. La app es bastante sencilla y puede ser mejorada (y tiene que ser mejorada) porque ahora solo calcula la métrica de Punto Función. Les dejo el link por si la quieren checar, bajarla y hacerle lo que quieran.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.windowsphone.com/es-mx/store/app/m%C3%A9tricasis/ce4922d9-d8a9-4155-bcfb-78317beb8550&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjndsaDQ9MOn6Dg0ZcqEgCEjyhm1iU2NUIfJ8ToIYE8Zq5vSYZv_sYLRRNhecXH52R850YDhJFu9JefSSb1R9YACBKrRVN8lOS2aB4B0ZGbryQAxKSFm9Zxl98utMN5rJSMw0WUBA1h3Oo/s1600/downloadFromWPStore.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
¡Saludos!&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
@fferegrino :)&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/4394396254959341108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/03/metricas-y-estimacion-de-software-y.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4394396254959341108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4394396254959341108'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/03/metricas-y-estimacion-de-software-y.html' title='Métricas y estimación de software [y otra app]'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjndsaDQ9MOn6Dg0ZcqEgCEjyhm1iU2NUIfJ8ToIYE8Zq5vSYZv_sYLRRNhecXH52R850YDhJFu9JefSSb1R9YACBKrRVN8lOS2aB4B0ZGbryQAxKSFm9Zxl98utMN5rJSMw0WUBA1h3Oo/s72-c/downloadFromWPStore.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-7955250879834350245</id><published>2014-03-07T13:30:00.000-06:00</published><updated>2014-03-07T20:16:39.504-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmia"/><category scheme="http://www.blogger.com/atom/ns#" term="Club de algoritmia"/><category scheme="http://www.blogger.com/atom/ns#" term="ESCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación competitiva"/><title type='text'>El Club de Algoritmia de la ESCOM y mi arrepentimiento</title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;
[&lt;i&gt;Se supone que la primera regla del club es no hablar de él, pero &lt;b&gt;meh&lt;/b&gt;&lt;/i&gt;]&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO1qkECIjqz8kHRWb28CbUwZ-aKZXZGgJ6tio92joQ4FSbANOu_C5izbE4yvdjNolSLPhY8hQKox8EekJ4GGhgs3cXGBcXV84cejo7oW6_MPfFxtQrmqU_PzDXA9LsHZd4eDhLu8I4F78/s1600/1545913_682720111779135_1992569383_n.jpg&quot; height=&quot;320&quot; width=&quot;320&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A partir de este semestre por fin entré al &lt;a href=&quot;https://www.facebook.com/algoritmiaescom&quot;&gt;Club de Algoritmia de la ESCOM&lt;/a&gt;, al cual desde mi llegada a la ESCOM tuve ganas de entrar pero por motivos laborales no podía asistir regularmente... tiempo después, cuando ya no tenía tanta carga en el trabajo, ese impedimento más bien se convirtió en un pretexto para mi desidia, sentía que quienes estaban ahí sabían más que yo y que podría no encajar con ellos, que nunca entendería nada de lo que estaban viendo, o que eso de la algoritmia nada más no era para mi.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Que equivocado estaba.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Hay pocas cosas de las que me arrepiento, y créanlo o no, el no haber entrado desde antes a participar en él es una de ellas, todo por mi desidia. Hasta ahora que llevo ya un poco más de un mes asistiendo a las sesiones me doy cuenta de lo equivocado que estaba, he aprendido bastante, los compañeros son de lo mejor y cada vez me motivo más. De vez en vez me haré un tiempo para escribir sobre lo que he visto y me ha fascinado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Definitivamente enfrentarte a estos tipos de problemas, te abre la mente, te enseña a pensar de maneras distintas para resolver no solo retos de programación, si no de otras áreas. No solo es complicarse la vida o resolver problemas solo por hacerlo como muchos erróneamente dicen.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Seguramente hay personas que piensan lo que yo pensaba pero hay que atreverse, no es tan difícil hacerlo. No te esperes &quot;tanto&quot; (porque nunca es tarde, pero si es posible hay que hacerlo cuanto antes). Si tu, al igual que yo y muchas personas más, tienes interés en la programación competitiva no dudes en acercarte ya sea a este o a uno más cercano a ti. Acá están los &lt;a href=&quot;http://campus.acm.org/public/chapters/geo_listing/index.cfm?country=Mexico&amp;amp;region=worldwide&amp;amp;type=stu&amp;amp;countries&quot;&gt;capítulos estudiantiles de la ACM&lt;/a&gt;&amp;nbsp;en México para que sepas a quién acercarte para ver qué es lo que ofrecen.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/7955250879834350245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/03/el-club-de-algoritmia-de-la-escom-y-mi.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/7955250879834350245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/7955250879834350245'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/03/el-club-de-algoritmia-de-la-escom-y-mi.html' title='El Club de Algoritmia de la ESCOM y mi arrepentimiento'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO1qkECIjqz8kHRWb28CbUwZ-aKZXZGgJ6tio92joQ4FSbANOu_C5izbE4yvdjNolSLPhY8hQKox8EekJ4GGhgs3cXGBcXV84cejo7oW6_MPfFxtQrmqU_PzDXA9LsHZd4eDhLu8I4F78/s72-c/1545913_682720111779135_1992569383_n.jpg" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-4098638374444940802</id><published>2014-02-16T12:28:00.000-06:00</published><updated>2014-02-16T12:44:42.676-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Aplicaciones para comunicaciones de red"/><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="ESCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Redes"/><category scheme="http://www.blogger.com/atom/ns#" term="Redes de computadoras"/><category scheme="http://www.blogger.com/atom/ns#" term="ServerSocket"/><category scheme="http://www.blogger.com/atom/ns#" term="Socket"/><category scheme="http://www.blogger.com/atom/ns#" term="Sockets"/><title type='text'>Prácticas de Aplicaciones para comunicaciones de red</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Pues ya estoy de vuelta en la escuela, y esta vez de nuevo hay una asignatura que me da la oportuindad de escribir código, me refiero a la&amp;nbsp;Aplicaciones para comunicaciones de red (o Redes II, pa&#39; los cuates). Al profe le gusta que hagamos prácticas y pues se me ocurrió otra vez abrir un repositorio de GitHub para publicarlas ahí, además de colaborar con mi compañera de equipo @FannyEvia.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Hasta ahora llevamos un servidor de FTP y un carrito de compras... &amp;nbsp;sobra decir que son muuuuy sencillas, pero funcionan para conocer el concepto, de ahí se pueden hacer tan complejos como uno desee. Las prácticas son solicitadas en Java o C, así que será lo principal que se pueden encontrar en el repositorio, sin embargo C# también se merece una mención, así que en la medida de lo posible también procuraré hacerlas en ese lenguaje.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ya saben, pueden mirar el código y preguntar :)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Repo: &lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/aplicaciones-redes&quot;&gt;aplicaciones-redes&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/4098638374444940802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/02/practicas-de-aplicaciones-para.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4098638374444940802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4098638374444940802'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/02/practicas-de-aplicaciones-para.html' title='Prácticas de Aplicaciones para comunicaciones de red'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-1932313927959568229</id><published>2014-01-19T12:01:00.000-06:00</published><updated>2014-03-08T10:19:11.391-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Virtual Academy"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Basic"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8"/><title type='text'>Los Windows Runtime Components</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Hace tiempo descubrí (en MVA) los Runtime Components, estos funcionan como librerías que nos permiten compartir código de distintos lenguajes dentro de una misma plataforma. Es decir, podemos usar código escrito en Visual Basic dentro de una aplicación hecha con C#, o un caso más extremo, y el que más me &quot;impresionó&quot;: usar C++ en una aplicación hecha con Javascript. Y digo dentro de una misma plataforma ya que al contrario de las PCL, en este caso solo pueden funcionar para un solo sistema.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Lo que se genera junto con este tipo de proyectos son los metadatos para hacer nuestro código accesibles desde cualquier otro proyecto que haga referencia a él, de tal manera que si creamos un componente en C# desde C++ lo podamos llamar sin escribir ni una sola línea más de código y con la sintaxis del lenguaje desde el que estemos llamándolo.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
En este caso me referiré a Windows 8, sin embargo me parece que también existen para Windows Phone 8. El ejemplo es bastante sencillo se trata de un método para realizar una suma, sin embargo es bastante extendible y muy funcional cuando se sabe como usarlos. Desde luego, tiene sus resticciones, pero siempre hay alguna forma de darles la vuelta o encontrar una mejor manera de hacerlo (¡por algo son restricciones!)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
De tal manera que podríamos tener el siguiente código en C++:&lt;br /&gt;
&lt;br /&gt;
Suma.h
&lt;br /&gt;
&lt;pre class=&quot;brush: c&quot;&gt;#pragma once

namespace BlogPost_Component
{
    public ref class Suma sealed
    {
    public:
  // Propiedades
  int a;
  int b;
  // Métodos
  int Resultado();
  // Constructores
  Suma(int x, int y);

    };
}
&lt;/pre&gt;
&lt;br /&gt;
Suma.cpp
&lt;br /&gt;
&lt;pre class=&quot;brush: c&quot;&gt;// Suma.cpp
#include &quot;pch.h&quot;
#include &quot;Suma.h&quot;

using namespace BlogPost_Component;
using namespace Platform;

Suma::Suma(int x, int y)
{
 this-&amp;gt;a = x;
 this-&amp;gt;b = y;
}

int Suma::Resultado(){
 return a + b;
}
&lt;/pre&gt;
&lt;br /&gt;
De tal modo que podemos usar la clase desde C# de esta manera:&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;private void Button_Click(object sender, RoutedEventArgs e)
{
 int n1 = int.Parse(numero1.Text);
 int n2 = int.Parse(numero2.Text);

 var suma = new BlogPost_Component.Suma(n1,n2);

 resultado.Text = suma.Resultado().ToString();
}&lt;/pre&gt;
&lt;br /&gt;
En JavaScript así:
&lt;br /&gt;
&lt;pre class=&quot;brush: js&quot;&gt;function accionBoton(sender) {
 var n1 = parseInt(document.getElementById(&#39;numero1&#39;).value);
 var n2 = parseInt(document.getElementById(&#39;numero2&#39;).value);

 var suma = new BlogPost_Component.Suma(n1, n2);

 document.getElementById(&#39;resultado&#39;).textContent = suma.resultado();
};&lt;/pre&gt;
Y en Visual Basic así:&lt;br /&gt;
&lt;pre class=&quot;brush: vb&quot;&gt;Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
 Dim n1 As Integer = Integer.Parse(numero1.Text)
 Dim n2 As Integer = Integer.Parse(numero2.Text)

 Dim suma As New BlogPost_Component.Suma(n1, n2)

 resultado.Text = suma.Resultado().ToString()
End Sub&lt;/pre&gt;
&lt;br /&gt;
El código del ejemplo anterior puede ser descargado &lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/codigos/BlogPost.rar?attredirects=0&amp;amp;d=1&quot;&gt;aquí&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Como hobbie me puse a convertir el proyecto de la Codificación de Huffman a una aplicación para Windows 8 (escrita en JavaScript con el código de la codificación en C++), hasta el momento me he encontrado con algunas dificultades relacionadas con el acceso a archivos desde aplicaciones Metro, como sea, el proyecto está en &lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/analizando-algo/tree/master/Extras/HuffmanRC&quot;&gt;GitHub&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
PD: Lamento mencionarlo hasta ahora, pero solo es posible crear los componentes en C#, C++ y Visual Basic, lo sentimos, JavaScript.&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/1932313927959568229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2014/01/los-windows-runtime-components.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/1932313927959568229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/1932313927959568229'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2014/01/los-windows-runtime-components.html' title='Los Windows Runtime Components'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-4400234639356546312</id><published>2013-12-24T11:51:00.001-06:00</published><updated>2013-12-24T18:31:40.104-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HTML 5"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Virtual Academi"/><category scheme="http://www.blogger.com/atom/ns#" term="MVA"/><category scheme="http://www.blogger.com/atom/ns#" term="this(punto)blog"/><title type='text'>MVA y la aplicación del blog</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Desde hace tiempo he estado usando (de manera muy intermitente) la plataforma de MVA para aprender más sobre el desarrollo de aplicaciones para las plataformas de Microsoft. He de decir que es bastante buena, y es que más allá de aprender dentro de ella, esta se comporta más como un índice donde se agrupan contenidos relacionados, dichos contenidos están estructurados para que el aprendeizaje sea fácil para el usuario, todo esto para un tema en particular.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
En MVA, no existe un maestro, no hay tareas, no hay límites de tiempo, pero eso sí: hay exámenes, pero no es nada de que preocuparse son bastante sencillos y de opción múltiple. Por ello es bastante abierta y tu mismo debes saber controlar tus tiempos para organizar tu aprendizaje y sacar el mayor provecho de él.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
En particular me agradan los llamados &lt;i&gt;JumpStart&lt;/i&gt; ya que son cursos impartidos en vídeo por gente que está muy relacionada con el tema en cuestión. Dichos vídeos sirven como preparación para los exámenes de certificación. Los que más me desagradan son los cursos compuestos de solo links a otros sitios web en los que a veces no se explica el tema a fondo, pero que no dejan de suer útiles al momento del desarrollo.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por ejemplo, mi ultima aventura fue el curso de &lt;a href=&quot;http://www.microsoftvirtualacademy.com/training-courses/diseno-de-aplicaciones-de-windows-8-en-html-5&quot;&gt;Diseño de aplicaciones de Windows 8 en HTML 5&lt;/a&gt;, que me fue guiando paso a paso para desarrollar una aplicación totalmente funcional. Antes del curso yo ya había desarrollado apps para Windows 8 usando HTML/JavaScript y no sentía que tomarlo fuera necesario... pero no podía estar más equivocado, puesto que en el curso aprendí cosas que en verdad no sabía ni que existían.

Producto de ese curso fue que surgió la aplicación &quot;oficial&quot; de este blog, que desde luego es de código abierto disponible acá &lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/blog-w8-app&quot;&gt;blog-w8-app&lt;/a&gt;. No se olviden de descargarla de la Tienda Windows:&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://apps.microsoft.com/windows/app/el-blog-de-feregrino/2301ec12-2833-4422-b129-fb657659a1ca&quot; class=&quot;windowsStore&quot;&gt;
  &lt;div&gt;
  &lt;span&gt;Descarga de la&lt;/span&gt;
  &lt;span&gt;Tienda Windows&lt;/span&gt;
&lt;/div&gt;
&lt;/a&gt;
&lt;br&gt;
&lt;/div&gt;
&amp;nbsp;¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/4400234639356546312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/12/mva-y-la-aplicacion-del-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4400234639356546312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4400234639356546312'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/12/mva-y-la-aplicacion-del-blog.html' title='MVA y la aplicación del blog'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-5626467335864476411</id><published>2013-11-25T10:30:00.000-06:00</published><updated>2013-11-25T15:58:32.698-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="Análisis de algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="ESCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8"/><title type='text'>Algoritmos probabilistas</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Las últimas prácticas de Análisis de algoritmos ( :&#39;( ), esta vez es otro tipo de algoritmos, aquellos que emplean en azar para resolver el problema que se les asignó. A estos se les llama probabilistas y según la Wikipedia en español, hay de tres tipos; mismos tipos que nos tocó ejemplificar mediante algunos algoritmos conocidos empleando POO (lo cual es un poco difícil para ejemplos tan sencillos), son los siguientes:&lt;/div&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;dfn&gt;Integración de Monte Carlo&lt;/dfn&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
Apelando al hecho de que una integral es la sumatoria de la infinidad de resultados de evaluar una función en un intervalo dado, se toman puntos de evaluación aleatorios dentro de ese intervalo dado, se evalúan y se van acumulando para luego realizarles un ajuste matemático, les diría que lo buscaran en Wikipedia, pero &lt;a href=&quot;http://beam.acclab.helsinki.fi/~knordlun/mc/mc5nc.pdf&quot;&gt;este documento&lt;/a&gt; me resultó especialmente revelador.&lt;/div&gt;
&lt;/dd&gt;&lt;dd&gt;&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
Para el caso de la implementación de POO lo que se consideró fue la creación de dos clases Random y Funcion, la primera para generar números aleatorios y la segunda para evaluar la función.&lt;/div&gt;
&lt;/dd&gt;&lt;dd&gt;&lt;br /&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;dfn&gt;Aproximación a π&lt;/dfn&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
Para este caso se toma un cuarto de círculo de radio = 1, y se lanzan &lt;i&gt;n &lt;/i&gt;dardos hacia él de esos &lt;i&gt;n&lt;/i&gt;&amp;nbsp;dardos supongamos que &lt;i&gt;m&lt;/i&gt;&amp;nbsp;aciertan en él entonces mediante matemágia, podemos encontrar que&amp;nbsp;&lt;span style=&quot;font-style: italic; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-style: italic; text-align: start;&quot;&gt;π&amp;nbsp;≈ 4 * m / n&lt;/span&gt;&lt;/div&gt;
&lt;/dd&gt;&lt;dd&gt;&lt;span style=&quot;font-style: italic; text-align: start;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dd&gt;&lt;dd&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: start;&quot;&gt;Para (mal) aplicar la POO, existe una clase que hace uso de Random, la clase definida en el ejericio anterior y de otra, llamada Aproximación en la cual se realiza la simulación de los dardos&lt;/span&gt;&lt;/div&gt;
&lt;/dd&gt;&lt;dd&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;dfn&gt;Comprobación de primalidad (Algoritmo Monte Carlo)&lt;/dfn&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
Existe un test de primalidad, inventado por Fermat que nos dice que si tomamos la siguiente frómula &lt;i&gt;a^(n-1) % n &lt;/i&gt;para cualquier número &lt;i&gt;a&amp;nbsp;∈&amp;nbsp;[1,n-1]&lt;/i&gt;&amp;nbsp;y si el resultado de eso es distinto de &lt;i&gt;1&lt;/i&gt;&amp;nbsp;entonces sabemos que &lt;i&gt;n&lt;/i&gt;&amp;nbsp;no es primo. Tomando una gran cantidad de números con valores aleatorios para&amp;nbsp;&lt;i&gt;a&amp;nbsp;∈&amp;nbsp;[1,n-1]&lt;/i&gt;&amp;nbsp;podríamos asegurar con cierta probabilidad si un número &lt;i&gt;n &lt;/i&gt;es primo. Si el test falla, es decir el resultado para cualquiera &lt;i&gt;a&lt;/i&gt;&amp;nbsp;es distinto de &lt;i&gt;1&lt;/i&gt;&amp;nbsp;podemos asegurar que &lt;i&gt;n&lt;/i&gt;&amp;nbsp;no es primo.&lt;/div&gt;
&lt;/dd&gt;&lt;dd&gt;&lt;br /&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;dfn&gt;Resolución del problema de las N reinas (Algoritmo Las Vegas)&lt;/dfn&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
El ya conocidísimo problema delas N reinas también se puede resolver mediante probabilidad, es decir, tomamos la columna 1 y colocamos la primera reina, después para la segunda columna tratamos de colocar la siguiente reina en una posición elegida aleatoriamente, si se logró, continuamos con la siguiente columna, y así hasta colocar las N reinas o no poder colocar una, en ese caso falla.&lt;/div&gt;
&lt;/dd&gt;&lt;dd&gt;Bastante simple.&lt;/dd&gt;&lt;/dl&gt;
Las primeras dos corresponden a la práctica 5, implementada en C++, y la segundas están implementadas en C#, con interfaz gráfica para Windows Phone 8 en XAML. El código, en &lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/analizando-algo/&quot;&gt;analizando-algo&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/5626467335864476411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/11/algoritmos-probabilistas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/5626467335864476411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/5626467335864476411'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/11/algoritmos-probabilistas.html' title='Algoritmos probabilistas'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-4617950000347928924</id><published>2013-11-14T16:05:00.000-06:00</published><updated>2013-11-14T16:05:29.638-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code.org"/><category scheme="http://www.blogger.com/atom/ns#" term="Compartir"/><category scheme="http://www.blogger.com/atom/ns#" term="Computación"/><category scheme="http://www.blogger.com/atom/ns#" term="Computer Science"/><category scheme="http://www.blogger.com/atom/ns#" term="csedweek"/><category scheme="http://www.blogger.com/atom/ns#" term="csunplugged"/><category scheme="http://www.blogger.com/atom/ns#" term="fferegrino"/><title type='text'>Todos pueden aprender ciencias computacionales</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Hace mucho me surgió el deseo de ser maestro de esta área que tanto me agrada, enseñar lo que sé sobre programación, algoritmos, estructuras de datos y demás. Sé que voy por el camino correcto puesto que entre mis planes está el hacer una maestría y buscar regresar a alguna de esas escuelas que me formaron &amp;nbsp;pero esta vez como maestro, pero por mientras quisiera comenzar haciendo algo que, aunque sencillo y pequeño, ayude a acercar a más niños (y también no tan niños) a las ciencias computacionales.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Buscando en internet encontré varios proyectos interesantes que tratan precisamente de eso, acercar el conocimiento a la mayor cantidad de gente posible, entre ellos está el proyecto de Code.org (&lt;a href=&quot;http://code.org/&quot; target=&quot;_blank&quot;&gt;http://code.org/&lt;/a&gt;), la Computer Science Education Week (&lt;a href=&quot;http://csedweek.org/&quot; target=&quot;_blank&quot;&gt;http://csedweek.org/&lt;/a&gt;)&amp;nbsp;y el último, que me parece el más interesante para lo que quiero hacer: Computer Science Unplugged (&lt;a href=&quot;http://csunplugged.org/&quot; target=&quot;_blank&quot;&gt;http://csunplugged.org/&lt;/a&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Este útlimo es programa de enseñanza diseñado específicamente para nivel primaria, de tal manera que el aprendizaje se lleve a cabo mediante juegos y actividades que resulten entretenidas para los niños, sin embargo creo que también se podría usar para cualquier persona que no esté involucrada para nada en el ambiente de la computación.&lt;br /&gt;
&lt;br /&gt;
Por lo pronto veré la posibilidad de usar como guía el programa de Computer Science Unplugged para impartir un curso cerca de donde vivo, espero que se pueda hacer y contarles cómo me fue.&lt;br /&gt;
&lt;br /&gt;
Enseñando también se aprende.&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/4617950000347928924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/11/todos-pueden-aprender-ciencias.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4617950000347928924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4617950000347928924'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/11/todos-pueden-aprender-ciencias.html' title='Todos pueden aprender ciencias computacionales'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-5536007223021332698</id><published>2013-11-01T14:44:00.000-06:00</published><updated>2013-11-01T20:38:54.891-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="Análisis de algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="Colas"/><category scheme="http://www.blogger.com/atom/ns#" term="Compresión"/><category scheme="http://www.blogger.com/atom/ns#" term="ESCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="GitHub"/><category scheme="http://www.blogger.com/atom/ns#" term="Huffman"/><category scheme="http://www.blogger.com/atom/ns#" term="Listas"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación"/><category scheme="http://www.blogger.com/atom/ns#" term="Árboles"/><title type='text'>Codificación voraz de Huffman</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
La codificación Huffman es un algoritmo usado para la compresión de datos. Dicho algoritmo hace uso de una tabla de códigos para escribir un determinado símbolo, donde la tabla ha sido rellenada basándose en la probabilidad estimada de aparición de cada símbolo. A cada símbolo le corresponde un código (secuencia de 1 y 0) de longitud variable, puesto que los símbolos cuya aparición es menos frecuente reciben códigos más largos, mientras que los que aparecen más reciben códigos más cortos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para la ESCOM, el trabajo fue hacer la implementación voraz de dicho algoritmo, la cual tiene como variante que la comstrucción de la tabla de códigos es distinta para cada archivo, tomando solo en cuenta los símbolos contenidos en él y la cantidad de veces que aparecen.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
He de decir que es de las prácticas más pesadas que he tenido en todo lo que llevo en la escuela, dentro del programa se hace uso de recursividad, operaciones a nivel de bits y estructuras de datos a más no poder:&lt;/div&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Se usa una lista para para ir almacenando las frecuencias de cada caracter&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Se usa un arreglo de árboles para generar el árbol único de códificación&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Se usa una cola para obtener el código asignado a cada símbolo&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
El código, que se encuentra en el proyecto &lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/analizando-algo/tree/master/Pr%C3%A1ctica%204&quot;&gt;analizando-algo&lt;/a&gt;&amp;nbsp;en GitHub, está muy comentado tratando de hacerlo lo más entendible posible.&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/5536007223021332698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/11/codificacion-voraz-de-huffman.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/5536007223021332698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/5536007223021332698'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/11/codificacion-voraz-de-huffman.html' title='Codificación voraz de Huffman'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-6985932832213436067</id><published>2013-10-08T22:40:00.000-05:00</published><updated>2013-10-08T22:48:00.594-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="Análisis de algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="Arreglos"/><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="Colas"/><category scheme="http://www.blogger.com/atom/ns#" term="ESCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="Estructura de datos"/><category scheme="http://www.blogger.com/atom/ns#" term="Fibonacci"/><category scheme="http://www.blogger.com/atom/ns#" term="Programacion"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación dinámica"/><title type='text'>Programación dinámica y la sucesión de Fibonacci</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
(Wikipediazo)En informática, la programación dinámica es un método para reducir el tiempo de ejecución de un algoritmo mediante la utilización de subproblemas superpuestos y subestructuras óptimas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Decir que un problema tiene subproblemas superpuestos es decir que se usa un mismo subproblema para resolver diferentes problemas mayores. Por ejemplo, en la sucesión de Fibonacci (F3 = F1 + F2 y F4 = F2 + F3) calcular cada término supone calcular F2. Como para calcular F5 hacen falta tanto F3 como F4, una mala implementación para calcular F5 acabará calculando F2 dos o más veces.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esto se puede evitar guardando las soluciones que ya hemos calculado. Entonces, si necesitamos resolver el mismo problema más tarde, podemos obtener la solución de la lista de soluciones calculadas y reutilizarla. Este acercamiento al problema se llama memoización (no confundir con memorización; en inglés es llamado memoization, véase en). &lt;b&gt;Si estamos seguros de que no volveremos a necesitar una solución en concreto, la podemos descartar para ahorrar espacio.&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Comenzando con el pseudocódigo:&lt;br /&gt;
&lt;pre class=&quot;brush: c;highlight: [3]&quot;&gt;FUNC Fibonacci (↓n: NATURAL): NATURAL
   VARIABLES
       tabla: ARRAY [0..n] DE NATURALES
       i: NATURAL
   INICIO
       SI n = 0 ENTONCES
           DEVOLVER 0
       SINOSI n = 1 ENTONCES
           DEVOLVER 1
       SINO
           tabla[0] := 0
           tabla[1] := 1
           PARA i = 2 HASTA n HACER
               tabla[i] := tabla[i-1] + tabla[i-2]
           FINPARA
           DEVOLVER tabla[n]
       FINSI
   FIN
&lt;/pre&gt;
&lt;br /&gt;
Una implementación en C de este algoritmo es la siguiente (he cambiado los tipos de dato para que se puedan calcular valores más grandes):&lt;br /&gt;
&lt;pre class=&quot;brush: c; highlight: [5, 10]&quot;&gt;long long fibonacciArreglo(int n) {
    long long * lista;
    if(n == 0) return 0;
    if(n == 1) return 1;
    lista = (long long *) malloc(sizeof(long long) * n);
    lista[0] = 0;
    lista[1] = 1;
    int i;
    for (i = 2; i &amp;lt;= n; i++) {
        lista[i] = lista[i-1] + lista[i-2];
    }
    return lista[n];
}
&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como podemos ver, se reservan &lt;i&gt;n&lt;/i&gt; espacios de memoria para almacenar todos los valores de la sucesión, aunque solamente se emplean dos de estos valores a la hora de cálcular el siguente número. Lo cual deriva en un &quot;desperdicio&quot; de memoria.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Es por eso que basándome en el enunciado que está más arriba en negritas, pensé que implementar una cola sería una opción para ahorrar espacio, podemos agregar dinámicamente los nuevos valores y quitar los que ya no usaremos, de tal manera solo tendríamos en memoria los valores necesarios para calcular el siguiente número en la sucesión. El código queda como sigue:&lt;/div&gt;
&lt;pre class=&quot;brush: c;&quot;&gt;long long fibonacciCola(int n) {
    Cola cola;
    if (n == 0) return 0;
    if (n == 1) return 1;
    creaLista(&amp;amp;cola);
    formar(&amp;amp;cola, 0);
    formar(&amp;amp;cola, 1);
    int i;
    for (i = 2; i &amp;lt;= n; i++) {
        // Quitamos el elemento menos reciente
        long long fi1 = atender(&amp;amp;cola);
        // Obtenemos el valor del siguiente más reciente
        long long fi2 = valorPrincipio(&amp;amp;cola);
        // Almacenamos el resultado en la cola
        formar(&amp;amp;cola, fi1 + fi2);
    }
    return valorFinal(&amp;amp;cola);
}
&lt;/pre&gt;
De esta forma aseguramos que para cualquier tamaño de &lt;i&gt;n&lt;/i&gt;&amp;nbsp;solo se ocupen a lo más 3 espacios de memoria.&lt;br /&gt;
&lt;br /&gt;
El código está disponible en la sección de extras del proyecto&amp;nbsp;&lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/analizando-algo/tree/master/Extras/FibonacciDinamica&quot;&gt;analizando-algo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/6985932832213436067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/10/programacion-dinamica-y-la-sucesion-de.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/6985932832213436067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/6985932832213436067'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/10/programacion-dinamica-y-la-sucesion-de.html' title='Programación dinámica y la sucesión de Fibonacci'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-4437178736716162891</id><published>2013-10-05T13:51:00.000-05:00</published><updated>2013-10-05T14:41:16.274-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="Análisis de algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="ESCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="GitHub"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación"/><category scheme="http://www.blogger.com/atom/ns#" term="Prácticas"/><title type='text'>Prácticas de análisis de algoritmos [ESCOM]</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
A lo largo del semestre, en la materia de Análisis de Algoritmos que llevo con el profesor &lt;a href=&quot;http://eafranco.com/&quot;&gt;Edgardo Franco&lt;/a&gt;&amp;nbsp;tenemos que realizar varias prácticas. Las prácticas consisten en programar algoritmos conocidos para analizar su comportamiento, tanto en tiempo como en memoria consumida, mientras resuelven problemas de &quot;gran&quot; tamaño.&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Muchas (si no es que todas D:) estarán hechas para C, para Linux, esto debido a la librería empleada para medir los tiempos que consume la ejecución del algoritmo. Para facilitar la compilación cada práctica cuenta con un archivo Makefile, el cual contiene todas las instrucciones para compilar y ejecutar las prácticas. Dado que tenemos que analizar los tiempos de ejecución y a veces estos pueden ser muchos, para la ejecución de cada programa redireccionamos la salida estandar para que escribiera directamente a un archivo que podemos manejar sencillamente en una hoja de cálculo. Esto se puede ver en el archivo .sh que acompaña a cada práctica.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Todas las prácticas tienen comentarios, unas más, otras menos, pero los tienen. Aún así si queda alguna duda pues no dudes en preguntar. &lt;b&gt;Otra cosa importante es que estas son solo las propuestas de solución que presentamos, no las copies directamente, basate en ellas o usa porciones del código, eso se vale.&lt;/b&gt; El link de descarga está al final del artículo ;).&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
Hasta el momento hemos realizado 3 prácticas:&lt;br /&gt;
&lt;h4 style=&quot;color: #333333; cursor: text; font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 1.1em; line-height: 1.7; margin: 1em 0px 15px; padding: 0px; position: relative;&quot;&gt;
Práctica 1: &quot;Pruebas a posteriori (Algoritmos de ordenamiento)&quot;&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Con base en el archivo de entrada proporcionado que tiene 200,000 números diferentes. Ordenarlo bajo los siguientes métodos de ordenamiento y comparar experimentalmente las complejidades de estos.&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Burbuja (Bubble Sort)&lt;/li&gt;
&lt;li&gt;Burbuja Simple&lt;/li&gt;
&lt;li&gt;Burbuja Mejorada&lt;/li&gt;
&lt;li&gt;Inserción (Insertion Sort)&lt;/li&gt;
&lt;li&gt;Selección (Selection Sort )&lt;/li&gt;
&lt;li&gt;Shell (Shell Sort)&lt;/li&gt;
&lt;li&gt;Ordenamiento con árbol binario de busqueda (Binary Search Tree)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #333333; cursor: text; font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 1.1em; line-height: 1.7; margin: 1em 0px 15px; padding: 0px; position: relative;&quot;&gt;
Práctica 2: &quot;Análisis temporal y notación de orden (Algoritmos de busqúeda)&quot;&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Con base en el ordenamiento obtenido a partir del archivo de entrada de la práctica 01 que tiene 200,000 números diferentes. Realizar la búsqueda de elementos bajo 3 métodos de búsqueda y variantes con procesos ligeros, realizar el análisis teórico y experimental de las complejidades; así como encontrar las cotas de los algoritmos.&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Búsqueda lineal o secuencial (No recursiva)&lt;/li&gt;
&lt;li&gt;Búsqueda binaria o dicotómica (No recursiva)&lt;/li&gt;
&lt;li&gt;Búsqueda en un árbol binario de búsqueda (No recursiva)&lt;/li&gt;
&lt;li&gt;Modificar los tres algoritmos para trabajar con procesos ligeros (Hilos).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #333333; cursor: text; font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 1.1em; line-height: 1.7; margin: 1em 0px 15px; padding: 0px; position: relative;&quot;&gt;
Práctica 3: &quot;Divide y vencerás (Rotación de una imagen)&quot;&lt;/h4&gt;
Implementar el algoritmo de rotación de imágenes que emplea la técnica divide y vencerás. La imágen a girar es cuadrada, y es un .bmp de 24 bits.&lt;br /&gt;
&lt;br /&gt;
Descargas:&lt;br /&gt;
Como desde hace tiempo, puedes seguir el proyecto en GitHub&amp;nbsp;&lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/analizando-algo/&quot;&gt;analizando-algo&lt;/a&gt;&amp;nbsp;(recomendado)&lt;br /&gt;
O descargar cada una de las tres prácticas de manera individual:&lt;br /&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/analizando-algo/Practica01.zip?attredirects=0&amp;amp;d=1&quot;&gt;Práctica 3&lt;/a&gt;&lt;br /&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/analizando-algo/Practica02.zip?attredirects=0&amp;amp;d=1&quot;&gt;Práctica 2&lt;/a&gt;&lt;br /&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/analizando-algo/Practica03.zip?attredirects=0&amp;amp;d=1&quot;&gt;Práctica 3&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/4437178736716162891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/10/practicas-de-analisis-de-algoritmos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4437178736716162891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4437178736716162891'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/10/practicas-de-analisis-de-algoritmos.html' title='Prácticas de análisis de algoritmos [ESCOM]'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-6629338070429665537</id><published>2013-09-26T16:33:00.002-05:00</published><updated>2013-09-26T16:33:49.181-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="expresiones regulares"/><category scheme="http://www.blogger.com/atom/ns#" term="Plantillas Texto"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><category scheme="http://www.blogger.com/atom/ns#" term="T4 Text Templates"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>&quot;Mapeando&quot; de procedimientos almacenados a clases en C#</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFJOF5j3sb-3RpKudooGD3X7YKWFU9Gnp37LwGw6R6GvGMU3YljFLFG9Y1_e3LAv5q-MT7ihiDbC0ziNhY2_31FzHu6RGEAt1Jj55m4INhA72vi8IjeUWyx0O_RYRSIFmJlVEahr0eZ7c/s1600/headerShow.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFJOF5j3sb-3RpKudooGD3X7YKWFU9Gnp37LwGw6R6GvGMU3YljFLFG9Y1_e3LAv5q-MT7ihiDbC0ziNhY2_31FzHu6RGEAt1Jj55m4INhA72vi8IjeUWyx0O_RYRSIFmJlVEahr0eZ7c/s1600/headerShow.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Hace rato, mientras no tenía clase me dispuse a escribir un pequeño programita para facilitarme la vida con algo (asquerosamente tedioso) que tenía que hacer. Y es que lo que tenía que hacer hasta parece arcaíco: Se trata de hacer consultas desde una aplicación web a una base de datos mediante procedimientos almacenados, para ello hay que generar una clase asociada al procedimiento para facilitar la persistencia de los datos dentro de la aplicación.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Hay consultas enoooooooooooooooooooooormes, inclusive hay algunas de más de 20 o 30 columnas lo cual representa perder mucho tiempo creando la clase asociada, aunque a decir verdad yo no lo hago por el tiempo, sino por el aburrimiento que representa hacerlo. Acá mi propuesta de solución:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
La idea que se me ocurrió fue colocarles una especie de &quot;clave&quot; para conocer el tipo de dato de cada columna así como el nombre que usaría para ella dentro de la aplicación. La clave elegida fue: &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;--|tipo de dato|nombre dentro de la aplicación&amp;nbsp;&lt;/span&gt; dada la facilidad con la que una cadena de ese tipo es fácilmente encontrable usando expresiones regulares, para ello se requiere del siguiente patrón: &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;--\|[a-zA-Z0-9]+\|[a-zA-Z0-9]+&lt;/span&gt;. Además en el programa usé una plantilla de texto T4 para generar el código, esas plantillas son útiles para generar código como en esta ocasión, el ejemplo es sencillo y fácil de entender.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Colgué el &lt;a class=&quot;gitlink&quot; href=&quot;https://github.com/fferegrino/ClassFromProcedure&quot;&gt;proyecto completo en GitHub&lt;/a&gt; para que todos pudieran descargarlo, yo pienso que le seguiré añadiendo funcionalidad conforme la vaya necesitando (hasta que me aburra de hacer otra cosa :P).&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/6629338070429665537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/09/mapeando-de-procedimientos-almacenados.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/6629338070429665537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/6629338070429665537'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/09/mapeando-de-procedimientos-almacenados.html' title='&quot;Mapeando&quot; de procedimientos almacenados a clases en C#'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFJOF5j3sb-3RpKudooGD3X7YKWFU9Gnp37LwGw6R6GvGMU3YljFLFG9Y1_e3LAv5q-MT7ihiDbC0ziNhY2_31FzHu6RGEAt1Jj55m4INhA72vi8IjeUWyx0O_RYRSIFmJlVEahr0eZ7c/s72-c/headerShow.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-8994321520132769191</id><published>2013-09-14T21:30:00.001-05:00</published><updated>2013-09-14T21:30:41.087-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone Store"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Store"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>Mis apps para Windows/Windows Phone 8 </title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Últimamente he andado muy ocupado (no tanto), haciendo unas cuantas aplicaciones para Windows Phone 8 y Windows 8 esperando ser parte del programa &lt;i&gt;Microsoft Student Partners 2013&lt;/i&gt;.&amp;nbsp; Al momento llevo 6 aplicaciones publicadas entre la Windows Store y la Windows Phone Store&lt;b&gt;. &lt;/b&gt;De algunas ya les he contado y de otras no. En fin, son&amp;nbsp;estas:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Cuantos días&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
¿Alguna vez has querido saber cuantos días faltan para una fecha importante?
Ahora lo puedes saber, con Cuantos días para Windows Phone 8 ten siempre a la vista cuantos días faltan para tu cumpleaños, el re-estreno tu serie favorita o cualquier otra cosa.
&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://www.windowsphone.com/es-mx/store/app/cuantosdias/1eb37826-c014-489e-b446-422ca1f56761&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ352DyUMQIZ6NTkXFYVCwyTayQ6Ips87NTOB2WldSP2DwNJdK52uKXpK9r80af3rMXwVW0p58fbrWA8YCQr1zXeSAmTaLWw8qZM8kL6B52NWThRvhKvGVlCRajFuck7QwKzGTwCRI3QM/s1600/154x40_WPS_Download_cyan.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;C0NV3R7&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Un sencillo convertidor entre sistemas numéricos. Convierte de los sistemas binario, octal, decimal y hexadecimal.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
De esta ya &lt;a href=&quot;http://blog.fferegrino.org/2013/08/c0nv3r7-convertidor-entre-bases.html&quot; target=&quot;_blank&quot;&gt;les había hablado&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;a href=&quot;http://apps.microsoft.com/windows/app/c0nv3r7/de91ba84-026e-4f6e-9bef-212e21b22e38&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOBZfFIEXzKsD4ArPBwPlMCV1znPRaxt3kYCNqj1W3z0o7uOWfKhd6j3i9ewmsQAFODLDq0gcsU7sqvSSSsanzeE94WCeig8UyMl3JNKKrqTpFQiTTVPb6YQzW5JA8ne4dZ3hx8EBAO-8/s1600/WindowsStore_badge_Spanish_es_Green_small_154x40.png&quot; /&gt;&lt;/a&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.windowsphone.com/es-mx/store/app/c0nv3r7/f9af1886-4bd5-4e19-983e-4d2f6f9bcb1e&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ352DyUMQIZ6NTkXFYVCwyTayQ6Ips87NTOB2WldSP2DwNJdK52uKXpK9r80af3rMXwVW0p58fbrWA8YCQr1zXeSAmTaLWw8qZM8kL6B52NWThRvhKvGVlCRajFuck7QwKzGTwCRI3QM/s1600/154x40_WPS_Download_cyan.png&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;RecetApprio&lt;/span&gt;(La obra maestra)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Un recetario hecho para ti, que no tienes ganas ni dinero para cocinar algo &quot;gourmet&quot;. Recetas simples y sencillas, elaboradas por un experto en la materia de alimentar personas de forma deliciosa, rápida y barata.
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
En esta conté con la colaboración en el diseño de &lt;a href=&quot;http://jmz7v.com/&quot; target=&quot;_blank&quot;&gt;Julio Montaño&lt;/a&gt;, al cual agradezco mucho :). Además aprovecha de los servicios en la nube de Windows Azure.&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://www.windowsphone.com/en-us/store/app/recetapprio/fc50c11d-69dc-4b86-a444-af690b055eda&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ352DyUMQIZ6NTkXFYVCwyTayQ6Ips87NTOB2WldSP2DwNJdK52uKXpK9r80af3rMXwVW0p58fbrWA8YCQr1zXeSAmTaLWw8qZM8kL6B52NWThRvhKvGVlCRajFuck7QwKzGTwCRI3QM/s1600/154x40_WPS_Download_cyan.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;BombFlipper&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Diviértete con este juego que combina el buscaminas y el sudoku para entretenerte como no tienes idea, ejercita tu cerebro tratando de llegar al nivel más alto que puedas y cuando estés ahí comparte tu récord con tus amigos.
&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://apps.microsoft.com/windows/app/bombflipper/eaaba971-564d-4cd0-8569-d83f6eb8f231&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOBZfFIEXzKsD4ArPBwPlMCV1znPRaxt3kYCNqj1W3z0o7uOWfKhd6j3i9ewmsQAFODLDq0gcsU7sqvSSSsanzeE94WCeig8UyMl3JNKKrqTpFQiTTVPb6YQzW5JA8ne4dZ3hx8EBAO-8/s1600/WindowsStore_badge_Spanish_es_Green_small_154x40.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;El Agente&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Diviértete ayudando a este despistado agente a recuperar los papeles que el viento se llevó, pero cuidado, hay algunos papeles que quizá no desee recuperar.
&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://apps.microsoft.com/windows/app/el-agente/e6f50aae-cf2b-4aa2-974e-c0abd6c1c9ca&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOBZfFIEXzKsD4ArPBwPlMCV1znPRaxt3kYCNqj1W3z0o7uOWfKhd6j3i9ewmsQAFODLDq0gcsU7sqvSSSsanzeE94WCeig8UyMl3JNKKrqTpFQiTTVPb6YQzW5JA8ne4dZ3hx8EBAO-8/s1600/WindowsStore_badge_Spanish_es_Green_small_154x40.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ojalá puedan descargarlas y valorarlas, así mismo si estás interesado en el desarrollo de alguna de ellas mándame un correo y con gusto vemos cómo hacerle.
&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/8994321520132769191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/09/mis-apps-para-windowswindows-phone-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/8994321520132769191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/8994321520132769191'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/09/mis-apps-para-windowswindows-phone-8.html' title='Mis apps para Windows/Windows Phone 8 '/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ352DyUMQIZ6NTkXFYVCwyTayQ6Ips87NTOB2WldSP2DwNJdK52uKXpK9r80af3rMXwVW0p58fbrWA8YCQr1zXeSAmTaLWw8qZM8kL6B52NWThRvhKvGVlCRajFuck7QwKzGTwCRI3QM/s72-c/154x40_WPS_Download_cyan.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-4675431142844753610</id><published>2013-08-27T18:14:00.000-05:00</published><updated>2013-08-28T06:52:03.456-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="Arreglos"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Cadenas"/><category scheme="http://www.blogger.com/atom/ns#" term="Csharp"/><category scheme="http://www.blogger.com/atom/ns#" term="ESCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación"/><title type='text'>Invertir una cadena [C#]</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Durante la plática de reclutamiento para Microsoft que hubo hace unos días en la ESCOM hicieron una prueba a los asistentes, la prueba consistía en escribir el código de dos funciones:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Una capaz de invertir una cadena, es decir, pasar de &quot;&lt;i&gt;this is a string&lt;/i&gt;&quot; a &quot;&lt;i&gt;gnirts a si siht&lt;/i&gt;&quot;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Otra muy similar pero solo debía invertir las palabras, pasando de &quot;&lt;i&gt;this is a string&lt;/i&gt;&quot; a &quot;&lt;i&gt;siht&amp;nbsp;&lt;/i&gt;&lt;i&gt;si&lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;i&gt;a&amp;nbsp;&lt;/i&gt;&lt;i&gt;gnirts&lt;/i&gt;&quot;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Basándonos en un prototipo de función más o menos así:&lt;br /&gt;
&lt;pre&gt;char* reverse(const char* str)&lt;/pre&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
El lenguaje a usar era cualquiera con el que te sintieras cómodo, C#, C, Java... en fin. La idea era que usaras la menor cantidad de herramientas provistas por el framework o por el lenguaje que escogiste (¡no se valía el .Reverse()!), es decir que todo lo hicieras &quot;artesanalmente&quot;. Eso si, no recuerdo muy bien cuanto tiempo dieron para escribir.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por suerte yo me había encontrado con un problema similar unos días antes, así que creo que no me fue tan mal en esta. Mi solución la propuse en dos lenguajes, C para la primera y (por cuestiones de tiempo) C# para la segunda. Ahora vengo acá a colocar mis soluciones un poco más pensadas y totalmente funcionales escritas en C#:&lt;/div&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;using System;
using System.Linq;
using System.Text;

namespace ReverseStringsMsft
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = &quot;this  is  a string&quot;;
            string res = Reverse(s);
            string resWord = ReverseWords(s);
            Console.WriteLine(s);
            Console.WriteLine(res);
            Console.WriteLine(resWord);
            Console.Read();
        }

        /// &amp;lt;summary&amp;gt;
        /// Invierte una cadena
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&quot;str&quot;&amp;gt;La cadena que será invertida&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;Una nueva instancia de String&amp;lt;/returns&amp;gt;
        public static string Reverse(string str)
        {
            if (str == null)
                return null;
   // Convertir a un arreglo
            char[] cr = str.ToArray();
   // Llamamos a la funcion para toda la cadena
            Reverse(cr, 0, cr.Length - 1);
            return new string(cr);
        }

        /// &amp;lt;summary&amp;gt;
        /// Invierte las subcadenas (separadas por espacios) contenidas dentro de una cadena
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&quot;str&quot;&amp;gt;La cadena que será invertida&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;Una nueva instancia de String&amp;lt;/returns&amp;gt;
        public static string ReverseWords(string str)
        {
            if (str == null)
                return null;
   // Convertir a un arreglo
            char[] cr = str.ToArray();
            int wordStart = 0;
            int end;
   // Recorremos la cadena para encontrar espacios
            for (int i = 0; i &amp;lt; cr.Length; i++)
            {
                char c = cr[i];
    // Por cada espacio o cada vez que lleguemos al final de la cadena
    // llamaremos a la funcion especialmente para la ubicacion de 
    // la palabra encontrada
                if (c == &#39; &#39; || i == cr.Length - 1)
                {
                    end = i - 1;
                    Reverse(cr, wordStart, end);
                    wordStart = i + 1;
                }
            }
            return new string(cr);
        }

        /// &amp;lt;summary&amp;gt;
        /// Cambia de posición los caracteres desde &amp;lt;paramref name=&quot;start&quot;/&amp;gt; a
  /// &amp;lt;paramref name=&quot;end&quot;/&amp;gt; hasta que todos estén invertidos
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&quot;str&quot;&amp;gt;El arreglo a ser invertido&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&quot;start&quot;&amp;gt;Inicio&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&quot;end&quot;&amp;gt;Final&amp;lt;/param&amp;gt;
        private static void Reverse(char[] str, int start, int end)
        {
            for (; start &amp;lt; end; start++, end--)
            {
    // Cambiamos uno a uno los caracteres desde la posicion
    // inicial hasta la final, y aumentamos las variables para irlos 
    // intercambiando como deseamos
                char aux = str[start];
                str[start] = str[end];
                str[end] = aux;
            }
        }

    }
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/4675431142844753610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/08/invertir-una-cadena-c.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4675431142844753610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/4675431142844753610'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/08/invertir-una-cadena-c.html' title='Invertir una cadena [C#]'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-7526289254676892920</id><published>2013-08-14T19:30:00.000-05:00</published><updated>2013-08-14T19:30:00.870-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Binario"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Decimal"/><category scheme="http://www.blogger.com/atom/ns#" term="Hexadecimal"/><category scheme="http://www.blogger.com/atom/ns#" term="Octal"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone Store"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Store"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>C0NV3R7, convertidor entre bases numéricas</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHelnaiw9PZyFOdkwhYHp8LvnxiqAw6CeaOuB_FXKb5tOjv2G1vKwTgfa0z9IepWxXsLy03Z1yhUR0iOquZO_S8v6j-QJqrA5VH2bobMto-WWG2wjj79cUGmX0n-iOn2o4JJl_RLyqFj0/s1600/C0NV3R7heading.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHelnaiw9PZyFOdkwhYHp8LvnxiqAw6CeaOuB_FXKb5tOjv2G1vKwTgfa0z9IepWxXsLy03Z1yhUR0iOquZO_S8v6j-QJqrA5VH2bobMto-WWG2wjj79cUGmX0n-iOn2o4JJl_RLyqFj0/s1600/C0NV3R7heading.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Esta vez vengo a contarles que el otro día mientras divagaba mi mente en la clase de Fundamentos de diseño digital se me ocurrió una &quot;idea&quot; para una app. Y es que digo &quot;idea&quot; porque no es nada nuevo, en clase estábamos viendo los distintos sistemas numéricos y la conversión entre ellos. Y pues de eso se trata la app: de un conversor numérico entre bases, pones un número y en seguida consigues su equivalente en octal, binario, decimal y hexadecimal.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
En realidad el código es más que sencillo. La gran novedad es que en esta traté de emplear a fondo el patron de diseño MVVM, dejando toda la lógica de la aplicación en un ensamblado aparte, que usé para las plataformas Windows 8 y Windows Phone 8. En realidad la aplicación es tan sencilla que la interfaz usada en una es igual a la otra.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Pongo el link a las aplicaciones en la Windows Store y en la Windows Phone Store&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://apps.microsoft.com/windows/app/c0nv3r7/de91ba84-026e-4f6e-9bef-212e21b22e38&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOBZfFIEXzKsD4ArPBwPlMCV1znPRaxt3kYCNqj1W3z0o7uOWfKhd6j3i9ewmsQAFODLDq0gcsU7sqvSSSsanzeE94WCeig8UyMl3JNKKrqTpFQiTTVPb6YQzW5JA8ne4dZ3hx8EBAO-8/s1600/WindowsStore_badge_Spanish_es_Green_small_154x40.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.windowsphone.com/en-us/store/app/c0nv3r7/f9af1886-4bd5-4e19-983e-4d2f6f9bcb1e&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ352DyUMQIZ6NTkXFYVCwyTayQ6Ips87NTOB2WldSP2DwNJdK52uKXpK9r80af3rMXwVW0p58fbrWA8YCQr1zXeSAmTaLWw8qZM8kL6B52NWThRvhKvGVlCRajFuck7QwKzGTwCRI3QM/s1600/154x40_WPS_Download_cyan.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Además del código del que salieron ambas aplicaciones:&lt;br /&gt;
&lt;br /&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/codigos/C0NV3R7.rar?attredirects=0&amp;amp;d=1&quot;&gt;C0NV3R7.rar&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
PD: Todo lo que he aprendido sobre Windows Phone fue gracias a &lt;a href=&quot;http://channel9.msdn.com/Series/Diplomado-de-Windows-Phone-8&quot;&gt;estos vídeos&lt;/a&gt;&amp;nbsp;hechos por Rodrigo Díaz Concha. Chéquenlos, están muy buenos.&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/7526289254676892920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/08/c0nv3r7-convertidor-entre-bases.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/7526289254676892920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/7526289254676892920'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/08/c0nv3r7-convertidor-entre-bases.html' title='C0NV3R7, convertidor entre bases numéricas'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHelnaiw9PZyFOdkwhYHp8LvnxiqAw6CeaOuB_FXKb5tOjv2G1vKwTgfa0z9IepWxXsLy03Z1yhUR0iOquZO_S8v6j-QJqrA5VH2bobMto-WWG2wjj79cUGmX0n-iOn2o4JJl_RLyqFj0/s72-c/C0NV3R7heading.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-5205682466448771761</id><published>2013-08-12T16:57:00.000-05:00</published><updated>2013-08-12T17:11:54.905-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="Bison"/><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="compiladores"/><category scheme="http://www.blogger.com/atom/ns#" term="ESCOM"/><category scheme="http://www.blogger.com/atom/ns#" term="expresiones regulares"/><category scheme="http://www.blogger.com/atom/ns#" term="Flex"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Lex"/><title type='text'>Proyectos de Compiladores, ESCOM</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta vez los saludo con un megapack: los proyectos de la asignatura de Compiladores en la ESCOM, entre ellos un conversor expresión regular-AFN-AFD (Java) y un analizador léxico-sintáctico (C). Y es que por problemas técnicos (y un poco de flojera) no los subí en el tiempo en el que fueron realizados.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
La asignatura la cursé con el profesor Juárez Gambino Omar, junto con mi equipo: Cruz Cruz Jorge y Gonzales Rodríguez &amp;nbsp;Javier (@newbie_geek). A lo largo del semestre aprendí demasiado, y parte de ello fue que había mucho tiempo para practicar lo aprendido, aplicando el conocimiento en varias practicas a lo largo del curso.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
La primera, fue un programar un analizador léxico, código y un sencillo reporte el cual coloco a continuación:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/ReporteDeAutomatas.pdf?attredirects=0&amp;amp;d=1&quot;&gt;ReporteDeAutomatas.pdf&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/AnalizadorLexico.zip?attredirects=0&amp;amp;d=1&quot;&gt;AnalizadorLexico.zip&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
La segunda, el conversor de expresión regular a autómata finito no determinista, y de autómata finito no determinista a uno determinista. Este está hecho en Java:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/regex2automaton2.rar?attredirects=0&amp;amp;d=1&quot;&gt;regex2automaton2.rar&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
La tercera práctica consistió en utilizar el lenguaje Flex para generar un analizador léxico (muy básico) para C, si ya conocen el lenguaje sabrán que la extensión (por convención) es .l:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/lenguaje.l?attredirects=0&amp;amp;d=1&quot;&gt;lenguaje.l&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/ReportePractica3.pdf?attredirects=0&amp;amp;d=1&quot;&gt;ReportePractica3.pdf&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para la cuarta práctica comenzamos a emplear Bison, para ayudarnos en la construcción de un analizador sintáctico, la práctica fue individual, porque en realidad era sencilla. Basarnos en un ejemplo y hacer una calculadora:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/instrucciones.l?attredirects=0&amp;amp;d=1&quot;&gt;instrucciones.l&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/instrucciones.y?attredirects=0&amp;amp;d=1&quot;&gt;instrucciones.y&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/Makefile?attredirects=0&amp;amp;d=1&quot;&gt;Makefile&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
La quinta y última práctica fue un analizador léxico y sintáctico para C haciendo uso de Flex y Bison juntos, en teoría es la más complicada, y que requirió más trabajo pero no por eso faltó:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/analizador.l?attredirects=0&amp;amp;d=1&quot;&gt;analizador.l&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/analizador.y?attredirects=0&amp;amp;d=1&quot;&gt;analizador.y&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/ejemplo_proyecto_final.c?attredirects=0&amp;amp;d=1&quot;&gt;ejemplo_proyecto_final.c&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a class=&quot;dwnld&quot; href=&quot;https://sites.google.com/site/fferegrinostorage/proyectos-compiladores/Makefile%20%281%29?attredirects=0&amp;amp;d=1&quot;&gt;Makefile&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
La finalidad de poner estos códigos y reportes como descargables es que tú los puedas checar, leer, tratar de entender y posteriormente implementar a tu modo. No simplemente los descargues y entregues, o lo que es peor, no los bajes y cambies los nombres a las variables (nos gustan los nombres de nuestras variables, no los cambies). Como dicen &quot;allá afuera no vas a encontrar las cosas hechas&quot;, así que lo ideal sería que estudies y trates de comprender el código.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Si hay alguna parte que no te queda clara puedes comentarla debajo o enviarme un correo, ya de menos un tuít. Pero hagas lo que hagas, NO COPIES.&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
@fferegrino :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/5205682466448771761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/08/proyectos-de-compiladores-escom.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/5205682466448771761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/5205682466448771761'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/08/proyectos-de-compiladores-escom.html' title='Proyectos de Compiladores, ESCOM'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3393549038927660044.post-586835046192798317</id><published>2013-08-04T19:35:00.000-05:00</published><updated>2013-08-10T15:31:13.740-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="BombFlipper"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Juegos"/><category scheme="http://www.blogger.com/atom/ns#" term="Programación"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Store"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>BombFlipper - Windows 8</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Sé que tengo rato programando para Windows 8 y la verdad es que es divertido. Durante unos de esos arranques se me ocurrió hacer una versión de un minijuego incluído dentro de otro juego, el no tan famoso&amp;nbsp;&lt;a href=&quot;http://bulbapedia.bulbagarden.net/wiki/Voltorb_Flip&quot;&gt;Voltorb Flip&lt;/a&gt;. No todo fue miel sobre hojuelas, puesto que sería mi primera aplicación hecha desde cero.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
La más dura decisión fue sobre qué tecnología escoger, dura decisión entre C# y XAML o HTML y JavaScript. De C# conozco mucho más que de JS, pero de HTML sé mucho más que de XAML Sinceramante para la interfaz prefería usar la magia de HTML con el poder de CSS, debido a la experiencia que tengo usándolo (además de que la otra opción era completamente desconocida para mi). Sin embargo, para la parte de la lógica solo pensaba en usar C# debido a la cantidad de cálculos necesarios para implementar el juego.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Al final me decidí por C# y su acompañante, porque se me hizo la opción más sólida y por que representaba un reto aprender sobre el desarrollo de interfaces, y es que, aunque el producto final no es de lo más pulcro considero que fue un buen aprendizaje.&lt;br /&gt;
&lt;br /&gt;
Aún queda mucho por hacer, más que anda en la interfaz de usuario porque ni a mi me resulta muy amigable, los invito a descargar el juego en la liga que está más abajo. Si lo prueban les pudo que me comenten aquí o al correo su opinión y sugerencias.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://apps.microsoft.com/windows/app/bombflipper/eaaba971-564d-4cd0-8569-d83f6eb8f231&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0zLMGkPmbdXPTWEJB02DfIqui0L4C80DR9h4l1BivtGJ6EA4o5l-JZMdY-ZQeeeXGGws9dVFPOAvRUw_MLa3XQJ_YrNJTRfdXbNERBYwvnRykzR0Ro0cGweOvxdrMvSSKnOnJzThxSh8/s200/store_logo.jpg&quot; width=&quot;158&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
¡Saludos!&lt;br /&gt;
&lt;a href=&quot;https://twitter.com/intent/user?screen_name=fferegrino&quot;&gt;@fferegrino&lt;/a&gt; :)</content><link rel='replies' type='application/atom+xml' href='http://fferegrino.blogspot.com/feeds/586835046192798317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fferegrino.blogspot.com/2013/08/bombflipper-windows-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/586835046192798317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3393549038927660044/posts/default/586835046192798317'/><link rel='alternate' type='text/html' href='http://fferegrino.blogspot.com/2013/08/bombflipper-windows-8.html' title='BombFlipper - Windows 8'/><author><name>A</name><uri>http://www.blogger.com/profile/09874433854959469204</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0zLMGkPmbdXPTWEJB02DfIqui0L4C80DR9h4l1BivtGJ6EA4o5l-JZMdY-ZQeeeXGGws9dVFPOAvRUw_MLa3XQJ_YrNJTRfdXbNERBYwvnRykzR0Ro0cGweOvxdrMvSSKnOnJzThxSh8/s72-c/store_logo.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>