Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Блог нуба-шахматиста (https://javascript.ru/forum/offtopic/77034-blog-nuba-shakhmatista.html)

Allegro75 26.03.2019 00:37

Ещё задачка.

"Напишите функцию 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;
}

Malleys 26.03.2019 09:07

const diff = (φ, θ) => 180 / Math.PI * Math.acos(Math.cos(Math.PI / 180 * Math.abs(φ - θ)));


UPD График этой функции: https://www.desmos.com/calculator/eh5mmuik2a

Allegro75 26.03.2019 20:45

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

Malleys 26.03.2019 20:52

Цитата:

Сообщение от Allegro75
Похоже, я случайно отжал там опцию типа "никогда не запускать".

А там было: Больше не показывать это сообщение при запуске javascript.

Если вы про мой пример, то он ничего сам по себе не показывает, это я поставил кнопку, что бы можно было нажать, а затем открыть консоль, выбрать контекст того iframe и запустить что-то типа diff(120, 280)

Allegro75 28.03.2019 01:29

Очередная задачка.

"Счастливым билетом называют такой билет с шестизначным номером, где сумма первых трех цифр равна сумме последних трех.
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; 
}

SvenSven 28.03.2019 20:25

Цитата:

Сообщение от Nexus (Сообщение 505119)
А можете пояснить в чем схожесть php и js?

Мне тоже интересно!

Nexus 28.03.2019 23:00

Цитата:

Сообщение от 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);

laimas 28.03.2019 23:20

sum(num.slice(0,3))===sum(num.slice(3)) - что-то во всех примерах строгое сравнение, то есть предполагается, что будет подсунуто не то или перестраховка?

Nexus 29.03.2019 08:17

laimas, скорее перестраховка.
Честно говоря у меня просто IDE ругается на нестрогое сравнение, вот я и привык использовать везде где можно строгое сравнение, а можно почти везде.
Причина: нестрогое сравнение может привести к неожиданным приведениям типов, в итоге результат выражения может быть не тем, который ожидаешь.
Да, можно отключить предупреждения, но бывают ситуации, когда нестрогое сравнение действительно играет злую шутку.

laimas 29.03.2019 09:13

Цитата:

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

А чего ожидается? Логика какая-то отпадная. :)

"Счастливым билетом называют такой билет с шестизначным номером" - то есть, если это тоже условие, а не информация, значит нужно проверять данные на входе, прежде чем доводить дело до суммирования. Если это условием не оговаривается, то не цифры не ожидаются по условию. Тогда что же такое складывается, что требует и проверки типа?


Часовой пояс GMT +3, время: 14:24.