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

Последовательность для определения правильного ответа: Возьмите свой ответ и на калькуляторе дважды щелкните по квадрату, затем из полученного результата возьмите 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 = 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)
(СПИСОК)I5:I10 = MID($ F $ 5,3,1)* 1 [Увеличение 3 на 1 за строку)
J5:J10 {= INDEX(список, MATCH(МАЛЕНЬКИЙ (COUNTIF(список, «<» и список), ROW (1:1)), COUNTIF(список, «<» и список), 0))}
K5 = J5 и J6 и J7 и J8 и J9 и J10

РЕДАКТИРОВАТЬ: Может быть, я не должен использовать поиск цели, у него могут быть ограничения, даже если я введу цель 123789, он по-прежнему не может найти начальное значение 42.

2 ответа2

0

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

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

  • 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-F5 й по величине из диапазона G5:G10 . Скопируйте и вставьте в H5:H10 .
  • I5 =H5&H6&H7&H8&H9&H10 Снова составьте строку
  • J5 Он сохранит решение HASH для поиска (вы назвали его Target)
  • 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
0

Благодаря Хастуру, я нашел способ для поиска цели на работу. Пока он нашел два решения для меня -

4 и 2340.

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

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

  • A5 = любое число
  • 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-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 , изменив A5


Решение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .