Відхилення Левенштейна відстані


10

Напишіть програму мовою з назвою, Aяка, задавши рядок S, видає назву іншої мови програмування B. Довжина Bмає бути дорівнює відстані Левенштейна (абр. "LD") між Aі S. Щоб вважатись мовою програмування, Bповинна мати сторінку esolangs або сторінку Wikipedia.

Приклад:

(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. Можна припустити, що ЛН 0ніколи не виникне.

Це , тому виграє найкоротша програма в байтах.

(Це мій перший виклик! Відгуки оцінені)


Таблиця лідерів


Чому 12? Чи немає мов із більшими іменами?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Просто здавалося, що це було досить розумно.
Seadrus

@ThomasKwa Я вважаю , що Rце мова програмування ... він міг би легко C, Dі т.д.
Seadrus

1
значить, ви маєте на увазі ім’я, довжина якого дорівнює відстані Левенштейна? Що вважається мовою програмування? Чи повинна вона мати сторінку esolangs / Wikipedia?
lirtosiast

6
LD "Patton" та "Python" - 2, а не 3.
Leif Willerts

Відповіді:


3

О, 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)не виходить з ладу?
anatolyg

Я не впевнений, він працює на Anarchy Golf та ideone, але явно не дуже крикет. Я думаю, це використання невикористаної пам'яті, виділеної для ARGV.
гістократ

5

Перл 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.)

Для цього використовується обчислювальний трюк гістократа (використання 1-літерної мови) та генерується наступний список мов:

┌─┬──┬───┬────┬─────┬──────┬───────┬────────┬─────────┬──────────┬───────────┬────────────┐
│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.