
Estaba viendo un video en YouTube llamado 'El rompecabezas de papel A4' en él, el presentador toma una hoja de papel A4 y la dobla de cierta manera y luego pide a los espectadores que calculen el perímetro, pero no da la solución, sino un método para comprobar que tiene la respuesta correcta usando un Hash.
La secuencia para saber la respuesta correcta es = Toma tu respuesta y en una calculadora haz clic en sq rt 5 veces, luego del resultado toma los 6 dígitos del lado derecho del punto decimal y reorganízalos en orden numérico ascendente y si igual a 234477 tienes la respuesta correcta.
Entonces, en lugar de intentar calcular el perímetro, quería invertir el hash para llegar a la solución. Entonces encendí Excel y en A5 ingresé el número del candidato (digamos 42) y luego en B5 a F5 comencé a realizar la raíz cuadrada. En G5 resté 1 para darme 0.123897073 que en H5 multipliqué por 1 millón para darme 123897, luego en I5:I10 extraje cada uno de los números. En J5:J10 ordené los números usando una fórmula de modo que J5-1, J6=2,J7=3,J8=7,J9=8,J10=9, luego finalmente en K5 concatené todos los números para darme 123789 y colocó el objetivo 234477 en L5.
Aquí es donde estoy atascado. Supuse que podría usar Goal Seek para configurar K5 para que sea igual a 234477 cambiando A5, pero no encontrará una solución.
No quiero usar código/macro para encontrar la respuesta u operaciones manuales como ordenar, etc. Me gustó la idea de ver la búsqueda de objetivos y probar soluciones y poder "ver" el camino hacia la solución.
¿Alguien sabe cómo puedo completar esto?
Fórmulas
A5 = Número de entrada del usuario
B5 = SQRT(A5)
C5 = SQRT(B5)
D5 = SQRT(C5)
E5 = SQRT(D5)
F5 = SQRT(E5)
G5 = F5-1
H5 = IF(MID(G5,3) ,1)*1=0,G5*10000000,G5*1000000)
(LISTA)I5:I10 = MID($F$5,3,1)*1 [Incrementar 3 en 1 por fila)
J5:J10 { = ÍNDICE( lista, COINCIDIR(PEQUEÑO(CONTAR.SI(lista, "<"&lista), FILA(1:1)), CONTAR.SI(lista, "<"&lista), 0))}
K5 = J5&J6&J7&J8&J9&J10
EDITAR: Tal vez no debería usar Goal Seek, puede tener limitaciones, incluso si ingreso el objetivo 123789, todavía no puedo encontrar el valor inicial de 42.
Respuesta1
En general, debería intentar encontrar un algoritmo válido no sólo para su solución.
Intente incluso acelerar el cálculo lo más que pueda.
A5
Mantendrá su valor inicial.B5
=A5^(1/32)
, sí un poco de matemáticas
(SQRT(x) equivale a x^1/2; hacerlo cinco veces significa 1/2*1/2*.... = 1/32)C5
=Mod(B5,1)
Aquí no puedes simplemente hacer1-x
: imagina si fuera 2.smth o 0.smth...La función MOD devuelve el resto después de dividir un número por un divisor.
D5
=3-TRUNC(LOG(C5,10))
Debe tomar los primeros dígitos distintos de cero (función Log 10 ) y omitir la0.
parte de la cadena.E5
=MID(C5,D5,6)
Aquí extraes la cadena.F5:F10
Índices simples para las funciones de la siguiente columna.G5
=0+MID($E$5,F5,1)
extrae el dígito en F5. Copiar y pegar enG5:G10
.H5
=LARGE($G$5:$G$10,7-F5)
Tome el7-F5
décimo más grande del rangoG5:G10
. Copiar y pegar enH5:H10
.I5
=H5&H6&H7&H8&H9&H10
Componer la cadena de nuevoJ5
Mantendrá la solución HASH para encontrar (la llamasteObjetivo)K5
=I5=MID(J5,1,6)
Compara la cadena enI5
ydeJ5
.
Aquí debajo la solución:
Aquí un código bash para SHA256
Aquí un código bash para SHA256
StartSeq=1; Sec final=5
for i in $(seq $StartSeq $EndSeq) ;
do
[[ $(printf "$i" | sha256sum | awk '{print $1}'| xxd -r -p | base64) \
== "SyJ3d9TdH8Ycb4hPSGQdArTRIdP9Moywi1Ux/Kzav4o=" ]] && \
echo "### The Solution is "$i ;
done
Respuesta2
Gracias a hasturHe encontrado una manera de que funcione Goal Seek. Hasta ahora me ha encontrado dos soluciones:
4 y 2340.
Muy bien, aquí vamos basándonos enLa respuesta de Hastur.
De nuevo comenzaremos enA5
- A5= cualquier número
- B5
=INT(A5)
- C5
=B5^(1/32)
- D5
=INT(MID(C5,FIND(".",C5,1)+1,10))
- E5
=INT(IFERROR(IF(FIND("0",D5,1)<6,CONCATENATE(LEFT(D5,FIND("0",D5,1)-1),MID(D5,FIND("0",D5,1)+1,10-FIND("0",D5,1)))),LEFT(D5,6)))
- F5
=INT(IFERROR(IF(FIND("0",E5,1)<=6,CONCATENATE(LEFT(E5,FIND("0",E5,1)-1),MID(E5,FIND("0",E5,1)+1,7-FIND("0",E5,1))),LEFT(E5,6)),LEFT(E5,6)))
- G5 a G10son índice 1,2,3,4,5,6 - nunca cambian
- H5 a H10
=INT(0+MID($F$5,$G5,1))
arrastrado hacia abajo de tal manera que$G5
aumenta a 6, 7, etc. - I5 a I10
=SMALL($H$5:$H$10,ROW(A1))
arrastrado hacia abajo de tal manera queRow(A1)
aumenta - J5
=INT(CONCATENATE(I5,I6,I7,I8,I9,I10))
Ahora puedes buscar objetivosJ5a234477cambiandoA5
Solución