Код, близький до виклику: Початку


15

Це продовження цього виклику: Код, близький до виклику: Сума цілих чисел

Завдання в цьому є трохи складніше, а також створює класний заголовок (саме тому я і вибрав його):

Обчисліть відстань Левенштейна між двома струнами

Як і в останньому виклику, ваш бал у цьому виклику - відстань Левенштейна між вашим кодом та цитатою вище.

Тож тепер для деталей!

Ваша програма візьме 2 входи, обидва рядки без пробілів або нових рядків, і виведе відстань Левенштейна між ними. Відстань Левенштієна визначається як кількість доповнень, вилучень та підстановок, необхідних для перетворення однієї рядки в іншу. Для отримання додаткової інформації про те, як його обчислити, дивіться на зв'язаній вище сторінці Вікіпедії. Щоб перевірити, чи працює ваша програма, використовуйте цей калькулятор . Ваша програма не повинна виводити нічого, крім відстані Левенштейна між двома рядками. Він буде дискваліфікований, якщо щось інше буде виведено. Приклад вводу / виводу:

Inputs:
test
test2
Output:
1

Inputs:
222
515
Output:
3

Inputs:
Test
test
Output:
1

Ваш код може не містити жодних запитів або коментарів.

Відповіді:


9

Frink , відстань 24

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

Щоб скористатися цим, ви б зателефонували Вирахувати за допомогою двох рядків, і оскільки це повертається, вам також потрібно оточити виклик 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 / сеанс за допомогою клавіш:

  • 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.