Понеділок Міні-Гольф: Серія коротких викликів з гольф-кодом , що публікуються (сподіваємось!) Щопонеділка.
(Вибачте, що це трохи пізно.)
Я впевнений, що більшість з вас чули про відстань Левенштейна , алгоритм обчислення відстані між двома струнами. Ну, цей виклик полягає у впровадженні аналогічного алгоритму мого власного винаходу *, який називається відстань анаграми . Основна відмінність полягає в тому, що порядок символів не має значення; натомість вимірюються лише символи, унікальні для однієї або іншої струни.
Виклик
Мета завдання - написати програму або функцію, яка займає два рядки і повертає між ними відстань анаграми. Основний спосіб зробити це - використовувати таку логіку:
- Перетворіть обидва рядки в малі і (за бажанням) сортуйте символи кожного за алфавітом.
- Поки рядки містять принаймні один рівний символ, видаліть перший екземпляр цього символу з кожної рядки.
- Додайте довжини решти рядків і поверніть / виведіть результат.
Приклад
Якщо входи:
Hello, world!
Code golf!
Потім вони розташовуються у нижньому регістрі та сортуються: (за типовим сортуванням JS; відзначте провідні пробіли)
!,dehllloorw
!cdefgloo
Видаляючи всі символи, що знаходяться в обох рядках, ми закінчуємо:
,hllrw
cfg
Таким чином, відстань анаграми між початковими двома рядками = 6 + 3 = 9.
Деталі
- Рядки можуть бути прийняті у будь-якому розумному форматі.
- Рядки будуть складатися лише з друкованого ASCII.
- Самі рядки не містять жодного пробілу, крім звичайних пробілів. (Немає вкладок, нових рядків тощо)
- Не потрібно використовувати цей точний алгоритм, якщо результати однакові.
Тестові кейси
Введення 1:
Hello, world!
Code golf!
Вихід 1:
9
Введення 2:
12345 This is some text.
.txet emos si sihT 54321
Вихід 2:
0
Введення 3:
All unique characters here!
Bdfgjkmopvwxyz?
Вихід 3:
42
Введення 4:
This is not exactly like Levenshtein distance,
but you'll notice it is quite similar.
Вихід 4:
30
Введення 5:
all lowercase.
ALL UPPERCASE!
Вихід 5:
8
Оцінка балів
Це код-гольф , тому найкоротший дійсний код у байтах виграє. Tiebreaker переходить до подання, яке першим дійшло до остаточного підрахунку байтів. Переможець буде обраний наступного понеділка, 12 жовтня. Удачі!
Редагувати: Вітаю переможця, @isaacg, використовуючи Pyth (знову) для приголомшливих 12 байт!
* Якщо цей алгоритм був використаний в іншому місці та / або дано інше ім'я, будь ласка, дайте мені знати! Я не зміг його знайти за 20-хвилинний пошук.