# Lezione 14 - Esercizio 1 - Il gioco di Nim

# In questo gioco, due giocatori prelevano alternativamente biglie da un mucchietto.
# Ad ogni mossa, un giocatore sceglie quante biglie prendere: almeno una e al
# massimo metà delle biglie disponibili. Il giocatore che prende l’ultima biglia
# perde la partita.

# Scrivere un programma che consenta all’utente di giocare contro il computer.
# Il programma deve:
# - generare un numero intero casuale compreso tra 10 e 100 da usare come dimensione
#   iniziale del mucchietto di biglie;
# - generare un numero intero casuale, o 0 o 1, da usare per decidere se sarà
#   l’utente o il computer a giocare per primo;
# - generare un numero intero casuale, o 0 o 1, da usare per decidere se il computer
#   giocherà in modo intelligente o stupido:
#    * giocando in modo stupido, ad ogni sua mossa il computer semplicemente preleva
#      dal mucchietto un numero di biglie casuale (ma valido, cioè compreso tra 1 e
#      n/2, se nel mucchietto sono rimaste n biglie);
#    * giocando in modalità intelligente, invece, preleva un numero di biglie tale
#      che il numero di quelle che rimangono nel mucchio sia una potenza di due
#      diminuita di un’unità, cioè 3, 7, 15, 31 o 63. Quest’ultima è sempre una mossa
#      valida, tranne quando la dimensione del mucchio è uguale a una potenza di due
#      diminuita di un’unità. In tal caso, il computer fa una mossa scelta a caso
#      (ovviamente tra quelle valide).

# Come potrete verificare sperimentalmente, il computer non può essere battuto quando
# gioca in modalità intelligente e fa la prima mossa, a meno che la dimensione
# iniziale del mucchio non sia 15, 31 o 63. Analogamente, un giocatore umano che faccia
# la prima mossa e conosca la strategia qui descritta è in grado di battere il calcolatore.



# import random
# import time

# inizio_utente = False
# computer_int = False
# primo_turno = True
# turno_utente = False
# turno_computer = False

# numero_biglie_tot = random.randint(10, 100)

# primo_turno = random.randint(0, 1)
# if primo_turno == 0:
#     inizio_utente = True
#     turno_utente = True
# else:
#     turno_computer = True

# intelligenza_pc = random.randint(0, 1)
# if intelligenza_pc == 0:
#     computer_int = True

# numero_biglie = numero_biglie_tot

# print("Benvenuto al gioco di Nim! \nIn questo gioco sfiderai il computer e dovrai estrarre delle biglie da un sacchetto. \nPerde chi estrae l'ultima biglia.")
# print("REGOLE DEL GIOCO: \n -Si gioca a turni, una volta tu e una il computer; \n -Puoi pescare massimo la metà delle biglie disponibili.")
# print(f"Il sacchetto presenta {numero_biglie_tot} biglie. \nBuona fortuna!")

# while True:
    
#     if turno_utente:
        
#         if numero_biglie == 1:
#                 print("Hai pescato l'ultima biglia, hai perso!")
#                 break
        
#         if primo_turno:
#             print("Inizierai tu!")
#             primo_turno = False
#         else:
#             print("Tocca a te.")

#         while True:            
#             print(f"Biglie presenti nel sacchetto: {numero_biglie}, puoi prelevare massimo {numero_biglie//2}.")
#             numero_estrarre = int(input(f"Scegli quante biglie vuoi prelevare: "))
            
#             if numero_estrarre < 0:
#                 print("Attenzione! Numero non valido, riprova!")
#                 continue
#             elif numero_estrarre > numero_biglie//2:
#                 print("Attenzione! Stai cercando di estrarre più della metà delle biglie, riprova!")
#                 continue

#             numero_biglie -= numero_estrarre
#             print(f"Hai estratto {numero_estrarre}, ora al sacchetto rimangono {numero_biglie}")

#             turno_utente = False
#             turno_computer = True
#             break
    
#     if turno_computer:
#         if numero_biglie == 1:
#             print("Il computer ha pescato l'ultima biglia, hai vinto!")
#             break
        
#         if primo_turno:
#             print("Inizierà il computer")
#             primo_turno = False
#         else:
#             print("Tocca al computer.")

#         if computer_int:
#             pass
            
#             if numero_biglie in [3, 7, 15, 63]:
#                 numero_estrarre = random.randint(1, numero_biglie//2)
#                 print(f"Il computer estrae {numero_estrarre} biglie.")
#                 numero_biglie -= numero_estrarre
#                 print(f"Nel sacchetto rimangono {numero_biglie} biglie.")
#             else:
#                 pass

#         else:
#             numero_estrarre = random.randint(1, numero_biglie//2)
#             print(f"Il computer estrae {numero_estrarre} biglie.")
#             numero_biglie -= numero_estrarre
#             print(f"Nel sacchetto rimangono {numero_biglie} biglie.")
        
#         turno_computer = False
#         turno_utente = True

#------------------------------------------------------------------------------------------------------------

# Lezione 14 - Esercizio 2 - Lista ordinata
# Scrivere un programma che generi una sequenza di 20 valori interi casuali compresi
# tra 0 e 99, poi visualizzi la sequenza generata, la ordini e la visualizzi di
# nuovo, ordinata. Usate la funzione sorted.

#-------------------------------------------------------------------------------------------------------------

# Lezione 14 - Esercizio 3 - Somma senza il minimo
# Scrivere la funzione sum_without_smallest(v) che calcoli la somma di tutti i
# valori di una lista v, escludendo il valore minimo.

#------------------------------------------------------------------------------------------------------------------

# Lezione 14 - Esercizio 4 - Media
# Scrivi un programma in Python che calcoli la media di tutti i numeri in una lista e
# poi sottragga questa media da ogni elemento della lista. Questo metodo è utile per
# "normalizzare" i dati, rendendoli più confrontabili.

#---------------------------------------------------------------------------------------------------------------------

# Lezione 14 - Esercizio 5 - Vocali
# Scrivi una funzione elabora_parole che, data una lista di parole, calcola e
# restituisce la lunghezza di ciascuna parola e il numero di vocali in essa contenute.

#-------------------------------------------------------------------------------------------------------------------------

