মানব বন্ধুত্বপূর্ণ ফাইলের নাম সনাক্তকরণ


10

ভূমিকা

ফাইলের নামগুলি বিভিন্ন থেকে সাধারণ থেকে শুরু করে বিভিন্ন ধরণের জিনিস হতে blah.txtপারে 303549020150514101638190-MSP0.txt। পূর্ববর্তীটি সাধারণত মানব দ্বারা উত্পাদিত হয়, তবে পরেরটি প্রায়শই মেশিন দ্বারা উত্পন্ন হয়। কোনও ফাইলকে "মানব-বান্ধব" হিসাবে বিবেচনা করা যেতে পারে বা হবে না সে সম্পর্কে শিক্ষিত অনুমান করার জন্য একটি সাধারণ কাজ করা কি সুন্দর হবে না?

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

চ্যালেঞ্জ

আপনার পছন্দের ভাষায় এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা কোনও স্ট্রিং নিতে পারে এবং নির্ধারণ করে যে এটি "মানব-বান্ধব" হিসাবে বিবেচনা করা হয়েছে, যেমন এই চ্যালেঞ্জ দ্বারা সংজ্ঞায়িত হয়েছে।

আরও কিছু বিবরণ এবং নিয়ম নীচে রয়েছে:

  • ইনপুট 95 টি মুদ্রণযোগ্য আসকি অক্ষর সমন্বিত একটি স্ট্রিং হবে।
  • "মানব-বান্ধব" এইভাবে সংজ্ঞায়িত করা হবে:
    • বিবেচনায় এক্সটেনশন বাদ দিন। একটি এক্সটেনশানটি চূড়ান্ত সময় হিসাবে সংজ্ঞায়িত করা হয় তারপরে আলফা-সংখ্যাসূচক বর্ণগুলির একটি সিরিজ (হিসাবে 1 হিসাবে কম হিসাবে 6 হিসাবে)।
    • দৈর্ঘ্যের দ্বারা স্ট্রিংয়ের অর্ধেকের বেশি (এক্সটেনশন বাদে) অক্ষরের (সংযুক্ত) বর্ণনাকৃত নিম্নলিখিত সংকলন সমন্বিত থাকতে পারে:
      • একক সারিতে 8 টিরও বেশি দশমিক অক্ষর।
      • সারিবদ্ধভাবে কমপক্ষে ১ of টির হেক্সাডেসিমাল অক্ষর (আপার জোর লোয়ার কেস) (অবশ্যই অক্ষর এবং সংখ্যা সমন্বিত থাকে এবং এর মধ্যে অন্তত একটি তৃতীয়াংশের সংখ্যা হয়)।
      • %+=কমপক্ষে কমপক্ষে 12 এর বেস 64 অক্ষর ( বিশেষ অক্ষর হিসাবে ব্যবহার করে ) (অবশ্যই অক্ষর এবং সংখ্যা সমন্বিত থাকতে হবে, মিশ্র হওয়া উচিত এবং এর মধ্যে কমপক্ষে একটি তৃতীয়াংশ বড় হাতের অক্ষর)।
    • উপরের কোনও গ্রুপিং সংজ্ঞাতে ওভারল্যাপ হলে (যেমন এমন একটি যা বেস64 এর যোগ্যতা অর্জন করে তবে তার সারিতে 8 ডিজিট থাকে), বাদ পড়ার জন্য তাদের মধ্যে দীর্ঘতমটি বেছে নিন।
  • আউটপুটটি সত্যবাদী বা মিথ্যা মান হওয়া উচিত, যদি স্ট্রিংটিকে "মানব-বান্ধব" হিসাবে বিবেচনা করা হয় বা না হয় তার উপর নির্ভর করে।
  • ধরে নিন যে কেবল বৈধ ইনপুট ব্যবহার করা হবে। ত্রুটি পরিচালনার বিষয়ে চিন্তা করবেন না।

বিজয়ী সংক্ষিপ্ততম প্রোগ্রাম / ফাংশন দ্বারা নির্ধারিত হবে। তারা কমপক্ষে 7 দিনের মধ্যে বা যদি / যখন পর্যাপ্ত জমা দেওয়া হয়েছে তা নির্বাচিত হবে। টাই হওয়ার সময়ে, যে উত্তরটি আগে আসে তা জয়ী হয়।

উদাহরণ

আপনার কোড হ্যান্ডেল করতে সক্ষম হওয়া ইনপুট এবং আউটপুট এর কয়েকটি উদাহরণ এখানে রয়েছে:

"results_for__michael_greer.txt.zip" => true

"Georg Feuerstein - Connecting the Dots.pdf" => true

"M People - Search for the Hero-ntuqTuc6HxM.mp4" => true

"index.html?v=QTR4WGVTUzFsV3d8NHxvcmlnaW5hbHx8MTExMTAxBHxodHRwOi8vLCwsLHRyLDcsMA%3D%3D.html" => false

"ol2DCE0SIyQC(173).pdf" => false

"d41d8cd98f00b204e9800998ecf8427e.md5" => false

"12792331_807918856008495_7076645197310150318_o.jpg" => false

উত্তর:


1

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

s=>(s=s.split(/\.[a-z\d]{1,6}$/i)[j=d=0],h=s[l='length']/2|0,m=[],g=r=>(++j,m=m.concat((s[n='match'](r)||[]).map(x=>[x,j]))),p='replace',g(/\d{9,}/g),g(/[\da-f]{16,}/ig),g(/[\da-z%+=]{12,}/ig),m.sort((x,y)=>y[0][l]-x[0][l]).every(x=>x[1]-1?x[1]-2?s=s[p](x[0],y=>y[n](/[a-z]/)&&y[n](/\d/)&&(y+'A')[n](/[A-Z]/g)[l]>y[l]/3|0?(d+=y[l],''):y):s=s[p](x[0],y=>!!y[n](/[A-F]/)^!!y[n](/[a-f]/)&&(y+'0')[n](/\d/g)[l]>y[l]/3|0?(d+=y[l],''):y):(s=s[p](z=x[0],''),d+=z[l])),d<=h)

ব্যাখ্যা করে:

f=s=>(                                 // f: take string s (filename) as input
    s=s.split(/\.[a-z\d]{1,6}$/i)[j=d=0],  // s: input without extension
                                           // d: combined rules' sum
                                           // j: combined rule-number step
    h=s[l='length']/2|0,                   // h: half string
                                           // l: length
    m=[],                                  // m: matches
    g=r=>(++j,                             // j: next combined rule number
        m=m.concat(                            // m: join
            (s[n='match'](r)||[]).map(             // new (r)egex-matches
            x=>[x,j])                              // mapped with its rule number
    )),p='replace',                        // p: replace
    g(/\d{9,}/g),                          // combined rules §1
    g(/[\da-f]{16,}/ig),                   // combined rules §2
    g(/[\da-z%+=]{12,}/ig),                // combined rules $3
    m.sort((x,y)=>y[0][l]-x[0][l])         // matches ordered by length
        .every(x=>x[1]-1?                      // for combined rule §1
            x[1]-2?                                // for combined rule §2
                s=s[p](x[0],y=>                        // for combined rule §3
                    y[n](/[a-z]/)&&y[n](/\d/)&&            // if lower and digit and
                    (y+'A')[n](/[A-Z]/g)[l]>y[l]/3|0?      // upper at least `total/3`
                (d+=y[l],''):y)                        // replace by empty and sum up `d`
            :s=s[p](x[0],y=>                       // replace if
                !!y[n](/[A-F]/)^!!y[n](/[a-f]/)&&      // (upper xor lower case) and
                (y+'0')[n](/\d/g)[l]>y[l]/3|0?         // digits: at least `total/3`
            (d+=y[l],''):y)                        // by empty and sum up `d`
        :(s=s[p](z=x[0],''),d+=z[l]))          // no treatment
    ,d<=h                                  // output if "no more than half of string"
);


["results_for__michael_greer.txt.zip",
"Georg Feuerstein - Connecting the Dots.pdf",
"M People - Search for the Hero-ntuqTuc6HxM.mp4",
"index.html?v=QTR4WGVTUzFsV3d8NHxvcmlnaW5hbHx8MTExMTAxBHxodHRwOi8vLCwsLHRyLDcsMA%3D%3D.html",
"ol2DCE0SIyQC(173).pdf",
"d41d8cd98f00b204e9800998ecf8427e.md5",
"12792331_807918856008495_7076645197310150318_o.jpg"]
.forEach(x=>document.body.innerHTML+='<pre>"'+x+'" => '+f(x)+'</pre>')

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.