Рубрики
Без рубрики

Кодирование задач # 2 🧩

Приветствуюлей проблемных решений! 🤓 Как я уже сказал, решение проблем так же, как мышца, и это … Помечено JavaScript, Python, Challenge, Novers.

Задачи кодирования (2 части серии)

Приветствуюлей проблемных решений! 🤓.

Как я уже сказал, решение проблем выглядит как мышц, и необходимо часто практиковать, чтобы улучшить и расти как разработчик.

В этом втором эпизоде я выбрал несколько простых проблем, чтобы решить из моих любимых алгоритмов веб-сайта.

Оглавление

  • Можете ли вы получить петлю?
  • Азбука Морзе
  • Прямоугольник на квадраты
  • Встреча
  • Игра с цифрами

Можете ли вы получить петлю?

Из Кодовые слова

Эта проблема:

Вам дают узел, который является началом связанного списка. Этот список всегда содержит хвост и цикл.

Ваша цель – определить длину цикла.

Например, в следующем изображении размер хвоста 3 и размер петли 11.

Используйте атрибут «Далее», чтобы получить следующий узел.

Примечание : Не мутируйте узлы!

Мое решение (JavaScript):

function loop_size(node){
  let turtle = node;
  let rabbit = node;

  /* We need the turtle and the rabbit to start at the same 
  place. (The rabbit being faster will catch up the turtle at 
  some point) */
  do {
    turtle = turtle.getNext();
    rabbit = rabbit.getNext().getNext();
  } while (turtle !== rabbit)

  /* The rabbit goes for a run and we know that ends when he 
  reaches the turtle position again. */
  let counter = 0;
  do {
    rabbit = rabbit.getNext();
    counter++;
  } while (turtle !== rabbit)

    return counter;
} 

Азбука Морзе

Из Кодовые слова

Эта проблема:

В этой кате вы должны написать простой декодер Morse Code. В то время как код Морзе теперь в основном выходит в основном каналы связи голоса и цифровых данных, он все еще имеет его использование в некоторых приложениях по всему миру. Код Морзе кодирует каждый символ как последовательность «точек» и «тире». Например, буква A кодируется как · -, буква Q кодируется как – · – и цифру 1 кодируется как · —-. Код Морзе является нечувствительным к регистру, традиционно используются заглавные буквы. Когда сообщение написано в MORSE код, одно пространство используется для разделения кодов символов, и 3 пространства используются для разделения слов.

ЗАМЕТКА: Дополнительные пробелы до или после того, как код не имеют смысла и следует игнорировать.

В дополнение к буквам, цифрам и некоторой пунктуации, существуют некоторые специальные сервисные коды, самые известные из них – международный сигнал бедствия (который был впервые выпущен Titic), который закодирован как ··· — ···· Отказ Эти специальные коды рассматриваются как одиночные специальные символы, и обычно передаются как отдельные слова.

Ваша задача – реализовать функцию, которая заберет код MORSE в качестве ввода и возврата декодированной человеческой читаемой строки.

Например:

decodeMorse('.... . -.--   .--- ..- -.. .')
#should return "HEY JUDE"

Примечание : Для целей кодирования вы должны использовать символы ASCII. и – не символы Unicode.

Таблица Morse Code предварительно загружена для вас в качестве словаря, не стесняйтесь использовать его:

JavaScript/Tymdercript: MORSE_CODE [‘.–‘]

Мое решение (JavaScript):

const decodeMorse = (morseCode) => {
  const response = [];

  const words = morseCode.trim().split('   ');

  for (const word of words) {
    const wordArr = [];
    for (const letter of word.split(' ')) {
      wordArr.push(MORSE_CODE[letter]);
    }
    response.push(wordArr.join(''))
  }

  return response.join(' ');

}

Прямоугольник на квадраты

Из Кодовые слова

Эта проблема:

Приведенный ниже рисунок дает представление о том, как сократить заданный «истинный» прямоугольник на квадраты («истинный» прямоугольник, что означает, что два размера различны).

Можете ли вы перевести этот рисунок в алгоритм?

Вам будет дано два измерения

  • положительная целочисленная длина (параметр с именем СПГ)
  • Положительная целочисленная ширина (параметр по имени ширина)

Вы вернете коллекцию или строку (в зависимости от языка; Shell Bash, PowerShell, Pascal и Fortran возвращают строку) с размером каждого из квадратов.

Пример:

  sqInRect(5, 3) should return "3 2 1 1"
  sqInRect(3, 5) should return "3 2 1 1"

Мое решение (JavaScript):

function sqInRect(lng, wdth){
  console.log(lng, wdth);

  if (lng === wdth) { return null; }

  let lngx = lng;
  let wdthx = wdth;

  let area = lng * wdth;
  let result = [];



  while (area > 0) {
    if (lngx > wdthx) {
      area -= Math.pow(wdthx, 2);
      result.push(wdthx);
      lngx =  lngx - wdthx;
    } else {
      area -= Math.pow(lngx, 2);
      result.push(lngx);
      wdthx = wdthx - lngx;
    }
  }

  return result;  
}

Встреча

Из Кодовые слова

Эта проблема:

Джон пригласил некоторых друзей. Его список:

s = "Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill";

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

  • делает эту строку в верхнем регистре
  • Дает ему отсортировано в алфавитном порядке по фамилии.

Когда фамилии одинаковы, сортируйте их по имени. Фамилия и имя гостя выходят в результате между скобками, разделенными запятой.

Таким образом, результат заседания функций будет:

"(CORWILL, ALFRED)(CORWILL, FRED)(CORWILL, RAPHAEL)(CORWILL, WILFRED)(TORNBULL, BARNEY)(TORNBULL, BETTY)(TORNBULL, BJON)"

Может произойти, что в двух отдельных семьях с той же фамилией имени два человека тоже одинаковое имя.

Мое решение (Python):

def meeting(s):
    result = ""

    # Convert string to list
    names_list = s.upper().split(";")

    # Create a dictionnary and bind a list of first names to every last names
    names_dic = {}
    for name in names_list:
        first_name = name.split(":")[0]
        last_name = name.split(":")[1]

        if last_name in names_dic: names_dic[last_name].append(first_name)
        else: names_dic[last_name] = [first_name]

    # Sort and add every entry to the result string
    for key in sorted(names_dic):
        for first_name in sorted(names_dic[key]):
            result = result + f"({key}, {first_name})"

    return result

Игра с цифрами

Из Кодовые слова

Эта проблема:

Некоторые числа имеют забавные свойства. Например:

89 –> 8¹ + * 1

695 –> 6² + 9³ + * 2

46288 –> 4³ + 6⁴+ 2⁵ + 8⁶ + * 51

Учитывая положительное целое число n, написанное как ABCD … (a, b, c, d … быть цифрами) и положительное целое число p

Мы хотим найти положительное целое число k, если оно существует, например, сумма цифр n, взятых на последовательные мощности P, равна k * n. Другими словами:

Есть ли целое число k, такое как: (a ^ p + b ^ (p + 1) + c ^ (p + 2) + d ^ (p + 3) + * k

Если это так, мы вернем K, если не вернуть -1.

Примечание : n и p всегда будет дан как строго позитивные целые числа.

dig_pow(89, 1) should return 1 since 8¹ + 9² = 89 = 89 * 1
dig_pow(92, 1) should return -1 since there is no k such as 9¹ + 2² equals 92 * k
dig_pow(695, 2) should return 2 since 6² + 9³ + 5⁴= 1390 = 695 * 2
dig_pow(46288, 3) should return 51 since 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51

Мое решение (JavaScript):

function digPow(n, p){
  if(!n || !p){
    return -1;
  }
  let digitArray = n.toString().split("");
  let sun = 0;
  for(let i = 0; i

Задачи кодирования (2 части серии)

Оригинал: “https://dev.to/killianfrappartdev/coding-challenges-2-1bmp”