Created
May 2, 2023 15:41
-
-
Save Codelaby/84a9e6be0aff6634909e324b0aaf2848 to your computer and use it in GitHub Desktop.
Juego de papel tijeras spock en Swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
enum GameResult : String { | |
case player1 = "Player 1" | |
case player2 = "Player 2" | |
case tie = "Tie" | |
} | |
enum Move: String { | |
case rock = "πΏ" | |
case paper = "π" | |
case scissors = "βοΈ" | |
case lizzard = "π¦" | |
case spock = "π" | |
} | |
typealias Game = (Move, Move) | |
func checkForWinner(game: Game) -> GameResult { | |
switch game { | |
case (.scissors, .paper): return .player1 | |
case (.paper, .scissors): return .player2 | |
case (.rock, .scissors): return .player1 | |
case (.scissors, .rock): return .player2 | |
case (.paper, .rock): return .player1 | |
case (.rock, .paper): return .player2 | |
case (.rock, .lizzard): return .player1 | |
case (.lizzard, .rock): return .player2 | |
case (.lizzard, .spock): return .player1 | |
case (.spock, .lizzard): return .player2 | |
case (.spock, .scissors): return .player1 | |
case (.scissors, .spock): return .player2 | |
case (.scissors, .lizzard): return .player1 | |
case (.lizzard, .scissors): return .player2 | |
case (.lizzard, .paper): return .player1 | |
case (.paper, .lizzard): return .player2 | |
case (.paper, .spock): return .player1 | |
case (.spock, .paper): return .player2 | |
case (.spock, .rock): return .player1 | |
case (.rock, .spock): return .player2 | |
// Agrega el caso para el empate | |
case let (move1, move2) where move1 == move2: return .tie | |
default: return .player1 | |
} | |
} | |
func parseInput(_ moves: [(String, String)]) -> [Game] { | |
return moves.compactMap { (move1, move2) -> Game? in | |
guard | |
let player1Move = Move(rawValue: move1), | |
let player2Move = Move(rawValue: move2) | |
//player1Move != player2Move | |
else { | |
return nil | |
} | |
return (player1Move, player2Move) | |
} | |
} | |
func calculateTotalScore(for winners: [GameResult]) -> GameResult { | |
var p1Score = 0 | |
var p2Score = 0 | |
var tieScore = 0 | |
for winner in winners { | |
switch winner { | |
case .player1: p1Score += 1 | |
case .player2: p2Score += 1 | |
case .tie: tieScore += 1 | |
} | |
} | |
if p1Score > p2Score { | |
return .player1 | |
} | |
if p2Score > p1Score { | |
return .player2 | |
} | |
return .tie | |
} | |
func solve3(_ input: [(String, String)]) { | |
let games = parseInput(input) | |
let winners = games.map(checkForWinner) | |
let result = calculateTotalScore(for: winners) | |
// Print game results | |
print("π₯ resolution battle:") | |
for (index, game) in games.enumerated() { | |
let winner = winners[index] | |
print("\(game.0.rawValue) vs \(game.1.rawValue) = \(winner)") | |
} | |
// Print total score | |
switch result { | |
case .player1: print("π \"\(result.rawValue)\"") | |
case .player2: print("π \"\(result.rawValue)\"") | |
case .tie: print("π€· \"\(result.rawValue)\"") | |
} | |
print("") | |
} | |
//πΏπβοΈπ¦π | |
let games1 = [ | |
("πΏ", "βοΈ"), | |
("βοΈ", "πΏ"), | |
("π", "βοΈ"), | |
("βοΈ", "π"), | |
("π", "πΏ") | |
] | |
let games2 = [ | |
("πΏ", "π"), | |
("π¦", "π"), | |
("π", "π¦"), | |
("π¦", "πΏ"), | |
("πΏ", "π¦") | |
] | |
let games3 = [ | |
("π¦", "π"), | |
("π", "π¦"), | |
("π", "π"), | |
("π", "π"), | |
("π", "πΏ") | |
] | |
let games4 = [ | |
("πΏ", "π"), | |
("π", "πΏ"), | |
("π", "βοΈ"), | |
("βοΈ", "π"), | |
] | |
solve3(games1) | |
solve3(games2) | |
solve3(games3) | |
solve3(games4) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Se puede testear en linea:
https://swiftfiddle.com/jriwpyvbsrdt7oyp7c7omr3jre