একটি ফাজি ফাইন্ডার প্রয়োগ করুন


14

এই লিঙ্কটি দ্বারা অনুপ্রাণিত হয়ে আমি রেডডিতে পেয়েছি

একটি ফজিফাইন্ডার অনেকগুলি পাঠ্য সম্পাদকের একটি বৈশিষ্ট্য। আপনি যখন কোনও ফাইলের পাথ টাইপ করতে শুরু করেন S, ফুজিফাইন্ডার কিক করে আপনার বর্তমান ডিরেক্টরিতে থাকা সমস্ত ফাইলগুলিকে দেখায় যা আপনার দেওয়া স্ট্রিংটি Sফাইলের অবস্থান অনুসারে বাছাই করে ।

আপনার কাজটি অস্পষ্ট অনুসন্ধানকারীকে বাস্তবায়ন করা। এটি এমন প্রোগ্রাম বা ফাংশন হওয়া উচিত যা স্ট্রিং Sএবং স্ট্রিংগুলির একটি তালিকা গ্রহণ করে (যা স্ট্যান্ডিন, ফাংশন আর্গুমেন্ট বা কমান্ড লাইনের মাধ্যমে) Lআপনি চান তবে ফর্ম্যাটেড এবং अस्पष्ट ফাইন্ডার চালনার ফলাফলটি প্রিন্ট বা মুদ্রণ করে। অনুসন্ধানটি কেস-সংবেদনশীল হওয়া উচিত। Sএকাধিক স্ট্রিংগুলিতে একই অবস্থানে থাকা ফলাফলগুলি আপনার ইচ্ছামত সাজানো যেতে পারে।

উদাহরণ:

Input: mig, [imig, mig, migd, do, Mig]
Output:
    [mig, migd, imig]
OR
    [migd, mig, imig]

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


আমরা কি অনুমান করতে পারি যে সমস্ত ইনপুট ছোট হাতের অক্ষরে রয়েছে, বা আমাদেরও উচ্চ বর্ণের ক্ষেত্রে ঝাপসা ম্যাচ করা উচিত?
কেদে

1
@ ভিওজ- না; অনুসন্ধান অবশ্যই কেস-সংবেদনশীল হতে হবে। আমি প্রশ্ন এবং উদাহরণ আপডেট করেছি।
kirbyfan64sos

উত্তর:


5

পাইথ, 9 বাইট

oxNzf}zTQ

অনলাইনে চেষ্টা করুন: বিক্ষোভ

ব্যাখ্যা:

            implicit: z = input string, Q = input list
    f   Q   filter Q for elements T, which satisfy:
     }zT      z is substring of T
o           order the remaining strings N by:
 xNz          the index of z in N

1
এটি আমার পরীক্ষার সময় ঠিক একই পাইথ প্রোগ্রাম ছিল। :)
kirbyfan64sos

5

পাইথন 2, 65

def f(s,l):g=lambda x:x.find(s)+1;print sorted(filter(g,l),key=g)

অভিব্যক্তি x.find(s)প্রথম সংঘটন অবস্থান ফেরৎ sমধ্যে x, দান -1কোনো মিল জন্য। আমরা 1কোনও ফলাফলের সাথে মিলে যায় এমন ফলাফলকে যুক্ত করি 0, আমাদের filterসেগুলি ছাড়িয়ে দেয়। তারপরে আমরা ম্যাচের অবস্থান অনুসারে বাছাই করি যা 1 দ্বারা স্থানান্তরিত দ্বারা প্রভাবিত হয় না।


5

সিজেম, 18 15 বাইট

{1$#)}q~2$,@$p;

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

ইনপুট / আউটপুট

ইনপুট:

"mig" ["imig" "mig" "migd" "do" "Mig"]

আউটপুট:

["mig" "migd" "imig"]

কিভাবে এটা কাজ করে

      q~        e# Read and evaluate the input from STDIN.
                e# Pushes a needle and an array of haystacks.
{    }          e# Define a code block:
 1$             e#   Copy the needle.
   #            e#   Compute the index of the needle in the haystack.
    )           e#   Add 1 to the index.
        2$      e# Copy the block.
          ,     e# Filter: Keep only haystacks for which the code block
                e#         pushed a non-zero value.
           @    e# Rotate the block on top of the stack.
            $   e# Sort: Arrange the haystacks according to the values
                e#       pushed by the code block.
             p  e# Print the filtered and sorted haystacks.
              ; e# Discard the needle.

5

গল্ফস্ক্রিপ্ট, 13 বাইট

~{?)}+\1$,\$`

এটি সেই বিরল ঘটনাগুলির মধ্যে একটি যেখানে গল্ফস্ক্রিপ্ট সিজেমকে পরাজিত করতে পারে, ব্লক কনটেনটেশন ব্যবহার করে এবং ইনপুট সহ কয়েকটি স্বাধীনতা যা আপনার ইচ্ছামত ফরম্যাট করা যেতে পারে ।

ওয়েব গল্ফস্ক্রিপ্ট এ এটি অনলাইন চেষ্টা করুন ।

ইনপুট / আউটপুট

ইনপুট

["imig" "mig" "migd" "do" "Mig"] {"mig"}

আউটপুট

["migd" "mig" "imig"]

কিভাবে এটা কাজ করে

~             # Evaluate the input from STDIN.
              # Pushes an array of haystacks and a needle in a block.
 {?)}         # Push a code block that computes an index and increments it.
     +        # Concatenate that block with the needle block.
      \1$     # Swap the block with the arrays of haystacks and copy the block.
         ,    # Filter: Keep only haystacks for which the code block
              #         pushed a non-zero value.
          \   # Swap the array of haystacks with the code block.
           $  # Sort: Arrange the haystacks according to the values
              #       pushed by the code block.
            ` # Inspect: Format the array for pretty printing.

3

জাভাস্ক্রিপ্ট ES6, 68 বাইট

(s,l,f=j=>j.indexOf(s))=>l.filter(w=>~f(w)).sort((a,b)=>f(a)>f(b))

এটি একটি অনামী ফাংশন যা প্যারামিটারগুলি s(ফাইলের পাথ স্ট্রিং) এবং l(স্ট্রিংগুলির অ্যারে ) নেয় takes নীচের স্ট্যাক স্নিপেটে EG5 তে রূপান্তরিত অলংগল্ড কোড রয়েছে যাতে আরও লোক সহজেই এটি পরীক্ষা করতে পারে। (আপনার যদি ফায়ারফক্স থাকে তবে আপনি তার উত্তরে পাওয়া edc65 এর প্রিটিটিয়ার টেস্ট স্যুটটি ব্যবহার করতে পারেন))

f=function(s,l){
  g=function(j){
    return j.search(s)
  }
  
  return l.filter(function(w){
    return ~g(w)
  }).sort(function(a,b){
    return g(a)>g(b)
  })
}

id=document.getElementById;run=function(){document.getElementById('output').innerHTML=f(document.getElementById('s').value,document.getElementById('l').value.split(', ')).join(', ')};document.getElementById('run').onclick=run;run()
<label>File path: <input type="text" id="s" value="mig" /></label><br />
<label>Files: <input type="text" id="l" value="imig, mig, migd, do, Mig" /></label><br />
<button id="run">Run</button><br />
Output: <output id="output"></output>


কি দারুন! বোকা আমার টেস্ট স্যুট প্রস্তুত করতে সময় হারাতে!
edc65

3

[হোল্ড] পাইথ, 24 বাইট

JwKcwdVlK=G.)KI}JGaYG))Y

চেষ্টা এখানে

আমি কোড গল্ফিং / পাইথ এ বেশ নতুন তাই আমি নিশ্চিত যে এটি সর্বোত্তম নয় তবে আমি এটিতে কাজ করছি!

আপডেট: আমি মনে করি না যে আমি আসলে সঠিকভাবে বাছাই করছি এবং এটি কাজ করে বলে মনে হয় না। আমি জানি যে oক্রমানুসারে, এবং এস এর অবস্থান অনুসারে আমার বাছাই করা প্রয়োজন সুতরাং আমি .:GlJবর্তমানের উপাদানটির জন্য এস এর দৈর্ঘ্যের সমস্ত সাবস্ট্রিংগুলি অনুসন্ধান করতে Gএবং তারপরে xপ্রথম উপস্থিতির সূচকটি সন্ধান করার জন্য ব্যবহার করছি এস, তবে আমি ল্যাম্বডাকে সঠিকভাবে সেট করতে পারি না।


চেক আউট zএবং Q। এগুলি ব্যবহার করা আপনাকে অবিলম্বে 18 বাইট দেয়। এবং আপনি lইন>> VlK17 বাইটগুলি ( লিঙ্ক )
জাকুবে

বিটিডব্লিউ, আপনার কোডটি কাজ করে না। পরীক্ষার imig mig migd do Mig imig
কেসটি

আমার একটি কার্যকরী 9 বাইট সমাধান রয়েছে। পাইথের কোনও সহায়তা চাইলে চ্যাটে যোগ দিন।
জাকুবে

ওহ ঠান্ডা! আজ রাতে আপনি কীভাবে এটি করেছেন তা আমি জানার চেষ্টা করব। সব ধরনের সাহায্য করার জন্য ধন্যবাদ! : (পি 1 এর আরও বেশি খ্যাতি বিন্দু আগে আমি এমনকি চ্যাট করতে পারবেন আয় করতে সংযমের প্রয়োজন)
cmxu

1
@ চ্যাংমিং আপনাকে পয়েন্ট দিয়েছে। :)
kirbyfan64sos

2

জাভাস্ক্রিপ্ট ( ES6 ), 68

এটি @ এনবিএম উত্তরের প্রায় একই (যদিও এটি অনুলিপি করা হয়নি), তাই আমি আপোটিস আশা করি না। যাইহোক স্নিপেট উপভোগ করুন

একটি স্ট্রিং এবং একটি স্ট্রিং অ্যারের আর্গুমেন্ট সহ একটি ফাংশন, একটি স্ট্রিং অ্যারে ফিরিয়ে দেয়। ফিল্টার করুন বাছাই করুন।

নীচে স্নিপেট পরীক্ষা করান (কেবলমাত্র ইকামাস্ক্রিপ্ট,, ফায়ারফক্স)

f=(s,l,i=t=>t.indexOf(s))=>l.filter(t=>~i(t)).sort((t,u)=>i(t)-i(u))

$(function(){
  $("#S,#L").on("keyup", 
   function() { 
     $('#O').val(f(S.value,L.value.split('\n')).join('\n'))
   } );
  $("#S").trigger('keyup');
})
#S,#L,#O { width: 400px }
#L,#O { height: 100px }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Input String<br><input id=S value='mig'><br>
Input List<br><textarea id=L>
imig
mig
migd
do
Mig
</textarea><br>
Output List<br><textarea id=O readonly></textarea>


2

ওরাকল, 60

এই কি গণনা?

select * from t where a like '%mig%' order by instr(a,'mig')


এটি গণনা করতে পারে, তবে এটির জন্য একটি ওরাকল প্রক্রিয়া হওয়া দরকার যা ডেটাটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে।
kirbyfan64sos

এটি গণনা করা হোক বা না হোক, আমার মনে হয় এটি দুর্দান্ত। প্রথম কোড গল্ফ সমাধান যা আমি সত্যিই বুঝতে পারি। মহান কাজ!
টমাস ওয়েলার

থমাস ওয়েলারের ধন্যবাদ! এই কোড গল্ফরা অবশ্যই খুব উজ্জ্বল হতে পারে তবে কখনও কখনও KISS আপনার যা প্রয়োজন তা সবই!
MonkeyZeus

2

হাস্কেল, 129 116

116 (ফ্র্যাঙ্কিকে ধন্যবাদ):

import Data.List
h s=map snd.sort.map(\x->((head[c|c<-[0..length x],isPrefixOf s(drop c x)]),x)).filter(isInfixOf s)

129:

import Data.List
f s n=map snd(sort(map(\x->((head [c|c<-[0..length x],isPrefixOf s(drop c x)]),x))(filter(\x->isInfixOf s x)n)))

বেশ, এটি বেশ দীর্ঘ, সম্ভবত আমি এটি কীভাবে কিছুটা সংক্ষিপ্ত করব ...


1
শেভ 13:h s=map snd.sort.map(\x->((head[c|c<-[0..length x],isPrefixOf s(drop c x)]),x)).filter(isInfixOf s)
ফ্রাঙ্কি

2

পাইথন 2, 69 68 66 বাইট

আমি সবেমাত্র একটি ফাংশন তৈরি করেছি যা sস্ট্রিংগুলির তালিকার সাথে তাল মিলায়n

সম্পাদনা 1: বাইটটি বন্ধ করে দেওয়ার জন্য জাকুবকে ধন্যবাদ।

lambda s,n:sorted([x for x in n if s in x],key=lambda x:x.find(s))

এটি এখানে দেখুন।


1

রুবি, 63

p=->(w,l){l.find_all{|x|x[w]}.sort{|a,b|a.index(w)-b.index(w)}}

চালান

irb(main):022:0> p["mig", ["imig", "mig", "migd", "do", "Mig"]]
=> ["migd", "mig", "imig"]

মন্তব্য

  1. প্রথমে এর সাথে মিলে যাওয়া সমস্ত শব্দের সন্ধান করুন find_all
  2. শব্দের সূচী অবস্থান অনুসারে বাছাই করতে হবে।

সম্পাদনা করুন (দানিরো দ্বারা)

রুবি, 49

p=->w,l{l.select{|x|x[w]}.sort_by{|e|e.index(w)}}

1
49 টি চরিত্রে একই জিনিস:p=->w,l{l.select{|x|x[w]}.sort_by{|e|e.index(w)}}
দানিরো

@ ডানিরো আপনার উত্তর হিসাবে এটি পোস্ট করুন। আমি upvote হবে!
বিএসডি

1
নাহ, এটি সত্যিই ঠিক আছে :) আমার সংস্করণটি আপনার একমাত্র উন্নতি, আমি মনে করি এগুলি পৃথক উত্তরগুলির সাথে খুব মিল। selectজন্য একটি alias হয় find_all,এবং sortএবং sort_by মূলত কিছুটা ভিন্ন আচ্ছন্ন একই জিনিস। পরিবর্তে আমি আপনাকে উত্সাহিত করব, আমার মতো একই সমাধানের জন্য;)
দানিরো

0

রকেট 46 বাইট

(for/list((i l)#:when(string-contains? i s))i)

ব্যবহার:

(define (f s l)
 (for/list((i l)#:when(string-contains? i s))i))

পরীক্ষামূলক:

(f "mig" '["imig" "mig" "migd" "do" "Mig"])

আউটপুট:

'("imig" "mig" "migd")


0

পিপ , 15 বাইট

কোডের 14 বাইট, -pপতাকাটির জন্য +1 ।

Yq_@?ySKyN_FIg

কমান্ড-লাইন আরগ এবং স্টিডিনের স্ট্রিং হিসাবে তালিকাটি নেয়। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

Yq              Yank a line of stdin into y
           FIg  Filter array of cmdline args by this function:
        yN_       Count occurrences of y in arg
      SK        Sort the resulting list using this key function:
  _@?y            Index of y in arg
                Print the Pip representation of the list (implicit, -p flag)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.