Listapelissä kaksi pelaajaa poistaa vuorotellen lukuja listasta. Joka vuorolla pelaajan tulee poistaa listalta joko ensimmäinen tai viimeinen luku. Peli päättyy, kun kaikki luvut on poistettu.
Pelin voittaa pelaaja, jonka poistamien lukujen summa on suurempi. Jos kummankin pelaajan lukujen summa on sama, tuloksena on tasapeli. Tehtäväsi on selvittää, voittaako pelin aloittaja varmasti, jos hän pelaa optimaalisesti.
Esimerkiksi jos lista on , aloittaja voittaa varmasti, koska hän voi poistaa ensin luvun ja sitten luvun . Pelin lopussa aloittajan lukujen summa on ja toisen pelaajan lukujen summa on .
Jos taas lista on , aloittaja ei voita varmasti, koska hänen täytyy poistaa ensin luku . Tämän jälkeen toinen pelaaja voi poistaa luvun , mikä takaa hänelle pelin voiton.
Toteuta tiedostoon listgame.py
funktio first_wins
, jolle annetaan lista kokonaislukuja. Funktion tulee palauttaa True
, jos pelin aloittaja voittaa varmasti, ja muuten False
.
Funktion tulee toimia tehokkaasti, kun listalla on lukua.
def first_wins(numbers): # TODO if __name__ == "__main__": print(first_wins([2, 1, 3])) # True print(first_wins([1, 3, 1])) # False print(first_wins([1])) # True print(first_wins([1, 1])) # False print(first_wins([1, 5])) # True print(first_wins([1, 1, 1])) # True print(first_wins([1, 2, 3, 4])) # True print(first_wins([1, 3, 3, 7, 4, 2, 1])) # False print(first_wins([1] * 50)) # False print(first_wins([1, 2] * 25)) # True