Un pequeño ejercicio de Ruby que he tenido que hacer en el curso de SaaS de Berkeley (en EdX) es un método que «juegue» al tres en raya. Recibiendo un array bidimimensional (la variable game en el ejemplo) debe devolver el resultado de qué jugador sería el ganador. Si hay más de dos jugadores devuelve una excepción, y si alguno mete una letra que no sea R (rock), P (paper), S (scissors) lanza otra excepción (ambas vienen ya dadas en el código de ejemplo). Finalmente, si ambos sacan lo mismo da como ganador al jugador 1 (¿por qué? pues porque es lo que pide el enunciado a reclamarle al maese armero)
En fin, el código sería tal que así:
class WrongNumberOfPlayersError < StandardError ; end class NoSuchStrategyError < StandardError ; end def rps_game_winner(game) raise WrongNumberOfPlayersError unless game.length == 2 game[0][1] = game[0][1].downcase game[1][1] = game[1][1].downcase raise NoSuchStrategyError if game[0][1] != 'r' and game[0][1] != 'p' and game[0][1] != 's' raise NoSuchStrategyError if game[1][1] != 'r' and game[1][1] != 'p' and game[1][1] != 's' ganador = 0 if game[0][1] == 'r' if game[1][1] == 'r' elsif game [1][1] == 'p' ganador = 1 else end elsif game[0][1] == 'p' if game[1][1] == 'r' elsif game [1][1] == 'p' else ganador = 1 end else if game[1][1] == 'r' ganador = 1 elsif game [1][1] == 'p' else end end return game[ganador] end
La chicha viene con la segunda parte del ejercicio, el modo tournament. Este recibe un array de arrays bidimensionales con todos los enfrentamientos (hay que suponer que están bien formados y bien anidados, y debe permitir cualquier cantidad de jugadores, siempre que crezcan en progresión de potencias de 2: 4,8,16,32… piensa el cualquier Play off de cualquier deporte) y los recorre como una eliminatoria. Ponen como ejemplo que reciba algo tal que así:
[
[
[ ["Armando", "P"], ["Dave", "S"] ],
[ ["Richard", "R"], ["Michael", "S"] ],
],
[
[ ["Allen", "S"], ["Omer", "P"] ],
[ ["David E.", "R"], ["Richard X.", "P"] ]
]
]
Ok, ¿qué hacer frente al anidamiento? Pues recursividad, tema que ya explicamos. En este caso, el método comprobará que cada array a su vez contenga un array y si es así vuelve a llamarse a si mismo hasta que llegue a un enfretamiento, donde entonces llamará al método de la primera parte para devolver al ganador.
def rps_tournament_winner(tournament)
if tournament[0][0].kind_of?(Array)
rps_game_winner([rps_tournament_winner(tournament[0]), rps_tournament_winner(tournament[1])])
else
rps_game_winner(tournament)
end
end
Y con esto y un bizcocho, ejercicio realizado. Lo he enviado y ya está corregido, y me ha dado el 100%, así que espero que os aclare las dudas. (Como dice un colega mío «no me copiar, me cago en Satán»… en fin, o sí, que yo tampoco soy ni profesor ni vuestro padre). En todo caso veis que con la recursividad un simple if/else resuelve toda la carga de trabajo en cinco líneas (bueno, realmente dos)
Ayudame con las Tareas que yo soy Novato… Por Favor
Bueno, tienes dos colgadas por aquí, ¿qué dudas tienes?
estoy en las mejoras del ROTTENPOTATOES, la verdad como hay que hacer?
subir los archivos individuales o subir al servidor.
los manes te dan instrucciones pero mi ingles es bueno pero aveces no tanto.
Tienes que hacerte una cuenta en Heroku, desde ahí descargar el cliente de Heroku y Git y, desde línea de comandos, ejecutar Heroku y Git (siguiendo los pasos que te dan en el manual de ayuda de la página de heroku) para subir todo el proyecto allí. Luego como respuesta al ejercicio tienes que enviar un .txt con el link que te den en Heroku de tu app.
muy bueno,, aqui uno en html piedra papel o tijera tutorial http://www.youtube.com/watch?v=DYC9FXKUkQc&list=UUg0nfT0AjMj2h4Ere_stUhw