Saturday, April 21, 2012

La palabra más larga en inglés que posee una sóla vocal

Como conseguir la palabra más larga con una sóla vocal en los idiomas español e inglés usando expresiones regulares y técnicas de ataque de diccionario (como si se fuera a descubrir alguna clave).

La estructura de los dos diccionarios usados para tal fin: english.txt y espanol.txt. El primero tiene por cada línea una palabra en minúscula mientras que el segundo tiene una estructura "Palabra/..." donde el caracter "/" indica el final de la palabra y la primera letra puede o no ser Mayúscula.

La solución en inglés resultó ser la palabra "strengths" con longitud de 9 caracteres, una sóla vocal y válida. En el idioma español resultó la palabra "grill" de longitud 5. De longitud 4 resultan clan, flan, gran, plan, vals, tren clon, flor y cruz.


La expresión regular usada para el diccionario en inglés :

^s([^aeiouy]{0,50})a([^aeiouy]{0,50})$
^s([^aeiouy]{0,50})e([^aeiouy]{0,50})$
^s([^aeiouy]{0,50})i([^aeiouy]{0,50})$
^s([^aeiouy]{0,50})o([^aeiouy]{0,50})$
^s([^aeiouy]{0,50})u([^aeiouy]{0,50})$
^s([^aeiouy]{0,50})y([^aeiouy]{0,50})$


La expresión regular usada para el diccionario en español :

^([^AEIOUYaeiouy]{0,50})[aA]([^AEIOUYaeiouy]{0,50})(?=/)
^([^AEIOUYaeiouy]{0,50})[eE]([^AEIOUYaeiouy]{0,50})(?=/)
^([^AEIOUYaeiouy]{0,50})[eI]([^AEIOUYaeiouy]{0,50})(?=/)
^([^AEIOUYaeiouy]{0,50})[oO]([^AEIOUYaeiouy]{0,50})(?=/)
^([^AEIOUYaeiouy]{0,50})[uU]([^AEIOUYaeiouy]{0,50})(?=/)


El shellscript que realiza la búsqueda :


#!/bin/bash

##################################################################
#
# Prueba de Expresiones Regulares con grep
# [ Cesar Rivera ]
#
# Probado en distribución Fedora
#
##################################################################

vocales='a e i o u' ;
q="'" ;

v1=0 ;
for vocal in $vocales ; do
  gx="grep -P ^s([^aeiouy]{0,50})$vocal([^aeiouy]{0,50})\$ \
      --color /usr/share/dict/words";
  ex=`$gx`;
  for palabra in $ex ; do

    v2=`echo ${#palabra}` ;
    if [[ $v2 -gt $v1 ]]; then
      v1=$v2 ;
      echo $palabra $v1 ;
    fi ;
  done ;
done ;

Resultado:

sacks 5
sanghs 6
scarphs 7
schmaltz 8
strengths 9

La última palabra mostrada "strengths" resultó ser la mayor. Curiosamente, en el idioma inglés, las palabras largas encontradas que poseen una sóla vocal comienzan con "s".

Fin del ejercicio de expresión regular


No comments:

Post a Comment