একটি সংখ্যা সূচক করুন


15

সংখ্যার একটি স্ট্রিং বা ইনপুট হিসাবে একটি পূর্ণসংখ্যা দেওয়া, আপনাকে এটি সূচী করতে হবে।

আপনি ইনপুটটি এইভাবে পরিবর্তন করেন। আমরা 30043376111উদাহরণ হিসাবে ব্যবহার করব :

প্রথমে সংশ্লিষ্ট সংখ্যার প্রতিটি ঘটনার সূচকের যোগফলটি সন্ধান করুন:

0: 1 + 2 = 3
1: 8 + 9 + 10 = 27
3: 0 + 4 + 5 = 9
4: 3
6: 7
7: 6

তারপরে, একটি নতুন পূর্ণসংখ্যা বা স্ট্রিং তৈরি করুন যেখানে উপরের অঙ্কগুলি তাদের সূচকগুলির যোগক্রম অনুসারে চলে। একাধিক সংখ্যার সমান যোগফলের ক্ষেত্রে ছোট অঙ্কটি বৃহত্তর অঙ্কের আগে আসে:

047631

শেষ অবধি, যে কোনও শূণ্য জিরোগুলি সরিয়ে ফেলুন এবং ফলাফলটি ফিরে আসুন বা মুদ্রণ করুন:

47631

আপনাকে অবশ্যই এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা ইনপুটটিকে ইনডেক্সযুক্ত ফিরিয়ে দেয় বা প্রিন্ট করে।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড!

অনুরোধ করা হলে আরও পরীক্ষার কেস যুক্ত করা যায়।


ফাংশনগুলির জন্য, কোনও স্ট্রিং ঠিক আছে? যুক্তি হিসাবে একটি স্ট্রিং গ্রহণ সম্পর্কে?
কনার ও'ব্রায়েন

@ কোনোরও ব্রায়ান অঙ্কের একটি স্ট্রিং বা একটি পূর্ণসংখ্যা দেওয়া হয়েছে
অ্যাডমবর্কবর্ক

@ অ্যাডমবার্কবার্ক ভাল, যে ইনপুট প্রশ্নের উত্তর দেয় _ _>
কনর ও'ব্রায়েন

@ কনরও ব্রায়েন এছাড়াও একটি নতুন পূর্ণসংখ্যা বা স্ট্রিং তৈরি করুন , যা স্ট্রিং ফিরিয়ে দেওয়া ঠিক আছে বলে মনে হচ্ছে।
অ্যাডমবার্কবার্ক

উত্তর:


1

কে, 7 বাইট

.<+/'=$

অনলাইন প্রতিনিধি

  $30043376111 / convert to string($)
"30043376111"
  =$30043376111 / group(=) - return a mapping (dict) from unique chars to indices
"304761"!(0 4 5
 1 2
 ,3
 ,6
 ,7
 8 9 10)
  +/'=$30043376111 / sum(+/) each(') value in the dict
"304761"!9 3 3 6 7 27
  <+/'=$30043376111 / grade(<) ascending values - return keys from the dict
"047631"
  .<+/'=$30043376111 / execute(.) the string - convert it to a number
47631

ফাংশনগুলির জুটস্টেপেজেশনটি রচনা, সুতরাং কোনও স্পষ্ট প্যারামিটার বা ইনপুট প্রয়োজন হয় না।


3

হাস্কেল, 69 বাইট

import Data.List
f x=0+read(nub$sortOn(\d->(sum$elemIndices d x,d))x)

একটি স্ট্রিং নেয়, একটি নম্বর দেয়। ব্যবহারের উদাহরণ: f "30043376111"-> 47631এটি অনলাইন চেষ্টা করুন!

খুব সোজা ফরোয়ার্ড: ইনপুট স্ট্রিংয়ের অঙ্কগুলি প্রথমে তাদের সূচকগুলির যোগফলের সাথে অঙ্ক করে এবং অঙ্কটি নিজেই (-> জোড় (যোগফল,, ডি)) দিয়ে সাজান, ডুপ্লিকেটগুলি সরান এবং নেতৃস্থানীয় সরানোর জন্য একটি সংখ্যায় রূপান্তর করুন 00+ধরনের অধিকার পেতে প্রয়োজন হয়।


3

স্ট্যাকড , 59 বাইট

:@q uniq[:q\eq q size:>*sum,]map[-1#]sortby[0#]map''#`'^0'-

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

এটি $'1231231'স্ট্যাকের শীর্ষ থেকে ইনপুট হিসাবে একটি অক্ষরের স্ট্রিং (যেমন ) লাগে এবং স্ট্যাকের উপর একটি স্ট্রিং ফেলে।

ব্যাখ্যা

:@q uniq[:q\eq q size:>*sum,]map        stack: (str)
:                                       stack: (str str)
 @q                                     stack: (str)        ; store as `q`
    uniq                                stack: (str')       ; de-duplicate
        [                   ]map        map the inner over each element
         :                              stack: (chr chr)
          q\eq                          stack: (chr q')     ; `q'` is where equality occurs
               q size:>                 stack: (chr, q', k) ; `k` is range from 0, size(q')
                       *sum             stack: (chr, k')    ; `k'` is sum of indices
                           ,            stack: ((chr, k'))

এখন আমরা জোড়া (chr, সূচকগুলির যোগফল) রেখেছি।

[-1#]sortby[0#]map''#`'^0'-
[   ]sortby                    sort by the inner function
 -                             vectorized subtraction of two pairs
  1#                           use the second element as the comparison
           [0#]map             get the first element of each row
                  ''#`         join by the empty string
                      '^0'-    remove all leading zeroes

3

05 এ বি 1 ই , 29 28 বাইট

-1 রিলে ধন্যবাদ

TFN¹SQDg<ÝsÏON‚}){vyD0å_i1è,

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

TFN            }             # Loop from 0 to 9.
   ¹SQ                       # Push 1 if index is same as `y`.
      Dg<ÝsÏ                 # Push index of the number instead of 1.
            ON‚              # Sum, combine with current `y`.
                ){           # Collect, sort 'em.
                  vyD0å_i1è, # Only print the ones with a count above 0.

1
আপনি প্রতিস্থাপন করতে পারেন TFNজন্য9Ývy
রিলে

2
@ রিলে 05 এএবি 1 ই একটি অদ্ভুত ভাষা ... আপনি যতটা বেশি বেশি জটিল করার চেষ্টা করছেন ততই আপনি যতটা ব্যবহার করবেন সবকিছুতে ... ধন্যবাদ, হ্যাঁ, এটি ঠিক কাজ করে বলে মনে হচ্ছে না।
ম্যাজিক অক্টোপাস উরান

3

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

n=>+[...new Set(n)].sort().sort((a,b)=>(s=d=>[...n].reduce((S,D,i)=>S+i*(d==D),0))(a)-s(b)).join``

একটি স্ট্রিং নেয় n, তারপরে এটিকে একটি সেট এবং তারপরে স্বতন্ত্র অঙ্কের অ্যারেতে রূপান্তরিত করে। এই সংখ্যাগুলি সংখ্যাগত ক্রমে বাছাই করে তারপরে সূচকগুলির পরিমাণ অনুসারে আবার সাজানো হয় orts বাছাই করা অ্যারেটিকে একটি স্ট্রিংয়ে সংঘবদ্ধ করে এবং অবশেষে নেতৃস্থানীয় শূন্যগুলি সরানোর জন্য একটি সংখ্যায় রূপান্তর করে।

f=
n=>+[...new Set(n)].sort().sort((a,b)=>(s=d=>[...n].reduce((S,D,i)=>S+i*(d==D),0))(a)-s(b)).join``

console.log(f('30043376111'))


পুনরাবৃত্তি সাজানোর প্রয়োজনীয়?
কনর ও'ব্রায়েন

হ্যাঁ, "একাধিক সংখ্যার সমান পরিমাণের ফলস্বরূপ, ছোট অঙ্কটি বৃহত্তর অঙ্কের আগে আসে"। প্রথম ছাড়া .sort(), 1332 উৎপাদনের 132 পরিবর্তে 123 এর একটি ইনপুট
darrylyeo

আহ, ঠিক আছে, আমি দেখছি
কনার ও'ব্রায়ান

2

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

$a=@{};[char[]]"$args"|%{$a[$_]+=$i++};+-join(($a.GetEnumerator()|Sort value,name).Name)

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

একটি খালি হ্যাশটেবল সেট করে $a, তারপরে অ্যারে $argsহিসাবে ইনপুটটি কাস্ট করে char, এবং প্রতিটি উপাদান দিয়ে লুপ করে |%{...}। আমাদের ইনপুটের সূচকগুলি গণনা $aকরতে আমরা বর্ধিত হওয়ার "বর্তমান উপাদান" তে মান সেট করে রেখেছি $i++। উদাহরণস্বরূপ, ইনপুট জন্য 300433766111, প্রথম লুপটি $a[3]পায় +=0; পরবর্তী লুপ, $a[0]পায় +=1; প্রভৃতি

এর পরে, Sortআমাদের হ্যাশটেবলের দরকার । দুর্ভাগ্যক্রমে, একটি অভ্যন্তরীণ ভাষার কৌতুকের কারণে, এর অর্থ আমরা $a.GetEnumerator()আসল বাছাই করার আগে আমাদের প্রয়োজন । আমরা সাজানোর দ্বারা value, তারপর দ্বারা name, সন্তুষ্ট ছোট সংখ্যার প্রয়োজন প্রথম সাজানো দেখায়। আমরা .Nameএরগুলি (সাজানো ক্রমে) -joinএগুলি একত্রিত করে একটি স্ট্রিংয়ে রেখেছি এবং সেই স্ট্রিংটি +নেতৃস্থানীয় শূন্যগুলি অপসারণের জন্য INT হিসাবে নিক্ষেপ করি । এটি পাইপলাইনে রেখে গেছে এবং আউটপুট অন্তর্ভুক্ত।


2

জেলি , 10 বাইট

Ġ’S$ÞịDFQḌ

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

পূর্ণসংখ্যা গ্রহণ করে এবং প্রদান করে।

কিভাবে?

Ġ’S$ÞịDFQḌ - Main link: n            e.g. 30043376111
Ġ          - group indices of n by value  [[2,3],[9,10,11],[1,5,6],[4],[8],[7]] (implicitly treats the number as a decimal list)
    Þ      - sort that by:
   $       -     last two links as a monad:
 ’         -         decrement (since Jelly is 1-indexed)
  S        -         sum                  [[2,3],[4],[7],[8],[1,5,6],[9,10,11]] (this leaves those indices of lower value to the left as required)
      D    - decimal list of n            [3,0,0,4,3,3,7,6,1,1,1]
     ị     - index into                   [[0,0],[4],[7],[6],[3,3,3],[1,1,1]]
       F   - flatten                      [0,0,4,7,6,3,3,3,1,1,1]
        Q  - unique                       [0,4,7,6,3,1]
         Ḍ - cast to a decimal number     47631


1

পাইথন 2, 102 92 বাইট

10 বাইট সংরক্ষণের জন্য বেন ফ্রাঙ্কেলকে ধন্যবাদ!

a={}
for i,j in enumerate(input()):a[j]=a.get(j,0)+i
print int(''.join(sorted(a,key=a.get)))

অনলাইনে চেষ্টা করে দেখুন!

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


a[j]=a.get(j,0)+i10 বাইট সংরক্ষণ
বেন ফ্রাঙ্কেল

1

পাইথন 3.5, 86 85 বাইট

বাইট সংরক্ষণের জন্য @ বেন ফ্রাঙ্কেলকে ধন্যবাদ:

f=lambda s:int(''.join(sorted({*s},key=lambda d:sum(i*(c==d)for i,c in enumerate(s)))))

পুরানো কোড:

lambda s:int(''.join(sorted({*s},key=lambda d:sum(i for i,c in enumerate(s)if c==d))))

অজ্ঞাতনামা ফাংশন অঙ্কের একটি স্ট্রিং গ্রহণ করে এবং পূর্ণসংখ্যা ফেরত দেয়


sum(i*(c==d)for1 বাইট সাশ্রয় করে।
বেন ফ্রাঙ্কেল

1

পিপ , 18 বাইট

+J:$+(a@*_)SKSNUQa

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

ব্যাখ্যা

                    a is 1st cmdline arg (implicit)
               UQa  Get unique digits in a
             SN     Sort (numerically)
           SK       Then sort with this key function:
      a@*_           Find all indices of argument in a
   $+(    )          and sum them
 J:                 Join the resulting list back into a string (: is used to lower the
                    precedence of J)
+                   Convert to number (eliminates leading 0)
                    Print (implicit)

0

সি #, 245 বাইট

using System.Linq;s=>{var a=new int[10];for(int i=0,l=0;i<10;i++){a[i]=-1;while((l=s.IndexOf(i+"",l+1))!=-1)a[i]+=l;}return string.Concat(a.Select((c,i)=>new{c,i}).OrderBy(o=>o.c).ThenBy(o=>o.i).Where(o=>o.c>-1).Select(o=>o.i)).TrimStart('0');};

এটি কত দিন অস্তিত্বের সাথে শেষ হয়েছিল তা নিয়ে খুশি নন এবং এটি সম্ভবত সংক্ষিপ্ত হতে পারে তবে এটিই আমি শেষ করেছি।


0

পার্ল 6 ,  65 61  52 বাইট

{+[~] {}.push(.comb.map:{$_=>$++}).sort({.value.sum,.key})».key}

চেষ্টা করে দেখুন

{+[~] {}.push(.comb.antipairs).sort({.value.sum,.key})».key}

চেষ্টা করে দেখুন

{+[~] .comb.antipairs.Bag.sort({.value,.key})».key}

চেষ্টা করে দেখুন

সম্প্রসারিত

{      # bare block lambda with implicit parameter 「$_」

  +    # turn the following into a Numeric
  [~]  # reduce the following using &infix:<~> (join)

    .comb              # list of digits from 「$_」 (implicit method call)
    .antipairs         # get a list of 「value => index」 pairs from above list
    .Bag               # combine them together (does the sum)
    .sort(
      { .value, .key } # sort it by the sum of indexes, then by the digit
    )».key             # get the list of digits from that
}

0

স্কালা, 123 104 বাইট

(_:String).zipWithIndex.groupBy(_._1).toSeq.sortBy(c=>c._2.map(_._2).sum->c._1).map(_._1).mkString.toInt

উদাহরণ (স্কেল রিপ্লে ব্যবহার করে):

scala> (_:String).zipWithIndex.groupBy(_._1).toSeq.sortBy(c=>c._2.map(_._2).sum->c._1).map(_._1).mkString.toInt
res0: String => Int = <function1>

scala> res0("30043376111")
res1: Int = 47631

খুব সোজা, গৌণ প্রকারের জন্য প্রিকিকেট বাছাই হিসাবে টিপল ব্যবহার করে।


0

পাইথ, 9 বাইট

sosxNcQ1{

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

ইনপুট হিসাবে অঙ্কের একটি স্ট্রিং নেয়।

sosxNcQ1{
sosxNcQ1{Q    Implicit variable introduction
        {Q    Unique digits
 o            Order by
     cQ1      Chop input into list of individual characters.
   xN         Find all indexes of the digit in question in the list.
  s           Sum
s             Convert string to integer.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.