Как сделать число 100 из любого другого шестизначного числа
1,00
р.
р.
Подскажите пожалуйста как построить алгоритм работы над шестизначным числом так, что бы узнать можно ли путем математических манипуляций, из цифр которых оно состоит получить 100? Пример: 050500 ---> (0 + 50 + 50 + 0) == 100 595545 ---> (5 + ((9 * 5) + (5 + 45))) = 100 093342 ---> (0 + ((9 / (3 / 34)) - 2)) = 100 231357 ---> (2 - (3 * (((1 / 3) - 5) * 7))) = 100 ... я нашел статью на Хабр (https://habr.com/ru/post/339654/) в которой приводился аналогичный пример. Привести 6-значное число к массиву из цифр не проблема. Например: a = 123456 тогда String(a).split('').map(e => +e) // output ---> [1,2,3,4,5,6] А вот как дальше расставлять символы (+, -, /, *) и правильно расставить скобки, я хоть убейте не могу придумать :( Бьюсь над этой задачей уже месяц. Хотел сделать так как описано в статье с Хабр (см выше), но не могу понять как в java script это реализовать? И можно ли вообще в JS создавать подобные "динамические" формулы или за ранее нужно прописывать шаблоны под действия, а уже в них подставлять цифры??? Задайте пожалуйста хоть направление в котором думать.
Ответ Пример без скобок. let num = '231357'. split ('') let opr = ['*','+','/','-'] for(let i = 0 i < 32 i ++ ){ let part = i . toString ( 2 ) . padStart ( 5 , '0') . split ('') . reduce (( s , v , i , a , j = ++ i )=>{ return + v ? `${ s }${ num [ j ]}` : `${ s }λ${ num [ j ]}` }, num [ 0 ]) . replace (/(\D|^)0*(\d)/g,'$1$2') for(let i = 0 i < Math . pow ( 4 , part . split (/\D/). length - 1 ) i ++ ){ let mask = i . toString ( 4 ). padStart ( 5 ,'0') let math = part . replace ('λ', opr [ mask [ 4 ]]) . replace ('λ', opr [ mask [ 3 ]]) . replace ('λ', opr [ mask [ 2 ]]) . replace ('λ', opr [ mask [ 1 ]]) . replace ('λ', opr [ mask [ 0 ]]) let result = eval (`(function(){return ${ math }})()`) if( result === 100 ){ console . log ('%s === %s', math , result ) } } } Код запускается но не во всех браузерах, получаю две ошибки: EvalError: "call to eval() blocked by CSP" и (function(){return 0*0*0*0*00})() SyntaxError: Octal literals are not allowed in strict mode. Подскажите, что с этим можно сделать, и что я делаю не так?
Касательно второй: . replace (/(\D|^)0*(\d)/,'$1$2') Тут ошибка была. Эта часть заменяет "073" на "73", т.к. 073 === 59. В "use strict" такая восьмеричная запись числа - ошибка. Без 'g' флага заменялось только первое совпадение. Наглядная польза от strict, без него ошибок нет, а результаты неверные =)