Ispirato da The Great API Easter Egg Hunt!
Sommario
Il tuo compito è quello di cercare un numero intero predeterminato nello "spazio Collatz" (da spiegare in seguito) usando il minor numero possibile di passaggi.
introduzione
Questa sfida si basa sulla famosa congettura di Collatz di cui almeno tutti qui hanno sentito parlare. Ecco un riepilogo tratto da Stampa i numeri di Super Collatz .
La sequenza Collatz (chiamata anche problema 3x + 1) è dove inizi con qualsiasi numero intero positivo, per questo esempio useremo 10 e applicheremo questo set di passaggi ad esso:
if n is even: Divide it by 2 if n is odd: Multiply it by 3 and add 1 repeat until n = 1
La distanza Collatz C(m,n)
tra i due numeri m
e n
, ai fini di questa sfida, è la distanza tra due numeri nel grafico Collatz (crediti a @tsh per avermi parlato di questo concetto), che è definito come segue: (usando 21
e 13
come esempi ):
Annota la sequenza Collatz per m
(in questo caso, 21
):
21, 64, 32, 16, 8, 4, 2, 1
Annota la sequenza Collatz per n
(in questo caso, 13
):
13, 40, 20, 10, 5, 16, 8, 4, 2, 1
Ora conta quanti numeri compaiono solo in una delle sequenze. Questo è definito come la distanza Collatz tra m
e n
. In questo caso 8
, vale a dire
21, 64, 32, 13, 40, 20, 10, 5
Quindi abbiamo la distanza Collatz tra 21
e 13
come C(21,13)=8
.
C(m,n)
hanno le seguenti belle proprietà:
C(m,n)=C(n,m)
C(m,n)=0 iff. m=n
Spero che la definizione di C(m,n)
sia ora chiara. Cominciamo a cacciare le uova nello spazio Collatz!
All'inizio del gioco, un controller decide la posizione di un uovo di Pasqua, che è espresso dalla sua coordinata unidimensionale: un numero intero nell'intervallo [p,q]
(in altre parole, un numero intero tra p
e q
, entrambe le estremità incluse).
La posizione dell'uovo rimane costante durante il gioco. Indicheremo questa coordinata come r
.
Ora puoi fare un'ipotesi iniziale a 0 e verrà registrata dal controller. Questo è il tuo 0 ° round. Se sei così fortunato da aver capito bene al primo posto (ovvero uno 0 = r), il gioco termina e il tuo punteggio è 0
(Più basso è il punteggio, meglio è). Altrimenti, entri nel 1 ° round e fai una nuova ipotesi a 1 , questo continua fino a quando non hai capito bene, cioè a n = r, e il tuo punteggio sarà n
.
Per ogni round successivo allo 0, il controller ti fornisce uno dei seguenti feedback in modo da poter fare un'ipotesi migliore sulla base delle informazioni fornite. Supponiamo che tu sia attualmente al n
th round e quindi la tua ipotesi è un n
- "L'hai trovato!" se a n = r, nel qual caso il gioco termina e si segna
n
. - "Sei più vicino :)" se C (a n , r) <C (a n-1 , r)
- "Stai girando intorno all'uovo" se C (a n , r) = C (a n-1 , r)
- "Sei più lontano :(" se C (a n , r)> C (a n-1 , r)
Per salvare alcuni byte, chiamerò le risposte come "Giusto", "Più vicino", "Stesso", "Più lontano", nell'ordine presentato sopra.
Ecco un esempio di gioco con p=1,q=15
.
- a 0 = 10
- a 1 = 11, risposta: "Più vicino"
- a 2 = 13, risposta: "Più lontano"
- a 3 = 4, risposta: "Più lontano"
- a 4 = 3, risposta: "Più vicino"
- a 5 = 5, risposta: "Stesso"
- a 6 = 7, risposta: "Giusto"
Punteggio: 6
.
Sfida
Progetta una strategia deterministica per giocare p=51, q=562
con il punteggio migliore.
Le risposte dovrebbero descrivere gli algoritmi in dettaglio. È possibile allegare qualsiasi codice che aiuti a chiarire l'algoritmo. Questo non è codegolf, quindi sei incoraggiato a scrivere un codice leggibile.
Le risposte dovrebbero includere il punteggio peggiore che possono raggiungere per tutti i casi possibili r
e quello con il punteggio peggiore più basso vince. In caso di pareggio, r
vincono gli algoritmi che hanno un punteggio medio migliore per tutti i possibili s (che dovrebbero essere inclusi anche nelle risposte). Non ci sono ulteriori spareggi e alla fine potremmo avere più vincitori.
Specifiche
- Per ribadire,
r
sta nell'intervallo[51,562]
. - Si applicano scappatoie predefinite .
Bounty (aggiunto dopo la pubblicazione della prima risposta)
Personalmente posso offrire una generosità a una risposta in cui tutte le ipotesi sono fatte all'interno del range [51,562]
pur avendo un punteggio peggiore ragionevolmente basso.