Левенштейн расстояние смещения


10

Напишите программу на языке с именем, Aкоторое, учитывая строку S, выводит имя другого языка программирования B. Длина Bдолжна быть равна расстоянию Левенштейна (сокращ. "LD") между Aи S. Чтобы считаться языком программирования, Bнеобходимо иметь страницу esolangs или страницу Википедии.

Пример:

(Suppose the program is coded in Python)
Input: Jython
Output: R
Input: Pyt4oq
Output: Go
Input: Rs7hon
Output: C++

LD между Pythonи Jythonодин, поэтому выходR

Вам нужно только покрыть до LD до 12. Вы можете предположить, что LD 0никогда не произойдет.

Это , поэтому выигрывает самая короткая программа в байтах.

(Это мой первый вызов! Обратная связь приветствуется)


Leaderboard


Почему 12? Разве нет языков с большими именами?
Конор О'Брайен,

@ CᴏɴᴏʀO'Bʀɪᴇɴ Мне показалось, что это не совсем понятно.
Seadrus

@ThomasKwa Я считаю , что Rэто язык программирования ... он мог бы легко C, Dи т.д.
Seadrus

1
Итак, вы имеете в виду имя с длиной, равной расстоянию Левенштейна? Что считается языком программирования? Должна ли она иметь страницу esolangs / Wikipedia?
lirtosiast

6
LD "Patton" и "Python" составляет 2, а не 3.
Лейф Виллертс

Ответы:


3

O 107 байтов

Использование подсказки от @histocrat, чтобы упростить расчет расстояния. Также используются языки с одинаковой начальной буквой для удаления нескольких символов

"pyrodecimal""hakespeare""tackstack""nowflake""nowball""nowman""onata""ADOL""taq""oT""R"""ie\'O<-1-{;}d'Soo

Попробуй здесь


6

PHP, 137 135

Требуется отключение отчетов об ошибках и PHP 5.4+. Ввод GET-переменной a.

<?=explode(~ß,~­ß¼Üß¼ÔÔßµž‰žß¬œž“žß¾Š‹¶‹ß¾‘“›¼ß«¶Ò½¾¬¶¼ß½Š“š˜Š’ßµž‰žŒœ–‹ß²ž‹—š’ž‹–œžß¾œ‹–‘¬œ–‹)[levenshtein(PHP,$_GET[a])-1];

HexDump:

00000000: 3C 3F 3D 65 78 70 6C 6F - 64 65 28 7E DF 2C 7E AD |<?=explode(~ ,~ |
00000010: DF BC DC DF BC D4 D4 DF - B5 9E 89 9E DF AC 9C 9E |                |
00000020: 93 9E DF BE 8A 8B 90 B6 - 8B DF BE 8D 91 90 93 9B |                |
00000030: BC DF AB B6 D2 BD BE AC - B6 BC DF BD 8A 9D 9D 93 |                |
00000040: 9A 98 8A 92 DF B5 9E 89 - 9E 8C 9C 8D 96 8F 8B DF |                |
00000050: B2 9E 8B 97 9A 92 9E 8B - 96 9C 9E DF BE 9C 8B 96 |                |
00000060: 90 91 AC 9C 8D 96 8F 8B - 29 5B 6C 65 76 65 6E 73 |        )[levens|
00000070: 68 74 65 69 6E 28 50 48 - 50 2C 24 5F 47 45 54 5B |htein(PHP,$_GET[|
00000080: 61 5D 29 2D 31 5D 3B    -                         |a])-1];|
00000087;

Читаемая версия:

<?=explode(' ','R C# C++ Java Scala AutoIt ArnoldC TI-BASIC Bubblegum Javascript Mathematica ActionScript')[levenshtein(PHP,$_GET[a])-1];

6

С 183

main(s){char* a[12]={"R","C#","C++","Java","COBOL","Python","Clipper","VBScript","Smalltalk","Javascript","Mathematica","ActionScript"};printf(a[strlen(gets(&s))-!!strchr(&s,67)-1]);}

Выбор языка с именем из одного символа позволяет обмануть вычисление расстояния: расстояние любой строки от «C» - это только длина строки, минус один, если он включает «C». Я полагаю, что R или J могут победить, используя ту же стратегию.


Почему gets(&s)не происходит сбой?
Анатолий

Я не уверен, что это работает на Anarchy Golf и ideone, но это явно не крикет. Я предполагаю, что он использует неиспользуемую память, выделенную для ARGV.
гистократ

5

Perl 5, 325 276

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

@X=(P,e,r,l);$y=@Y=split//,pop;sub L{my($n,$m)=@_;return$m,if!$n;return$n,if!$m;my$c=$X[$n]eq$Y[$m]?0:1;(sort{$a<=>$b}(L($m-1,$n)+1,L($m,$n-1)+1,L($m-1,$n-1)+$c))[0]}print qw(C C# C++ Java COBOL Python Clipper VBScript Smalltalk Javascript Mathematica ActionScript)[L(4,$y)-1]

У моей оригинальной версии были некоторые проблемы с более длинными входами.
Пока я не понял, что функция сортировки Perl сортирует по алфавиту.

Использование подстрок вместо массивов делает его немного длиннее.

@L=qw(C C# C++ Java COBOL Python Clipper VBScript Smalltalk Javascript Mathematica ActionScript);sub l{my($s,$t)=@_;return length($t)if!$s;return length($s)if!$t;my($u,$v)=(substr($s,1),substr($t,1));substr($s,0,1)eq substr($t,0,1)?l($u,$v):(sort{$a<=>$b}(l($u,$v),l($s,$v),l($u,$t)))[0]+1}print$L[l('Perl',pop)-1]

Тестовое задание

$ perl levenshtein.pl Php
C++

3

J, 115 байт

{&((}.&'YABC'&.>|.i.4),(g'SMITHb'),'Clojure';(g'ComeFrom2'),((g=:}:;])'StackStacks'),<'CoffeeScript')@<:@(#-'J'&e.)

Это использует трюк вычисления гистократа (используя однобуквенный язык) и генерирует следующий список языков:

┌─┬──┬───┬────┬─────┬──────┬───────┬────────┬─────────┬──────────┬───────────┬────────────┐
│C│BC│ABC│YABC│SMITH│SMITHb│Clojure│ComeFrom│ComeFrom2│StackStack│StackStacks│CoffeeScript│
└─┴──┴───┴────┴─────┴──────┴───────┴────────┴─────────┴──────────┴───────────┴────────────┘

например:

   {&((}.&'YABC'&.>|.i.4),(g'SMITHb'),'Clojure';(g'ComeFrom2'),((g=:}:;])'StackStacks'),<'CoffeeScript')@<:@(#-'J'&e.) 'C++'
┌───┐
│ABC│
└───┘
   {&((}.&'YABC'&.>|.i.4),(g'SMITHb'),'Clojure';(g'ComeFrom2'),((g=:}:;])'StackStacks'),<'CoffeeScript')@<:@(#-'J'&e.) 'ActionScript'
┌────────────┐
│CoffeeScript│
└────────────┘
   f=:{&((}.&'YABC'&.>|.i.4),(g'SMITHb'),'Clojure';(g'ComeFrom2'),((g=:}:;])'StackStacks'),<'CoffeeScript')@<:@(#-'J'&e.)
   f 'Jython'
┌─────┐
│SMITH│
└─────┘
   f 'Python'
┌──────┐
│SMITHb│
└──────┘
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.