O incrível Iris-nator chegou à cidade. Ele sabe o que você pensa, com apenas algumas perguntas ele é capaz de adivinhar o personagem em que você pensou. Você se atreve?
Alguns de vocês podem conhecer o jogo Akinator, onde um gênio é capaz de adivinhar o personagem em que você pensou, enquanto você responde “sim” ou “não” a uma pergunta simples.
Sem IA analisando suas redes sociais, sem microfones escutando... Então, como ele faz isso?
O segredo é um algoritmo simples e muitas pessoas jogando e alimentando o banco de dados.
Como funciona?
Vamos definir um termo: Nó.
Um nó pode ser uma pergunta ou o nome do personagem.
Se for uma pergunta, terá duas respostas: Sim ou Não.
Agora vamos dar um valor a ele.
À pergunta daremos o Id 1, à resposta afirmativa, daremos o Id 2 e à resposta negativa, o Id 3.
Agora vamos imaginar que ambas as respostas afirmativa e negativa retornam outra pergunta, com os personagens correspondentes para “sim” e “não”.
Podemos ver um padrão entre as perguntas e as respostas.
Respostas afirmativas são o dobro do identificador da pergunta, e respostas negativas são o dobro do identificador da pergunta mais um.
Então, se temos o nó n, o próximo nó a ser exibido será o nó n×2 se a resposta for "sim" ou o nó (n×2)+1 se a resposta for "não".
Vamos dar um exemplo:
Suponha que eu pense no Snoopy, e a pergunta seja "Seu personagem é fictício?", a resposta "sim" nos dirá que o personagem em que pensamos é o "Superman", mas não está correto.
Como transformamos nossa resposta em uma pergunta que nos leva ao Snoopy?
Precisamos de uma característica que nos diferencie do Superman, neste caso perguntaremos "Seu personagem é um cachorro?", então, a resposta afirmativa seria "Snoopy" e a resposta negativa seria "Superman".
Esta nova pergunta substituirá o Id do nó "Superman", o personagem "Snoopy" terá o dobro do nó da nova pergunta e o personagem "Superman" terá o dobro do nó da nova pergunta mais um.
Dessa forma, se criarmos muitas perguntas e respostas, nosso Iris-nator será capaz de adivinhar qualquer personagem em que você pensou.
Como o Iris-nator funciona?
Crie uma tabela com informações dos nós:
Class Irisnator.Data.Nodes Extends %Persistent
{
/// NodeId
Property NodeId As %Numeric;
/// Texto do nó
Property Text As %String(MAXLEN = "");
/// Ttipo do nó (0 = texto, 1 = pergunta)
Property Question As %Boolean [ InitialExpression = 0 ];
/// Verbo da pergunta
Property Verb As %String(MAXLEN = "");
}
Observação: Por que existe um campo chamado "verbo"? Porque a pergunta é mostrada como {verbo} seu personagem {texto}? Portanto, é necessário saber qual é o verbo (é, tinha, faz, etc...).
O front-end foi criado com Angular 19. Para se comunicar com o IRIS, criei vários métodos de API:
GET localhost:52773/irisnator/api/node/:nodeId
Retorna as informações sobre o nó, e também o NodId para as respostas Sim e Não.
{
"nodeId": 1,
"text": "a woman",
"verb": "is",
"question": true,
"nodeYes": 2,
"nodeNo": 3
}
GET localhost:52773/irisnator/api/score/:top
Retorna a pontuação máxima. Essa pontuação máxima é o número de vezes que um personagem foi acertado.
{
"score": [
{
"characterName": "Spiderman",
"score": 8
},
{
"characterName": "Maddona",
"score": 3
},
{
"characterName": "Snoopy",
"score": 1
}
]
}
POST localhost:52773/irisnator/api/node
Quando o Iris-nator não consegue adivinhar seu personagem, preenchemos um formulário com os dados do novo personagem e qual seria a pergunta a fazer para diferenciá-lo do personagem a que ele chegou.
Então, movemos o personagem atual para a resposta "não" e colocamos o ID na nova pergunta.
{
"nodeId": 507,
"newCharacter": "Snoopy",
"oldCharacter": "Bugs Bunny",
"text": "a dog",
"verb": "is"
}
Além disso, ele adicionará Snoopy como um personagem que ele não conseguiu adivinhar.
POST localhost:52773/irisnator/api/score
Este método define a pontuação de um personagem, se foi um sucesso ou não.
{
"characterName": "Snoopy",
"success": true
}
Você pode assistir ao seguinte vídeo de como o aplicativo funciona, aproveite!!!