
Я смотрел видео на 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-F5
th наибольшее из диапазона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
Решение