Sai lệch khoảng cách Levenshtein


10

Viết chương trình bằng ngôn ngữ có tên A, được cung cấp một chuỗi S, xuất ra tên của ngôn ngữ lập trình khác B. Độ dài Bphải bằng khoảng cách Levenshtein (abbr. "LD") giữa AS. Để được coi là ngôn ngữ lập trình, Bphải có trang esolang hoặc trang Wikipedia.

Thí dụ:

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

LD giữa PythonJythonlà một, vì vậy đầu raR

Bạn chỉ cần trang trải đến một LD tối đa 12. Bạn có thể cho rằng LD 0sẽ không bao giờ xảy ra.

Đây là , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng.

(Đây là thử thách đầu tiên của tôi! Phản hồi được đánh giá cao)


Bảng xếp hạng


Tại sao 12? Không có ngôn ngữ với tên lớn hơn?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Nó chỉ có vẻ như là một phần trên hợp lý.
Seadrus

@ThomasKwa Tôi tin Rlà một ngôn ngữ lập trình ... nó có thể dễ dàng được C, Dvv
Seadrus

1
vậy, ý bạn là một cái tên có chiều dài bằng khoảng cách Levenshtein? Những gì được coi là một ngôn ngữ lập trình? Nó phải có một trang esolang / Wikipedia?
lirtosiast

6
LD của "Patton" và "Python" là 2, không phải 3.
Leif Willerts

Câu trả lời:


3

O, 107 byte

Sử dụng mẹo từ @histocrat để làm cho phép tính khoảng cách đơn giản hơn. Cũng sử dụng các ngôn ngữ có cùng chữ cái bắt đầu để xóa một vài ký tự

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

Hãy thử nó ở đây


6

PHP, 137 135

Yêu cầu báo cáo lỗi tắt và PHP 5.4+. Đầu vào là biến 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;

Phiên bản dễ đọc:

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

Chọn một ngôn ngữ có tên một ký tự cho phép bạn gian lận với phép tính khoảng cách: bất kỳ khoảng cách nào của chuỗi từ "C" chỉ là độ dài của chuỗi, trừ đi một ký tự nếu nó bao gồm "C". Tôi tưởng tượng R hoặc J có thể đánh bại điều này bằng cách sử dụng chiến lược tương tự.


Làm thế nào gets(&s)mà không sụp đổ?
anatolyg

Tôi không chắc chắn, nó hoạt động trên Anarchy Golf và ideone nhưng rõ ràng không thực sự là dế. Tôi tưởng tượng nó sử dụng bộ nhớ không sử dụng được phân bổ cho ARGV.
lịch sử

5

Perl 5, 325 276

Sử dụng một chút đệ quy để tính khoảng cách 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]

Phiên bản gốc của tôi có một số vấn đề với đầu vào dài hơn.
Cho đến khi tôi nhận ra rằng hàm sắp xếp Perl sắp xếp theo thứ tự abc.

Sử dụng các chuỗi con thay vì các mảng hóa ra để làm cho nó dài hơn một chút.

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

Kiểm tra

$ perl levenshtein.pl Php
C++

3

J, 115 byte

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

Đây là sử dụng thủ thuật tính toán của histocrat (sử dụng ngôn ngữ 1 ký tự) và tạo danh sách các ngôn ngữ sau:

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

ví dụ:

   {&((}.&'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│
└──────┘
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.