- Executores
-
Aprender
Aprender Python Exemplos executáveis, NumPy, pandas e mais Aprender IARedes neurais, ML e LLMs do zero Aprender C e C++ Ponteiros, memória, STL e C++ moderno Aprender C#Fundamentos, POO, LINQ, async e exercícios .NET Aprender MatplotlibGráficos de linha, barras, dispersão e pizza com visualizadores Algoritmos em Python Busca, ordenação, recursão e visualizações O(n) Algoritmos em C e C++ Compare implementações em C e C++ Programação para crianças Aprenda a programar brincando!
- DesafiosNovo
- Para professoresNovo
- Atualizações
- Me pague um café
Minimax é como os programas de jogos escolhem jogadas: suponha que os dois jogadores jogam perfeitamente, dê uma pontuação a cada partida terminada e suba as pontuações pela árvore de jogo. O jogador da vez escolhe o filho com a maior pontuação para si.
O tabuleiro é uma string de 9 caracteres lida linha por linha (índices 0-8), com "X", "O" ou "." para uma casa vazia. X sempre começa, então é a vez de X quando os dois têm o mesmo número de marcas, e a vez de O caso contrário.
Pontue uma partida terminada do ponto de vista do jogador da vez: +1 por vitória, 0 por empate, -1 por derrota. Retorne a casa vazia cuja jogada tem a melhor pontuação minimax; se várias forem igualmente boas, retorne o menor índice.
Implemente best_move(board).
Entrada
board: Uma posição válida em que ninguém venceu ainda e há pelo menos uma casa vazia.
Saída
Retorne o índice (0-8) da melhor jogada.
Restrições
board tem exatamente 9 caracteres, cada um X, O ou .
A posição pode ocorrer em uma partida real, ninguém venceu e há pelo menos uma casa vazia
Exemplos
Exemplo 1
Entrada:
board = "XX.OO...."
Saída esperada:
2
Explicação
X e O têm duas marcas cada, então é a vez de X. Jogar em 2 completa a linha de cima e vence na hora (+1).
Exemplo 2
Entrada:
board = "X..OO...X"
Saída esperada:
5
Explicação
É a vez de X. O ameaça completar a linha do meio em 5. Qualquer outra jogada deixa O vencer (-1), enquanto bloquear em 5 leva ao empate (0), então a resposta é 5.
Referências
-
Exemplo 1 Não executadoEntrada:
board = "XX.OO...."Saída esperada:2Sua saída -
Exemplo 2 Não executadoEntrada:
board = "X..OO...X"Saída esperada:5Sua saída
4 testes ocultos também serão executados ao enviar. Se seu código falhar em um, você verá esse teste. Resolva o desafio para ver todos.
Run Swift Online
Write, run, and debug Swift code online using a command-line Swift environment. Manage multiple files, save your workspace, and share code without installing Xcode.
🚀 19,043 execuções totais (611 este mês)
Pratique Swift com desafios de código
Resolva problemas práticos direto neste editor: rode os testes de exemplo, envie sua solução e receba uma revisão de código por IA.
🍎 Sobre este Executor Online de Swift
O CodeUtility Swift Executor permite escrever e executar código Swift diretamente no seu navegador - sem necessidade de Xcode, SDK ou configuração do macOS. Ele executa compiladores Swift reais em sandboxes isoladas para oferecer um comportamento nativo e preciso do Swift.
Esta ferramenta suporta várias versões do Swift - 5.7, 5.9 e a mais recente - dando a você a flexibilidade de explorar novos recursos da linguagem e manter compatibilidade com bases de código Swift mais antigas.
É perfeita para desenvolvedores que estão aprendendo a sintaxe do Swift, testando algoritmos ou experimentando código para iOS, macOS e Swift no lado do servidor, sem precisar instalar ferramentas locais ou simuladores.
Cada trecho é executado com segurança em um ambiente Swift containerizado, garantindo feedback real do compilador e execução segura de código.
Mais do que um executor de código
Use no mesmo executor um editor de vários arquivos, um terminal de execução isolado, bibliotecas específicas do ambiente, espaços de trabalho persistentes, compartilhamento e colaboração em tempo real.
Como usar este executor?
Escolha um ambiente de execução, abra ou crie um arquivo, escreva o código e selecione Executar. A saída aparece no terminal; usuários conectados podem manter arquivos em um espaço de trabalho, instalar bibliotecas e colaborar por meio de compartilhamentos.
- Selecione uma versão e edite o arquivo atual ou abra outro arquivo do espaço de trabalho.
- Execute o código, forneça dados no terminal quando solicitado e consulte o histórico de execuções salvo.
- Use bibliotecas, ferramentas do espaço de trabalho, compartilhamento e chat quando a tarefa exigir mais de um trecho de código.
💡 Guia de Noções Básicas de Swift para Iniciantes
1. Declarando variáveis e constantes
Use var para variáveis e let para constantes no Swift.
var age = 30
let pi = 3.14159
var name = "Alice"
let isActive = true
// Constantes não podem ser reatribuídas
// pi = 3.14 // ❌ Erro
2. Condicionais (if / switch)
Use if, else if, else para lógica e switch para múltiplas ramificações.
let number = 2
if number == 1 {
print("Um")
} else if number == 2 {
print("Dois")
} else {
print("Outro")
}
switch number {
case 1:
print("Um")
case 2:
print("Dois")
default:
print("Outro")
}
3. Laços (loops)
O Swift oferece suporte aos laços for-in, while e repeat-while.
for i in 0..<3 {
print(i)
}
var n = 3
while n > 0 {
print(n)
n -= 1
}
4. Arrays
Arrays armazenam coleções ordenadas de valores.
var numbers = [10, 20, 30]
print(numbers[1])
5. Manipulação de arrays
Use métodos de array como append e removeLast.
var nums = [1, 2, 3]
nums.append(4)
nums.removeLast()
for n in nums {
print(n)
}
6. Entrada/Saída no console
Use print() para saída. A entrada requer etapas adicionais no Swift Playgrounds ou no Xcode.
let name = "Alice"
print("Olá, \(name)")
7. Funções
Defina funções reutilizáveis com parâmetros e valores de retorno.
func add(a: Int, b: Int) -> Int {
return a + b
}
print(add(a: 3, b: 4))
8. Dicionários
Dicionários armazenam pares chave-valor.
var ages = ["Alice": 30]
print(ages["Alice"] ?? 0)
9. Tratamento de erros
O Swift usa do-catch para tratamento de erros.
enum MyError: Error {
case runtimeError(String)
}
do {
throw MyError.runtimeError("Algo deu errado")
} catch let error {
print(error)
}
10. Entrada/Saída de arquivos
O Swift usa FileManager ou métodos de String para entrada/saída de arquivos.
let text = "Olá, arquivo"
try text.write(toFile: "file.txt", atomically: true, encoding: .utf8)
let content = try String(contentsOfFile: "file.txt")
print(content)
11. Manipulação de strings
Use métodos como count, contains, uppercased(), etc.
let text = "Olá, Mundo"
print(text.count)
print(text.contains("Mundo"))
print(text.uppercased())
12. Classes e objetos
O Swift suporta POO usando class e init.
class Person {
var name: String
init(name: String) {
self.name = name
}
func greet() {
print("Olá, eu sou \(name)")
}
}
let p = Person(name: "Alice")
p.greet()
13. Opcionais
O Swift usa ? e ! para lidar com valores opcionais.
var name: String? = "Alice"
print(name ?? "Desconhecido")
if let unwrappedName = name {
print(unwrappedName)
}