Last active
August 29, 2015 14:10
-
-
Save felipetavares/5fd253e48a06e97f3f1a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Nenhum(a)/Ambos(as) | |
var Nenhum=Nenhuma = 0; | |
var Ambos=Ambas= -1; | |
// Sim/Não | |
var Sim = true; | |
var Não = false; | |
// Gênero/Número/Grau/Pessoa | |
var Gênero = { | |
"Feminino": 1, | |
"Masculino": 2, | |
}; | |
var Número = { | |
"Singular": 1, | |
"Plural": 2, | |
}; | |
var Grau = { | |
"Aumentativo": 1, | |
"Diminutivo": 2, | |
}; | |
var Pessoa = { | |
"Primeira": 1, | |
"Segunda": 2, | |
"Terceira": 3, | |
}; | |
// Tipos de termos | |
var Tipo = { | |
"Substantivo": 1, | |
"Verbo": 2, | |
"Adjetivo": 3, | |
"Advérbio": 4, | |
"Preposição": 5, | |
"Pronome": 6, | |
"Artigo": 7, | |
"Conjunção": 8, | |
"Numeral": 9, | |
}; | |
// Todas as palavras | |
var Dicionário = []; | |
// A Palavra | |
function Palavra (letras, gênero, número, grau, pessoa) { | |
this.gênero = gênero; | |
this.número = número; | |
this.grau = grau; | |
this.pessoa = pessoa; | |
this.letras = letras; | |
this.tipo = Nenhum; | |
} | |
// O Termo. Termo é um conjunto de palavas com mesmo sentido sintático | |
function Termo (tipo, palavras) { | |
this.tipo = tipo; | |
this.palavras = palavras; | |
for (var p in this.palavras) { | |
this.palavras[p].tipo = tipo; | |
} | |
this.casa = function (palavra, gênero, número, grau, pessoa) { | |
if (gênero && palavra.gênero != Ambos && gênero != palavra.gênero || | |
número && palavra.número != Ambos && número != palavra.número || | |
grau && grau != palavra.grau || | |
pessoa && pessoa != palavra.pessoa) | |
return Não; | |
return Sim; | |
} | |
// Retorna a palavra que se encaixa nas características pedidas | |
this.valorPalavra = function (gênero, número, grau, pessoa) { | |
var lista = []; | |
for (var p in this.palavras) { | |
if (this.casa(this.palavras[p], gênero, número, grau, pessoa)) { | |
lista.push(this.palavras[p]); | |
} | |
} | |
if (lista.length) { | |
return lista[Math.floor(Math.random()*(lista.length))]; | |
} | |
// Nenhuma palavras encontrada que satisfaça os critérios | |
return Nenhuma; | |
} | |
} | |
function qualquerUm (tipo) { | |
var lista = []; | |
for (var t in Dicionário) { | |
if (Dicionário[t].tipo == tipo) | |
lista.push(Dicionário[t]); | |
} | |
return lista[Math.floor(Math.random()*(lista.length))]; | |
} | |
function geraFrase () { | |
var verbo = qualquerUm(Tipo.Verbo); | |
var pronome = qualquerUm(Tipo.Pronome); | |
var artigo = qualquerUm(Tipo.Artigo); | |
var substantivo = qualquerUm(Tipo.Substantivo); | |
var adjetivo = qualquerUm(Tipo.Adjetivo); | |
var pVerbo = verbo.valorPalavra(); | |
var pSubstantivo = substantivo.valorPalavra(Não, pVerbo.número, Não, Não); | |
var pPronome = pronome.valorPalavra(pSubstantivo.gênero, pVerbo.número, Não, pVerbo.pessoa); | |
var pArtigo = artigo.valorPalavra(pSubstantivo.gênero, pSubstantivo.número, Não, Não); | |
var pAdjetivo = adjetivo.valorPalavra(pSubstantivo.gênero, pSubstantivo.número, Não, Não); | |
return [pPronome, pVerbo, pArtigo, pSubstantivo, pAdjetivo]; | |
} | |
function compilaFrase (palavras) { | |
var frase = ""; | |
for (var p in palavras) { | |
frase += palavras[p].letras + ((p<palavras.length-1)?" ":"."); | |
} | |
frase = frase.substr(0,1).toUpperCase()+frase.substr(1, frase.length); | |
return frase; | |
} | |
// Ponto de entrada no programa | |
function início () { | |
Dicionário.push(new Termo (Tipo.Pronome, [ | |
new Palavra ("eu", Ambos, Número.Singular, Nenhum, Pessoa.Primeira), | |
new Palavra ("nós", Ambos, Número.Plural, Nenhum, Pessoa.Primeira), | |
new Palavra ("tu", Ambos, Número.Singular, Nenhum, Pessoa.Segunda), | |
new Palavra ("vós", Ambos, Número.Plural, Nenhum, Pessoa.Segunda), | |
new Palavra ("você", Ambos, Número.Singular, Nenhum, Pessoa.Terceira), | |
new Palavra ("vocês", Ambos, Número.Plural, Nenhum, Pessoa.Terceira), | |
new Palavra ("ela", Gênero.Feminino, Número.Singular, Nenhum, Pessoa.Terceira), | |
new Palavra ("ele", Gênero.Masculino, Número.Singular, Nenhum, Pessoa.Terceira), | |
new Palavra ("elas", Gênero.Feminino, Número.Plural, Nenhum, Pessoa.Terceira), | |
new Palavra ("eles", Gênero.Masculino, Número.Plural, Nenhum, Pessoa.Terceira), | |
])); | |
Dicionário.push(new Termo (Tipo.Verbo, [ | |
new Palavra ("sou", Ambos, Número.Singular, Nenhum, Pessoa.Primeira), | |
new Palavra ("somos", Ambos, Número.Plural, Nenhum, Pessoa.Primeira), | |
new Palavra ("és", Ambos, Número.Singular, Nenhum, Pessoa.Segunda), | |
new Palavra ("sois", Ambos, Número.Plural, Nenhum, Pessoa.Segunda), | |
new Palavra ("é", Ambos, Número.Singular, Nenhum, Pessoa.Terceira), | |
new Palavra ("são", Ambos, Número.Plural, Nenhum, Pessoa.Terceira), | |
])); | |
Dicionário.push(new Termo (Tipo.Artigo, [ | |
new Palavra ("a", Gênero.Feminino, Número.Singular, Nenhum, Nenhuma), | |
new Palavra ("o", Gênero.Masculino, Número.Singular, Nenhum, Nenhuma), | |
new Palavra ("as", Gênero.Feminino, Número.Plural, Nenhum, Nenhuma), | |
new Palavra ("os", Gênero.Masculino, Número.Plural, Nenhum, Nenhuma), | |
])); | |
Dicionário.push(new Termo (Tipo.Substantivo, [ | |
new Palavra ("jumenta", Gênero.Feminino, Número.Singular, Nenhum, Nenhuma), | |
new Palavra ("jumento", Gênero.Masculino, Número.Singular, Nenhum, Nenhuma), | |
new Palavra ("jumentas", Gênero.Feminino, Número.Plural, Nenhum, Nenhuma), | |
new Palavra ("jumentos", Gênero.Masculino, Número.Plural, Nenhum, Nenhuma), | |
])); | |
Dicionário.push(new Termo (Tipo.Substantivo, [ | |
new Palavra ("cachorra", Gênero.Feminino, Número.Singular, Nenhum, Nenhuma), | |
new Palavra ("cachorro", Gênero.Masculino, Número.Singular, Nenhum, Nenhuma), | |
new Palavra ("cachorras", Gênero.Feminino, Número.Plural, Nenhum, Nenhuma), | |
new Palavra ("cachorros", Gênero.Masculino, Número.Plural, Nenhum, Nenhuma), | |
])); | |
Dicionário.push(new Termo (Tipo.Adjetivo, [ | |
new Palavra ("gorda", Gênero.Feminino, Número.Singular, Nenhum, Nenhuma), | |
new Palavra ("gordo", Gênero.Masculino, Número.Singular, Nenhum, Nenhuma), | |
new Palavra ("gordas", Gênero.Feminino, Número.Plural, Nenhum, Nenhuma), | |
new Palavra ("gordos", Gênero.Masculino, Número.Plural, Nenhum, Nenhuma), | |
])); | |
for (var i=0;i<4;i++) { | |
var frase = geraFrase (); | |
var cFrase = compilaFrase (frase); | |
document.write(cFrase + "<br/>"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment