টেলিফোনের কীপ্যাড অনুকূল করা


33

লোকেরা ডিভোরক বা নিওয়ের মতো নতুন কীবোর্ড লেআউটগুলি শিখার জন্য ক্লান্তিকরভাবে এই চলমান ক্রেজ বলে মনে হয় কারণ এটি তাদেরকে আরও উত্পাদনশীল করে তোলে। আমি যুক্তি দিয়েছি যে কীবোর্ড লেআউটগুলি স্যুইচ করা একটি খারাপ ধারণা, কারণ গতি পেতে আপনাকে কয়েক মাস সময় লাগতে পারে এবং আপনি যখন বাকীটির চেয়ে চূড়ান্তভাবে 5% দ্রুত থাকেন, আপনি যদি এমন কোনও কম্পিউটারে টাইপ করতে চান তবে আপনি স্ক্রুযুক্ত হবেন তোমার নিজের নয়

এছাড়াও, এই সমস্ত লোকেরা ভুলে যায় যে আধুনিক যোগাযোগের আসল বাধা কোথায় রয়েছে - টেলিফোনের কীপ্যাড।

আপনার গড় টেলিফোন কীপ্যাডটি এমনভাবে দেখায়:

টেলিফোন কিপ্যাড

চিঠি 'আর' বোতাম 7 এর তৃতীয় অক্ষর; সুতরাং আপনি যদি মোবাইল ফোনে 'আর' অক্ষরটি টাইপ করেন তবে আপনি তিনবার বোতামটি টিপবেন would এর জন্য আপনি এটি 4 বার চাপতে চান, এবং 'এ' এর জন্য আপনি একবার বোতাম 2 টি চাপতে পারেন।

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

তদতিরিক্ত, আপনি সম্ভবত নিজেরাই অনুভব করেছেন যে একই বোতামটি ভাগ করে নেওয়ার জন্য 2 টি অক্ষর টাইপ করা একটি উপদ্রব - আপনি যদি "টিইউ" লিখতে চান তবে আপনি 8 টি মাত্র তিনবার আঘাত করতে পারবেন না কারণ এর ফলে 'ভি' হবে would সুতরাং সাধারণত আপনি 'টি' লিখতেন, তারপরে স্পেসটি চাপুন, তারপরে ব্যাকস্পেসে চাপুন এবং তারপরে 'ইউ' লিখুন, যা 3 এর পরিবর্তে 5 টি বোতাম টিপুন।


টি এল; ডিআর

এই দুটি নিয়ম দেওয়া:

  • N বার বোতাম টিপে একটি চিঠি টাইপ করা হয়, যেখানে n বোতামের লেবেলে যে চিঠিটি থাকে তার অবস্থান
  • একই বাটন ব্যবহার করে টাইপ করা দুটি অক্ষর লেখার জন্য অতিরিক্ত 2 বোতাম টিপতে হবে

একটি নির্দিষ্ট পাঠ্য দেওয়া হলে টেলিফোন কীবোর্ড বিন্যাসের জন্য কমপক্ষে কী পরিমাণ বোতাম টিপতে হবে? আপনার কেবলমাত্র 2-9, 1 এবং 0 বোতামটি বিশেষ চিহ্নগুলির জন্য সংরক্ষিত আছে।

ইনপুট

আপনি যে পাঠ্যের জন্য সর্বোত্তম বিন্যাসটি সন্ধান করতে হবে তা স্টিডিনের মাধ্যমে সরবরাহ করা হয়। আপনার ছোট হাতের বর্ণমালা ছাড়া অন্য কিছু হ্যান্ডেল করার দরকার নেই এবং ধরে নিতে পারেন ইনপুটটিতে কেবল এটিই রয়েছে of আপনি ধরে নিতে পারেন যে ইনপুট পাঠ্যটি যুক্তিসঙ্গতভাবে বড় এবং প্রতিটি অক্ষর অন্তত একবার সেখানে উপস্থিত থাকে, যদি এটি সাহায্য করে।

আউটপুট

আমি আউটপুটটিতে খুব বেশি প্রতিবন্ধকতা রাখতে চাই না, যেহেতু এটি কখনও কখনও কিছু ভাষাকে অন্যের চেয়ে সুবিধা দেয়; সুতরাং আপনার ভাষা দেখায় অ্যারেগুলি ঠিক আছে, বিকল্পভাবে আপনি প্রতিটি লাইনকে একটি নতুন লাইন দিয়ে আলাদা করতে পারেন।

একাধিক সম্ভাব্য অনুকূল বিন্যাস থাকতে পারে, আপনি এগুলির যে কোনও একটি মুদ্রণ করতে পারেন। এখানে একটি সাধারণ উদাহরণ:

>> echo "jackdawslovemybigsphinxofquartz" | foo.sh
ojpt
avhz
cen
skm
dyf
wbq
ixu
lgr

বোনাস পয়েন্ট

-35 যদি আপনার অ্যালগরিদম সমস্ত সম্ভাব্য বিন্যাসকে জোর করে চাপিয়ে না দেয় (আমি এখানে হাস্কেলের `অনুমানের দিকে তাকিয়ে আছি)

-3 যদি আপনার কোড কোনও পাঠ্য বার্তার (140 অক্ষর) ভিতরে ফিট করে এবং আপনি কোনও বন্ধুকে আপনার কোডটি প্রেরণ করার একটি ছবি পোস্ট করেন।

এটি স্ট্যাক এক্সচেঞ্জে আমার প্রথম চ্যালেঞ্জ। আপনি এটি পছন্দ করেন কিনা তা শুনে খুশি হলাম, বা এটি সম্পর্কে অন্য কোনও প্রতিক্রিয়া আছে!


2
কোডগলফ.এসই তে স্বাগতম! আমি আপনার প্রশ্নে কোনও সমস্যা দেখতে পাচ্ছি না, তবে মূলত সাইটে পোস্ট করার আগে কিছুটা প্রতিক্রিয়া জানাতে এবং অস্পষ্টতা অপসারণ করতে প্রথমে আপনার চ্যালেঞ্জটি স্যান্ডবক্সে পোস্ট করা ভাল ধারণা ।
মার্টিন ইন্ডার

আহ এটি দুর্দান্ত, আমি অবশ্যই ভবিষ্যতে করব।
ফ্লান্ক

1
আমার টেলিফোনটি একটি একক 60-অক্ষরের এসএমএস পাঠাতে পারে, তবে বন্ধনীগুলি সঠিকভাবে সমর্থন করে না, আমি কি বোনাসের বাইরে আছি?
ζ--

1
সুন্দর প্রশ্ন! আমি মনে করি না যে কেউ -35 বোনাস এড়াতে সক্ষম হবে । এমনকি যদি আমরা কীগুলির দুটিতে 4 টি অক্ষর এবং সমস্ত 6 টিতে 3 টি অক্ষরে থাকা লেআউটগুলিতে নিজেকে সীমাবদ্ধ রাখি, তবে 26! / (2! * 6!) = 280,063,514,671,253,913,600,000 > 2^77কেবলমাত্র একবারে কীগুলির সরল পুনঃস্থাপনগুলি গণনা করা হচ্ছে সেখানে অনন্য অনুমতি রয়েছে ।
ডেনিস

2
এছাড়াও, আমি জিজ্ঞাসা করি আপনি লোকেরা কী আপনার সমাধানের বোতাম টিপে সংখ্যা মুদ্রণ করতে পারে। সুতরাং আমরা দেখতে পাব কে সেরা খুঁজে পেয়েছে!
আন্তোনিও র্যাগাগনিন

উত্তর:


5

পার্ল, 333

$_=<>;$c{$&}++while/./g;@c=sort{$c{$b}<=>$c{$a}}keys%c;$d{$&.$1}++while/.(?=(.))/g;sub f{my$x=shift;if(my$c=pop@$x){for(grep!$_[$_],0..7){my@y = @_;$y[$_]=$c;f([@$x],@y)}}else{for(0..7){$z=$_[$_];$c+=$d{$z.$_}+$d{$_.$z}for@{$a[$_]}}$c<$m?($m=$c,@n=@_):1}}while(@c){$m= ~0;f[splice@c,0,8];push@{$a[$_]},$n[$_]for 0..7}print@$_,$/for@a

নিয়ম # 2 এর জন্য অনুকূল করার চেষ্টা এখানে। আমার মন্তব্য, উপরে, এবং উত্তরগুলির পরিবর্তে এই নিয়মটি বিবেচনায় নিয়ে যাওয়ার পরে (সিএফ। উচ্চ প্রশ্ন রেটিং), আমি ভেবেছিলাম যে এখানে কিছু প্রচেষ্টা করা আমার ...

সমাধানগুলি যা নিয়ম # 2 এর জন্য অনুকূল নয়, সর্বোত্তম থেকে আউটপুট উত্পাদন করতে পারে। আমি দীর্ঘ প্রাকৃতিক ইংরেজি পাঠ্য ("অ্যালিস ইন ওয়ান্ডারল্যান্ড", প্রকৃতপক্ষে), প্রাক প্রক্রিয়াজাত (কেবলমাত্র ছোট অক্ষরের অক্ষর), এবং উদাহরণস্বরূপ ওজেডাব্লু এর উত্তর থেকে পার্ল স্ক্রিপ্ট পরীক্ষা করেছি, ফলাফল

2: ermx
3: tdfz
4: alp
5: oub
6: ick
7: nwv
8: hgj
9: syq

er এটি একা নষ্ট করে দেয়, আরও কিছু জোড় একই পাতায় কখনও শেষ না হওয়া উচিত ...

বিটিডব্লু হ'ল zxqjvkbpfmygwculdrshnioateসেই পাঠ্য থেকে বর্ণগুলি সাজানো, ফ্রিকোয়েন্সি আরোহণ।

যদি আমরা এটি সহজ উপায়ে সমাধান করার চেষ্টা করি (সম্ভবত -35 বোনাসের প্রত্যাশী) এবং একের পর এক চিঠিগুলি রেখে, নূন্যতম জোড়-ভিত্তিক গণনা অনুসারে উপলভ্য কীটি বেছে নিই, যেমন:

slbx
hdmz
nrf
iuj
ogv
awk
tcp
eyq

আমি এখানে (ভুল) সমাধানের জন্য কোড পোস্ট করি না। উদাহরণস্বরূপ, দ্রষ্টব্য, এর cচেয়ে বেশি ঘন ঘন wএবং প্রথমে স্থাপন করা হয়। tc( ct) জোড়া অবশ্যই ac( ca) - 43 + 235 এর তুলনায় 202 + 355 এর চেয়ে কম ঘন ঘন হয় । তবে তারপরে - 598 + 88 wদিয়ে শেষ হয় a। আমরা জোড়া awএবং tc(964 মোট) দিয়ে শেষ করি , যদিও এটি আরও ভাল acএবং tw(635 মোট) হবে। ইত্যাদি ..

সুতরাং, পরবর্তী অ্যালগরিদম কিপ্যাডে ইতিমধ্যে প্রতিটি 8 টি (বা শেষ অবধি 2) চিঠিগুলির বিরুদ্ধে সবচেয়ে ঘন ঘন অক্ষরগুলি পরীক্ষা করার চেষ্টা করে এবং সেগুলিতে রাখার চেষ্টা করে যাতে জোড় অনুসারে গণনাটি ন্যূনতম হয়।

$_=<>;                          # Read STDIN.
$c{$&}++while/./g;              # Count letters (%c hash).
@c=sort{$c{$b}<=>$c{$a}}keys%c; # Sort them by frequency, ascending
$d{$&.$1}++while/.(?=(.))/g;    # (@c array), and count pairs (%d hash).

                                # Next is recursive sub that does the job.
                                # Some CPAN module for permutations
                                # would probably do better...
                                # Arguments are reference to array of what's 
                                # left un-placed of current 8-pack of letters,
sub f{                          # and 8 element list of placed letters
    my$x=shift;                 # (or undefs).
    if(my$c=pop@$x){            # Pop a letter from 8-pack (if anything left),
        for(grep!$_[$_],0..7){  # try placing it on each available key, and 
            my@y = @_;          # call sub again passing updated arguments.
            $y[$_]=$c;
            f([@$x],@y)
        }
    }else{                      # If, OTOH, 8-pack is exhausted, find sum of
        for(0..7){              # pairs count of current permutation (@_) and 
            $z=$_[$_];          # letters placed in previous rounds (8-packs).
                                # @a is "array of arrays" - note, we didn't 
                                # have to initialize it. First "8-pack" will
                                # be placed on empty keypad "automatically".
                                # We re-use undefined (i.e. 0) $c.

            $c+=$d{$z.$_}+$d{$_.$z}for@{$a[$_]}
        }
        $c<$m                   # Is sum for current placement minimal?
            ?($m=$c,@n=@_)      # Then remember this minimum and placement.
            :1
    }
}

while(@c){
    $m= ~0;                         # Initialize "minimum" with large enough 
    f[splice@c,0,8];                # number, then call sub with each 8-pack
                                    # (and empty list of placed letters 
                                    # from current round). On return,
                                    # @n will have optimal arrangement.
    push@{$a[$_]},$n[$_]for 0..7    # Then place it permanently on keypad.
}
print@$_,$/for@a                    # Show us what you've done.

ফলাফলটি হ'ল:

sdfz
hlmx
nrv
iyp
ogk
acq
twb
euj

আমি এই acজুটিটি পছন্দ করি না (বিড়ালটি একটি চরিত্রের মধ্যে অন্যতম হউক), তবে, এখনও কোডটি ইংরেজির জন্য উপযুক্ত নয়, যদি আমার কোডটি ভুল না হয়। ঠিক 'গল্ফিং' প্রচেষ্টা নয়, কিছু কার্যক্ষম সমাধান, কুরুচিপূর্ণ বা না।


3

পাইথন 3, এটি মন্টেকার্লো সময়!

এই সমস্যাটি সমাধান করতে, আমি প্রথমে ডিফল্ট কীবোর্ডের সাথে আপনার কতগুলি "ক্লিক" প্রয়োজন তা অন্তর্ভুক্ত করে (অন্ত: abc,def,ghi,jkl,mno,pqrs,tuv,wxyz:) তারপরে আমি এই কীবোর্ডটি সংশোধন করে দেখি এটি সস্তা কিনা (টেক্সটটি কম ক্লিকগুলিতে লেখা হয়)। যদি এই কীবোর্ডটি সস্তা হয় তবে এটি ডিফল্ট হয়ে যায়। আমি এই প্রক্রিয়া 1Mবার বার।

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

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

এর ফলাফল echo "jackdawslovemybigsphinxofquartz" | python .\myscript.py:

61 ['anb', 'sef', 'hjc', 'iykl', 'odm', 'qgr', 'tuxv', 'wpz']

61প্রদত্ত বার্তাটি রচনা করতে চাপ দেওয়া বোতামের সংখ্যাটি কোথায় ।

অক্ষর (কোনও স্থান এবং কোনও মন্তব্য নেই): 577

আমি এটির দীর্ঘ জানি তবে আমি এই জিনিসটিতে আসলেই নতুন।

from random import *
S=['abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
def P(L): # perform a switch of the keys of the keyboard:to switch from a given keyboard to another, the maximum number of exchanges is the number of the keys.
    R=randint
    N = len(''.join(L))
    W = randint(1,N)   # decide how many switches to perform
    EL = list(L)
    for i in range(0,W):
        B1=R(0,len(EL)-1)   # decide what buttons are considered in the switch
        B2=R(0,len(EL)-1)
        if len(EL[B1])==0: continue   
        P1=R(0,len(EL[B1])-1)       # decide what letter to switch and where
        if len(EL[B2])==0: P2=0
        else:   P2=R(0,len(EL[B2])-1)
        C1 = EL[B1][P1]     
        EL[B1]=EL[B1].replace(C1,'')
        EL[B2]=EL[B2][:P2]+C1+EL[B2][P2:]
    return EL
def U(L,X): # count how many clicks you need to compose the text X
    S=0
    Z=' '
    for A in X:
        for T in L:
            if A in T and Z not in T: S+=1+T.index(A)
            if A in T and Z in T: S+=3+T.index(A) # if the last character was in the same button..here the penality!
        Z=A
    return S
X=input()
n_iter=10**6
L = list(S)
cc=U(L,X)
print(cc,L)
for i in range(0,n_iter): #do some montecarlo stuff
    cc=U(L,X)
    pl=P(L)
    pc=U(pl,X)
    if(cc>pc):
        L=pl 
        print(pc,L)

আমি এটি অত্যন্ত মজার মনে করেছি যে আমি এই এলগোরিদমটি LO HOBBIT দিয়ে চেষ্টা করার সিদ্ধান্ত নিয়েছি (বাড়িতে আমারও একটি আসল অনুলিপি আছে!)! এর 383964চিঠিগুলি রয়েছে এবং এটি হ'ল কীপ্যাড বনাম এমন কয়েকটি ক্লিক যা আমি খুঁজে পেয়েছি:

909007 ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
879344 ['abkc', 'def', 'gqhi', 'jl', 'mno', 'rs', 'tupv', 'wxyz']
861867 ['abg', 'def', 'qhyi', 'jcl', 'mno', 'r', 'tupxv', 'swkz']
851364 ['abg', 'e', 'qchi', 'jyl', 'mn', 'dr', 'tupxv', 'sowkfz']
829451 ['ag', 'ef', 'qchi', 'jyl', 'mn', 'dbr', 'tupxv', 'sowkz']
815213 ['amg', 'ef', 'qch', 'ojyl', 'i', 'dbnr', 'tupxv', 'swkz']
805521 ['amg', 'ef', 'ch', 'ojyl', 'qi', 'dbnr', 'tupxv', 'swkz']
773046 ['amg', 'ef', 'ch', 'ojyl', 'qi', 'bnr', 'tupxv', 'dswkz']
759208 ['amg', 'eqf', 'ch', 'ojyl', 'i', 'bnr', 'tupxv', 'dswkz']
746711 ['ag', 'ekq', 'clh', 'sojy', 'bi', 'nmfr', 'tupxv', 'dwz']
743541 ['ag', 'ekq', 'clh', 'sojy', 'bi', 'nmfr', 'tpxv', 'dwuz']
743389 ['ag', 'ekq', 'clh', 'sojy', 'i', 'nmfr', 'tpxbv', 'dwuz']
734431 ['ag', 'ekq', 'lh', 'sjy', 'ci', 'nrf', 'tpxbv', 'dowumz']
705730 ['ag', 'oekq', 'lh', 'sjy', 'ci', 'nrf', 'tpxbv', 'dwumz']
691669 ['ag', 'oekq', 'lh', 'nsjy', 'ic', 'rf', 'tpxbv', 'dwumz']
665866 ['ag', 'hokq', 'el', 'nsjy', 'ic', 'rbf', 'tpxv', 'dwumz']
661610 ['agm', 'hokq', 'e', 'nsj', 'ilc', 'rbf', 'tpyxv', 'dwuz']

সুতরাং আমি দাবি করি যে এই শেষটিটি একটি অন্যতম ব্যবহারিক কীপ্যাড (ক্লিকের ক্ষেত্রে)।


এটি সর্বোত্তম কিনা আপনি কীভাবে জানবেন?
পাইরুলেজ

মনটেকারলো এইভাবে কাজ করে না। এটি আপনাকে সর্বোত্তম সমাধানের আরও কাছাকাছি এবং আরও নিকটে রাখে। তবে বলুন, যদি 1 মিলিয়ন চেষ্টা করে তবে আপনার সমাধান পরিবর্তিত হয় না ... তবে আপনি সম্ভবত অনুকূলটি ব্যবহার করছেন। (বা আপনি এই "স্থানীয় নূন্যতম" থেকে যথেষ্ট
সরছেন না

সুতরাং চ্যালেঞ্জগুলির জন্য, আমাদের কেবল তখন বেশিরভাগ সময় কাজ করা দরকার?
পাইরুলেজ

1
@ পাইরুলেজ আমি বুঝতে পেরেছিলাম যে এটির জন্য সর্বোত্তম সমাধানের সন্ধান করা সহজ সমস্যা হবে না (যদি আপনি যে সমস্ত সম্ভাব্য সমাধানের চেষ্টা করেন, তবে আমি যে -35 বোনাসটি দিয়ে রোধ করার প্রত্যাশা করছিলাম), তাই আমি আসলেই এই পদ্ধতির সত্যতা খনন করি।
ফ্লোন্ক

1
আকর্ষণীয় পদ্ধতি, তবে সম্ভবত এই কাজটি ঠিক এর ডোমেন নয়। আমি চেক করেছি এবং, 'এলিস' এর জন্য, ডিফল্ট কীবোর্ডে 291613 ক্লিক প্রয়োজন। আমার প্রোগ্রামটি দিয়ে অনুকূলিত করা হয়েছে - 195597. 'মন্টে কার্লো' পদ্ধতির সাথে আমি 5 মিলিয়নের বেশি পুনরাবৃত্তিতে 207000 এর চেয়ে কম ক্লিক পেয়েছি। এবং, অক্ষরগুলি অদলবদল করা ভাল, যেমন 2x4 + 6x3 লেআউটটি ধ্রুবক রয়েছে।
ব্যবহারকারী 2846289

2

ঠিক আছে যদি আপনি কেবল 2-9 বিনগুলিতে নির্ধারিত সর্বাধিক জনপ্রিয় চরিত্রগুলি চান, পার্ল 127 অক্ষরে এটি করতে পারে ...

foreach(split /\s*/,<>){$x{$_}++}
foreach(sort{$x{$b}<=>$x{$a}}keys %x){$o{$n++%8}.=$_}
for(0..7){printf "%d: %s\n",$_+2,$o{$_}}

কিছু দেওয়া:

echo "jackdawslovemybigsphinxofquartz" | perl ./keypad.pl
2: ajeb
3: iynz
4: suv
5: ohm
6: wkl
7: rgp
8: xfc
9: dtq

অথবা 12 টি অক্ষর মুছে ফেলে এগুলি সমস্ত এক লাইনে মুদ্রণ করুন:

foreach(split /\s*/,<>){$x{$_}++}
foreach(sort{$x{$b}<=>$x{$a}}keys %x){$o[$n++%8].=$_}
print join",",values@o,"\n";

2
আপনি এটি সহজেই 100 টি $x{$_}++for split/\s*/,<>;map$o{$n++%8}.=$_,sort{$x{$b}<=>$x{$a}}keys%x;print map"$_:".$o{$_-2},2..9
চরকে ছাঁটাতে পারেন

1

হাস্কেল, 160 - 35 = 125

import Data.List
import GHC.Exts
main=interact f where f s=show$transpose$map($sortWith(\x->length$filter(/=x)s)['a'..'z'])[t,t.d,t.d.d,d.d.d];t=take 8;d=drop 8

উদাহরণ:

$ runhaskell % <<< "jackdaws loves my big sphinx of quartz"
["afpy","sgqz","ihr","ojt","bku","clv","dmw","enx"]
$ </usr/share/dict/propernames tr A-Z a-z | runhaskell % 
["atjx","edgq","rhb","nmp","iyv","lcf","ouw","skz"]

কেউ তর্ক করতে পারে যে এটি নিয়ম 2 এর জন্য অনুকূলিত করে না, তবে এটি বেশিরভাগ ঘন ঘন বর্ণগুলি বিভিন্ন কীগুলিতে রাখে।


0

জাভাস্ক্রিপ্ট, 192 - 35 = 157

কেবল পুনরাবৃত্তি করা অক্ষরের নিয়মটি লক্ষ্য করেছেন; এটি এটি বিবেচনায় নেয় না। তবে @ এমনিপ তার উত্তরে উল্লেখ করেছেন:

কেউ তর্ক করতে পারে যে এটি নিয়ম 2 এর জন্য অনুকূলিত করে না, তবে এটি বেশিরভাগ ঘন ঘন বর্ণগুলি বিভিন্ন কীগুলিতে রাখে।

o={}
a=[]
b=['','','','','','','','']
i=-1
s.split('').forEach(function(x){o[x]=o[x]?o[x]+1:1})
for(x in o)a.push([o[x],x])
a.sort().reverse().forEach(function(x){b[i=(i+1)%8]+=x[1]})
alert(b)

এটি সম্ভবত রুবিতে থাকত, তবে আমি বাড়িতে নেই এবং ইন্টারনেট এক্সপ্লোরার (eww) ব্যবহার করতে বাধ্য হচ্ছি। তবে ওহে, গল্ফ থেকে গল্ফ করাতে কখনও কখনও ভয়ঙ্কর ভাষা ব্যবহার করা মজাদার! ;)

নমুনা আউটপুট (আপনার ইনপুট জন্য):

avlc,sukb,otj,irh,zqg,ypf,xne,wmd

যেহেতু জেএসের কোনও এসটিডিএন নেই, প্রোগ্রামটি ধরে নেয় যে ইনপুটটি ভেরিয়েবলের মধ্যে সঞ্চিত রয়েছে s


আপনি কি এটিকেও মাথায় রেখেই অপটিমাইজ করছেন: "একই বোতামটি ব্যবহার করে টাইপ করা দুটি অক্ষর লেখার জন্য অতিরিক্ত 2 বোতাম টিপতে হবে"
ডিজিটাল ট্রমা

পুনরায়: শেষ সম্পাদনা। আমি মনে করি এর ফলাফল আউটপুট 'abcdefghia'হুবহু অনুকূল নয়।
ব্যবহারকারী 2846289

@ ভাদিমআর "আপনি এও অনুমান করতে পারেন যে ইনপুট পাঠ্যটি যুক্তিসঙ্গতভাবে বড় এবং প্রতিটি অক্ষর অন্তত একবার সেখানে উপস্থিত হবে"
ডুরকনব

আমি জানি. 'azbcdefghizjklmnopqzrstuvwxyz'
ব্যবহারকারী 2846289

1
আপনি নিখুত করতে b=['','','','','','','','']করতে b=[x='',x,x,x,x,x,x,x], s.split('')করতে s.split(x)এবং o[x]=o[x]?o[x]+1:1করতে o[x]=-~o[x]
টুথব্রাশ

0

পাইথন (১১৯-৩৫ = ৮৪):

স্ট্রিংটি একটি চলক হিসাবে ধরে নেওয়া হয় এবং এতে কেবল ছোট অক্ষর থাকে:

for h in range(8): print h+2,zip(*sorted([(__import__("collections").Counter(a)[d],d) for d in set(a)])[::-1])[1][h::8]

ungolfed:

import collections

#a="jackdawslovemybigsphinxofquartz"
a=__import__("string").lowercase

b=collections.Counter(a)

c=set(a)

d=[(b[d],d) for d in c]

e=sorted(d)

f=e[::-1]

g=zip(*f)[1]

for h in range(8): print h+2,g[h::8]

পিওয়াইজি (76-35 = 41):

অহ, আমরা প্রচুর আমদানি বাদ দিতে পারি। আবার এটি ধরে নেয় স্ট্রিপযুক্ত স্ট্রিংটি একটিতে রয়েছে।

for h in R(8): print h+2,Z(*S([(CC(a)[d],d) for d in Se(a)])[::-1])[1][h::8]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.