{"id":2524,"date":"2011-12-17T21:40:19","date_gmt":"2011-12-17T19:40:19","guid":{"rendered":"http:\/\/www.tiendadeultramarinos.es\/?p=2524"},"modified":"2011-12-19T16:44:06","modified_gmt":"2011-12-19T14:44:06","slug":"escribir-palabras-alternando-las-manos","status":"publish","type":"post","link":"https:\/\/www.tiendadeultramarinos.es\/?p=2524","title":{"rendered":"Escribir palabras alternando las manos"},"content":{"rendered":"<p>Una de las muchas asignaturas pendientes que acarreo hace a\u00f1os es aprender algo de <em>bash scripting<\/em>, escribir programas de ejecuci\u00f3n por lotes en sistemas GNU\/Linux (el equivalente a los <em>.bat<\/em> de MS-DOS pero infinitamente m\u00e1s potentes). As\u00ed que \u00faltimamente me he animado a probar a hacer cosillas por practicar.<\/p>\n<p>Uno de los comandos m\u00e1s \u00fatiles y completos con que cuentan los sistemas tipo unix es <a href=\"http:\/\/es.wikipedia.org\/wiki\/Grep\">grep<\/a>, un programa que busca en un archivo coincidencias con un patr\u00f3n dado y las imprime por pantalla. El patr\u00f3n no tiene por qu\u00e9 ser simplemente una palabra o un fragmento de la misma, la miga est\u00e1 en que tambi\u00e9n acepta <a href=\"http:\/\/es.wikipedia.org\/wiki\/Expresi%C3%B3n_regular\">expresiones regulares<\/a> que, explicado de forma sencilla, son una manera l\u00f3gica de expresar varias (o <strong>infinitas<\/strong>) cadenas de texto de forma reducida utilizando s\u00edmbolos con ciertos significados. Es un mundo maravilloso una vez lo descubres y empiezas a comprender, as\u00ed que si tienes inter\u00e9s visita el art\u00edculo de la wiki para saber m\u00e1s sobre el tema.<\/p><a name=\"teMiddle1020125831\"><\/a><div class=\"te_div\" id=\"te1020125831\">\n<p style=\"text-align: center;\"><a href=\"http:\/\/xkcd.com\/208\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tiendadeultramarinos.es\/wordpress\/wp-content\/uploads\/regular_expressions-395x400.png\" alt=\"\" title=\"regular_expressions\" width=\"395\" height=\"400\" class=\"aligncenter size-medium wp-image-2540\" srcset=\"https:\/\/www.tiendadeultramarinos.es\/wordpress\/wp-content\/uploads\/regular_expressions-395x400.png 395w, https:\/\/www.tiendadeultramarinos.es\/wordpress\/wp-content\/uploads\/regular_expressions-593x600.png 593w, https:\/\/www.tiendadeultramarinos.es\/wordpress\/wp-content\/uploads\/regular_expressions.png 600w\" sizes=\"auto, (max-width: 395px) 100vw, 395px\" \/><\/a><\/p>\n<p>Esta semana estuve pensando cu\u00e1ntas palabras existir\u00edan en espa\u00f1ol que pudiesen escribirse alternando cada letra con una mano, escribiendo de forma correcta desde el punto de vista de la <a href=\"http:\/\/es.wikipedia.org\/wiki\/Mecanograf%C3%ADa\">mecanograf\u00eda<\/a>. Por ejemplo:<em> tutor, usual, blanco, airoso, soslaya, vividor, palenque, flamenco, ornamento, audiencia, antisocial, tormentoso, antis\u00e9ptico, suboficial, digitiforme o ditir\u00e1mbico<\/em>. La palabra m\u00e1s larga en castellano que conozco es <strong>autosuficiencia<\/strong>, de 15 letras.<\/p>\n<p>Hay que prestar especial atenci\u00f3n a las palabras con tilde. El acento se escribe con la mano derecha, por lo que s\u00f3lo son v\u00e1lidas las vocales de la mano izquierda, <strong>a<\/strong> y <strong>e<\/strong>.<\/p>\n<p>\u00bfCu\u00e1l es la expresi\u00f3n regular que nos ayudar\u00e1 a encontrar esto? Llamaremos <strong>izq<\/strong> las letras que se escriben con la mano izquierda<em> izq={qwertasdfgzxcvb}<\/em> y <strong>dch<\/strong> a las de la derecha, <em>dch={yuiophjkl\u00f1bnm}<\/em>.<\/p>\n<p>Para construir una expresi\u00f3n regular debemos ayudarnos de algunos <a href=\"http:\/\/es.wikipedia.org\/wiki\/Expresi%C3%B3n_regular#Descripci.C3.B3n_de_las_expresiones_regulares\">s\u00edmbolos con ciertos significados<\/a>, por ejemplo el d\u00f3lar <strong>$<\/strong> representa el final de l\u00ednea. Texto entre corchetes significa que todos los caracteres de su interior son v\u00e1lidos y hay que elegir uno de ellos. Un m\u00e1s (+) detr\u00e1s de una expresi\u00f3n indica que hay que repetirla una o m\u00e1s veces (incluso infinitas). Por ejemplo, si tenemos <strong><em>[izq]<\/em>+<\/strong>, las siguientes cadenas est\u00e1n representadas por esa expresi\u00f3n regular. <em>ewt, qwezcvasdaq, dfgr<\/em>&#8230; Hay algunas m\u00e1s como asterisco, interrogante, tuber\u00eda o los par\u00e9ntesis agrupan expresiones de forma general como en matem\u00e1ticas. Si ten\u00e9is inter\u00e9s por internet hay cientos de p\u00e1ginas explicando estos detalles en profundidad. Una que me gusta especialmente es <a href=\"http:\/\/www.regular-expressions.info\/\">Regular-Expressions<\/a>.<\/p>\n<p>La primera aproximaci\u00f3n ser\u00eda decir:<\/p>\n<blockquote><p><em> ^(([izq][dch])+|([dch][izq])+)$<\/em><\/p><\/blockquote>\n<p>Cualquier letra de la izquierda, seguida de otra de la derecha, una o m\u00e1s veces. O viceversa. Al envolverlo entre <strong>^<\/strong>y<strong> $<\/strong> indicamos que queremos que eso se cumpla para la palabra entera. Parece una buena aproximaci\u00f3n, pero&#8230; \u00a1S\u00f3lo conseguimos palabras con n\u00famero de letras par!<\/p>\n<p>Para solucionarlo hay que pensar un poco&#8230; \u00bfC\u00f3mo se forman los impares? Pues cogiendo un par y a\u00f1adiendo la unidad; y lo mismo haremos aqu\u00ed. <strong>Tomamos la misma expresi\u00f3n que hemos utilizado antes y el a\u00f1adimos una letra extra<\/strong>. La dejaremos como opcional utilizando el interrogante (elegir una o ninguna) y as\u00ed no tenemos que escribir una expresi\u00f3n distinta para pares e impares.<\/p>\n<blockquote><p><em> ^((([dch][izq])+[dch]?)|(([izq][dch])+[izq]?))$<\/em><\/p><\/blockquote>\n<p>Por ahora evitaremos los acentos, que complican las cosas. Tal y como est\u00e1 ya podemos empezar a buscar palabras \u00bfd\u00f3nde? Pues toda distribuci\u00f3n linux trae incorparada de serie un diccionario y se pueden instalar m\u00e1s. Bueno, m\u00e1s que diccionario es un listado de palabras que est\u00e1n en el diccionario, pero sin definiciones ni nada. En mi equipo est\u00e1n en la carpeta <em>\/usr\/share\/dict\/<\/em> y tengo tres: <em>spanish, british-english, y american-english<\/em>, que contienen 86016, 98326 y 98569 entradas respectivamente.<\/p>\n<p>Entonces, todo lo que tenemos que teclear en nuestro terminal es&#8230;<\/p>\n<blockquote><p>grep -E &#8216;^((([yuiophjkl\u00f1nm][qwertasdfgzxcvb])+[yuiophjkl\u00f1nm]?)|(([qwertasdfgzxcvb][yuiophjkl\u00f1nm])+[qwertasdfgzxcvb]?))$&#8217; \/usr\/share\/dict\/spanish<\/p><\/blockquote>\n<p>\u00a1Pero cuidado! <strong>son m\u00e1s de mil palabras lo que escupir\u00e1 esta expresi\u00f3n<\/strong>. Quiz\u00e1s queramos guardarlas en un archivo para leerlas con detenimiento (si al final de la expresi\u00f3n a\u00f1ades <strong><em>&gt; nombreArchivo<\/em><\/strong> se guardar\u00e1n en un fichero de texto). Otra maravilla que tienen los sistemas unix es la posibilidad de utilizar la salida de un comando como la entrada del siguiente utilizando el s\u00edmbolo de la tuber\u00eda (altgr 1) para separar ambos comandos. As\u00ed, si simplemente quieres contar cu\u00e1ntas salen, basta a\u00f1adir al final del comando un simple <em><strong>| wc -l<\/strong><\/em> para que te lo indique. wc es un programa para contar palabras, pero con la opci\u00f3n <strong>-l<\/strong> cuenta l\u00edneas.<\/p>\n<p>Y se pueden encadenar expresiones regulares sin parar. Poniendo al final <em><strong>| egrep &#8216;^.{5}$&#8217;<\/strong><\/em> obtendremos todas las palabras de cinco letras. Y con <strong><em>| egrep &#8216;^.{10,}$<\/em>&#8216;<\/strong> nos imprimir\u00e1 solamente aquellas con 10 o m\u00e1s caracteres.<\/p>\n<p>Por supuesto es un co\u00f1azo escribir la expresi\u00f3n regular cada vez que se quiera cambiar el conjunto de izquierda y derecha, por lo que he escrito un peque\u00f1o script en bash que nos genera la expresi\u00f3n regular y realiza la b\u00fasqueda autom\u00e1ticamente. Puedes <a href=\"http:\/\/pastebin.com\/85jRudH0\">verlo y descargarlo aqu\u00ed<\/a>. Con los dos primeros par\u00e1metros se indican ambos conjuntos; el tercer par\u00e1metro es opcional, y permite cambiar f\u00e1cilmente de diccionario para comprobar esto mismo tambi\u00e9n en otros diccionarios. El cuarto argumento nos permite especificar que s\u00f3lo se imprima la expresi\u00f3n regular en lugar de realizar la b\u00fasqueda. Si no se especifican al menos los dos primeros par\u00e1metros lanzar\u00e1 un mensaje explicando c\u00f3mo ejecutarlo.<\/p>\n<p>El tema de las tildes simplemente hace un poco m\u00e1s larga la expresi\u00f3n, pero se sigue basando en el mismo sistema. Habr\u00e1 que tener en cuenta que el acento s\u00f3lo puede ir despu\u00e9s de una pulsaci\u00f3n con la izquierda, y a continuaci\u00f3n tendr\u00e1 que ir una con la mano derecha. Y lo m\u00e1s importante: que no tiene por qu\u00e9 ocurrir siempre, por lo que ha de ser un par\u00e1metro opcional (usaremos el interrogante). Para facilitar la lectura la divido en dos lineas equivalentes, s\u00f3lo que cada una representa un orden distinto. A lo mejor existe otra expresi\u00f3n regular m\u00e1s sencilla que lo simplifique, pero no se me ocurre.<br \/>\n&#8216;^(([izq][\u00e1\u00e9]?)|(([izq][\u00e1\u00e9]?[dch])+|([izq][\u00e1\u00e9]?([dch][izq][\u00e1\u00e9]?)+))<br \/>\n|(([\u00e1\u00e9]?[dch])|([\u00e1\u00e9]?[dch][izq])+|([\u00e1\u00e9]?[dch]([izq][\u00e1\u00e9]?[dch])+)))$&#8217;<\/p>\n<p>Al igual que antes, he escrito un script para que lo genere autom\u00e1ticamente y facilitar las pruebas con distintos conjuntos <a href=\"http:\/\/pastebin.com\/L6s7y0n3\">ver y descargar el script aqu\u00ed<\/a>. En este no preconfiguro diccionarios (los ingleses no tienen tildes despu\u00e9s de todo), pero tambi\u00e9n puede cambiarse f\u00e1cilmente a otro. Ejecutando el archivo sin suficientes par\u00e1metros mostrar\u00e1 la ayuda explicando esos detalles.<\/p>\n<p>En el diccionario que tengo en mi equipo, que cuenta con 86 016 palabras, encuentro 1109, en la que la m\u00e1s larga es <a href=\"http:\/\/buscon.rae.es\/draeI\/SrvltConsulta?TIPO_BUS=3&amp;LEMA=quelenquel%C3%A9n\">quelenquelen<\/a>. Un amigo ha hecho pruebas con otro diccionario con algunas entradas m\u00e1s y obtiene 1307 (puedes <a href=\"https:\/\/plus.google.com\/101170349651899359124\/posts\/Z6ovN5VuGu1\">ver la conversaci\u00f3n aqu\u00ed<\/a>). He fusionado ambos archivos eliminando las repetidas y obtengo 1463 palabras que <a href=\"http:\/\/pastebin.com\/udi98s3n\">dejo aqu\u00ed colgadas<\/a>.<\/p>\n<p>Una de las motivaciones que me han llevado a buscar esto era saber si se podr\u00eda componer un texto que se pueda escribir alternando las manos<strong> \u00bfAlguien se atreve a escribir un texto utilizando \u00fanicamente este tipo de palabras?<\/strong>.<\/p>\n<p>Nexos y palabras cortas que pueden ser \u00fatiles:<\/p>\n<blockquote><p>a, al, dos, e, el, \u00e9l, en, ha, he, la, le, me, o, os, pro, que, se, si, su, sus, todo, tu, tus, u, vos, y, ya<\/p><\/blockquote>\n<p>Al estar la R, E y A en el mismo lado no aparecen verbos terminados en AR y ER, por lo que tambi\u00e9n he cogido palabras que cumplan la condici\u00f3n anterior, pero con esa terminaci\u00f3n. No todas ser\u00e1n verbos, pero s\u00ed la mayor\u00eda. Este diccionario no tiene conjugaciones verbales, as\u00ed que esto es una posible ayuda a todo aquel que se quiera atrever a escribir un texto, para facilitarle la b\u00fasqueda de las palabras apropiadas. Puedes <a href=\"http:\/\/pastebin.com\/5Kt9udaX\">consultar esta nueva lista aqu\u00ed<\/a>.<\/p>\n<\/div><p style=\"text-align: center;\"><a style=\"display:none;\" class=\"theTag\" id=\"te1020125831\" onClick=\"expand('#te1020125831');\" href=\"#teMiddle1020125831\"><\/a><\/p><script language=\"JavaScript\" type=\"text\/javascript\">expander_hide('#te1020125831');<\/script>","protected":false},"excerpt":{"rendered":"<p>Una de las muchas asignaturas pendientes que acarreo hace a\u00f1os es aprender algo de bash scripting, escribir programas de ejecuci\u00f3n por lotes en sistemas GNU\/Linux (el equivalente a los .bat de MS-DOS pero infinitamente m\u00e1s potentes). As\u00ed que \u00faltimamente me he animado a probar a hacer cosillas por practicar. Uno de los comandos m\u00e1s \u00fatiles &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.tiendadeultramarinos.es\/?p=2524\" class=\"more-link\">Seguir leyendo<span class=\"screen-reader-text\"> \u00abEscribir palabras alternando las manos\u00bb<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,5],"tags":[],"class_list":["post-2524","post","type-post","status-publish","format-standard","hentry","category-artes-y-letras","category-informatica","entry"],"_links":{"self":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts\/2524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2524"}],"version-history":[{"count":21,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts\/2524\/revisions"}],"predecessor-version":[{"id":2545,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts\/2524\/revisions\/2545"}],"wp:attachment":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}