Levenshtein mesafe sapması


10

Bir Adize verildiğinde Sfarklı bir programlama dilinin adını veren bir dilde bir program yazın B. Uzunluğu Beşit olmalıdır Levenshtein mesafe (kısaltması "LD") arasında Ave S. Bir programlama dili olarak kabul edilmek Biçin bir esolangs sayfası veya Wikipedia sayfası olmalıdır.

Misal:

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

Arasında geniş çaplı Pythonve Jythonçıkış, böylece biriR

Yalnızca en fazla LD kadar bir alanı kapsamalısınız 12. LD değerinin 0hiçbir zaman gerçekleşmeyeceğini varsayabilirsiniz .

Bu , bu yüzden bayttaki en kısa program kazanır.

(Bu benim ilk görevim! Geri bildirim takdir edilmektedir)


Liderler Sıralaması


Neden 12? Daha büyük isimlere sahip diller yok mu?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Sadece bir reasonabl upperbnd gibi görünüyordu.
Seadrus

@ThomasKwa İnanıyorum Rkolayca olabilirdi ... bir programlama dilidir C, Dvb
Seadrus

1
Eğer öyleyse, bir bir isim anlamına uzunluğu Levenshtein mesafeye eşit? Programlama dili nedir? Bir esolangs / Wikipedia sayfası olmalı mı?
lirtosiast

6
"Patton" ve "Python" un
LD'si

Yanıtlar:


3

O, 107 bayt

Mesafe hesaplamasını kolaylaştırmak için @histokrattan ipucunu kullanın. Ayrıca birkaç karakteri kaldırmak için aynı başlangıç ​​harfine sahip diller

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

Burada deneyin


6

PHP, 137 135

Hata bildirimi kapalı ve PHP 5.4+ gerektirir. Girdi GET değişkendir 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;

Okunabilir sürüm:

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

Tek karakterli bir dil seçmek, mesafe hesaplamasıyla hile yapmanıza olanak tanır: herhangi bir dizenin "C" den uzaklığı, dizenin uzunluğudur, eksi "C" içeriyorsa. R veya J'nin aynı stratejiyi kullanarak bunu yenebileceğini hayal ediyorum.


Nasıl oluyor gets(&s)çökmez?
anatolyg

Emin değilim, Anarchy Golf ve ideone üzerinde çalışıyor ama açıkça kriket değil. ARGV için ayrılan kullanılmayan belleği kullandığını düşünüyorum.
histokrat

5

Perl 5, 325 276

Levenshtein mesafesini hesaplamak için biraz özyineleme kullanma.

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

Orijinal sürümümün daha uzun girdilerle ilgili bazı sorunları vardı.
Perl sıralama fonksiyonunun alfabetik olarak sıralandığını anlayana kadar.

Diziler yerine alt dizeler kullanmak, biraz daha uzun olmasını sağlar.

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

Ölçek

$ perl levenshtein.pl Php
C++

3

J, 115 bayt

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

Bu, histokratın hesaplama hilesini (1 harfli bir dil kullanarak) kullanır ve aşağıdaki diller listesini oluşturur:

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

Örneğin:

   {&((}.&'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│
└──────┘
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.