Błąd nastawienia Levenshteina

10

Napisz program w języku o nazwie, Aktóra po podaniu łańcucha Swyświetla nazwę innego języka programowania B. Długość Bmusi być równa odległości Levenshteina (skrót "LD") pomiędzy Ai S. Aby zostać uznanym za język programowania, Bmusi mieć stronę esolangs lub stronę Wikipedii.

Przykład:

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

LD pomiędzy Pythoni Jythonwynosi jeden, więc wynikR

Musisz pokryć tylko LD o wartości do 12. Możesz założyć, że LD 0nigdy nie wystąpi.

To jest , więc wygrywa najkrótszy program w bajtach.

(To moje pierwsze wyzwanie! Dziękujemy za opinie)


Tabela liderów

Seadrus
źródło
Dlaczego 12? Czy nie ma języków o większych nazwach?
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ To po prostu wydawało się, że masz rację.
Seadrus
@ThomasKwa wierzę, Rto język programowania ... to mogło być łatwo C, Ditp
Seadrus
1
masz na myśli imię o długości równej odległości Levenshteina? Co liczy się jako język programowania? Czy musi mieć stronę esolangs / Wikipedia?
lirtosiast
6
LD dla „Patton” i „Python” wynosi 2, a nie 3.
Leif Willerts

Odpowiedzi:

3

O, 107 bajtów

Korzystanie z końcówki @histocrat, aby uprościć obliczanie odległości. Używał także języków z tą samą literą początkową, aby usunąć kilka znaków

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

Wypróbuj tutaj

MickyT
źródło
6

PHP, 137 135

Wymaga zgłaszania błędów i PHP 5.4+. Dane wejściowe to zmienna 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;

Wersja do odczytu:

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

C 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]);}

Wybór języka o nazwie jednoznakowej pozwala oszukiwać przy obliczaniu odległości: odległość dowolnego łańcucha od „C” jest tylko długością łańcucha, minus jeden, jeśli zawiera „C”. Wyobrażam sobie, że R lub J mogą pokonać to przy użyciu tej samej strategii.

histocrat
źródło
Jak gets(&s)to się nie dzieje?
anatolyg
Nie jestem pewien, działa na Anarchy Golf i ideone, ale wyraźnie nie jest tak naprawdę krykietem. Wyobrażam sobie, że używa niewykorzystanej pamięci przydzielonej dla ARGV.
histocrat
5

Perl 5, 325 276

Za pomocą odrobiny rekurencji obliczyć odległość Levenshteina.

@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]

Moja oryginalna wersja miała pewne problemy z dłuższymi danymi wejściowymi.
Dopóki nie zdałem sobie sprawy, że funkcja sortowania Perla sortuje alfabetycznie.

Okazuje się, że użycie podciągów zamiast tablic czyni je nieco dłuższymi.

@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]

Test

$ perl levenshtein.pl Php
C++
LukStorms
źródło
3

J, 115 bajtów

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

Wykorzystuje sztuczkę obliczeniową histocrata (używając języka 1-literowego) i generuje następującą listę języków:

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

na przykład:

   {&((}.&'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│
└──────┘
marinus
źródło