¿Cuántas veces un jugador (J1, J2, J3 o J4) recibe exactamente la misma mano en diferentes simulaciones?
Escenario
¿Cuántas veces un jugador (J1, J2, J3 o J4) recibe exactamente la misma mano en diferentes simulaciones?, (la vez anterior (https://simulacion168.acostasite.com/2026/04/en-16800-simulaciones-cuantas-veces-se.html) solo se analizó al jugador uno.
Este nuevo escenario analizar la manos de todos los jugadores en todas las simulaciones y nuevamente buscamos por manos duplicadas
Resultados
Esta vez fuimos directo a correr 16800 simulaciones. Obtuvimos 1750 resultados lo que representa un 10,41%
Mi opinión: En lo personal lo veo alto, ¿qué te parece a tí?
Código python en caso de que veas algo malo
import numpy as np
from collections import Counter
num_simulations = 16800
num_players = 4
pieces_per_player = 7
all_simulations_player_hands = []
# Re-run simulations to populate all_simulations_player_hands
for simulation_num in range(num_simulations):
# Re-initialize the full set of 28 domino pieces
domino_pieces_full = []
for i in range(7):
for j in range(i, 7):
domino_pieces_full.append((i, j))
# Shuffle the domino pieces
np.random.shuffle(domino_pieces_full)
current_simulation_hands = []
start_index = 0
# Distribute pieces to players
for _ in range(num_players):
player_hand = domino_pieces_full[start_index : start_index + pieces_per_player]
current_simulation_hands.append(player_hand)
start_index += pieces_per_player
# Store the hands for the current simulation
all_simulations_player_hands.append(current_simulation_hands)
print(f"Simulaciones completadas: {num_simulations}.")
print(f"Total de simulaciones almacenadas: {len(all_simulations_player_hands)}\n")
all_players_hands_canonical = []
# Convert all players' hands from all simulations to a canonical (sortable and hashable) form
for simulation_hands in all_simulations_player_hands:
for player_hand in simulation_hands:
# Sort pieces within the hand, then sort the hand itself
# This ensures that hands with the same pieces, regardless of original order, are identical
canonical_hand = tuple(sorted(tuple(sorted(piece)) for piece in player_hand))
all_players_hands_canonical.append(canonical_hand)
# Count the occurrences of each unique canonical hand
hand_counts = Counter(all_players_hands_canonical)
# Filter for hands that appeared more than once
duplicate_hands = {hand: count for hand, count in hand_counts.items() if count > 1}
# The total number of duplicate occurrences is the sum of (count - 1) for each duplicate hand,
# as each count already includes the first occurrence.
total_duplicate_occurrences = sum(count - 1 for count in duplicate_hands.values())
print(f"De {num_simulations * num_players} manos distribuidas (en {num_simulations} simulaciones a {num_players} jugadores),")
print(f"la misma mano fue recibida por cualquier jugador (J1, J2, J3 o J4) en diferentes corridas un total de {total_duplicate_occurrences} ocasiones.")
print(f"Manos únicas que se repitieron: {len(duplicate_hands)}.")
print("Ejemplos de manos que se repitieron:")
for hand, count in list(duplicate_hands.items())[:5]: # Mostrar hasta 5 ejemplos
print(f" Mano: {list(hand)}, Cantidad: {count}")
Comments
Post a Comment