From 5fcb84cfc036ee470a6469d65983249176b5a6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rau=CC=81l=20Nadal?= Date: Sat, 16 May 2020 21:57:30 +0200 Subject: [PATCH 1/4] Kata 1 --- src/kata1/rps.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/kata1/rps.py b/src/kata1/rps.py index defdd99..0ba0695 100644 --- a/src/kata1/rps.py +++ b/src/kata1/rps.py @@ -1,23 +1,30 @@ from random import randint +TIE = 'Empate!' +WIN = 'Ganaste!' +LOSE = 'Perdiste!' + options = ["Piedra", "Papel", "Tijeras"] -# El resultado de salida son las siguientes String -#'Empate!' -#'Ganaste!' -#'Perdiste!' +player_option = { + 'Piedra' : {'Piedra': TIE, 'Papel': LOSE, 'Tijeras': WIN}, + 'Papel': {'Piedra': WIN, 'Papel': TIE, 'Tijeras': LOSE}, + 'Tijeras': {'Piedra': LOSE, 'Papel': WIN, 'Tijeras': TIE}, +} + def quienGana(player, ai): - return "" + player = player.capitalize() + ai = ai.capitalize() + + return player_option[player][ai] -# Entry Point def Game(): - # - # - - # - # + player = input('Introduce Piedra, Papel o Tijeras: ') + ai = options[randint(0,2)] + + print ('Elejiste ' + player) + print ('AI elijio ' + ai) winner = quienGana(player, ai) print(winner) - From 969813c314142b5672fc4f13beb3c8e69c2ca366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rau=CC=81l=20Nadal?= Date: Sat, 16 May 2020 22:14:18 +0200 Subject: [PATCH 2/4] Kata 2 --- src/kata2/rpg.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/kata2/rpg.py b/src/kata2/rpg.py index b8339d2..9dc92e2 100644 --- a/src/kata2/rpg.py +++ b/src/kata2/rpg.py @@ -4,10 +4,10 @@ import string def RandomPasswordGenerator(passLen=10): - # - # - - # - # + allowedChars = string.ascii_lowercase + generatedSequence = [] - return "" + for i in range(passLen): + generatedSequence.append(random.choice(allowedChars)) + + return ''.join(generatedSequence) From eaac6e565a95009a54e6a453e18fe08832361387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rau=CC=81l=20Nadal?= Date: Sat, 16 May 2020 23:10:13 +0200 Subject: [PATCH 3/4] Kata 3 --- src/kata3/bot.py | 51 ++++++++++++++++++++------------------ src/kata3/bot_token.sample | 1 + 2 files changed, 28 insertions(+), 24 deletions(-) create mode 100644 src/kata3/bot_token.sample diff --git a/src/kata3/bot.py b/src/kata3/bot.py index 00f6b3b..3955682 100644 --- a/src/kata3/bot.py +++ b/src/kata3/bot.py @@ -2,30 +2,35 @@ from telegram.ext import Updater, CommandHandler, MessageHandler, Filters -# Activar logging logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) - -# Definimos algunas funciones para los comandos. Estos generalmente toman los dos argumentos update y context def start(update, context): - """Envia un mensaje cuando se emita el comando /start.""" - return "" + message = 'Hola, Geeks!' + update.message.reply_text(message) + + return message def help(update, context): - """Envia un mensaje cuando se emita el comando /help.""" - return "" + message = 'Ayudame!' + update.message.reply_text(message) + + return message def mayus(update, context): - # - return "" + result = [x.upper() for x in context.args] + result = ''.join(result) + update.message.reply_text(result) + + return result def alreves(update, context): - """Repite el mensaje del usuario.""" - # - return "" + result = update.message.text[::-1] + update.message.reply_text(result) + + return result def error(update, context): """Envia los errores por consola""" @@ -33,24 +38,22 @@ def error(update, context): def main(): """Inicio del Bot""" - #Colocamos el Token creado por FatherBot - updater = Updater("", use_context=True) - # Es el Registro de Comandos a través del dispartcher - dp = # + updater = Updater( + token=open("./bot_token").read(), + use_context=True + ) + + dp = updater.dispatcher - # Añadimos a la lista de Registro todos los comandos con su función [start - help - mayus] - # - # - # + dp.add_handler(CommandHandler('start', start)) + dp.add_handler(CommandHandler('help', help)) + dp.add_handler(CommandHandler('mayus', mayus)) - # Este comando es un Trigger que se lanza cuando no hay comandos [alreves] - # + dp.add_handler(MessageHandler(Filters.text, alreves)) - # Y este espera al error dp.add_error_handler(error) - # Lanzamos el Bot updater.start_polling() updater.idle() diff --git a/src/kata3/bot_token.sample b/src/kata3/bot_token.sample new file mode 100644 index 0000000..f15e4c8 --- /dev/null +++ b/src/kata3/bot_token.sample @@ -0,0 +1 @@ +123456789:ABCdeFghij1k2L3MnOPQr45S_TU6vwXY6Z7 \ No newline at end of file From d30d99165059fc1fc0b398cf0593c4b4c6d26aab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rau=CC=81l=20Nadal?= Date: Sun, 17 May 2020 11:32:39 +0200 Subject: [PATCH 4/4] Kata 4 --- src/kata4/snake.py | 109 +++++++++++++++++++++------------------------ 1 file changed, 50 insertions(+), 59 deletions(-) diff --git a/src/kata4/snake.py b/src/kata4/snake.py index 4713296..2bd796c 100644 --- a/src/kata4/snake.py +++ b/src/kata4/snake.py @@ -1,42 +1,44 @@ import pygame, sys, time, random from pygame.locals import * -#pygame.init() -#play_surface = pygame.display.set_mode((500, 500)) -#fps = pygame.time.Clock() - class Snake(): position = [100,50] body = [[100,50], [90,50],[80,50]] direction = "RIGHT" change = direction - - # Manejo del pressed [KEYDOWN] de las teclas [K_RIGHT - K_LEFT - K_UP -K_DOWN ] + speed = 10 + + VALID_DIRECTIONS = { + 'RIGHT': ['UP', 'DOWN'], + 'LEFT': ['UP', 'DOWN'], + 'UP': ['RIGHT', 'LEFT'], + 'DOWN': ['RIGHT', 'LEFT'], + } + def controller(self, event, pygame): + movement_key_map = { + pygame.K_RIGHT: 'RIGHT', + pygame.K_LEFT: 'LEFT', + pygame.K_UP: 'UP', + pygame.K_DOWN: 'DOWN', + } + + if event.type == pygame.KEYDOWN: + if event.key in movement_key_map: + self.change = movement_key_map[event.key] - # Controla el cambio de las direcciones - # Orientaciones - # Vertical -> Movimientos [RIGHT - LEFT] - # Horizontal -> Movimientos [UP - DOWN] - # Incremento del movimiento def changeDirection(self): - # - # - # - # - # - # - # - # - - # - # - # - # - # - # - # - # + if self.change in self.VALID_DIRECTIONS[self.direction]: + self.direction = self.change + + if self.direction == 'RIGHT': + self.position[0] += self.speed + if self.direction == 'LEFT': + self.position[0] -= self.speed + if self.direction == 'UP': + self.position[1] -= self.speed + if self.direction == 'DOWN': + self.position[1] += self.speed self.body.insert(0, list(self.position)) @@ -50,52 +52,42 @@ def __init__(self): # función de salida def exit(self, event, pygame): + pass # # - # Posición aleatorio entre el ranto [0,49] * 10 - def food_spawn(self): - self.food_pos = 0 + def food_spawn(self): + new_x = random.choice(range(0, 49)) * 10 + new_y = random.choice(range(0, 49)) * 10 + + self.food_pos = [new_x, new_y] - # Si colisionas con una fruta, sumas 1 - # Sino decrementas en 1 el body del snake def eat(self, snake): - # - # - # - # - # - - # Mensajes de salida cuando el snake muere - # Posición snake[0] >= 500 ó snake[0] <= 0 -> Muere - # Posición snake[1] >= 500 ó snake[1] <= 0 -> Muere - # Posición del snake choca con sigo mismo menos la cabeza -> Muere - def dead(self, snake): - # - # - # + if snake.position == self.food_pos: + self.food_spawn() + self.score += 1 + else: + snake.body.pop() - # - # - # - - # - # - # - - -# Entry Point + def dead(self, snake): + is_in_playground = 0 < snake.position[0] < 500 and 0 < snake.position[1] < 500 + is_self_collision = snake.position in snake.body[2:] + if not is_in_playground or is_self_collision: + Game.run = False + else: + Game.run = True + def main(): # Descomentar para lanzar el juego en local # Comentar para validar con el oráculo # pygame.init() # play_surface = pygame.display.set_mode((500, 500)) # fps = pygame.time.Clock() + snake = Snake() game = Game() - # Bucle principal while game.run: for event in pygame.event.get(): game.exit(event, pygame) @@ -105,7 +97,6 @@ def main(): game.eat(snake) - # Dibujar Snake play_surface.fill((0,0,0)) for pos in snake.body: pygame.draw.rect(play_surface, (200,200,200), pygame.Rect(pos[0], pos[1], 10, 10))