
Eu estava assistindo um vídeo no YouTube chamado 'O quebra-cabeça de papel A4' nele o apresentador pega uma folha de papel A4 e dobra de uma certa maneira e depois pede aos espectadores que calculem o perímetro, mas não dá a solução, em vez disso dá um método para verificar se você tem a resposta certa usando um Hash.
A sequência para saber a resposta correta é = Pegue sua resposta e em uma calculadora clique 5 vezes em sq rt, depois do resultado pegue os 6 dígitos do lado direito da vírgula decimal e reorganize-os em ordem numérica crescente e se eles igual a 234477 você tem a resposta certa.
Então, em vez de tentar calcular o perímetro, eu queria reverter o hash para chegar à solução. Então abri o Excel e em A5 digitei o número do candidato (digamos 42) e depois de B5 a F5 comecei a fazer a raiz quadrada. Em G5 subtraí 1 para obter 0,123897073, que em H5 multipliquei por 1 milhão para obter 123897, depois em I5:I10 extraí cada um dos números. Em J5:J10 classifiquei os números usando uma fórmula então J5-1, J6=2,J7=3,J8=7,J9=8,J10=9, e finalmente em K5 concatenei todos os números para me dar 123789 e colocou o alvo 234477 em L5.
Agora é aqui que estou preso. Presumi que poderia usar o Goal Seek para definir K5 como igual a 234477 alterando A5, mas não encontrará uma solução.
Não quero usar código/macro para encontrar a resposta ou operações manuais como classificação, etc. Gostei da ideia de observar o Atingimento de Meta passar e tentar soluções e poder 'ver' o caminho para a solução.
Alguém sabe como posso completar isso?
Fórmulas
A5 = Número de entrada do usuário
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)
(LIST)I5:I10 = MID($F$5,3,1)*1 [Incrementar 3 por 1 por linha)
J5:J10 { = INDEX( lista, MATCH(PEQUENO(CONT.SE(lista, "<"&lista), LINHA(1:1)), CONT.SE(lista, "<"&lista), 0))}
K5 = J5&J6&J7&J8&J9&J10
EDIT: Talvez eu não deva usar o Goal Seek, ele pode ter limitações, mesmo se eu inserir a meta 123789, ele ainda não consegue encontrar o valor inicial de 42.
Responder1
Em geral você deve tentar encontrar um algoritmo válido não apenas para sua solução.
Tente até acelerar o cálculo possível.
A5
Isso manterá seu valor inicialB5
=A5^(1/32)
, sim, um pouco de matemática
(SQRT(x) é equivalente a x^1/2; fazer isso cinco vezes significa 1/2*1/2*.... = 1/32)C5
=Mod(B5,1)
Aqui você não pode simplesmente fazer1-x
: imagine se fosse 2.smth ou 0.smth...A função MOD retorna o resto depois que um número é dividido por um divisor.
D5
=3-TRUNC(LOG(C5,10))
Você precisa pegar os primeiros dígitos diferentes de zero (função Log 10 ) e pular o0.
da string.E5
=MID(C5,D5,6)
Aqui você extrai a string.F5:F10
Índices simples para as funções da próxima coluna.G5
=0+MID($E$5,F5,1)
ele extrai o dígito em F5. Copie e cole emG5:G10
.H5
=LARGE($G$5:$G$10,7-F5)
Pegue o7-F5
maior do intervaloG5:G10
. Copie e cole emH5:H10
.I5
=H5&H6&H7&H8&H9&H10
Componha a string novamenteJ5
Ele manterá a solução HASH para encontrar (você a chamouAlvo)K5
=I5=MID(J5,1,6)
Compare a string emI5
edeJ5
.
Aqui abaixo a solução:
Aqui está um código bash para SHA256
Aqui está um código bash para SHA256
StartSeq=1 ; FimSeq=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
Responder2
Obrigado a HasturEu encontrei uma maneira de o Goal Seek funcionar. Ele encontrou duas soluções para mim até agora -
4 e 2340.
Tudo bem, então vamos lá com base emA resposta de Hastur
Novamente começaremos emA5
- A5= qualquer 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 G10são índice 1,2,3,4,5,6 - eles nunca mudam
- H5 a H10
=INT(0+MID($F$5,$G5,1))
arrastado para baixo de tal forma que$G5
aumenta para 6, 7 etc. - I5 a I10
=SMALL($H$5:$H$10,ROW(A1))
arrastado para baixo de tal forma queRow(A1)
aumenta - J5
=INT(CONCATENATE(I5,I6,I7,I8,I9,I10))
Agora você pode buscar metasJ5para234477mudandoA5
Solução