Artículo
· 13 hr atrás Lectura de 4 min

Señoras y señores, el asombroso Iris-nator

   

El asombroso Iris-nator ha llegado a la ciudad.

Sabe lo que piensas, con sólo unas preguntas es capaz de adivinar el personaje en el que has pensado.

¿Te atreves?

Algunos conoceréis el juego Akinator, en el que un genio es capaz de adivinar el personaje en el que has pensado, mientras respondes «sí» o «no» a unas simples preguntas.

No hay una IA analizando tus redes sociales, No hay micrófonos escuchando... ¿Y cómo lo hace?

El secreto es un sencillo algoritmo y mucha gente jugando y alimentando la base de datos.

 

¿Cómo funciona?

Definamos un término: Nodo.

Un nodo puede ser una pregunta o el nombre del personaje.

Si es una pregunta, tendrá dos respuestas: Sí o No.

Ahora vamos a darle un valor.

A la pregunta le daremos el Id 1, a la respuesta afirmativa, le daremos el Id 2 y a la respuesta negativa, el Id 3.

Ahora imaginemos que tanto la respuesta afirmativa como la negativa devuelven otra pregunta, con los personajes correspondientes para «sí» y «no».

Podemos ver un patrón entre las preguntas y las respuestas.

Las respuestas afirmativas son el doble del identificador de la pregunta, y las negativas son el doble del identificador de la pregunta más uno.

Entonces, si tenemos el nodo n, el siguiente nodo a mostrar será el nodo n*2 si la respuesta es "sí" o el nodo (n*2)+1 si la respuesta es "no".

Pongamos un ejemplo:

 

Supongamos que pienso en Snoopy, y la pregunta es «¿Tu personaje es ficticio?», la respuesta “sí” nos dirá que el personaje en el que hemos pensado es «Superman», pero no es correcta.

¿Cómo convertimos nuestra respuesta en una pregunta que nos lleve a Snoopy?

Necesitamos una característica que nos diferencie de Superman, en este caso preguntaremos «¿Tu personaje es un perro?», entonces, la respuesta afirmativa sería “Snoopy” y la negativa «Superman».

Esta nueva pregunta sustituirá el Id del nodo «Superman», el personaje “Snoopy” tendrá el doble del nodo de la nueva pregunta y el personaje «Superman» tendrá el doble del nodo de la nueva pregunta más uno.

 

De este modo, si creamos muchas preguntas y respuestas, nuestro Iris-nator podrá adivinar cualquier personaje que se te haya ocurrido.

¿Cómo funciona Iris-nator?

Crear una tabla con información de los nodos:

Class Irisnator.Data.Nodes Extends %Persistent
{

/// NodeId
Property NodeId As %Numeric;
/// Text of the node
Property Text As %String(MAXLEN = "");
/// Type of node (0 = text, 1 = question)
Property Question As %Boolean [ InitialExpression = 0 ];
/// Verb of the question
Property Verb As %String(MAXLEN = "");
}

Nota: ¿Por qué hay un campo llamado «verbo»? porque está pensado para responder en inglés, la pregunta se muestra como {verbo} su personaje {texto} ? por lo tanto, necesita saber cual es el verbo (is, had, does, etc...) que va al inicio de la frase.

El front-end está creado con Angular19, para comunicarme con IRIS, he creado varios métodos API:

GET localhost:52773/irisnator/api/node/:nodeId

Devuelve la información sobre el nodo, también el NodId para la respuesta Sí y No

{
    "nodeId": 1,
    "text": "a woman",
    "verb": "is",
    "question": true,
    "nodeYes": 2,
    "nodeNo": 3
}

GET localhost:52773/irisnator/api/score/:top

Devuelve la puntuación máxima. Esta puntuación máxima es el número de veces que un personaje ha sido acertado.

{
    "score": [
        {
            "characterName": "Spiderman",
            "score": 8
        },
        {
            "characterName": "Maddona",
            "score": 3
        },
        {
            "characterName": "Snoopy",
            "score": 1
        }
    ]
}

POST localhost:52773/irisnator/api/node

Cuando Iris-nator no ha sido capaz de adivinar tu personaje, rellenamos un formulario con los datos del nuevo personaje, y cuál sería la pregunta a realizar para diferenciarlo del personaje al que había llegado.

Entonces, movemos el personaje actual a respuesta «no», y ponemos el id a la nueva pregunta.

{
    "nodeId": 507,
    "newCharacter": "Snoopy",
    "oldCharacter": "Bugs Bunny",
    "text": "a dog",
    "verb": "is"
}

Además, añadirá a Snoopy como personaje que ha fallado.

POST localhost:52773/irisnator/api/score

Este método establece la puntuación de un personaje, si ha tenido éxito o no.

{
    "characterName": "Snoopy",
    "success": true
}


Puedes ver el siguiente vídeo de cómo funciona la aplicación, ¡¡¡disfrútalo!!!

https://www.youtube.com/embed/v5GsiXJDgC8
[Este es un enlace integrado, pero no puede ver el contenido integrado directamente en el sitio porque rechazó las cookies que se necesitan para acceder a él. Para ver el contenido integrado, debe aceptar todas las cookies desde la Configuración de cookies]

Comentarios (1)2
Inicie sesión o regístrese para continuar