Distorsione da distanza di Levenshtein


10

Scrivi un programma in una lingua con nome Ache, data una stringa S, genera il nome di un diverso linguaggio di programmazione B. La lunghezza di Bdeve essere uguale alla distanza di Levenshtein (abbr. "LD") tra Ae S. Per essere considerato un linguaggio di programmazione, Bdeve avere una pagina esolangs o una pagina Wikipedia.

Esempio:

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

Il LD tra Pythone Jythonè uno, quindi l'outputR

Hai solo bisogno di coprire fino a un LD fino a 12. Puoi presumere che 0non si verificherà mai un LD di .

Questo è , quindi vince il programma più breve in byte.

(Questa è la mia prima sfida! Il feedback è apprezzato)


Classifica


Perché 12? Non ci sono lingue con nomi più grandi?
Conor O'Brien,

@ CᴏɴᴏʀO'Bʀɪᴇɴ Sembrava solo un ragionevole successo.
Seadrus,

@ThomasKwa Credo che Rè un linguaggio di programmazione ... avrebbe potuto essere facilmente C, De così via
Seadrus

1
quindi, intendi un nome con una lunghezza uguale alla distanza di Levenshtein? Cosa conta come linguaggio di programmazione? Deve avere una pagina esolangs / Wikipedia?
lirtosiast,

6
Il LD di "Patton" e "Python" è 2, non 3.
Leif Willerts

Risposte:


3

O, 107 byte

Utilizzare la punta di @histocrat per semplificare il calcolo della distanza. Ha usato anche le lingue con la stessa lettera iniziale per rimuovere alcuni caratteri

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

Provalo qui


6

PHP, 137 135

Richiede la segnalazione degli errori disattivata e PHP 5.4+. L'input è variabile 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;

Versione leggibile:

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

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

Scegliere una lingua con un nome di un carattere ti consente di imbrogliare con il calcolo della distanza: la distanza di qualsiasi stringa da "C" è solo la lunghezza della stringa, meno una se include "C". Immagino che R o J potrebbero batterlo usando la stessa strategia.


Come gets(&s)mai non va in crash?
Anatolyg

Non ne sono sicuro, funziona su Anarchy Golf e ideone ma chiaramente non è proprio cricket. Immagino che stia usando la memoria inutilizzata allocata per ARGV.
histocrat,

5

Perl 5, 325 276

Usando un po 'di ricorsione per calcolare la distanza di Levenshtein.

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

La mia versione originale presentava alcuni problemi con gli input più lunghi.
Fino a quando ho capito che la funzione di ordinamento Perl ordina in ordine alfabetico.

L'uso di sottostringhe anziché di array risulta essere più lungo.

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

3

J, 115 byte

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

Questo sta usando il trucco di calcolo di histocrat (usando una lingua di 1 lettera) e genera il seguente elenco di lingue:

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

per esempio:

   {&((}.&'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│
└──────┘
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.