Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 23.03.2019, 21:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Allegro75,
https://javascript.ru/forum/misc/570...tml#post380310
Ответить с цитированием
  #22 (permalink)  
Старый 26.03.2019, 00:37
Интересующийся
Отправить личное сообщение для Allegro75 Посмотреть профиль Найти все сообщения от Allegro75
 
Регистрация: 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;
}
Ответить с цитированием
  #23 (permalink)  
Старый 26.03.2019, 09:07
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 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. Причина: Добавил график
Ответить с цитированием
  #24 (permalink)  
Старый 26.03.2019, 20:45
Интересующийся
Отправить личное сообщение для Allegro75 Посмотреть профиль Найти все сообщения от Allegro75
 
Регистрация: 13.03.2019
Сообщений: 15

Господа, тут при нажатии на ваших скриптах кнопки "Запустить!" вылезает диалог с предупреждениями.
Похоже, я случайно отжал там опцию типа "никогда не запускать".
В общем сейчас я тут запустить ничего не могу. Не подскажете, как это можно исправить?
Ответить с цитированием
  #25 (permalink)  
Старый 26.03.2019, 20:52
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Allegro75
Похоже, я случайно отжал там опцию типа "никогда не запускать".
А там было: Больше не показывать это сообщение при запуске javascript.

Если вы про мой пример, то он ничего сам по себе не показывает, это я поставил кнопку, что бы можно было нажать, а затем открыть консоль, выбрать контекст того iframe и запустить что-то типа diff(120, 280)
Ответить с цитированием
  #26 (permalink)  
Старый 28.03.2019, 01:29
Интересующийся
Отправить личное сообщение для Allegro75 Посмотреть профиль Найти все сообщения от Allegro75
 
Регистрация: 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; 
}
Ответить с цитированием
  #27 (permalink)  
Старый 28.03.2019, 20:25
Новичок на форуме
Отправить личное сообщение для SvenSven Посмотреть профиль Найти все сообщения от SvenSven
 
Регистрация: 28.03.2019
Сообщений: 1

Сообщение от Nexus Посмотреть сообщение
А можете пояснить в чем схожесть php и js?
Мне тоже интересно!
Ответить с цитированием
  #28 (permalink)  
Старый 28.03.2019, 23:00
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,724

Сообщение от 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);
Ответить с цитированием
  #29 (permalink)  
Старый 28.03.2019, 23:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

sum(num.slice(0,3))===sum(num.slice(3)) - что-то во всех примерах строгое сравнение, то есть предполагается, что будет подсунуто не то или перестраховка?
Ответить с цитированием
  #30 (permalink)  
Старый 29.03.2019, 08:17
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,724

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактор для добавления постов в блог через админку kaurav Node.JS 2 05.11.2017 16:44
Новый чат блог форум с нуля - ваши пожелания Minimus Оффтопик 0 15.08.2015 09:25
Мой авто блог loodsine Ваши сайты и скрипты 3 09.08.2011 02:49
Оцените блог VL.VG Regent Ваши сайты и скрипты 8 10.01.2010 18:05