Mi è stato dato il seguente problema in un'intervista (che non ho già risolto, non cercando di imbrogliare): Il gioco inizia con un numero intero positivo . (Ad esempio A 0 = 1234. ) Questo numero viene convertito in rappresentazione binaria e N è il numero di bit impostato su 1 . (Ad esempio A 0 = b 100 1101 0010 , N = 5. )
Il giocatore 1 sceglie un numero minore di A 0 . B 0 deve avere solo un bit impostato su 1. (Ad es. B 0 = b 10 0000 0000 = 512 ). Sia A 1 = A 0 - B 0 . (Ad esempio A 1 = 1234 - 512 = 722 = b 10 1101 0010. ) Una mossa è valida se B 0soddisfa i vincoli precedenti, e se il numero di bit impostati in è ancora pari a N .
Il giocatore 2 continua da scegliendo un B 1 valido , quindi il giocatore 1 continua da A 2 e così via. Un giocatore perde se non gli rimangono mosse valide.
Supponendo che entrambi i giocatori giochino in modo ottimale, determinare il giocatore vincente usando un metodo ragionevolmente efficiente. (Nella mia definizione del problema, i vincoli su questo erano che il programma doveva essere in grado di fornire una soluzione per alcuni milioni di numeri di input che si adattavano a un intero con segno a 32 bit.) Cioè, la soluzione non deve essere completamente analitico.
Il mio interesse personale qui è capire se l'aspettativa di me di trovare e implementare la soluzione corretta senza alcun feedback sulla correttezza nei 120 minuti che mi è stato dato era ragionevole; o se questa era una di quelle domande "vediamo se hanno già visto questo puzzle prima".
Ho fallito perché ho scelto di attuare quella che sembrava una strategia ragionevole, che mi ha dato risultati corretti per i pochi casi di test che mi sono stati dati in anticipo, ho sprecato troppo tempo a farlo correre veloce e ho finito per consegnare in modo errato piena resa allo scadere del tempo.
Con il senno di poi avrei dovuto implementare una ricerca della forza bruta e memorizzare soluzioni parziali per piccoli numeri di partenza, ma il senno di poi è sempre 20/20. Sono curioso, tuttavia, se esiste un approccio comune diverso che mi ha eluso come flunkee.