Levenshtein ที่มาของคุณ


11

ระยะทางแก้ไข Levenshtein ระหว่างสองสายคือจำนวนที่น้อยที่สุดที่เป็นไปได้ของการแทรกการลบหรือการแทนที่เพื่อแปลงหนึ่งคำเป็นคำอื่น ในกรณีนี้การแทรกการลบและการแทนที่แต่ละรายการมีค่า 1

ตัวอย่างเช่นระยะห่างระหว่างrollและrollingคือ 3 เนื่องจากการลบมีค่าใช้จ่าย 1 และเราต้องลบ 3 ตัวอักษร ระยะห่างระหว่างtollและtallคือ 1 เนื่องจากการทดแทนมีค่าใช้จ่าย 1

ถูกขโมยไปจากคำถาม Levenshtein ดั้งเดิม

งานของคุณคือการคำนวณความแตกต่างในการแก้ไข Levenshtein ระหว่างสตริงอินพุตและแหล่งที่มาของคุณ นี่คือแท็กดังนั้นโกง quines (ตัวอย่างเช่นการอ่านรหัสต้นฉบับของคุณ) จะไม่ได้รับอนุญาต

กฎระเบียบ

  • อินพุตจะไม่ว่างเปล่าและจะประกอบด้วย ASCII ยกเว้นว่าที่มาของคุณมีไม่ใช่ ASCII ซึ่งในกรณีนี้อินพุตอาจมี Unicode ไม่ว่าระยะทาง Levenshtein จะถูกวัดเป็นอักขระไม่ใช่ไบต์

  • เอาต์พุตเป็นระยะทางแก้ไข Levenshtein ขั้นต่ำของอินพุตและแหล่งที่มาของคุณ

นี่คือดังนั้นคำตอบที่สั้นที่สุดเป็นไบต์ชนะ



8
ฉันจะแนะนำให้ทำคะแนนผลลัพธ์ของโปรแกรมของคุณเมื่อทำงานผ่านตัวเอง แต่แล้วฉันก็รู้ว่า ...
ETHproductions

เกี่ยวข้องอย่างใกล้ชิด
AdmBorkBork

@ETHproductions คุณคิดยังไงกับเรื่องนี้? o_o
Erik the Outgolfer

Retina นั้นใกล้เคียงกับการชนะสิ่งนี้ด้วยโปรแกรมเปล่า ...
Leo

คำตอบ:



4

Python 2 , 278 258 ไบต์

t=input();s,f='t=input();s,f=%r,lambda m,n:m or n if m*n<1else-~min(f(m-1,n),f(m,n-1),f(m-1,n-1)-((s%%s)[m-1]==t[n-1]));print f(len(s%%s),len(t))',lambda m,n:m or n if m*n<1else-~min(f(m-1,n),f(m,n-1),f(m-1,n-1)-((s%s)[m-1]==t[n-1]));print f(len(s%s),len(t))

ลองออนไลน์!

นี่เป็นเพียงควินินปกติใน Python ผสมกับอัลกอริทึม Levenshtein จากคำตอบนี้ โปรดทราบว่ามันได้รับค่อนข้าง มาก (ขอบคุณ Mr. Xcoder: P) ที่ช้า


ใช้งานได้กับl(s%s,input())(ไม่แน่ใจ) หรือไม่
Mr. Xcoder

0

จาวาสคริปต์, 113 ไบต์

นี่เป็นควินที่ถูกต้อง

f=t=>[...t].map((v,j)=>x=x.map((w,k)=>q=k--?Math.min(q,w,x[k]-(v==u[k]))+1:j+1),x=[...[,...u=`f=${f}`].keys()])|q

f=t=>[...t].map((v,j)=>x=x.map((w,k)=>q=k--?Math.min(q,w,x[k]-(v==u[k]))+1:j+1),x=[...[,...u=`f=${f}`].keys()])|q

console.log(f('f=t=>[...t].map((v,j)=>x=x.map((w,k)=>q=k--?Math.min(q,w,x[k]-(v==u[k]))+1:j+1),x=[...[,...u=`f=${f}`].keys()])|q'));
console.log(f('%'));
console.log(f('12345'));

แนวคิดถูกขโมยไปจากคำตอบอื่น


"นี่เป็น quine ที่ถูกต้อง" - จริง ๆ แล้วฉันไม่แน่ใจว่ามีฉันทามติที่ชัดเจนในเมตาเธรดที่คุณเชื่อมโยงอยู่ และในความเป็นจริงด้วยคะแนนเสียงเพียงเล็กน้อยตัวเลือก "นี่คือการโกง" ชนะได้จริง
FlipTack
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.