অজানা ভিত্তিতে প্রতিনিধিত্ব করে নম্বরগুলি সাজান


13

স্ট্রিংয়ের একটি তালিকা দেওয়া হয়েছে, কোন বেসটি ব্যবহার করা হচ্ছে তা না জেনে তালিকে সংখ্যা হিসাবে বাছাই করুন। অঙ্কগুলির মানগুলিও অজানা (এটি সম্ভব ) '1'> '2'

যেহেতু অঙ্কগুলির মানগুলি অজানা, তাই অঙ্কগুলির আপেক্ষিক মান নির্ধারণ করতে বেনফোর্ডের আইন (বা ফার্স্ট ডিজিটের আইন) ব্যবহার করুন। বেনফোর্ডের আইন অনুসরণ করে এমন বিতরণগুলির জন্য, নিম্ন মূল্যবান সংখ্যার উচ্চতর মূল্যবান সংখ্যার চেয়ে বেশি বারবার একটি শীর্ষস্থানীয় অঙ্ক হিসাবে উপস্থিত হয়।

বিধি

  • এটি
  • স্ট্রিংয়ের তালিকাটি আপনার পছন্দসই উত্স থেকে আসতে পারে (স্টিডিন, ভেরিয়েবল, ফাইল, ব্যবহারকারী ইত্যাদি)
  • স্ট্রিংগুলি ASCII অক্ষরের মধ্যে সীমাবদ্ধ।
  • শীর্ষস্থানীয় চরিত্র হিসাবে উপস্থিত না হওয়া অক্ষরের সর্বাধিক মান থাকে। (ধরুন এখানে কোনও জিরো নেই, এবং নেতৃস্থানীয় ফ্রিকোয়েন্সি অনুসারে বাছাই করুন।)
  • অক্ষরগুলি যে নেতৃস্থানীয় অঙ্ক হিসাবে প্রদর্শিত হয় একই পরিমাণে অন্যান্য অক্ষরের সমানভাবে ওজন হয়।

উদাহরণ

পাঁচমিশালী

['c','ca','ac','cc','a','ccc','cx','cz','cy']

সাজানো

['c','a','cc','ca','cz','cy','cx','ac','ccc']

নোট: উদাহরণে, 'cz', 'cy'এবং 'cx'5 ম, 6 ষ্ঠ ও স w খ্যা যেহেতু কোনো অনুক্রমে 7th উপাদান হিসেবে আবির্ভূত হতে পারে 'x', 'y'এবং 'z'স্কোর সমানই।


"স্ট্রিংগুলি ASCII অক্ষরের মধ্যে সীমাবদ্ধ।" আপনার উদাহরণটি কেবল বর্ণমালা দেখায় (আসলে কেবল বর্ণানুক্রমিক অক্ষর)। আপনি কি সমস্ত এএসসিআইআই অক্ষর বা কেবল [0-9a-zA-Z] বোঝাতে চেয়েছেন এবং ছোট হাতের অক্ষরগুলি বড় হাতের অক্ষর থেকে একই বা আলাদা গণনা করে?
জোশুয়া টেলর

সমস্ত ASCII অক্ষর সমর্থন করা উচিত, এবং বড় হাতের এবং ছোট হাতের অক্ষর পৃথক।
রিন্যান্ট

উত্তর:


7

পাইথন, 59 108 112

sorted(a,None,lambda x:(-len(x),map(zip(*a)[0].count,x)),1)

ইনপুট তালিকা হিসাবে সরবরাহ করা হয় a, এবং এই এক্সপ্রেশনটি বাছাই তালিকা তৈরি করে (একটি ভেরিয়েবল বরাদ্দ করতে +2 অক্ষর)। এই তালিকাটি বাছাই করে বিপরীত অস্বীকার দৈর্ঘ্য এবং তারপর ফ্রিকোয়েন্সি দ্বারা।


+1 সুন্দরভাবে সম্পন্ন হয়েছে। ভেবে দেখেনি যে এটি একক অভিব্যক্তিতে দক্ষতার সাথে স্থান করা সম্ভব।
seequ

নিস! আমি zipসাথে সম্পর্কে জানতাম না None। যদিও এটি পাইথন 3 এ কাজ করে না যা ব্যবহার করবে itertools.zip_longest
রিন্যান্ট

Noneপাইথন 3 তে পূর্ণসংখ্যার সাথে তুলনা করতে পারে না, সুতরাং এটি যাইহোক ব্যর্থ হবে।
নিনেনিও

@nneonneo ডান, fillvalueছোট মান থেকে কিছু কম সেট করতে হবে।
রিন্যান্ট

এবং আমি ভেবেছিলাম আমি পাইথন - নাহ সম্পর্কে কিছু জানি । আপনি আপনার কোড কিছুটা বিস্তারিত ব্যাখ্যা করতে পারেন? আমি খুব খুশি হব - পাইথন নবাগত এখানে।
flawr

3

রুবি, 65

f=->a{a.sort_by{|s|[s.size,s.chars.map{|c|a.count{|t|t[0]!=c}}]}}

স্ট্রিংয়ের আকারে ডিক্সোগ্রাফিকভাবে সাজান, তারপরে প্রতিটি চরিত্রের ফ্রিকোয়েন্সি অগ্রণী অঙ্ক হিসাবে নয়।


0

জাভা (261)

void s(String[]s){int[]a=new int[128];for(String t:s)a[t.charAt(0)]++;java.util.Arrays.sort(s,(o,p)->{int j=o.length()-p.length();if(j!=0)return j;for(int i=0;i<Math.min(o.length(),p.length());i++){j=a[p.charAt(i)]-a[o.charAt(i)];if(j!=0)return j;}return 0;});}

void s(String[] s) {
    int[] a = new int[128];
    for (String t : s) {
        a[t.charAt(0)]++;
    }
    java.util.Arrays.sort(s, (o, p) -> {
        int j = o.length() - p.length();
        if (j != 0) {
            return j;
        }
        for (int i = 0; i < Math.min(o.length(), p.length()); i++) {
            j = a[p.charAt(i)] - a[o.charAt(i)];
            if (j != 0) {
                return j;
            }
        }
        return 0;
    });
}

পদ্ধতিগুলি স্ট্রিংগুলির একটি অ্যারে নেয় এবং অ্যারেটি স্থানে বাছাই করে। বাস্তবায়ন সম্পর্কে অভিনব কিছু নয়, তবে এটি জাভা 8-এ যুক্ত ল্যাম্বডা এক্সপ্রেশনগুলি ব্যবহার করে।


0

জাভাস্ক্রিপ্ট (E6) 147

F=i=>(f={},i.map(x=>(f[x[0]]=-~f[x[0]])),i.map(x=>[x,[...x].map(y=>1e9-~f[y]+'')]).sort((a,b,d=a[0].length-b[0].length)=>d||a[1]<b[1]).map(x=>x[0]))

সীমা

1000000000 অবধি ফ্রিকোয়েন্সি মানগুলি: বাছাইয়ের জন্য, ফ্রিকোয়েন্সি মানগুলি বড় প্যাডযুক্ত স্ট্রিংয়ে মার্জ করা হয়

Ungolfed

F=i=>(
  f={}, //init frequency map
  i.map(x => (f[x[0]]=-~f[x[0]])), // build frequency map
  i.map(x => [x, [...x].map(y=>1e9-~f[y]+'')]) // add frequency info to each element of input list
 .sort((a,b,d=a[0].length-b[0].length)=>d || a[1]<b[1]) // then sort by lenght and frequency
 .map( x => x[0]) // throw away frequency info
)

X-~আসল সংখ্যা এক্সটি অনির্ধারিত বা না এন হলেও সিডনোট বৃদ্ধি 1 দিয়ে

ব্যবহার

F(['c','ca','ac','cc','a','ccc','cx','cz','cy'])

আউটপুট: ["c", "a", "cc", "ca", "cx", "cz", "cy", "ac", "ccc"]

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