Truco Mineiro em TypeScript: Manilhas e Comparador

ملخص

No servidor Pixel, este anúncio apresenta um comparador de cartas para truco mineiro em TypeScript. Explica as quatro manilhas fixas, a ordem das cartas comuns e os empates sem desempate por naipe, além de destacar casos que podem causar bugs e testes para validar a lógica.

DEV Community

Truco mineiro em código: manilhas fixas e comparador de cartas

No truco paulista a manilha muda a cada mão, porque depende da vira. No truco mineiro não: são quatro cartas fixas, e isso muda bastante o código do comparador. Aqui vai a versão que usamos para conferir jogada, em TypeScript. As regras que o código precisa conhecer Baralho de 40 cartas (o de 52 sem 8, 9 e 10). Quatro manilhas que nunca mudam, da mais forte para a mais fraca: 4 de paus (zap), 7 de copas, ás de espadas (espadilha) e 7 de ouros (pica-fumo). Não existe vira. As demais cartas seguem esta ordem: 3, 2, ás, rei, valete, dama, 7, 6, 5, 4. Entre elas o naipe não desempata. O comparador type Carta = { valor: string; naipe: "P" | "C" | "E" | "O" };

// zap, 7 de copas, espadilha, pica-fumo
const MANILHAS = ["4P", "7C", "AE", "7O"];
const ORDEM_COMUM = ["3", "2", "A", "K", "J", "Q", "7", "6", "5", "4"];

const id = (c: Carta) => c.valor + c.naipe;

export function forca(c: Carta): number {
const i = MANILHAS.indexOf(id(c));
if (i >= 0) return 100 - i; // manilhas sempre acima das comuns
return 50 - ORDEM_COMUM.indexOf(c.valor); // empata pelo número
}

export function vence(a: Carta, b: Carta): "a" | "b" | "empate" {
const fa = forca(a);
const fb = forca(b);
return fa === fb ? "empate" : fa > fb ? "a" : "b";
}
Dois detalhes que dão bug se passarem batido: Ás de espadas é manilha, os outros ases não. A checagem das manilhas precisa vir antes da ordem comum. O mesmo vale para o 7: só o de copas e o de ouros são manilha; o de paus e o de espadas são 7 comuns. Empate de verdade. Dois 3 de naipes diferentes empatam. Se o seu motor desempata por naipe (como no paulista, quando duas manilhas disputam), vai errar a rodada. Testes que valem a pena const c = (valor: string, naipe: Carta["naipe"]): Carta => ({ valor, naipe });

console.assert(vence(c("4", "P"), c("7", "C")) === "a"); // zap vence tudo
console.assert(vence(c("A", "E"), c("A", "C")) === "a"); // espadilha x ás comum
console.assert(vence(c("3", "O"), c("3", "P")) === "empate");
console.assert(vence(c("7", "P"), c("Q", "C")) === "b"); // 7 comum perde para dama
A escalada da mão Outro ponto em que o mineiro é diferente: a mão limpa vale 2 pontos e sobe em 4 (truco), 6, 10 e 12. Algumas fontes contam 1, 3, 6, 9 e 12, porque a escada varia por região. No nosso motor a escada fica numa tabela de configuração, não espalhada pelo código: const ESCADA_MINEIRO = [2, 4, 6, 10, 12];
Se você escrever o seu, deixe isso configurável, porque a turma de cada lugar joga de um jeito. Para conferir na mesa A página com a ordem das cartas e as diferenças para o paulista está em Truco mineiro: manilhas fixas e regras. Para jogar uma mão contra o computador, o treino fica em buteco.club/treinar/truco. Fontes das regras: Pagat e FocusGN.
Truco Mineiro em TypeScript: Manilhas e Comparador
Powered by Readybot.io

الأحدث من Pixel

Fix GitHub Pages: Missing Artifact Error

Pixel's announcement explains why the GitHub Pages deploy action reports that no github-pages artifact was found. It covers skipped or failed build jobs, missing uploads, …

Rotate DB and Redis Passwords Without Downtime

Pixel shares a practical guide to rotating exposed database and Redis passwords without interrupting application connections. The approach updates Secrets, changes service credentials, and gradually …

AI Agent Earns Crypto from $0: Day 3 Update

Pixel shares Day 3 of a 21-day experiment testing whether an autonomous AI agent can earn real crypto from zero. The agent launched a pay-per-call …

AI Agent Receipts Prove What Actually Executed

Pixel’s announcement examines how public Zambo receipts verify what an AI agent actually did. A BTC price fetch succeeded with a recomputable output hash, while …