একটি শব্দ র‌্যাঙ্কটি সন্ধান করুন


23

সংজ্ঞা

কোনও শব্দের অবস্থানকে শব্দের অবস্থান হিসাবে সংজ্ঞায়িত করা হয় যখন তার অক্ষরের সমস্ত সম্ভাব্য ক্রম (বা ব্যবস্থা) বর্ণানুক্রমিকভাবে সাজানো হয় যেমন একটি অভিধানে যেমন শব্দগুলি অর্থবোধক হয় বা না তা বিবেচ্য নয়।

আসুন আমরা এই দুটি শব্দ বিবেচনা করি - "নীল" এবং "দেখা"। শুরুতে, আমরা বর্ণের ক্রমে এই শব্দের অক্ষরের সমস্ত সম্ভাব্য ব্যবস্থা লিখব:

"blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl",
        "eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb",
        "ulbe","uleb"
"seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen",
        "sene","snee"

এখন বাম থেকে তাকান এবং আমাদের প্রয়োজনীয় শব্দগুলির অবস্থানটি সন্ধান করি। আমরা দেখতে পাই যে "নীল" শব্দটি চতুর্থ অবস্থানে এবং "দেখা" দশম স্থানে রয়েছে। সুতরাং "নীল" শব্দটির র‌্যাঙ্কটি 4, এবং "দেখা" এর 10 হ'ল এটি কোনও শব্দের র‌্যাঙ্ক গণনা করার সাধারণ উপায়। নিশ্চিত হয়ে নিন যে আপনি কেবল 1 থেকে গণনা শুরু করেছেন।

কার্য

আপনার কাজটি হ'ল কোনও শব্দকে একটি ইনপুট হিসাবে গ্রহণের জন্য কোড লিখতে হবে এবং এর র‌্যাঙ্কটি প্রদর্শন করবে। র‍্যাঙ্কটি আউটপুট হওয়া উচিত। বারবার চিঠিযুক্ত শব্দ সম্পর্কে সতর্কতা অবলম্বন করুন।

উদাহরণ

"prime" -> 94

"super" -> 93

"bless" -> 4

"speech" -> 354

"earth" -> 28

"a" -> 1

"abcd" -> 1

"baa" -> 3    

আপনি ইনপুটটিকে সম্পূর্ণ ছোট হাতের অক্ষরে ধরে নিতে পারেন এবং ইনপুটটিতে কেবল বর্ণানুক্রমিক অক্ষর থাকবে । এছাড়াও যদি কোনও ফাঁকা জায়গা বা একটি অবৈধ স্ট্রিং প্রবেশ করা হয় তবে আপনি যে কোনও কিছু দিতে পারেন।

স্কোরিং

এটি , তাই সংক্ষিপ্ততম কোডটি জয়ী!



14
"নিশ্চিত হয়ে নিন যে আপনি কেবল 1 থেকে গণনা শুরু করেছেন" " - আপনার এই প্রয়োজনীয়তাটি সম্পূর্ণরূপে আপ আপনার উপর নির্ভর করে তবে মনে রাখবেন যে এই জাতীয় চ্যালেঞ্জগুলির জন্য 0 বা 1 ভিত্তিক সূচকে অনুমতি দেওয়া খুব সাধারণ।
জোনাথন অ্যালান

1
হ্যাঁ ইকর তবে আপনি যদি 0 থেকে শুরু করেন তবে আপনি প্রকৃতপক্ষে মূল র‌্যাঙ্কটি প্রদর্শন করছেন না যার কারণে আমি এই প্রয়োজনীয়তাটি যুক্ত করার সিদ্ধান্ত নিয়েছি।
মনীষ কুন্ডু

দরকারী লিঙ্ক । আপনার প্রোগ্রাম সময় O(n log n)বা তার চেয়ে কম চললে আপনি এসি পাবেন । (দুঃখিত, পাইথন নেই) পরীক্ষার সমাধানের জন্য আমার জমা (সি ++) 2.53s সময় নিয়েছে
ব্যবহারকারী 202729

আমি কি এই শব্দটির সাথে একটি টুপল বা একটি তালিকা করতে পারি, যেমন ['h', 'e', 'l', 'l', 'o']বিপরীতে 'hello'?
0WJYxW9FMN

উত্তর:






3

জেলি , 5 বাইট

Œ!ṢQi

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষার স্যুটটি দেখুন

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

Œ!ṢQi - Main link. Argument: s (string)      e.g. 'baa'
Œ!    - All permutations                          ['baa', 'baa', 'aba', 'aab', 'aba', 'aab']
  Ṣ   - Sort                                      ['aab', 'aab', 'aba', 'aba', 'baa', 'baa']
   Q  - Deduplicate                               ['aab', 'aba', 'baa']
    i - 1-based index of s                        3

বারবার অক্ষরযুক্ত শব্দগুলির জন্য ব্যর্থ।
মণীশ কুন্ডু

@ মনিষকুন্ডু এবং এক্সকোডার, স্থির
কেয়ারড কোইনরিঙ্গিংহিং

দুর্ভাগ্যক্রমে Œ¿কাজ করে না।
ব্যবহারকারী 202729

নেই ṢŒ¿কাজ করে?
5-10 pm

@ এওসেলিংফ্রুট নং, যে কেবল ফলাফল1
শে

3

পাইথন 2 , 78 বাইট

lambda s:-~sorted(set(permutations(s))).index(tuple(s))
from itertools import*

এটি অনলাইন চেষ্টা করুন!


পাইথন 3 , 73 বাইট

lambda s:-~sorted({*permutations(s)}).index((*s,))
from itertools import*

এটি অনলাইন চেষ্টা করুন!


3

সিজেম , 8 বাইট

q_e!\a#)

এটি অনলাইন চেষ্টা করুন!

1-ইনডেক্স প্রয়োজনের কারণে +1 বাইট।


ঠিক ঠিক একই উত্তরটি পেয়েছে :(
এএসওলিং ফল

@ এসোলেংফ্রুট আপনি চাইলে এটি পোস্ট করতে পারেন :-)
এরিক দি আউটগল্ফার


2

জাপট , 8 10 বাইট

0-ইন্ডেক্স। পক্সি, অপ্রয়োজনীয় 1-ইনডেক্সিং, আমার বাইট গণনা 25% বাড়িয়ে!

á â n bU Ä

এটা পরীক্ষা করো


ব্যাখ্যা

áইনপুটটির সমস্ত ক্রিয়াকলাপ পায়, âসদৃশগুলি সরিয়ে দেয়, nএগুলি সাজায় এবং bইনপুটটির প্রথম উপস্থিতির সূচক পায় U,।


(অস্বাভাবিক) নোট করুন "নিশ্চিত করুন যে আপনি কেবল 1 থেকে গণনা শুরু করেছেন" প্রয়োজনীয়তা। আমি ওপি এর অধীনে মন্তব্য করেছি যে 0-ভিত্তিকও অনুমতি দেওয়া স্বাভাবিক হবে be
জোনাথন অ্যালান

1
আহ, গড্ডামনিত; স্টোপিড 1-ইনডেক্সিং। শীঘ্রই আপডেট হবে তবে এটি আমার বাইট গণনা 25% দ্বারা বাড়িয়ে তুলবে।
শেগি

2

জে , 28 23 বাইট

-5 বাইট ফ্রাউনফ্রোগের জন্য ধন্যবাদ

1+/:~@~.@(A.~i.@!@#)i.]

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

                      ] - the argument
         (A.~      )    - permutations in the 
             i.@!@#     - range 0 to factorial of the arg. length
  /:~@~.@               - remove duplicates and sort
                    i.  - index of arg. in the sorted list
1+                      - add 1 (for 1-based indexing)

এটি অনলাইন চেষ্টা করুন!


1
23:1+/:~@~.@(A.~i.@!@#)i.]
ফ্রাউনফ্রোগ

@ ফ্রাউনফ্রোগ - আই এর ভাল ব্যবহার। সূচক সন্ধানের জন্য! ধন্যবাদ!
গ্যালেন ইভানভ

টিআইও লিঙ্কটি এখনও পুরানো সংস্করণ :)
কনার ও'ব্রায়ান

@ কনর ও ব্রায়ান - স্থির
গ্যালেন ইভানভ

স্বাভাবিক হিসাবে আমি খুশি না হওয়া পর্যন্ত আমি একটি পেতে নই কে মধ্যে সমাধান চেয়ে খাটো যে জে করুন। বলেছিল, আপনি কি এখানে একই কৌশল ব্যবহার করতে পারেন? বাছাই করা ইনপুট স্ট্রিংয়ের ক্রমজাতীয়করণ তৈরি করুন (সুতরাং ক্রমযুক্ত তালিকাটি বাছাই করার প্রয়োজনীয়তা অপসারণ করবেন)?
স্ট্রিস্টার 21

2

Tcl, 196 বাইট

proc p {a p} {if {$a eq {}} {lappend ::p $p} {while {[incr n]<=[llength $a]} {p [lreplace $a $n-1 $n-1] $p[lindex $a $n-1]}}}
p [split $argv ""] ""
puts [expr [lsearch [lsort -unique $p] $argv]+1]

পরের লিক্সিকোগ্রাফিক ক্রমশক্তি গণনা করার জন্য টিসিএলের কোনও অন্তর্নির্মিত পদ্ধতি নেই, তাই আমাদের এটি নিজেই করতে হবে। তবে অপেক্ষা করুন ... এটি একটি সাধারণ পুনরাবৃত্তির ফাংশন দিয়ে সংক্ষিপ্ত হয় যা সমস্তকে গণনা করে কোন অনুক্রমে সম্ভব একাধিক বিন্যাসন।

Ungolfed:

# Compute all possible permutations of the argument list
# Puts the result in ::all_permutations
proc generate_all_permutations {xs {prefixes ""}} {
  if {$xs eq {}} {
    lappend ::all_permutations $prefixes
  } else {
    while {[incr n] <= [llength $xs]} {
      generate_all_permutations [lreplace $xs $n-1 $n-1] $prefixes[lindex $xs $n-1]
    } 
  }
}

# Get our input as command-line argument, turn it into a list of letters
generate_all_permutations [split $argv ""]

# Sort, remove duplicates, find the original argument, and print its 1-based index
puts [expr [lsearch [lsort -unique $all_permutations] $argv]+1]

আমি কিছু বাইট বন্ধ করে দিয়েছি: tio.run/…
সার্জিওল

আরও শেভিং tio.run/…
সার্জিওল

ধন্যবাদ. আমি যখন আবার একটি বাস্তব কম্পিউটারে অ্যাক্সেস পেয়েছি তখন আমি আপডেট করব।
দথোমাস

2

কে (ওকে) , 23 18 বাইট

সমাধান:

1+*&x~/:?x@prm@<x:

এটি অনলাইন চেষ্টা করুন!

উদাহরণ:

1+*&x~/:?x@prm@<x:"seen"
10
1+*&x~/:?x@prm@<x:"blue"
4

ব্যাখ্যা:

বাছাই করা ইনপুট স্ট্রিংয়ের সূচকের সূত্রপাতগুলি তৈরি করুন, ইনপুট স্ট্রিংয়ে ফিরে সূচক হিসাবে তাদের ব্যবহার করুন, স্বতন্ত্রতা নিন, দেখুন যেখানে মূল স্ট্রিংটি মিলেছে এবং একটি যুক্ত করুন।

1+*&x~/:?x@prm@<x: / the solution
                x: / save input string as x
               <   / return indices when sorting x ascending
           prm@    / apply (@) function prm
         x@        / index into x with these permutations
        ?          / distinct (remove duplicates)
    x~/:           / apply match (~) between x and each-right (/:)
   &               / return indexes where true (ie the match)
  *                / take the first one
1+                 / add 1 due to 1-indexing requirement

2

জাভা 8, 211 বাইট

import java.util.*;TreeSet q=new TreeSet();s->{p("",s);return-~q.headSet(s).size();}void p(String p,String s){int l=s.length(),i=0;if(l<1)q.add(p);for(;i<l;p(p+s.charAt(i),s.substring(0,i)+s.substring(++i,l)));}

ব্যাখ্যা:

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

import java.util.*;        // Required import for TreeSet

TreeSet q=new TreeSet();   // Sorted Set on class-level

s->{                       // Method with String parameter and integer return-type
  p("",s);                 //  Save all unique permutations of the String in the sorted set
  return-~q.headSet(s).size();}
                           //  Return the 0-indexed index of the input in the set + 1

void p(String p,String s){ // Separated method with 2 String parameters and no return-type
  int l=s.length(),        //  The length of the String `s`
      i=0;                 //  Index integer, starting at 0
  if(l<1)                  //  If String `s` is empty
    q.add(p);              //   Add `p` to the set
  for(;i<l;                //  Loop from 0 to `l` (exclusive)
    p(                     //   Do a recursive call with:
      p+s.charAt(i),       //    `p` + the character at the current index of `s` as new `p`
      s.substring(0,i)+s.substring(++i,l)));}
                           //    And `s` minus this character as new `s`

2

পাইথন 3 , 183 182 বাইট

প্রথম উত্তর যে বহুপদী সময় চালায়!

a=[*map(ord,input())]
f=lambda x:x and x*f(x-1)or 1
c=[0]*98
for C in a:c[C]+=1
l=len(a)
F=f(l)
for i in c:F//=f(i)
r=1
for x in a:F//=l;l-=1;r+=sum(c[:x])*F;F*=c[x];c[x]-=1
print(r)

এটি অনলাইন চেষ্টা করুন!

ইনপুটটি সমস্ত বড়-বড় হওয়ার জন্য প্রয়োজন, কারণ ... এটি একটি বাইট সংরক্ষণ করে।

সম্পূর্ণ প্রোগ্রাম, থেকে ইনপুট stdinএবং আউটপুট নেয় stdout


পরিবর্তনশীল নাম: (অব্যক্ত কোডের সাজানো)

a : permu
f : factorial
c : count_num
C : char
l : n_num_left
F : factor
r : result

দুর্ভাগ্যক্রমে, from math import factorial as fআরও 1 টি বাইট লাগে।


(অপরিবর্তিত নোট: আমি Combinatorica`ম্যাথমেটিকার প্যাকেজটি যাচাই করেছিলাম , সহ কার্যকর কিছু নেই RankPermutation)


কোডটি সত্যিই দুর্দান্ত।
মনীষ কুন্ডু






1

জাভাস্ক্রিপ্ট (ES6), 106 100 বাইট

w=>(P=(a,s)=>a[0]?a.map((_,i)=>P(b=[...a],s+b.splice(i,1))):P[s]=P[s]||++k)[P([...w].sort(),k=''),w]

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

কিভাবে?

পি () হ'ল আমাদের পুনরাবৃত্তির অনুমতি ক্রিয়াকলাপ। তবে পি এর পরিবেষ্টনকারী বস্তুটি ক্রমের অনুমতিগুলি সংরক্ষণ করতে ব্যবহৃত হয়।

P = (a, s) =>               // given an array of letters a[] and a string s
  a[0] ?                    // if a[] is not empty:
    a.map((_, i) =>         //   for each entry at position i in a[]:
      P(                    //     do a recursive call to P() with:
        b = [...a],         //       a copy b[] of a[], with a[i] removed
        s + b.splice(i, 1)  //       the extracted letter appended to s
      )                     //     end of recursive call
    )                       //   end of map()
  :                         // else:
    P[s] = P[s] || ++k      //   if P[s] is not already defined, set it to ++k

মোড়কের কোডটি এখন পড়বে:

w =>                        // given the input word w
  P[                        // return the permutation rank for w
    P(                      //   initial call to P() with:
      [...w].sort(),        //     the lexicographically sorted letters of w
      k = ''                //     s = k = '' (k is then coerced to a number)
    ),                      //   end of call
    w                       //   actual index used to read P[]
  ]                         // end of access to P[]

1

সি ++, 230 বাইট

#include<algorithm>
#include<iostream>
#include<string>
using namespace std;void R(string s){int n=1;auto p=s;sort(begin(p),end(p));do if(p==s)cout<<n;while(++n,next_permutation(begin(p),end(p)));}int main(int n,char**a){R(a[1]);}

আমার জিজ্ঞাসা অনুযায়ী, কোডটি অবশ্যই কার্যকরভাবে কার্যকর করা দরকার। কেবলমাত্র ফাংশন ক্লজটি আবর্জনা। : - @

যারা আমার জন্য কেটে ফেলা যায় এই প্রশ্নের সদয় উত্তর দিয়েছিলেন তাদের ধন্যবাদ জানাই। বৈধের স্বার্থে কোডের , আমি <বিট / স্টেডিসি ++ এইচ> অন্তর্ভুক্ত করে জনপ্রিয় জিসিসি-ইসমকে এড়িয়ে চলেছি, যা আমি সর্বদা একটি খারাপ লুফোল প্রতারণা হিসাবে বিবেচনা করেছি।

নিম্নলিখিতটি আমার মূল পোস্টিংয়ের অবশেষ যা রয়েছে:


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

এখানে এটি প্রয়োজনীয় শিরোলেখ ইত্যাদির সাহায্যে অসম্পূর্ণ রয়েছে:

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

void R( string s )
{
  int n = 1;
  auto p = s;
  sort( begin(p), end(p) );
  do if (p == s) cout << n;
  while (++n, next_permutation( begin(p), end(p) ));
}

int main( int n, char** a )
{
  R( a[1] );
}

এটি 230 বাইটে নেমে যায়, প্রতিটি সি ++ প্রোগ্রামের জন্য প্রয়োজনীয় স্ট্যান্ডার্ড বয়লারপ্লিটের তৃতীয় । (সুতরাং, আমি এটি গণনা না করে খুব খারাপ বোধ করি না, তবে যেহেতু আমি কখনও কোনও দৃ seen় অভিযোগ দেখিনি, ওপিকে আমাকে বলতে হবে তিনি কোনটি সন্তুষ্ট করতে পছন্দ করেন "কোনও শব্দকে ইনপুট হিসাবে গ্রহণ করার জন্য একটি কোড লিখুন) এবং এর স্থানটি প্রদর্শন করুন ”)

আমি এটি সম্পর্কে নিশ্চিত না যে এটি "র‌্যাঙ্ক আউটপুট হওয়া উচিত।"


1
আহ ... আফাক আমাদের নিয়মগুলি প্রয়োজনীয় গণনা করে ( using namespace std, #include <algorithm> শিরোনামগুলি বাইটগুলিতে ফাংশনটি সংজ্ঞায়িত করতে ব্যবহৃত হত। এবং ... না, main(){}একটি বৈধ সি ++ (জি ++) প্রোগ্রামটি 8 বাইটে রয়েছে
ব্যবহারকারী 202729

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

1
এমনকি পাইথনেও import mathপ্রায়শই প্রয়োজনীয়। আমাকে প্রাসঙ্গিক মেটা সন্ধান করুন ...
ব্যবহারকারী 202729

@ দথোমাস এই সমাধানগুলিতে শিরোনামের অন্তর্ভুক্ত নেই। বেসিক গাণিতিকটির কোনও শিরোনামের প্রয়োজন হয় না এবং কিছু ফাংশন স্পষ্টভাবে স্ট্যাডলিবের (যেমন putsএবং printf) সংযোগের মাধ্যমে ঘোষণা করা এবং পূরণ করা যায় । এটি কার্যকর হওয়ার জন্য আপনার কোডটি অবশ্যই সংকলন করতে হবে এবং সাফল্যের সাথে চালাতে হবে। দেখুন: কোডগল্ফ.মেটা.স্ট্যাকেক্সেঞ্জাও.আ.এ
মেগো

@ মেগো ঘোষণা ছাড়াই mainফাংশনগুলি যেমন চলছে তেমন চালানো যায় না।
ব্যবহারকারী 202729




0

পাওয়ারশেল , 275 বাইট

param($s)function n($a){if($a-eq1){return}0..($a-1)|%{n($a-1);if($a-eq2){$b.ToString()}$p=($j-$a);[char]$t=$b[$p];for($z=($p+1);$z-lt$j;$z++){$b[($z-1)]=$b[$z]}$b[($z-1)]=$t}}if($s.length-eq1){1;exit}$b=New-Object Text.StringBuilder $s;(n($j=$s.length)|sort -u).indexOf($s)+1

এটি অনলাইন চেষ্টা করুন!

সুতরাং, এটি একটি রক্তাক্ত গন্ডগোল।

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

প্রোগ্রামটি $sস্ট্রিং হিসাবে ইনপুট নেয় , তারপরে আসল প্রোগ্রামটি শুরু হয় $b=New-Object ...। আমরা একটি নতুন স্ট্রিংবিল্ডার অবজেক্ট তৈরি করছি , যা (মূলত) অক্ষরের একটি পরিবর্তনীয় স্ট্রিং। এটি আমাদের অনুমতিগুলি আরও সহজে পরিচালনা করতে দেয়। এরপরে আমরা ফাংশনটি n( $jইনপুট স্ট্রিংয়ের দৈর্ঘ্য হওয়ার sortসাথে সাথে সেট করে ) কল করি-u আউটপুট nique পতাকা, নিতে.indexOf() ইনপুট স্ট্রিং খোঁজার, যোগ 1কারণ PowerShell হয় শূন্য সূচিবদ্ধ।

ফাংশনটি প্রোগ্রামটির মূল অংশ। এটি একটি সংখ্যা ইনপুট হিসাবে নেয় এবং প্রতিটি পুনরাবৃত্তি গণনা করা হবে যতক্ষণ না আমরা না পৌঁছা 1(যেমন, একটি অক্ষর)। ফাংশনটির বাকী অংশগুলি মূলত পুনরাবৃত্তভাবে ফাংশনটিকে কল করে পাশাপাশি বর্তমান অক্ষরটি গ্রহণ করে এবং প্রতিটি অবস্থানের মাধ্যমে পুনরাবৃত্তি করে।

অনুমতি ক্রিয়াকলাপ কীভাবে কাজ করে তার কারণে if($s.length-eq1){1;exit}দৈর্ঘ্যের ইনপুট স্ট্রিংয়ের জন্য অ্যাকাউন্টে একাধিক অতিরিক্ত যুক্তি রয়েছে 1


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