Skip to content

Instantly share code, notes, and snippets.

@felipetavares
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save felipetavares/5fd253e48a06e97f3f1a to your computer and use it in GitHub Desktop.
Save felipetavares/5fd253e48a06e97f3f1a to your computer and use it in GitHub Desktop.
// 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