Kata Tennis Octubre 2012 de
12meses12katas.com

En esta kata nos divertiremos implementando las reglas del tennis algo simplificadas.

Enunciado
En esta kata, nos centraremos únicamente en el sistema de puntuaciones del tennis. El sistema de puntuaciones del tennis es del estilo "back and forth", que presenta un tipo distinto de puntuaciones de otras katas como podría ser la Kata Bownling.

Para simplificar la kata, sólo se jugará un set del partido. Una vez terminado, habrá un ganador.

Normas del tennis

Básicas
En el juego del tennis, un jugador comienza con puntación 0. Los puntos se ganan en la siguiente secuencia: 0 -> 15 -> 30 -> 40

Si un jugador consigue 40 y puntua de nuevo, el jugador gana el juego, siempre que el otro jugador no tenga 40 puntos en ese momento. Si los dos jugadores tienen al mismo tiempo 40 puntos, a esto se llama "iguales" (deuce en inglés)

Iguales
Puntuar durante iguales, da al jugador "ventaja". Si el otro jugador puntua en ese momento, la puntuación vuelve a iguales.

Si un jugador tiene "ventaja" y puntua de nuevo, el jugador gana el juego.

Requerimientos

Escribe un programa para manejar cada uno de los siguientes requerimientos de puntuación de dos jugadores del juego de tennis.
  • Los jugadores deben poder ganar puntos.
  • El juego debe terminar con un ganador.
  • Debes de manejar la casuística de "iguales"
  • Después de terminar el juego, debe determinarse quién es el ganador.
  • Debe ser posible obtener la puntuación de cualquier de los jugadores en cualquier momento del partido.

Fuente original: http://codingdojo.org/cgi-bin/wiki.pl?KataTennis

Ver todo el enunciado

Preguntas sobre el desafío

¿Tienes dudas sobre el desafío? plantéala aquí

Plantea tu pregunta

36 Soluciones

Dar mi solución

0votos
Kata Tennis en PL-SQL
por

Raul GM

hace 29 días

He creado una función que devuelve los campos de una tabla como cursor. No hace falta, pero es otra forma de resolver la Kata. Para hacer que juegue he hecho un random que devuelve un entero 1 o 2. He necesitado saber el jugador contrario al que ganaba punto. Es decir: Si el random devuelve 1, necesitaba acceder también al jugador 2. Lo que he hecho para volverlo eficiente y no usar un condicional 'si' es: absoluto de ("valor_random" - 3). Si random es 1, entonces obtendríamos 2.

0votos
Kata Tennis en Java
por

PedroGF

hace 4 meses

Esta es mi humilde solución en mi camino hacia el aprendizaje de java. Para ser mi primera aplicación, estoy muy contento de que simplemente funcione. Espero poder contribuir en esta gran idea de katas, y poder aprender de vosotros. Un saludo a todos.

0votos
Kata Tennis en Ruby
por

olareoun

hace 5 meses

Habría que dar un repaso a TennisScorePrinter que no me gusta mucho. Y es probable que los propios tests se pudiesen refactorizar un poco. Pero con un rspec -f documentation queda chulo ver el flujo de juego en los tests.

1voto
Kata Tennis en Python
por

Javier J.

usando Python hace 5 meses

Añado una solución más a la kata en Python. Esta solución aplica Test-Driven Development de una manera bastante estricta. Esta kata la utilizamos en la reunión del grupo Python-Sevilla del pasado viernes 30 de noviembre de 2.012. Tenéis una introducción a Python y TDD y una descripción paso a paso de cómo resolver esta kata aplicando TDD en mi blog aquí: http://iwt2-javierj.tumblr.com/post/37025295658/retrospectiva-y-autocritica-de-la-charla-ptdd-y-python Saludos.

0votos
Kata Tennis en C++
por

trikitrok

usando CppUTest 2dot3 hace 6 meses

Este es el resultado de refactorizar mi solución de la kata tennis hacia el State Pattern. Puedes ver la evolución del código en: https://bitbucket.org/trikitrok/kata-tennis-c y una explicación del código en: http://garajeando.blogspot.com.es/2012/11/refactoring-kata-tennis-to-state-pattern.html

0votos
Kata Tennis en Python
por

Andres F. Cardenas

usando random hace 6 meses

Bien, parece ser que esta es una solución, tal vez no la mejor pero si una buena a la kata en Python, ejecutando el archivo se crean dos instancias de la clase Player después se llama a la función game que recibe las dos instancias y que se encarga de ejecutar la lógica del juego. Use la librería random para emular el juego de los dos jugadores... útil para apostar con los amigos porque no se sabe cual de los dos jugadores ganara :D. Estoy abierto a cualquier sugerencia, critica o mejora ;)

0votos
Kata Tennis en PHP
por

Rober Martín H

hace 6 meses

He utilizado una única clase ("TennisGame") que se encarga de controlar el juego. Los tests evolucionan desde un 0 a 0 inicial, hasta la victoria de uno de los jugadores tras obtener "ventaja", sin olvidar el caso de victoria sin necesidad de llegar a "ventaja".

0votos
Kata Tennis en JavaScript
por

David Alfonso

hace 7 meses

He utilizado Jasmine haciendo BDD y tratando de que las pruebas no fueran tests de unidad (aunque al final se parece mucho, según lo mires). Ha sido mi primer proyecto en Javascript, por lo que cualquier comentario será bienvenido, aunque tampoco me he preocupado mucho por la eficiencia ni usar las estructuras más adecuadas. El objetivo era hacer BDD by the book, i.e. escribir especificación, implementar y pasar el test. También he hecho refactoring donde ha surgido.

0votos
Kata Tennis en Java
por

Mateu Adsuara

hace 7 meses

Se trata de una solución orientada a objetos. He intentado que el código sea lo más legible, lógico y simple posible... Sé que aún puede mejorar, pero estoy bastante contento con el resultado.

0votos
Kata Tennis en PHP
por

Gonzalo Ayuso

hace 7 meses

Aqui va otra con unos callbacks para definir el final y los deuces (eso de andar mirando en cada bola si la partida termina me parece muy 1.0). Esta vez he afrontado el problema de la prespectiva de Jugador y Partida, delegando la responsabilidad de contar al jugador y a la partida la de decidir cuando acaba y las ventajas. https://github.com/gonzalo

0votos
Kata Tennis en JavaScript
por

bruno

hace 7 meses

El constructor Game() se encarga de gestionar todo el juego: instancia los jugadores y controla la casuística de los puntos. Utilizo 'Jasmine' para realizar los test unitarios.

0votos
Kata Tennis en Ruby
por

Federico Saravia

hace 7 meses

Utilizo dos clases: Match y Game, los jugadores son identificados como "Player 1" y "Player 2". Cada game se juega hasta que uno de los jugadores gana, en ese momento se crea un nuevo game. El juego termina cuando uno de los jugadores obtiene un puntaje mayor a 6 games y una diferencia de 2 o mas con su contrincante

0votos
Kata Tennis en PHP
por

Gonzalo Ayuso

hace 7 meses

Solución con PHP. Una sola clase para la partida. Entiendo que no aporta nada usar clases para los jugadores. El fin de la partida lanza una excepción. https://github.com/gonzalo123/KataTennis

0votos
Kata Tennis en Haskell
por

josejuan

hace 7 meses

Controla todas las reglas (punto, juego, set y partido; no controla muerte súbita, pero ésta es un "añadido" a las reglas que depende de cada torneo) con un número arbitrario de sets.

0votos
Kata Tennis en Python
por

Rock

hace 7 meses

Dos clases, Player y Game, al haberlo hecho en una kata (15 minutos), no está pulido, y todos los metodos que deberian estar en Game, estan en Player...

0votos
Kata Tennis en Java
por

nRikee

hace 7 meses

Es mi primera Kata. He usado tres clases, "Partido", "Marcador" y "Jugador". He incluido opciones que no están desarrolladas, como poder elegir el nombre de los jugadores. Por si la quisiera ampliar. Y bueno, espero opiniones.

1voto
Kata Tennis en Groovy
por

rchavarriat

hace 9 meses

Existen 3 clases principales: * Player: representa a un jugador y actualiza su puntuación y contabiliza los juegos ganados * Game: puntua a un jugador o a otro dependiendo de quien haya echo el punto. Representa un juego en el partido de tenis. Proclama a un ganador del juego * Set: representa a un set del partido. Proclama a un ganador del set al primer jugador con 6 juegos

1voto
Kata Tennis en Java
por

jramallo

hace 12 meses

Mi primera 'Kata' espero no haberla hecho muy mal :-(. He solucionado el problema creando una variable con los puntos y luego he ido jugando con las posiciones para definir los puntos de cada jugador. Para el control de juegos he utilizado dos contadores normales. Para crear el punto he creado una función que crea un número aleatorio que si es par da el punto a un jugador y si es impar al otro.

Dar mi solución