Skip to content

Instantly share code, notes, and snippets.

@Codelaby
Created May 2, 2023 15:41
Show Gist options
  • Save Codelaby/84a9e6be0aff6634909e324b0aaf2848 to your computer and use it in GitHub Desktop.
Save Codelaby/84a9e6be0aff6634909e324b0aaf2848 to your computer and use it in GitHub Desktop.
Juego de papel tijeras spock en Swift
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)
@Codelaby
Copy link
Author

Codelaby commented May 2, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment