레 벤슈 테인 거리 편향


10

이름의 언어로 프로그램을 작성 A하는 문자열 주어, S다른 프로그래밍 언어의 이름을 출력을 B. 의 길이는 및 사이 BLevenshtein 거리 (약칭 "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++

Python와 사이의 LD Jython는 1이므로 출력R

최대 LD까지만 커버하면됩니다 12. LD 0가 절대 발생하지 않는다고 가정 할 수 있습니다.

이것은 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.

(이것은 나의 첫 번째 도전입니다! 피드백은 감사합니다)


리더 보드


12? 이름이 큰 언어가 없습니까?
코너 O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ 방금 추론에 반대되는 것처럼 보였습니다.
Seadrus

@ThomasKwa 나는 생각 R이 쉽게 수 있었다 ... 프로그래밍 언어 C, D
Seadrus

1
레 벤슈 테인 거리 와 같은 길이 의 이름을 의미 합니까? 프로그래밍 언어는 무엇입니까? esolangs / Wikipedia 페이지가 있어야합니까?
lirtosiast

6
"패튼"와 "파이썬"의 LD는 없습니다 3. 2
레이프 Willerts

답변:


3

O, 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];

16 진 덤프 :

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)충돌하지?
아나 톨릭

확실하지 않습니다, 그것은 Anarchy Golf와 ideone에서 작동하지만 분명히 귀뚜라미는 아닙니다. ARGV에 할당 된 사용되지 않은 메모리를 사용하고 있다고 생각합니다.
histocrat

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.)

이것은 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│
└──────┘
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.