দুটি স্ট্রিংয়ের মধ্যে সর্বনিম্ন সম্পাদনার দূরত্ব খুঁজুন


13

ব্যাখ্যা

সম্পাদন করা দূরত্ব দুটি স্ট্রিং মধ্যে সন্নিবেশ, মোছা বা বদল ন্যূনতম সম্ভব সংখ্যা একটি ফাংশন অন্য শব্দ মধ্যে এক শব্দ রূপান্তর হয়।

সন্নিবেশ এবং মোছার জন্য মূল্য 1 এবং বিকল্পের দাম 2 itu

উদাহরণস্বরূপ, এর মধ্যে ABএবং দূরত্ব A1, কারণ মুছে ফেলার জন্য ব্যয় হয় 1 এবং একমাত্র সম্পাদনা প্রয়োজন Bঅক্ষরটি মুছে ফেলা ।

এর মধ্যে CARএবং দূরত্ব FAR2, কারণ প্রতিস্থাপনের দাম 2। এটি দেখার আরও একটি উপায় হ'ল একটি মুছে ফেলা এবং একটি সন্নিবেশ।

বিধি

দুটি ইনপুট স্ট্রিং দেওয়া (সরবরাহ করা তবে আপনার ভাষায় সুবিধাজনক), আপনার প্রোগ্রামটি অবশ্যই দুটি স্ট্রিংয়ের মধ্যে ন্যূনতম সম্পাদনার দূরত্ব খুঁজে পাবে।

আপনি ধরে নিতে পারেন যে স্ট্রিংগুলিতে কেবলমাত্র অক্ষর রয়েছে A-Zএবং এতে 100 টিরও কম অক্ষর এবং 0 টিরও বেশি অক্ষর রয়েছে।

এটি কোড গল্ফ , তাই সংক্ষিপ্ততম সমাধানটি জয়ী হয়।

নমুনা পরীক্ষার কেস

ISLANDER, SLANDER
> 1
MART, KARMA
> 5
KITTEN, SITTING
> 5
INTENTION, EXECUTION
> 8

আমি আমার অ্যালগরিদম ক্লাসে একবার এক্সেলে এটি করেছি। .Xls ডকুমেন্ট হিসাবে প্রকল্পটি চালু করতে মজাদার ছিল। এটি আসলে বেশ ভাল কাজ করেছে। আমি এটি খুঁজে পেতে পারি কিনা তা দেখতে পাবেন।
16:32

পিএইচপি সহজেই এটি জিততে হবে।
st0le

@ st0le - বিল্ট ইন levenshteinফাংশন বিকল্পগুলি একটি সম্পাদনা (বিকল্প) হিসাবে বিবেচনা করে, দুটি নয় (মুছে ফেলুন + সন্নিবেশ)।
মিঃ লালমা

উত্তর:


7

ব্রেনফাক, 2680

+>>>>>>>>>>>>>>>>>>>>>>++++++>,<[->-----<]>--[+++++++++++++++++++++
+++++++++++>>[->>+<<]>>+<<,--------------------------------]>>[-<<<
+>>>]<<<<[>[-<<+>>]<<<]>[-<<<<<+>>>>>]>[>>],----------[++++++++++>>
[->>+<<]>>+<<,----------]>>[-<<<+>>>]<<<<[>[-<<+>>]<<<]>[-<<+>>]<<[
-<+>>+<]<<<[->+<]>[-<+>>>>+<<<]>>>[-<+>]<[->+>+<<]<[-<+>]<[->+>+<<]
<[-<+>>+<]<[->+<]>>>>>>[-[->>+<<]<<[->>+<<]<<[->>+<<]>>>>>>]<<[->>+
>+<<<]>>>[-<<<+>>>]<[->>+[->+>+<<]<<[->>+<<]>>]>>[-]<[<<]<<<+[->>>+
<<<]>>>[-<+<<+>>>]<<<<<[->>[->>>>[->>+<<]<<[->>+<<]<<[->>+<<]<<[->>
+<<]>>>>]>>[->>>>+<<<<]>>>>[-<<<<+<<+>>>>>>]<<+[->>+<<]>>[-<<+<+>>>
]<<<<<<<<]>>[-]>>[-]>>[-]-[+<<-]+>>>>>>>>>>>>>>>>>[-<+>]<[->+<<<<+>
>>]<<<[->>>>>>[-<+>]<[->+<<<<+>>>]<<<<<<<[-]<<+>>>>>>[-<<<<+>>>>>>>
>>>[-<+>]<[->+>+<<]<<<<<<<<<[->+<]>[->>>>>>>>+<<<<<<<<<+>]<<<[->+<]
>[->>>>>>>>+<<<<<<<<<+>]>>>>>>>>>[-<<<<<+>>>>>]<<<<<[->>+>>>+<<<<<]
>>>>>>>>[-[->>+<<]<<[->>+<<]<<[->>+<<]<<[->>+<<]>>>>>>>>]<<<<<<+>>-
[-<<[-<<<<+>>>>]<<<<[->>+>>+<<<<]>>[->>>>>>[->>+<<]<<[->>+<<]<<[->>
+<<]<<[->>+<<]>>]>>>>]>>[->>+<<]>>[-<<+>>>>+<<]->>-[-[->>+<<]>>]>[-
>+<]>[-<+>>>+<<]<<<[->+<]>[-<+>>>+<<]+[->>[-<<+>>]>>[-<<+>>]<<<<<<+
]<<<<<<[->>>>>>+<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<<<<[->>>>+<<<<]
-<<[-]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<<<<[->>[->>+<<]<<[->>+<<]>>]>>-[
-[->>+<<]>>]<[->+<]>[-<+>>>+<<]+[->>[-<<+>>]<<<<+]>>[-<<+>>]<<<<<<<
<-[+>>[-<<+>>]>>[-<<+>>]>>[-<<+>>]<<<<<<<<-]+>>>[-]<[->+<]>>>[-]<[-
>+<]>>>[-]<[->+<]>>>[->+<]>[-<+>>>>>>>>>>>>>+<<<<<<<<<<<<]>>>>>>>>>
>>>-[-[->>+<<]>>]>[->+<]>[-<+<+>>]<<<<-[+>>[-<<+>>]<<<<-]+>>[-<+>]>
>>>>>>>>[->+<]>[-<+>>>>>>>>>>>+<<<<<<<<<<]>>>>>[->+<]>[-<+>>>>>+<<<
<]>>>>-[-[->>+<<]>>]>[->+<]>[-<+<+>>]<<<<-[+>>[-<<+>>]<<<<-]+>[->-<
]>[-<[-]+>]<[->>>+<<<]>>>[-<<+<+>>>]<<-[+>[->+<]<]<[->>+<-[[-]>[->+
<]>[-<+>>>+<<]+>>[-<<[-]>>]<[->+<]>[-<+>>>+<<]+>>[-<<[-]>>]<[->+<]>
[-<+>>>+<<]+>>[-<<[-]>>]<<[-<<[-]+>>]<<[-<<[-]+>>]<<[-<<[-]+>>]<<<+
>->->>->>-<<<<<]<[->+<]]>[-<+>]>>[-<<<+>>>]<<<[->>>>>>>>>>>>>+<<<<<
<<<<<<<<]>>>>>>>>[->+<]>[-<+>>>>>>>>>+<<<<<<<<]>[->+<]>[-<+>>>>>>>>
>+<<<<<<<<]>>>>>>>>>[->>>+<<<]>>>[-<<+<+>>>]<<<<<[->>>>>+<<<<<]>>>>
>[-<<<<<+<<<+>>>>>>>>]<<<<<<<<+>>>>>>[-[->>+<<]<<[->>+<<]<<[->>+<<]
<<[->>+<<]<<[->>+<<]>>>>>>>>>>]<<<<[-<<[-<<<<<<+>>>>>>]<<<<<<[->>+>
>>>+<<<<<<]>>[->>>>>>>>[->>+<<]<<[->>+<<]<<[->>+<<]<<[->>+<<]<<[->>
+<<]>>]>>>>>>]<<[-]<<[->>>>+<<<<]>>>>>>[-[->>+<<]<<[->>+<<]>>>>]<<[
->>>>>+<<<<<]-[+<<-]+>>>>>>>>>>>>>>>]<<]>>>>>>>>[->+<]<<[->+<]<<[->
+<]>>>>>[-[->>+<<]<<[->>+<<]<<[->>+<<]>>>>>>]<<<<[->>[->>>>+<<<<]>>
>>[-<<+<<+>>>>]<<+[-[->>+<<]<<[->>+<<]<<[->>+<<]>>>>>>]<<<<]>>[-[->
>+<<]>>]>>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>>>[->-[>+>>]>
[+[-<+>]>+>>]<<<<<]>[-]<++++++[->++++++++[->+>+<<<<+>>]<]>>>.<.<<<.

অবশ্যই ডায়নামিক প্রোগ্রামিং ব্যবহার করা।

ইনপুট স্ট্রিংগুলি একটি স্পেস দ্বারা পৃথক করা উচিত এবং তার পরে একটি নতুন লাইন। উদাহরণ স্বরূপ:

INTENTION EXECUTION
008

1
খুব সুন্দরভাবে সাজানো এবং খুব পঠনযোগ্য - আমার এটি পছন্দ, +1!
থমাস

এটি কি কম্পিউটারের ভাষা? : ও

এটি এই প্রশ্নের সবচেয়ে বিভ্রান্তিকর জমা ... +1 কেবল এটি BF এর কারণ।
হাইপারনিউট্রিনো

5

পাইথন, 138 148 152 টি অক্ষর

ঠিক আছে, আমি নীতিটি জানতাম তবে এর আগে কখনও সম্পাদনার দূরত্ব বাস্তবায়িত হয়নি, সুতরাং এখানে যায়:

x,y=raw_input().split()
d=range(99)
for a in x:
 c=d;d=[d[0]+1]
 for b,p,q in zip(y,c[1:],c):d+=[min(d[-1]+1,p+1,q+2*(a!=b))]
print d[-1]

4

পিএইচপি, 40

বর্ণিত বিধিগুলি অনুসরণ করে, তবে বিধিগুলির চেতনা নয়:

<?=levenshtein($argv[1],$argv[2],1,2,1);

আর্গুমেন্ট হিসাবে এটি দুটি পরামিতি নেয়। উদাহরণ কলিং: php edit_dist.php word1 word2
সাধারণত levenshtein()প্রতিস্থাপনটিকে একটি অপারেশন হিসাবে বিবেচনা করে তবে এর একটি ওভারলোডেড ফর্ম রয়েছে যেখানে সন্নিবেশ / সাব / ডিলিট ওজন উল্লেখ করা যেতে পারে। এক্ষেত্রে এর ১ 1//০//২০১।


3

এপিএল (90 টি অক্ষর)

⊃⌽({h←1+c←⊃⍵⋄d←h,1↓⍵⋄h,(⊂⍵){y←⍵+1⋄d[y]←⍺{h⌷b=⍵⌷a:⍵⌷⍺⋄1+d[⍵]⌊y⌷⍺}⍵}¨⍳x}⍣(⊃⍴b←,⍞))0,⍳x←⍴a←,⍞

আমি ডায়ালগ এপিএলকে আমার দোভাষী হিসাবে ব্যবহার করছি, ⎕IOসেটটি 1 এ ⎕MLসেট করে 0 তে সেট করে রেখেছি সরাসরি ফাংশন ( { ... }) গণনাগুলি, ইনপুট হিসাবে একটি সারি দেওয়া হয়, দূরত্বের ম্যাট্রিক্সের পরবর্তী সারিতে। (এটি প্রাথমিক সারি দিয়ে শুরু করা হয়েছে:। 0,⍳x) পাওয়ার অপারেটর ( ) দ্বিতীয় স্ট্রিং ( ⊃⍴b) এর প্রতিটি অক্ষরের জন্য একবারে ফাংশনটি বাসাতে ব্যবহৃত হয় । এত কিছুর পরে, চূড়ান্ত সারিটি ( ) বিপরীত হয় এবং এর প্রথম উপাদানটি নেওয়া হয় ( )।

উদাহরণ:

      ⊃⌽({h←1+c←⊃⍵⋄d←h,1↓⍵⋄h,(⊂⍵){y←⍵+1⋄d[y]←⍺{h⌷b=⍵⌷a:⍵⌷⍺⋄1+d[⍵]⌊y⌷⍺}⍵}¨⍳x}⍣(⊃⍴b←,⍞))0,⍳x←⍴a←,⍞
LOCKSMITH
BLACKSMITH
3
      ⊃⌽({h←1+c←⊃⍵⋄d←h,1↓⍵⋄h,(⊂⍵){y←⍵+1⋄d[y]←⍺{h⌷b=⍵⌷a:⍵⌷⍺⋄1+d[⍵]⌊y⌷⍺}⍵}¨⍳x}⍣(⊃⍴b←,⍞))0,⍳x←⍴a←,⍞
GATTTGTGACGCACCCTCAGAACTGCAGTAATGGTCCAGCTGCTTCACAGGCAACTGGTAACCACCTCATTTGGGGATGTTTCTGCCTTGCTAGCAGTGCCAGAGAGAACTTCATCATTGTCACCTCATCAAAGACTACTTTTTCAGACATCTCCTGTAG
AAGTACTGAACTCCTAATATCACCAATTCTTCTAAGTTCCTGGACATTGATCCGGAGGAGGATTCGCAGTTCAACATCAAGGTAAGGAAGGATACAGCATTGTTATCGTTGTTGAGATATTAGTAAGAAATACGCCTTTCCCCATGTTGTAAACGGGCTA
118

3

আর 51

এটি ব্যবহারকারীর কাছ থেকে দুটি লাইনে পড়ে (যা ইনপুট) এবং তারপরে adistদূরত্ব গণনা করতে কেবল ফাংশনটি ব্যবহার করে । যেহেতু বিকল্পগুলির জন্য এই সমস্যার জন্য 2 ব্যয় হয় আমাদের অ্যাডিস্টের ব্যয়গুলির জন্য প্যারামিটারের জন্য একটি নামযুক্ত ভেক্টর যুক্ত করতে হবে। যেহেতু অ্যাডিস্টের জন্য একটি গণনা পরামিতি রয়েছে আমরা কেবলমাত্র ব্যয়কে ছোট করতে পারি তাই আমাদের এখনও প্যারামিটার নামের সাথে একটি অনন্য মিল রয়েছে।

x=readLines(n=2);adist(x[1],x[2],cos=c(i=1,d=1,s=2))

উদাহরণ ব্যবহার

> x=readLines(n=2);adist(x[1],x[2],cos=c(i=1,d=1,s=2))
MART
KARMA
     [,1]
[1,]    5

0

রুবি 1.9, 124

l=->a,b{a[0]?b[0]?[(a[0]==b[0]?-1:1)+l[a[1..-1],b[1..-1]],l[a[1..-1],b],l[a,b[1..-1]]].min+1: a.size: b.size}
puts l[*ARGV]

বিকল্পগুলির জন্য ওজন দ্বিগুণ করার জন্য এখানে ধীর, পুনরাবৃত্ত রুবি পদ্ধতির গল্ফড সংস্করণ । স্ট্রিংয়ের প্রথম অক্ষরটি সরিয়ে ফেলার জন্য এটি 7 টি অক্ষর লাগে তা সত্যই ব্যথা পায় এবং এর (a[0]==b[0]?-1:1)মতো কিছু দিয়ে প্রতিস্থাপন করা ভাল -1**a[0]<=>b[0]তবে আপনার ক্রিয়াকলাপটি আমার বন্ধু নয়।


0

স্মার্টটাক (স্মার্টটাক / এক্স), 34

আমি ভাগ্যবান - প্রমিত "স্ট্রিং" শ্রেণিতে ইতিমধ্যে লেভেনস্টাইন রয়েছে:

ইনপুট এ, বি:

a levenshteinTo:b s:2 k:2 c:1 i:1 d:1

(অতিরিক্ত প্যারামিটারগুলি প্রতিস্থাপন, মোছা ইত্যাদির উপর বিভিন্ন ওজনের অনুমতি দেয়)

পরীক্ষা রান:

#( 'ISLANDER'  'SLANDER' 
   'MART'      'KARMA'   
   'KITTEN'    'SITTING' 
   'INTENTION' 'EXECUTION'  
) pairWiseDo:[:a :b|
    a print. ' ' print. b print. ' ' print.
    (a levenshteinTo:b
            s:2 k:2 c:1 i:1 d:1) printCR.
].

->

ISLANDER SLANDER 1
MART KARMA 5
KITTEN SITTING 5
INTENTION EXECUTION 8
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.