Saltar al contenido

Crea un acróstico

Miranda, miembro de este gran equipo de trabajo, nos ha hecho el favor de redactar este enunciado porque conoce muy bien este tema.

Solución:

Python 2.7

import random
import string
import sys
import re

class Markov(object):
    def __init__(self,filename):
        with open(filename,'r') as f:
            self._words = f.read().split()
            self._wordCount = len(self._words)

    def getWordList(self,seedWord=None,pattern=r'^.*$'):
        if seedWord is not None:
            chainWords = [self._words[i+1] for i in range(self._wordCount-1)
                if seedWord == self._words[i].lower()]
        else:
            chainWords = self._words
        p = re.compile(pattern,re.IGNORECASE)
        return filter(p.match,chainWords)

    def getRandWord(self,seedWord=None,pattern=r'^.*$'):
        wordList = self.getWordList(seedWord,pattern)
        if len(wordList) == 0:
            return None
        return random.choice(self.getWordList(seedWord,pattern))

def main():
    list = Markov('AStudyInScarlet.txt')
    for word in sys.argv[1:]:
        poem = []
        for letter in word:
            if len(poem) == 0:
                nextWord = list.getRandWord(pattern=r'^[0.*$]'.format(letter))
            else:
                nextWord = list.getRandWord(poem[-1],r'^0.*$'.format(letter))
                if nextWord is None:
                    nextWord = list.getRandWord(pattern=r'^0.*$'.format(letter))
            nextWord = ''.join(ch for ch in nextWord if ch not in string.punctuation)
            poem.append(nextWord)

        print word
        print '='*len(word)
        for line in poem:
            print line
        print ''

if __name__ == '__main__':
    main()

Carga un archivo de texto llamado ‘AStudyInScarlet.txt’. Solo las palabras utilizadas en ese documento serán candidatas para su incorporación al poema final. (actualmente no hay palabras que empiecen con x en este documento, agregaré algunos pronto)

Este programa intenta encontrar palabras en el archivo de texto que siguen a la palabra anterior en el poema. Por ejemplo, si la palabra acróstica es ‘pita’ y hasta ahora el poema es “Privado”, una posible siguiente palabra es “indagación”, ya que la frase de dos palabras “indagación privada” se encuentra en el documento de texto. Si no se encuentran pares de palabras coincidentes, se elige cualquier palabra aleatoria que comience con la letra correcta.

Se elige una palabra de una lista de palabras que cumplen con las calificaciones deseadas. Si una palabra aparece varias veces en la lista de palabras aceptables, es más probable que se elija una que no.

Uso

Las palabras para crear poemas deben especificarse como argumentos de línea de comando. Se imprimirá un poema por cada palabra especificada en la línea de comando.

Ejemplo:

$ acrostic.py laughable codegolf loremipsum
laughable
=========
Looking
a
Union
grievous
his
agitation
be
likely
enough

codegolf
========
couple
of
discoloured
evident
goes
or
late
from

loremipsum
==========
learn
of
revenge
engine
me
it
proved
smartest
up
my

PHP

 'and',
    'i' => 'if',
    'o' => 'or',
    'n' => 'not',
    'l' => 'list'
);
$funcs = get_defined_functions();
$word = rtrim(fgets(STDIN), "n");
echo "n";
foreach(str_split($word) as $char)
    foreach($dict + $funcs['internal'] as $func)
        if($func[0] == $char)
            echo $func . "n";
            break;
        

Admito que no siempre tiene sentido, pero soy demasiado vago para buscar una lista de palabras reales, así que usé nombres de funciones PHP más un par de palabras reservadas PHP.

Ejemplos:

laughable

list
and
user_error
get_class
hash
and
bzopen
list
each

codegolf

class_exists
or
define
each
get_class
or
list
func_num_args

loremipsum

list
or
restore_error_handler
each
method_exists
if
property_exists
strlen
user_error
method_exists

neurotic

not
each
user_error
restore_error_handler
or
trigger_error
if
class_exists

diplomat

define
if
property_exists
list
or
method_exists
and
trigger_error

Comentarios y puntuaciones del tutorial

Si para ti ha sido útil nuestro post, nos gustaría que lo compartas con otros desarrolladores de esta manera contrubuyes a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *