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

рони 23.03.2019 21:25

Allegro75,
https://javascript.ru/forum/misc/570...tml#post380310

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 ругается на нестрогое сравнение, вот я и привык использовать везде где можно строгое сравнение, а можно почти везде.
Причина: нестрогое сравнение может привести к неожиданным приведениям типов, в итоге результат выражения может быть не тем, который ожидаешь.
Да, можно отключить предупреждения, но бывают ситуации, когда нестрогое сравнение действительно играет злую шутку.


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