Questo è stato ispirato da un problema di matematica che ho visto da qualche parte su Internet, ma non ricordo dove (AGGIORNAMENTO: il problema originale è stato riscontrato sugli enigmi matematici subreddit con una prova a condizione che sia possibile, vedi anche questo post di Math SE ), chiedendo di una prova se il seguente processo è possibile per qualsiasi coppia arbitraria di numeri interi (da quello che ricordo, è stato possibile per ogni data coppia):
Data una coppia di numeri interi, j e k, raddoppia uno di essi e aggiungi uno all'altro, risultando in una coppia di nuovi numeri interi, ovvero, (j, k) -> (j + 1, k * 2) o (j * 2, k + 1). Quindi ripetere questo processo con questi numeri interi, con l'obiettivo di avere la coppia di numeri interi uguali.
Questi esempi non sono necessariamente ottimali, ma mostrano come questo processo possa essere eseguito su qualsiasi numero intero, positivo, negativo o zero:
(2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(5, 6) -> (6, 12) -> (7, 24) -> (14, 25) -> (28, 26) -> (56, 27) -> (112, 28) -> (113, 56) -> (226, 57) -> (227, 114) -> (228, 228)
(0, 2) -> (1, 4) -> (2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(-4, 0) -> (-3, 0) -> (-2, 0) -> (-1, 0) -> (0, 0)
(3, -1) -> (6, 0) -> (12, 1) -> (13, 2) -> (14, 4) -> (15, 8) -> (16, 16)
(-4, -3) -> (-8, -2) -> (-16, -1) -> (-32, 0) -> (-31, 0) -> ... -> (0, 0)
Sfida
Creare un programma che ha dato due numeri interi, genera l'elenco dei passaggi necessari per rendere uguali tali numeri interi incrementando ripetutamente uno e raddoppiando l'altro
specificazioni
- La soluzione non deve essere ottimale ma deve risolvere in un numero finito di passaggi per qualsiasi coppia arbitraria
L'input deve essere di due numeri interi
L'output può essere qualsiasi output ragionevole che denoti chiaramente gli interi risultanti di ogni passaggio, ad esempio:
- una stringa con due delimitatori distinti (qualsiasi simbolo, spazio bianco, ecc.), uno per ogni numero intero in una coppia e uno per ogni coppia
- ad es., input j, k: 2, 5 -> output: 3,10; 6,11; 12,12
- un elenco di elenchi di numeri interi
- ad es. input j, k: 2, 5 -> output: [[3, 10], [6, 11], [12, 12]]
- una stringa con due delimitatori distinti (qualsiasi simbolo, spazio bianco, ecc.), uno per ogni numero intero in una coppia e uno per ogni coppia
Se l'input è una coppia di numeri uguali, è possibile generare qualsiasi cosa purché sia coerente con altre risposte non banali
- per esempio
- se input [2, 5] ha output [[3, 10], [6, 11], [12, 12]], che non include la coppia di input, allora input [4, 4] non dovrebbe produrre nulla.
- se input [2, 5] ha output [[2, 5], [3, 10], [6, 11], [12, 12]], che include la coppia di input, quindi input [4, 4] dovrebbe output [[4, 4]].
- per esempio
Si applicano metodi IO standard e sono vietate le scappatoie standard
Questo è il codice golf, quindi vince la risposta più breve in byte
[(12,12),(6,11),(3,10),(2,5)]
per l'input (2,5)
?