Site menu:

 

En Twitter

Follow Me on Twitter

Powered by Tools for Twitter

En Flickr

Mi photostream »

En Tumblr

  • Las cosas que posteo en Tumblr aparecen en el blog automáticamente.
Mi tumblelog »

En mi RSS

Palabrejador

Esta página es un juguetito que devuelve cinco palabras al azar. Para escoger las palabras, se usa un ticket, que puede ser cualquier palabra, frase o conjunto de códigos. Un mismo ticket siempre devolverá las mismas palabras. Si no se introduce ninguno, el ticket se genera automáticamente al azar. Como curiosidad, la rutina que los genera trata de que sean lejanamente pronunciables, aunque viendo los resultados se entiende lo de «lejanamente» 🙂

Las palabras las he sacado del lemario de Ismael Olea, eliminando las de menos de tres letras y el par de abreviaturas que hay. Ahora mismo, hay 80206 palabras en la base de datos. Para tratar de evitar que las palabras sean demasiado parecidas, el Palabrejador escoge quince palabras y se queda con las cinco que estén más separadas unas de otras en el diccionario. Como estas palabras suelen ser bastante abstrusas, cada una de ellas enlaza a su definición en el diccionario de la RAE.

Como bonus, también se muestra un código HTML (badge) que puedes copiar y pegar en cualquier página para mostrar el ticket usado y las palabras que te han salido, con sus correspondientes enlaces.

Yo uso el Palabrejador para obtener las palabras de los 5×100, y quizá lo siga ampliando para buscarle más utilidades. Si a tí se te ocurre alguna o le has dado algún uso, me encantaría que me dejaras un comentario 🙂

Sin más dilación, he aquí el invento:

17 && $numc-$i > 3) { $beg =rand(0,1); $ticket .= ‘ ‘; $nl = 0; } else $beg = 1-$beg; } // $ticket = base_convert(microtime(),10,36); // cadena cualquiera } echo ‘
‘; echo ‘
‘; echo ‘Ticket: ‘; echo ‘‘; echo ‘
‘; echo ‘

‘; // Obtener un entero a partir de ticket e inicializar el generador srand(intval(substr(md5($ticket.»salty#!»),0,8),16)); // Obtener 15 numeros $numbers = array(); for ($i = 0; $i != 15; $i++) { $numbers[]=rand($minval, $maxval); } // Mientras no haya cinco… while (count($numbers)>5) { // Ordenar los numeros; de paso, rehacer las asignaciones de las keys sort ($numbers, SORT_NUMERIC); // Calcular distancias $dists = array(); for ($i = 0; $i != count($numbers)-1; $i++) $dists[] = $numbers[$i+1]-$numbers[$i]; $dists[] = $maxval-$numbers[$i] + 1 + $numbers[0]; arsort($dists); $dists=array_flip($dists); $victim = array_pop($dists); // The number $victim and the number $victim+1 are the closest pair. // One of them must die if (rand(0,1)==1) { if ($victim == $i) { $victim = 0; } else { $victim++; } } unset ($numbers[$victim]); } // Build query string $qs = «»; $first = 1; foreach ($numbers as $i) { if ($first) $first = 0; else $qs .= » OR «; $qs .= «id=$i»; } $query = «SELECT palabra FROM palabras WHERE $qs»; $dbconn = mysql_connect(‘mysql.noesia.net’,$dbuser,$dbpass); mysql_select_db($dbname,$dbconn); $q = mysql_query($query,$dbconn); echo ‘
Estas son tus palabras:
‘; $w = array(); while ($row=mysql_fetch_row($q)) $w[] = «$row[0]«; echo implode(«, «,$w); echo ‘
‘;?>
‘; $badge = ‘
Ticket: ‘.htmlspecialchars($ticket).’. Palabras: ‘ . implode(«, «,$w). ‘
‘; echo ‘Badge: ‘; echo ‘
‘; ?>