@DarkOracleLex

Что я не правильно делаю в тестовом задании?

Условие задачи
Ограничение времени, с1
Ограничение памяти, МБ64

На вход подается 2 строки. Нужно определить, можно ли превратить первую строку во вторую, заменяя одни буквы на другие, с учетом следующих правил:

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

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

Выходные данные
В качестве ответа в стандартный вывод программа должна выводить 1 (если превратить можно) или 0 (если превратить нельзя).

Пример 1

Входные данные:
привет прикол
Выходные данные:
1 Преобразования (выводить не нужно):
в ⇒ к (прикет)
е ⇒ о (прикот)
т ⇒ л (прикол)

Пример 2

Входные данные:
ааббдд ддббаа
Выходные данные:
1 Преобразования (выводить не нужно):
д ⇒ я (ааббяя)
а ⇒ д (ддббяя)
я ⇒ а (ддббаа)

Пример 3

Входные данные:
абаб ааах
Выходные данные:
0 Преобразовать нельзя, так как 'б' не сможет оказаться одновременно 'а' и 'х'.

Примечания по оформлению решения

При отправке решений на Java необходимо назвать исполняемый класс Main. В решении не нужно указывать пакет.
Для работы со стандартным потоком ввода в JS используйте require('readline'), а для работы со стандартным потоком вывода - console.log(String(data)).

Пример ввода-вывода на JS:
const readline = require('readline');
const rl = readline.createInterface(process.stdin, process.stdout);
rl.on('line', (line) => {
    // Введенная строка в переменной line, тут можно написать решение
    console.log(String(result));
    rl.close();
    return;
}).on('close', () => process.exit(0));


Моё решение:
const readline = require("readline");
const rl = readline.createInterface(
  process.stdin,
  process.stdout
);
rl.on("line", (line) => {
  function isConvertible(str) {
    let modifiableStr = str.split(" ")[0],
      modifierStr = str.split(" ")[1];

    if (modifiableStr.length !== modifierStr.length) {
      return 0;
    } else {
      const map1 = new Map(),
        map2 = new Map();

      for (let i = 0; i < modifiableStr.length; i++) {
        if (
          (map1.has(modifiableStr[i]) &&
            map1.get(modifiableStr[i]) !== modifierStr[i]) ||
          (map2.has(modifierStr[i]) &&
            map2.get(modifierStr[i]) !== modifiableStr[i])
        ) {
          return 0;
          }
        map1.set(modifiableStr[i], modifierStr[i]);
        map2.set(modifierStr[i], modifiableStr[i]);
      }

      if (map1.size === 33) {
        return 0;
      }
    }
    return 1;
  }
  console.log(String(isConvertible(line)));
  rl.close();
  return;
}).on("close", () => process.exit(0));


Проверил, вроде при
console.log(isConvertible("привет прикол"));
console.log(isConvertible("ааббдд ддббаа"));
console.log(isConvertible("абаб ааах"));
console.log(isConvertible("алло яспав"));
console.log(isConvertible("аб аа"));
console.log(isConvertible("аб aб"));
console.log(
  isConvertible(
    "абвгдеёжзийклмнопрстуфхцчшщъыьэюя яюэьыъщшчцхфутсрпонмлкйизжёедгвба"
  )
);

выдаёт правильные значения.
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы