Levenshtein距离偏差


10

用具有A给定字符串S的名称的语言编写程序,以输出另一种编程语言的名称B。的长度B必须等于该Levenshtein距离之间(缩写“LD”)AS。要被视为一种编程语言,B必须具有esolangs页面或Wikipedia页面。

例:

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

Python和之间的LD Jython为1,因此输出R

您最多只需要掩盖最多LD 12。您可以假设LD 0永远不会发生。

这是,因此以字节为单位的最短程序获胜。

(这是我的第一个挑战!感谢您的反馈)


排行榜


为什么12呢 是否没有名称较大的语言?
Conor O'Brien 2015年

@CᴏɴᴏʀO'Bʀɪᴇɴ似乎只是个理由而已。
Seadrus

@ThomasKwa我相信R是一种编程语言...它可以很容易地得到CD等等
Seadrus

1
那么,您的意思是一个长度等于Levenshtein距离的名称吗?什么算作编程语言?它必须有esolangs / Wikipedia页面吗?
lirtosiast 2015年

6
“巴顿将军”和“巨蟒”的LD是2,而不是3
雷夫Willerts

Answers:


3

O,107个字节

使用@histocrat的技巧使距离计算更简单。也使用带有相同起始字母的语言来删除一些字符

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

在这里尝试


6

PHP,137 135

需要关闭错误报告和P​​HP 5.4+。输入是GET变量a

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

十六进制转储:

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

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

选择一种具有一个字符名称的语言可以让您欺骗距离计算:任何字符串与“ C”的距离就是字符串的长度,如果包括“ C”,则减去一。我想R或J可以使用相同的策略击败它。


怎么gets(&s)不崩溃?
anatolyg 2015年

我不确定,它可以在无政府状态高尔夫和ideone上使用,但显然不是真正的板球运动。我想它正在使用分配给ARGV的未使用的内存。
histocrat

5

Perl 5中,325 276

使用一点递归来计算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]

我的原始版本在输入较长内容时遇到了一些问题。
直到我意识到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.)

这是使用histocrat的计算技巧(使用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│
└──────┘
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.