Giter VIP home page Giter VIP logo

tapsi-challenge's Introduction

Tapsi-challenge

Proyecto que soluciona el desafio propuesto por tapsi.

Problema

Dado un tablero de damas y el turno de un jugador, encontrar un movimiento que permita comer una ficha, si no existe tal, encontrar un movimiento sencillo (es decir un movimiento valido donde no se come una ficha)

Dependencias

  • Lenguaje : Go lang 1.8.3
  • Librerias externas : github.com/gorilla/mux

Requisitos para la solucion

  • Se asume que se encuentra un bloque negro en la parte inferior izquierda de cada jugador
  • No se tiene un limite de fichas por cada jugador
  • Se asume que si no hay fichas de un jugador, el otro jugador ya ha ganado y no se pude hacer una jugada
  • Se asume que si no hay fichas, el estado del tablero no es correcto
  • Se asume que las fichas blancas empiezan en la parte de abajo y las negras arriba
  • Se asume que no hay reyes, es decir fichas que se encuentran al otro extremo de donde empezaron.
  • Si no existe una jugada posible se informara en la respuesta
  • El tablero debe ser de 8 *8

Tablero de ejemplo

picture alt

Si el request tiene inconsistencias se retorna un Bad Request

Solucion

Se busca en todo el tablero las fichas del jugador en turno, cada que se encuentra una de estas, se verifica que a un cuadro de distancia en la diagonal de su posible movimiento, se encuentre una ficha del jugador contrario, si esta condicion se da, se verifica que a dos cuadros de distancia en la diagonal exista un cuadro vacio, de cumplirse ambas condiciones, se retorna la solucion, de no ser asi se siguen comprobando ficha por ficha.

De no encontrar ninguna ficha que cumpla con las condiciones anteriores, se deduce que no hay un movimiento que permita comer una ficha, lo que conduce a que se busque hacer un movimiento simple, este movimiento se puede dar solo si a un cuadro de distancia en la diagonal de posible movimiento este se encuentra vacio.

Request

Se espera un request que contenga los siguientes campos:

board : un string con 64 caracteres los cuales pueden ser w, b, 0 player : un string que representa que jugador tiene el turno de juego, los valores pueden ser w o b

w = white b = black 0 = casillas vacias

Respuesta

La respuesta estara dada por un Json con la siguiente estructura: {"play" : valor, "play2d" : valor, "error" : valor}

donde el valor de play indica la posicion inicial en el string de entrada donde empezo la ficha y la posicion final despues de hacer el movimiento

play2d indica la posicion inicial y la posicion final en formato de matriz donde la esquina superior izquierda es representada por el valor (0,0) y la esquina inferior derecha es representada por el valor (7,7)

error indica si no se pudo realizar un movimiento con la configuracion dada

Ejemplo

Si se corre el proyecto localmente y usando CURL se podria usar como request curl -H "Content-Type: application/json" -d '{"board":"00000000000000000000000000000000000b00000000w0000000000000000000", "player" : "w"}' http://localhost:7100/move

Obtenemos como response {"play":"44-26","play2d":"( 5,4 ) -> ( 3,2 )","error":""}

tapsi-challenge's People

Contributors

eriksencosta avatar jfsanin avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.