Agarrar la misma piedra N en cantidad de manos consecutivas

Escenario

¿Cuántas veces J1 puede agarrar la misma piedra de manera consecutiva en varias manos?


Resultados

Un pequeño disclaimer, durante esta simulación, Luego de ejecutar 168 veces algo medio loco pasó!, el resultado de 2 veces consecutivas fue de 139,29%, es decir, 234 veces de solo 168 corridas. ¿Cómo es esto posible? porque J1 agarró X y N ( las mismas piedras varias veces seguidas). En fin, luego de corregir esta situación aquí les dejo los resultados limpios.

Resumiendo los máximos por piedra:

2 veces seguidas la misma piedra: 12/168 veces

3 veces seguidas la misma piedra: 4/168 veces

4 veces seguidas la misma piedra: 1/168 vez

5 veces seguidas la misma piedra: 1/168 vez

 

¿Sorprendido?, yo en lo personal si


Aquí un extracto del código utilizado


all_p1_has_X_states = {num: [] for num in range(7)}
has_X_streaks = {num: {length: 0 for length in range(2, 8)} for num in range(7)}

# Populate all_p1_has_X_states
for target_num in range(7):
for simulation_hands in all_simulations_player_hands:
p1_hand = simulation_hands[0] # Player One's hand
# Check if Player One's hand contains the target_num
p1_has_X = (count_number_in_hand(p1_hand, target_num) > 0)
all_p1_has_X_states[target_num].append(p1_has_X)

# Analyze consecutive streaks for each number
for target_num, states_list in all_p1_has_X_states.items():
current_consecutive_count = 0
for state in states_list:
if state is True:
current_consecutive_count += 1
else:
# If the streak is broken, record counts for all relevant streak lengths found
for length in range(2, 8): # Checking for lengths 2, 3, 4, 5, 6, 7
if current_consecutive_count >= length:
has_X_streaks[target_num][length] += 1
current_consecutive_count = 0
# After the loop, check for any pending consecutive streak at the end of the list
for length in range(2, 8):
if current_consecutive_count >= length:
has_X_streaks[target_num][length] += 1

print("Análisis de rachas consecutivas donde el Jugador Uno tuvo el número X:")
for num, counts_by_length in has_X_streaks.items():
print(f" Número {num}:")
for length, count in counts_by_length.items():
print(f" Longitud {length}: {count} veces")

def has_exact_piece_in_hand(hand, piece):
"""
Verifica si una ficha de dominó específica (ej. (3,5) o (5,3)) está presente en una mano.
Considera que (a,b) es lo mismo que (b,a).

Args:
hand (list): Una lista de fichas de dominó, donde cada ficha es una tupla (value1, value2).
piece (tuple): La ficha específica (value1, value2) a buscar.

Returns:
bool: True si la ficha está presente en la mano, False en caso contrario.
"""
# Normalizar la pieza a buscar (ej. (5,3) a (3,5)) para comparación consistente
normalized_piece = tuple(sorted(piece))
for hand_piece in hand:
if tuple(sorted(hand_piece)) == normalized_piece:
return True
return False

print("Función auxiliar 'has_exact_piece_in_hand' definida exitosamente.")


Comments

Popular Posts