Обратный хэш с помощью MS Excel

Обратный хэш с помощью MS Excel

Я смотрел видео на YouTube под названием «Головоломка из бумаги формата А4В нем ведущий берет лист бумаги формата А4, складывает его определенным образом, а затем просит зрителей вычислить периметр, но не дает решения, а вместо этого предлагает метод проверки правильности ответа с помощью хэша.

Последовательность, необходимая для получения правильного ответа: возьмите свой ответ и на калькуляторе нажмите sq rt 5 раз, затем из результата возьмите 6 цифр справа от десятичной точки и переставьте их в порядке возрастания чисел. Если они равны 234477, то у вас правильный ответ.

Поэтому вместо того, чтобы пытаться вычислить периметр, я хотел перевернуть хеш, чтобы получить решение. Поэтому я запустил Excel и в A5 ввел число-кандидат (скажем, 42), а затем в B5-F5 начал извлекать квадратный корень. В G5 я вычел 1, чтобы получить 0,123897073, которое в H5 я умножил на 1 миллион, чтобы получить 123897, затем в I5:I10 я извлек каждое из чисел. В J5:J10 я отсортировал числа с помощью формулы, так что J5-1, J6=2,J7=3,J8=7,J9=8,J10=9, затем, наконец, в K5 я объединил все числа, чтобы получить 123789, и поместил цель 234477 в L5.

Вот тут-то я и застрял. Я предполагал, что смогу использовать функцию Goal Seek, чтобы установить K5 равным 234477, изменив A5, но она не находит решения.

Я не хочу использовать код/макросы для поиска ответа или ручные операции, такие как сортировка и т. д. Мне понравилась идея наблюдать, как работает поиск цели, и пробовать решения, а также иметь возможность «увидеть» путь к решению.

Кто-нибудь знает, как это сделать?

Формулы
A5 = Вводимое пользователем число
B5 = КОРЕНЬ(A5)
C5 = КОРЕНЬ(B5)
D5 = КОРЕНЬ(C5)
E5 = КОРЕНЬ(D5)
F5 = КОРЕНЬ(E5)
G5 = F5-1
H5 = IF(MID(G5,3,1)*1=0,G5*10000000,G5*1000000)
(СПИСОК)I5:I10 = MID($F$5,3,1)*1 [Увеличение 3 на 1 в каждой строке)
J5:J10 { = ИНДЕКС(список, ПОИСКПОЗ(НАИМЕНЬШИЙ(СЧЕТЕСЛИ(список, "<"&список), СТРОКА(1:1)), СЧЕТЕСЛИ(список, "<"&список), 0))}
K5 = J5&J6&J7&J8&J9&J10

введите описание изображения здесь

ПРАВКА: Возможно, мне не следует использовать функцию поиска цели, у нее могут быть ограничения. Даже если я введу цель 123789, она все равно не сможет найти начальное значение 42.

решение1

В общем, вам следует попытаться найти алгоритм, подходящий не только для вашего решения.
Постарайтесь даже ускорить расчеты, насколько это возможно.

Неправильное решение

  • A5Он сохранит вашу первоначальную стоимость.
  • B5 =A5^(1/32), да, немного математики
    (SQRT(x) эквивалентно x^1/2; если сделать это пять раз, то получится 1/2*1/2*.... = 1/32)
  • C5 =Mod(B5,1)
    Здесь вы не можете просто сделать 1-x: представьте, что это было бы 2.smth или 0.smth...

    Функция MOD возвращает остаток после деления числа на делитель.

  • D5 =3-TRUNC(LOG(C5,10))
    Вам нужно взять первые цифры, отличные от нуля (функция Log 10 ), и пропустить конец 0.строки.
  • E5 =MID(C5,D5,6)Здесь вы извлекаете строку.
  • F5:F10Простые индексы для функций следующего столбца.
  • G5 =0+MID($E$5,F5,1) он извлекает цифру в F5. Копировать и вставить в G5:G10.
  • H5 =LARGE($G$5:$G$10,7-F5) Возьмите 7-F5th наибольшее из диапазона G5:G10. Скопируйте и вставьте в H5:H10.
  • I5 =H5&H6&H7&H8&H9&H10Составьте строку еще раз
  • J5Он сохранит решение HASH для поиска (вы назвали егоЦель)
  • K5 =I5=MID(J5,1,6)Сравните строку в I5иот J5.

Ниже приведено решение:

введите описание изображения здесь

Вот bash-код для SHA256

Вот bash-код для SHA256
StartSeq=1 ; EndSeq=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

решение2

Спасибо ХастуруЯ нашел способ, как Goal Seek работает. Пока что он нашел для меня два решения -

4 и 2340.

Хорошо, итак, начнем с того, чтоОтвет Хастура

Снова начнемA5

  • А5= любое число
  • В5 =INT(A5)
  • С5 =B5^(1/32)
  • Д5 =INT(MID(C5,FIND(".",C5,1)+1,10))
  • Е5 =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)))
  • Ф5 =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-G10индекс 1,2,3,4,5,6 - они никогда не меняются
  • H5-H10 =INT(0+MID($F$5,$G5,1))перетаскивается вниз так, что $G5увеличивается до 6, 7 и т. д.
  • I5-I10 =SMALL($H$5:$H$10,ROW(A1))тянут вниз так, что Row(A1)увеличивается
  • J5 =INT(CONCATENATE(I5,I6,I7,I8,I9,I10))

Теперь вы можете искать цель наJ5к234477путем измененияА5

введите описание изображения здесь


Решение

введите описание изображения здесь

Связанный контент