Код, близкий к вызову: Начало


15

Это продолжение задачи: код, близкий к задаче: сумма целых чисел

Задача в этой игре немного сложнее, а также создает крутой заголовок (вот почему я выбрал его):

Рассчитайте расстояние Левенштейна между двумя струнами

Точно так же, как и в прошлом, ваш результат в этом задании - это расстояние Левенштейна между вашим кодом и приведенной выше цитатой.

Так что теперь для деталей!

Ваша программа будет принимать 2 входа, обе строки без пробелов и переносов, и будет выводить расстояние Левенштейна между ними. Расстояние Левенштиена определяется как количество добавлений, удалений и замен, необходимых для преобразования одной строки в другую. Для получения дополнительной информации о том, как рассчитать его, см. Ссылку на страницу Википедии, приведенную выше. Чтобы проверить, работает ли ваша программа, используйте этот калькулятор . Ваша программа не должна выводить ничего, кроме расстояния Левенштейна между двумя строками. Он будет дисквалифицирован, если что-либо еще будет выведено. Пример ввода / вывода:

Inputs:
test
test2
Output:
1

Inputs:
222
515
Output:
3

Inputs:
Test
test
Output:
1

Ваш код может не иметь никаких операций или комментариев.

Ответы:


9

Фринк , расстояние 24

Calculate[the,Levenshtein]:=editDistance[the,Levenshtein]

Чтобы использовать это, вы должны вызвать Calculate с двумя строками, и, поскольку он возвращается, вам также необходимо окружить вызов print[]. Если это не разрешено, мой счет - 30.

Пример:

Calculate["kitten","spork"]        -> returns 6
print[Calculate["kitten","spork"]] -> prints 6.

Вам нужно скачать Frink, так как веб-интерпретатор не позволяет определять функции. Он должен работать на всех системах, учитывая, что это Java-апплет. Скачать инструкцию здесь. ,


Psst. Привет! Вот реализация Левенштейн в символическом, то я работаю над: k=λ:Δ(ί,ί).


3
Интересный язык, напоминает мне Mathematica.
Алекс А.

Это считается использованием встроенной функции для решения задачи, которую можно считать стандартной лазейкой (но, похоже, 90% всех ответов на этот вызов)
Джон Дворжак

1
@JanDvorak Встроенные модули являются своего рода серой областью, поскольку разбивка голосов по мета-ответу, в которой перечислены стандартные встроенные лазейки, составляет почти половину.
Алекс А.

5

R, расстояние 35

Calculate=function(the,Levenshtein)adist(between<-the,two<-Levenshtein)

Это создает функцию Calculateс параметрами theи Levenshtein. Он использует встроенную функцию R adistдля вычисления расстояния. Параметры строки в adistпо существу theи Levenshteinпереименованы в betweenи two.


5

PHP4.1, расстояние 32 22 15 14

Очень простой, ничего захватывающего.

<?=$Calculate_the=Levenshtein($distance,$between_two_strings);

Или более короткая версия:

<?=$ulatethe=Levenshtein($istance,$etweentwostrin);

Чтобы это работало, вам нужно отправить / установить переменную POST / GET / COOKIE / session с ключами:

  • distance( istanceдля более короткого)
  • between_two_strings( etweentwostrinдля более короткого)

Аргументы в таком порядке.

Проверьте счет на http://ideone.com/QzNZ8T

Пример:

http://localhost/distance.php?distance=string1&between_two_strings=string2

@AboveFire Извините, но я не могу принять ваши изменения. Цитирование OP: "Your code may not have no-ops or comments."и ваши изменения просто добавили комментарий HTML.
Исмаэль Мигель

2

PHP, расстояние 44

function Calculate($two,$strings){echo levenshtein($two,$strings);}

Используйте встроенную levenshteinфункцию из стандартной библиотеки PHP и назовите аргументы, чтобы попытаться минимизировать расстояние.


1
Не должно ли это быть $two,$strings?
Исмаэль Мигель

действительно, так и должно быть.
帰 回 帰

1
Кроме того, вам не хватает;
Исмаэль Мигель

Предлагаю вам решение с расстояния 28:echo$Calculate_the=levenshtein($_GET[distance_between_two],$_GET[strings]);
Исмаэль Мигель

2

Пип, расстояние 50

Не использует встроенную функцию Левенштейна!

xINg?#JgMN[1+(fac:b@>1)1+(fe:a@>1b)(a@0NEb@0)+(fec)]

Этот код реализует рекурсивный алгоритм Левенштейна ; как таковой, он очень медленный, занимает несколько секунд даже для строк длиной 5. Я бы не рекомендовал запускать программу через себя, чтобы проверить это!

Вот мой базовый код с пробелами и комментариями:

; Note: a Pip program is an implicit function f, which is called with the command-line
; arguments. The args are stored in the list g, as well as being assigned to the local
; variables a-e.

; Is one of the args the empty string? (NB x is initialized to "")
x IN g ?
 ; If so, join args together and take the length (i.e., length of the non-empty string).
 # J g
 ; If not, take the min of the following:
 MN [
  ; Recursively call f with the first character of a removed; add 1 to the result
  (f a@>1 b) + 1
  ; Recursively call f with the first character of b removed; add 1 to the result
  (f a b@>1) + 1
  ; Recursively call f with the first characters of both removed; iff the two characters
  ; were not equal, add 1 to the result
  (f a@>1 b@>1) + (a@0 NE b@0)
 ]

Основное изменение в окончательном варианте является назначение некоторых значений временных переменных cи e, которые появляются в строке вызова и , таким образом , уменьшить расстояние Левенштейна немного.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.