AngelTC blog
navigation
posts
docs


Last.FM
He estado escuchando..
Pink Floyd - 214 veces
David Gilmour - 165 veces
David Bowie - 151 veces
Akira Yamaoka - 137 veces
Pearl Jam - 125 veces


Links
Xiam
G-G
Gaussianos
Michoacano
Pinche Chamaquito
New York, New York
Blog de Elvis
Xinita
Rodrigo
Mi Twitter
Mansion del terror


RSS
Project Euler #24
November 12th, 2008
Como todas las personas que me siguen en el twitter sabrán, llevo 2 dias haciendo problemitas del project euler . Para los que no saben de qué se trata esto, es uno de esos sitios con muchos problemas que resolver, problemas 'matemáticos' mas o menos entretenidos y bastante de pensarle ( sobre todo a la hora de encontrar las soluciones pues se manejan numeros muy muy grandes y es necesario hacer óptimos los cálculos ).
Hoy lo que me ocupa es dar una solución al problema número 24 sin necesidad de pelearse mucho con código y eso. No sé si mi manera de pensarlo vaya a convencer a alguien, pero por lo menos a mi me funcionó perfecto y ( casi ) a la primera.
Problema:
A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order. The lexicographic permutations of 0, 1 and 2 are:

012 021 102 120 201 210

What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?

Que dice algo asi como:
Una permutación es un arreglo ordenado de objetos. Por ejemplo, 3124 es una posible permutación de los digitos 1,2,3 y 3. Si todas las permutaciones son listadas en orden numerico o alfabético, llamamos a esa permutación un orden lexicográfico. Las permutaciones lexicograficas de 0,1 y 2 son:
012 021 102 120 201 210
¿Cuál es la millonésima permutación lexicográfica de los dígitos 0,1,2,3,4,5,6,7,8 y 9?

Solución ( Spoiler ):
Para empezar tenemos que encontrar o definir una expreción matemática que nos de como resultado el total de las permutaciones de un conjunto de n elementos.
Es muy sencillo darnos cuenta que esto es :

Y llamamos "!" como 'factorial' y lo podemos definir asi :

Se nos pide la permutación número 1000000, es decir, habremos hecho un millon de cambios apartir de nuestra primera permutación.
Entonces para nuestro primer digito veamos cuantas 'vueltas' ha dado el resto de los 9 digitos.

Es decir, se dieron poco mas de 2 vueltas, sin llegar a la tercera.
Como se les da una prioridad de menor a mayor a los números, es decir, empezamos por el 0 de de ahi vamos eligiendo, sabemos que nuestro primer digito es 2 ( se dio la vuelta del 0 y la vuelta del 1 completas, por lo que vamos en el 75% de nuestra tercera vuelta )
=>
Repetimos el procedimiento, pero como ya tenemos fijo el primer digito, vemos cuantas vueltas ha dado en los siguientes 8 espacios.

Como ya tomamos el 2, nuestro digito siguiente es el 7.
=>
Bajo el mismo procedimiento de antes vemos que

Cuyo digito es 8
=>

El digito sería 3
=>

Cuyo dígito sería el 9
=>

Nos da el 1
=>

Tomamos el 5
=>

Aca, como no tenemos ningún residuo, sabemos que da la vuelta y ahí se queda, es decir, no termina de cambiar de dígito, por lo que el número que tendría que seguir es el 4.
=>
Asi completamos nuestra millonésima permutación, y hasta el momento llevamos:
27839154
Ahora, para los ultimos 2 digitos podemos pensar que en nuestro paso anterior se dio un poco mas de una vuelta, de igual manera caeríamos en el 4 pero ahora podemos ver cómo quedan ordenados los últimos 2 dígitos

Es decir, se dio una vuelta, nuestro digito es el 6 y por eliminación, el ultimo es el 0
Nuestro resultado es 2783915460

Y eso es todo :D
Comments (0)

Enli 08
October 30th, 2008
Yo no soy de esos que les gusta ir a cosas de esas de computadoras, por algo no estudie nada que tuviera que ver directamente con ellas, porque, en general, me recontra chocan todos los frikis linuxeros y esas cosas.
Pero ahora, por varios factores personales/sociales, decidí ir a darme una vuelta por alla un par de dias a ver de qué se trataba.
Primero a lo primero, y es felicitar al staff y a los organizadores ( ja, como si a alguien le importara ) porque siempre estuvieron atentos a los asistentes, siempre fueron amables y todas sus indicaciones fueron bastante claras.
Despues va la primera cosa que no me gustó, y fueron los asistentes, yo tuve que despertarme a las 6 am, tomar el metro, comprar un boleto en el ADO, viajar casi 2 horas, tomar un taxi y llegué con todas las ganas y toda la disposicion a las conferencias. La mitad de las personas que vi fueron todo lo contrario, no sé si iban de otros lugares, otras universidades o eran obligados a entrar por la UPAEP, yo qué sé, pero se les veía una cara de pereza increible, y aunque tal vez tenian mucha razón para hacerlo debido a algunas ponencias, la verdad es que no sé quíen paga 300-400 pesos para ir a bostezar a una sala.
Lo segundo que no me gustó fue precisamente lo que hablaba antes, los frikis linuxeros, la primera conferencia a la que entré fue de 'macros en openoffice 3', entre a esa por 2 razones, porque era openoffice 3 y pensé que iba a haber algun analisis sobre las diferencias en la programación del macros ahi que en el openoffice 2 y porque la conferencia venía marcada como nivel intermedio. ERROR GIGANTE, el tipo era, con todo mi respeto a los ingenieros en sistemas poblanos, basicamente eso, un chiste estereotipado de un ingeniero en sistemas poblano. La conferencia fue no solo aburridisima, sino pretenciosa, parcial y muy muy fanatizada, es decir, apesar del propio reconocimiento de esta persona a algunas superioridades de Office sobre Openoffice, basicamente se fue una hora en decir lo bueno que openoffice era y lo aun mejor que era el por haber convencido a noséquien de que OpenOffice ( sin el 3, ni el 2, ni nada ) era mejor. Nos mostró unos cachitos de codigo, practicamente nos dijo cómo manejar los dialogos para correr los macros. En resumen, mal preparada, fanatico chafa, chafisima, y un total fraude si se tomaba en cuenta lo que decia en la hoja.
La segunda a la que entre paso sin hacer mucho, fue una platica informal sobre el uso de las nuevas tecnologias para comunicarnos y bla, bla, puntos de vista encontrados y un clasico fan from hell del software libre que nos recomendó no sé qué aplicacion web, que como era libre, era mejor que el twitter y sus clones.
La tercera, la de Gunnar fue otra cosa completamente diferente a las anteriores, yo iba con mis prejuicios antidebianitas pero me quede calladito, fue una conferencia objetiva, interesantísima, entretenida ( ni sentí las 2 horas ), amena, chistosa, y complicada, por lo menos para mi que no tenia idea en esas cosas y que llevo como año y cacho sin hacer nada mas que ver chingaderas web y scripting.
Al dia siguiente entre a las de Beck y tambien, otra cosa totalmente diferente a las del primer dia, la primera fue tambien, una platica bastante informal con puntos muy sólidos en los argumentos, denuevo, yo iba con una predisposicion de mi postura pro scripts, pero la verdad es que se centraron en aplicacion mas que en otra cosa.
La segunda fue mas bien medio semestre de algebra lineal en 40 minutos y otros 20 de algun algebra cuyo nombre desconosco. Interesante, pero de huevisima si no ibas con ganas de algebra para ese dia ( yo iba a medias, medio dormido todavia ).
En general el Enli me gustó, tal vez falta ponerle atencion a algunos ponentes y regular o verificar contenidos desde antes, tener a algun comité que revise las ponencias desde antes y asi aceptarlas.
El viaje a Puebla valio la pena muchísimo, no tanto por el enli, pero fue una buena parte del viaje. El próximo año espero regresar, ahora con mas tiempo, y poder disfrutar mejor de las conferencias, o por lo menos entrar a unas que me interesen mas.
P.D. El awesome de Gunnar me impresionó tanto, que estoy pensando en instar awesome aca :X
Comments (0)

Fast fast fast
September 29th, 2008
66 words

Speedtest

Comments (7)

ArchLinux
September 28th, 2008
Hace como 2 años ( mayo del 2006 ) encontre buscando en DistroWatch la distribucion de Linux que hasta el dia de hoy sigo usando sin falta, Arch Linux. La idea de la distribucion y lo que la hace diferente a las demas, es decir, la razon por la que la prefiero a los cinco millones de sabores de Linux que deben de haber por ahi vagando en internet es porque esta basado en la simple idea de que tu, como usuario, debes de construir el sistema que desees utilizar. El paradigma en el que se basan al construir y distribuir Arch es KISS ( keep it simple,stupid ) del que ya habia hablado yo antes con un breve ejemplo y cuya explicacion no va mucho mas alla de lo que dice, simplemente significa que las cosas deben de mantenerse lo mas simples posibles, y aunque tal vez la simplicidad de Arch implica problemas y dificultades para usuarios novatos con sistemas operativos diferentes a cualquier version de Windows, tambien significa muchisimo aprendizaje.
Lo anterior fue tal vez mi caso, que aunque ya tenia usando otros sistemas desde mucho tiempo antes de probar Arch ( mi primer distro de Linux fue Mandrake y ya habia jugado con BeOS todavia antes ), aun no tenia idea de nada, aprendi mecanicamente a instalar distribuciones y terminaba por llenar 4GB de sistema ( que en era mucho para lo que realmente lo usaba ) base, con KDE, Gnome, XFCE, Fluxbox como opciones, OpenOffice, KOffice, Abiword y Gnumeric como software para oficina, los juegos de Gnome y KDE mas muchisimos mas que traian los discos, en otras palabras, instalaba todo lo que venia en los discos.
Lo bonito de Arch es que , como dije antes, el usuario es quien elige qué tener en su sistema, puedes tener un sistema enorme con KDE y todo lo que incluye, atascarlo de juegos, ponerle compiz, desklets y todo lo que se te ocurra, o tener un sistema pequeño con fluxbox, o tener un servidor con Apache+PHP en pura terminal, depende unicamente de tus deseos, y no es necesario instalar todo e ir desinstalando poco a poco todo lo que no se utiliza. Cuando el proceso de instalacion termina, solo tienes una terminal como root, lo necesario para conectarte a internet y nano y vi para editar archivos de configuracion. Apesar de lo complicado que esto pueda parecer, la wiki de Arch es muy sencilla de seguir, los foros estan llenos de informacion y no es nada dificil encontrar lo que se busca.
Algo de lo que se debe ser conciente es que la terminal va a ser tu compañera para siempre, es casi imposible usar Arch si no se conoce lo basico de comandos de shell. El proceso de actualizacion es sencillisimo, no se necesitan bajar ningun ISO para actualizar, es tan sencillo como introducir con comando y la siguiente version estara ahi, si no me gustara tanto instalar cosas nuevas, mi otra computadora llevaria mas de 2 años sin formatearse.
La diferencia con distribuciones como Gentoo es que es mas sencillo, no se necesita compilar nada y la velocidad se asemeja bastante, Arch, por tener exactamente lo que uno necesita puede arrancar en 30 segundos, que aunque puede parecer demasiado en comparacion con Gentoo, es mas que suficiente para un usuario de escritorio.
Comments (0)

Simple RAR Cracker
September 20th, 2008
Andaba buscando algo que hiciera bruteforce en un crack para linux, lo unico que encontre fue esto, un script en bash, muy bueno, bastante lento, pero no tengo prisa.
http://www.theninjabunny.com/217/Simple_RAR_Cracker/
Por si a alguien le sirve :D
Comments (0)

Comentarios
September 18th, 2008
Si alguien sigue visitando esta pagina, habra notado un cambio drastico ( no tanto ) en el sistema de comentarios.
Resulta que hace tiempo decidi volver a postear mi plugin para comentarios y Fluffball se encargo de megahiper perfeccionarlo.
Ahora ya hace muchas cosas, funca como debe y es mas facil para mi y para ti ( como la pizza de don cangrejo ).
EDIT
Listo, el captcha ya no es case sensitive :D
Gracias a Fluffball
Comments (8)

Keep It Simple
September 18th, 2008
Hace rato, veia las estadisticas de visitas al blog, y me encontre muy metido entre los millones de paginas de visitas que hay, que alguien, no se si amigo, conocido, ocioso o curioso, anduvo intentando ver que pasaba si a "?post" le pasaban algo de PHP, o sea, estaban intentando algo asi como
http://angeltc.net/?post=<? echo "hola"; ?>.
Y el post lo pongo aca, y no en el twitter, porque me dio un chingo de curiosidad la razon para intentar esto, no que quisieran encontrar un hoyo en Kure, eso no me importa, a lo que voy es ¿por que intentar ese en especifico?.
Si alguien hubiera intentado algo como
http://angeltc.net/?post=< h1> hola</h1>
Se hubiera dado cuenta rapidamente que Kure es vulnerable a XSS, jamas me hubiera pasado nada desde ahi porque soy bien desconfiado y de hecho yo empece a programar modificaciones para Kure por ese bug que encontre, hace un chinguisimo de tiempo, lo reporte y jamas lo modificaron en las versiones nuevas y hasta ahorita no me habia acordado de arreglarlo, asi que no importa.. pero si habrian tenido, como minimo, un bug que postear en milw0rm o en securityfocus o algo asi.
Ayer estaba haciendo mi tarea, y luego de un ratote de no encontrar ni un ejemplo que me clarificara las cosas, hice lo que toda persona, contrapositiva, y la contradiccion salio a la primera, o sea, negar la proposicion era negar la hipotesis. DUH!
Asi que Keep it simple, stupid :D
Comments (2)

ManHunt
September 17th, 2008
Por mucho, uno de mis juegos favoritos, peleadisimo para decidir entre este y Silent Hill.
Como sea, aca un video, bien NSFW ni para gente que no le guste ver violencia sin sentido.

Tampoco es que sea muy fuerte ni nada
Comments (0)

GraphC
September 11th, 2008
Como ya muchas personas saben, mi creatividad para darle nombres a mis proyectos es nula, probablemente el unico nombre valido como un nombre deadeveras bien hecho fue taweno, y eso porque solo estuve en la lluvia de ideas, nada mas que eso.
Como sea, despues de 3 dias ( SI! 3 DIAS! ) les presento GraphC, un miniscript en PHP que crea grafos apartir de una matriz de adyacencia.
Yo se que no es nada ni para tardarse media hora, pero al principio solo dibujaba grafos de 2 vertices y de ahi decidi hacerlo bien para cualquier matriz de adyacencia y termine con una cosa horrenda de como 200 lineas asi que hoy me harte, lo borre todo y lo rehice y adivinen, me tarde como 15 minutos, por mucho.
De todas formas quiero hacer esto mas grande, no se si alguien haya leido mi twitter, pero ADOOORO la teoria de grafos, asi que hasta donde la mente me de, voy a seguir ampliando el programita, espero hacerlo para un lenguaje que permita dinamismo y no solo input/output de 1 un turno, tal vez algo dinamico con python o algo asi.
La matriz tiene que estar dada por 0's y 1's, con todas las condiciones que tiene una matriz de adyacencia.

<?
function read_matrix($file) {
$matrix_graph_file=file($file);
$all_matrix=array();
foreach($matrix_graph_file as $vi) {
$line_vi=explode(" ",$vi);
$line_vi=str_replace("n","",$line_vi);
array_push($all_matrix,$line_vi);
}
return $all_matrix;
}
function draw_random_v() {
header ('Content-type: image/png');
$im=imagecreatetruecolor(500,500);
$matriz=read_matrix('matriz.txt');
$white = imagecolorallocate($im, 255, 255, 255);
imagefilledrectangle($im, 0, 0, 500, 500, $white);
$black = imagecolorallocate($im, 0, 0, 0);
$no_vertex=count($matriz);
$matriz_coord=array();
foreach($matriz as $key => $value) {
$centro=rand(5,495).",".rand(5,495);
$matriz_coord[$key]=$centro;
}
foreach($matriz as $key => $value) {
foreach($value as $key_col => $value_col) {
if($matriz[$key][$key_col]=="1"){
list($c_h,$c_j)=explode(",",$matriz_coord[$key_col]);
list($c_k,$c_m)=explode(",",$matriz_coord[$key]);
imagefilledellipse($im,$c_h,$c_j,10,10,$black);
imagefilledellipse($im,$c_k,$c_m,10,10,$black);
imageline($im,$c_h,$c_j,$c_k,$c_m,$black);
}
}
}

imagepng($im);
imagedestroy($im);
}
draw_random_v();
?>

Este es un ejemplo de una completa de cuatro vertice.
BTW, el codigo puede o no, darle en la madre a algunos servidores que se ponen nenas con eso del uso del CPU.. pfff..
Acepto mucho mucho feedback
Comments (5)

Smoke
September 11th, 2008
Yo se que es noticia vieja y que no he escrito en un rato, pero es que eso del twitter me quita todas las ganas que me dan de postear, y eso es bueno porque de ahora en adelante el contenido de este blog estara 100% libre de cosas personales, y por cosas personales me refiero a cosas referentes a mi vida, mas no a mi opinion, y aclaro eso porque hoy es uno de esos dias, donde toca hablar de lo que pienso.
el 28 de agosto de este año la ley a favor de espacios libres de humo de tabaco se hizo oficial para todas las entidades del pais. Aunque ya tiene algunos meses que aca en el DF uno nada mas no puede fumar en lugares publicos cerrados, las cosas nisiquiera se notan tanto, por lo menos para mi, que soy fumador, no me ha afectado en nada, sigo visitando los sitios que visito y simplemente no fumo en el interior, pero como este es mi caso unicamente, el de una persona que pasa la mayor parte del tiempo en casa y en la escuela, no deberia existir demasiadas complicaciones.
Mi problema principal con esta ley es que no me parece justa para los fumadores. Las personas que no fuman estan en todo su derecho de exigir que nadie les escupa el humo en la cara, ya sea por salud o por comodidad tienen todo el derecho de no tragarse nuestro humo, pero en la ley ( si, la ley, por lo menos la del DF ) no existen ningun tipo de facilidades a los que somos fumadores, y no me molesta el hecho de que no se nos facilite fumar, sino la hipocresia del gobierno para hacer estas reformas. Perfecto, hay que fomentar la salud, el deporte, etc, pero no veo medidas nisiquiera ligeramente acercadas en cuanto al alcohol, uno ve un monton de comerciales de Smirnoff, Bacardi, Victoria, Corona, Sol, y otro monton de marcas de bebidas alcoholicas. Y ese es mi problema, si las leyes no estuvieran planteadas de una manera egoista no habria este problema, porque la bandera en la que se apoyan todos aquellos que defienden esta ley es que a la gente le hace daño el humo reciclado, algunos dicen que mas ( que a mi, sin ser doctor ni informado en el tema, me parece una cosa absurda ) daño que al mismo fumador, pero yo prefiero un pais con miles de fumadores que mueren a cada rato de cancer, que tener un pais lleno de idiotas sin provecho que igual se van a morir jovenes.
A lo que voy es que a la ley le hacen falta cosas, a mi se me ocurre la posibilidad de hacer lugares publicos cerrados exclusivos para fumadores, donde se tenga que pagar por un permiso ( de igual forma que con el alcohol ) y la gente vaya a fumar, a tomar, a bailar o a hacer lo que sea que quieran hacer, pero todos con el conocimiento previo de que en ese lugar se van a encontrar con gente que fuma. La idea, me parece, no es mala si tan solo pensamos en todos aquellos que ahora estan afuera de los bares, antros y restaurantes que no pueden remodelar sus instalaciones ( por cualquier razon imaginable ) y que obviamente tienen una perdida de clientes.
Quien no ha ido a un cafe, a un restaurante tipo Vips a tomarse un cafe, a fumarse unos cigarros y platicar con los amigos, el cafe y los postres siguen corriendo y el negocio se beneficia con adictos a la cafeina y al azucar. Hoy la gente se toma su cafe y se va, mucho mas rapido, a mi manera de verlo entre menos placer exista en una actividad, menos tiempo se va a realizar.
No se, existen muchas opciones para mejorar estas reformas que incomodan a muchos y afectan a otros. No puedo imaginar ir a Oaxaca y tener que salirme de cualquiera de los bares que hay por ahi solo por dar unas fumadas, le quita todo el encanto, y son locales pequeños, historicos, donde hacer una remodelacion para que la gente fume adentro es una cosa imposible.
Fumar es un derecho, es malo, es rico, es caro, es relajante, es un vicio. Es una cosa para la que el gobierno debe tener una postura definida. ¿Se puede? ¿No se puede? ¿Donde se puede?.
Definitivamente debe ser controlado, yo empece a los 13-14 y conseguia cajetillas en cualquier tienda, yo se que no me veia ni cerquita a tener 18 y nunca importo. Hoy la señora a la que le compre la primera vez me sigue vendiendo cada que voy a Oaxaca y hasta descuentos me llega a hacer a veces.
Fumar debe ser una cosa que se hace a veces, en una fiesta, en una reunion, en un concierto, pero no diario.
Ojala y con el tiempo las leyes cambien, aca en el DF no parece importar demasiado en algunos lugares, yo he visto gente fumar en lugares cerrados sin ninguna pena y nadie quejarse por que el lugar cerrado es enorme.
En fin, ojala y no reciba comentarios ilustradores de lo equivocado que estoy al fumar y al tener esta posicion.
Comments (0)

<<previous posts
powered by kure