
26.03.2019, 00:37
|
Интересующийся
|
|
Регистрация: 13.03.2019
Сообщений: 15
|
|
Ещё задачка.
"Напишите функцию diff, которая принимает два угла (integer), каждый от 0 до 360, и возвращает наименьшую разницу между ними.
Примеры:
diff(0, 45) === 45; // не 315, а 45, потому что 45 меньше
diff(0, 180) === 180;
diff(0, 190) === 170; // не 190, а 170, потому что 170 меньше
diff(120, 280) === 160;"
Решил так:
const diff = (firstAngle, secondAngle) => {
let minAngle = firstAngle <= secondAngle ? firstAngle : secondAngle;
let maxAngle = minAngle === firstAngle ? secondAngle : firstAngle;
const firstDiff = minAngle + (360 - maxAngle);
const secondDiff = (180 - minAngle) + (maxAngle - 180);
return firstDiff <= secondDiff ? firstDiff : secondDiff;
}
|
|

26.03.2019, 09:07
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
const diff = (φ, θ) => 180 / Math.PI * Math.acos(Math.cos(Math.PI / 180 * Math.abs(φ - θ)));
UPD График этой функции: https://www.desmos.com/calculator/eh5mmuik2a
Последний раз редактировалось Malleys, 26.03.2019 в 09:12.
Причина: Добавил график
|
|

26.03.2019, 20:45
|
Интересующийся
|
|
Регистрация: 13.03.2019
Сообщений: 15
|
|
Господа, тут при нажатии на ваших скриптах кнопки "Запустить!" вылезает диалог с предупреждениями.
Похоже, я случайно отжал там опцию типа "никогда не запускать".
В общем сейчас я тут запустить ничего не могу. Не подскажете, как это можно исправить?
|
|

26.03.2019, 20:52
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от Allegro75
|
Похоже, я случайно отжал там опцию типа "никогда не запускать".
|
А там было: Больше не показывать это сообщение при запуске javascript.
Если вы про мой пример, то он ничего сам по себе не показывает, это я поставил кнопку, что бы можно было нажать, а затем открыть консоль, выбрать контекст того iframe и запустить что-то типа diff(120, 280)
|
|

28.03.2019, 01:29
|
Интересующийся
|
|
Регистрация: 13.03.2019
Сообщений: 15
|
|
Очередная задачка.
"Счастливым билетом называют такой билет с шестизначным номером, где сумма первых трех цифр равна сумме последних трех.
isHappyTicket.js
Напишите и экспортируйте по умолчанию функцию, проверяющую является ли номер счастливым (номер может быть как числового, так и строкового типа: см. примеры ниже). Функция должна возвращать true, если билет счастливый, или false, если нет.
Примеры использования:
isHappyTicket(385916); // true
isHappyTicket(231002); // false
isHappyTicket(128722); // true
isHappyTicket('054702'); // true
Подсказки
Преобразовать число в строку можно с помощью функции String...
Преобразовать строку в число можно с помощью функции Number...
Чтобы узнать длину строки, используйте свойство length..."
Моё решение:
const isHappyTicket = (num) => {
let str = String(num);
let firstSum = Number(str[0]) + Number(str[1]) + Number(str[2]);
let secondSum = Number(str[3]) + Number(str[4]) + Number(str[5]);
return firstSum === secondSum;
}
|
|

28.03.2019, 20:25
|
Новичок на форуме
|
|
Регистрация: 28.03.2019
Сообщений: 1
|
|
Сообщение от Nexus
|
А можете пояснить в чем схожесть php и js?
|
Мне тоже интересно!
|
|

28.03.2019, 23:00
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,837
|
|
Сообщение от Allegro75
|
isHappyTicket.js
|
(num=>{
const sum=arr=>arr.reduce((t,n)=>+n+t,0);
num=num.toString().split('');
return sum(num.slice(0,3))===sum(num.slice(3));
})(385916);
|
|

28.03.2019, 23:20
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
sum(num.slice(0,3))===sum(num.slice(3)) - что-то во всех примерах строгое сравнение, то есть предполагается, что будет подсунуто не то или перестраховка?
|
|

29.03.2019, 08:17
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,837
|
|
laimas, скорее перестраховка.
Честно говоря у меня просто IDE ругается на нестрогое сравнение, вот я и привык использовать везде где можно строгое сравнение, а можно почти везде.
Причина: нестрогое сравнение может привести к неожиданным приведениям типов, в итоге результат выражения может быть не тем, который ожидаешь.
Да, можно отключить предупреждения, но бывают ситуации, когда нестрогое сравнение действительно играет злую шутку.
|
|

29.03.2019, 09:13
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Nexus
|
нестрогое сравнение может привести к неожиданным приведениям типов, в итоге результат выражения может быть не тем, который ожидаешь.
|
А чего ожидается? Логика какая-то отпадная.
"Счастливым билетом называют такой билет с шестизначным номером" - то есть, если это тоже условие, а не информация, значит нужно проверять данные на входе, прежде чем доводить дело до суммирования. Если это условием не оговаривается, то не цифры не ожидаются по условию. Тогда что же такое складывается, что требует и проверки типа?
|
|
|
|