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

Allegro75 18.03.2019 23:17

рони, спасибо, почитаю.

Allegro75 21.03.2019 15:34

Когда ты подступаешься к программированию, ничего изначально не зная - как я - то обилие языков программирования производит пугающее впечатление.
У тебя нет понимания, какой язык тебе нужен; непонятно, чем они отличаются; и вопрос о том, какой из них учить, кажется очень сложным. Внутри сидит представление об обычных человеческих языках общения. Кажется, что если вначале ошибёшься, и выучишь португальский; а потом окажется, что в жизни больше полезен китайский - то кошмар и ужас, черта с два потом переучишься.

Но когда подступаешься поближе, то шокирует уже похожесть этимх самых языков программирования.
Я сейчас одновременно штудирую JS и PHP - и такое чувство, что учу сразу и украинский, и белорусский) И проблема, соответственно, совсем не в том, что имеешь дело с двумя сложными предметами одновременно - а в том, что предметы очень похожи, и ты их путаешь.
Я ещё немного Python потрогал, и это тоже, пользуясь упомянутой метафорой, какой-то болгарский по ощущениям.

Nexus 21.03.2019 15:49

А можете пояснить в чем схожесть php и js?

Allegro75 21.03.2019 17:12

B чем схожесть?
Это неожиданный для меня вопрос. Хочется ответить "во всём".
Схожесть в общей структуре. И там, и там есть некие объекты - и список важнейших из этих объектов совпадает - числа, строки. Массивы.
И мы с этими объектами манипулируем. Одинаковым образом манипулируем - через арифметические, логические и строковые операции. Вводим переменные, конструируем функции. Имея при этом набор готовых уже, стандартных функций.
Важнейший, насколько я понимаю, оператор(?)
while(){}
практически полностью совпадает.

Естественней для меня выглядел бы вопрос о том, в чём различия языков.
И различия эти в мелкой орфографии, в лексике. Там "$", тут "var". Там str.length, тут strlen($str). Легко запутаться.

Надо оговориться, что я, конечно, просто описываю впечатления новичка, ни в коей мере не претендуя на глубокое понимание сути.

Nexus 21.03.2019 18:26

Цитата:

Сообщение от Allegro75
Важнейший, насколько я понимаю, оператор(?)
while(){}
практически полностью совпадает.

А что не дает сказать "полностью совпадает"?

Allegro75 21.03.2019 21:28

А что не дает сказать "полностью совпадает"?

Ну, просто неуверенность новичка - может, я чего ещё не знаю про эти операторы?..

Allegro75 21.03.2019 22:16

Новую задачку решил.
Горазды же эти математики на придумывание неких сущностей. Первый раз слышу про "совершенные" числа.

Создайте функцию isPerfect, которая принимает число и возвращает true, если оно совершенное, и false — в ином случае.

Совершенное число — это положительное целое число, равное сумме его положительных делителей (не считая само число). Например, 6 — идеальное число, потому что 6 = 1 + 2 + 3.


Список совершенных чисел:
6
28,
496,
8128,
33 550 336,..


Моё решение:
const isPerfect = (num) => {
  if (num === 1) {
    return false;
  }
  let sumOfDividers = 1;
  let divider = 2;
  const half = num / 2;
  while (divider <= half) {
    if ((num % divider) === 0) {
      sumOfDividers += divider;
    }
    divider += 1;
  }
    
  if (num === sumOfDividers) {
    return true;
  }
  return false;
}

Allegro75 22.03.2019 23:10

Ещё задачка.

Условие:

fizzBuzz.js
Реализуйте и экспортируйте по умолчанию функцию, которая выводит (console.log) в терминал числа в диапазоне от begin до end. При этом:

Если число делится без остатка на 3, то вместо него выводится слово Fizz
Если число делится без остатка на 5, то вместо него выводится слово Buzz
Если число делится без остатка и на 3, и на 5, то вместо числа выводится слово FizzBuzz
В остальных случаях выводится само число

Функция принимает два параметра (begin и end), определяющих начало и конец диапазона (включительно). Для простоты считаем, что эти параметры являются целыми числами больше нуля. Если диапазон пуст (в случае, когда begin > end), то функция просто ничего не печатает.
Пример

Вызов функции:

fizzBuzz(11, 20);

Вывод в терминале:

11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz

Это задание крайне часто задают на собеседованиях.



Решение:
const fizzBuzz = (begin, end) => {
  const word = (num) => {
    if (((num % 3) === 0) && ((num % 5) === 0)) {
      return 'FizzBuzz';
    }
    else if ((num % 3) === 0) {
      return 'Fizz';
    }
    else if ((num % 5) === 0) {
      return 'Buzz';
    }
    else return num;
  }
  let start = begin;
  for (; start <= end; start += 1) {
    console.log(word(start));
  }
}

Malleys 23.03.2019 09:03

function fizzBuzz(begin, end) {
	for(var i = begin; i <= end; i++) {
		var s = (i % 3 === 0 ? "Fizz" : "") +
		        (i % 5 === 0 ? "Buzz" : "");

		console.log(s === "" ? i : s);
    }
}

Allegro75 23.03.2019 20:46

Очень круто, Malleys!

Для меня отдельным удовольствием было то, что я всю эту запись понял)

Почему я не мог так сделать - потому, что у меня не было уверенного знания о том, что пустая строка и undefined(?) это одно и то же.
Я так понимаю, это достигается за счёт слабой типизации в JavaScript...

P.S.
Хотя нет, я понял, что тут слабая типизация, похоже, ни при чём.
Всё сделано просто и прямо...
Респект.


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