Levenshtein ระยะทางอคติ


10

เขียนโปรแกรมในภาษาที่มีชื่อAว่าได้รับสตริงS, Bเอาท์พุทชื่อของการเขียนโปรแกรมภาษาที่แตกต่างกัน ความยาวของBจะต้องเท่ากับLevenshtein ระยะทาง (abbr. "เหอะ") ระหว่างและA SในการพิจารณาภาษาการเขียนโปรแกรมBต้องมีหน้า esolangs หรือหน้า Wikipedia

ตัวอย่าง:

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

LD ระหว่างPythonและJythonเป็นหนึ่งดังนั้นการส่งออกR

คุณจะต้องครอบคลุมถึง LD 12ของขึ้นไป คุณสามารถสันนิษฐานได้ว่า LD ของ0จะไม่เกิดขึ้น

นี่คือดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ

(นี่เป็นความท้าทายครั้งแรกของฉัน! คำติชมชื่นชม)


ลีดเดอร์บอร์ด


ทำไม12? ไม่มีภาษาที่มีชื่อใหญ่กว่านี้ใช่ไหม
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴดูเหมือนจะเป็นเหตุผลที่ดีกว่า
Seadrus

@ThomasKwa ผมเชื่อว่าRเป็นภาษาโปรแกรม ... มันจะได้รับได้อย่างง่ายดายC, Dฯลฯ
Seadrus

1
ดังนั้นคุณหมายถึงชื่อที่มีความยาวเท่ากับระยะทาง Levenshtein หรือไม่ สิ่งใดที่ถือว่าเป็นภาษาการเขียนโปรแกรม มันต้องมีหน้า esolangs / Wikipedia หรือไม่
lirtosiast

6
LD ของ "Patton" และ "Python" คือ 2 ไม่ใช่ 3
Leif 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+ aการป้อนข้อมูลเป็นตัวแปร GET

<?=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;

รุ่นที่อ่านได้:

<?=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

ฉันไม่แน่ใจมันใช้ได้กับ Anarchy Golf และ ideone แต่เห็นได้ชัดว่าไม่ได้เล่นคริกเก็ตจริงๆ ฉันจินตนาการว่าใช้หน่วยความจำที่ไม่ได้ใช้ที่จัดสรรให้กับ ARGV
ประวัติศาสตร์

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

นี่คือการใช้เคล็ดลับการคำนวณของฮิสโตแคต (ใช้ภาษา 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.