বাছাইয়ের পরে একটি অ্যারের সূচকগুলি পান


14

আজ আপনার চ্যালেঞ্জ হ'ল এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি তালিকা গ্রহণ করে lএবং সেই অবস্থানগুলি দেয় lযেখানে lসাজানো প্রতিটি ক্রমিক উপাদান প্রদর্শিত হয়।

অন্য কথায়, ক্ষুদ্রতম মানের সূচক আউটপুট, তারপরে দ্বিতীয় ক্ষুদ্রতম মানের সূচক ইত্যাদি output

আপনি ধরে নিতে পারেন যে ইনপুট অ্যারেতে কেবল ইতিবাচক পূর্ণসংখ্যা থাকবে এবং এতে অন্তত একটি উপাদান থাকবে contain

পরীক্ষার কেস:

Input                  | Output (1-indexed)
[7, 4, 5]              | [2, 3, 1]
[1, 2, 3]              | [1, 2, 3]
[2, 6, 1, 9, 1, 2, 3]  | [3, 5, 1, 6, 7, 2, 4]
[4]                    | [1]

যখন একই মানযুক্ত দুটি বা ততোধিক উপাদান উপস্থিত হয়, তখন তাদের সূচকগুলি ছোট থেকে বড় পর্যন্ত একে অপরের পাশে উপস্থিত হওয়া উচিত।

এটি , সবচেয়ে কম বাইট জয়!


16
-1 একটি তুচ্ছ চ্যালেঞ্জের জন্য যা সাধারণ গল্ফিং ভাষাগুলিতে বিল্ট-ইনগুলির সাথে সমাধান করা যায় এবং 24 ঘণ্টারও কম সময়ে উত্তর গ্রহণ করার জন্য। এটি মোটামুটি চ্যালেঞ্জ ছিল না, আকর্ষণীয়ও ছিল না।
কোডি গ্রে

3
হ্যাঁ, কেন আমি ২৪ ঘন্টার মধ্যে সে একটি উত্তর গ্রহণ করে তা পেয়েছি, বীট করা অসম্ভব।
জাকারি

3
@ কোডি গ্রে যখন আমি 1-2 বাইটের উত্তরটি দেখেছি তখন আমি উজ্জীবিত হওয়ার কথা ভেবেছিলাম, তবে বাস্তবে আমি বেশি স্ট্যান্ডার্ড প্রোগ্রামিং ভাষার পক্ষে এটি খারাপ চ্যালেঞ্জ মনে করি না। অবশ্যই, এটি কোনও কঠিন চ্যালেঞ্জ নয়, তবে এখনও কিছু গল্ফ করার সম্ভাবনা রয়েছে। অবশ্যই, 1-বাইট বিল্ট-ইনগুলি দেখতে অপ্রীতিকর, তবে আমি মনে করি না যে এর জন্য চ্যালেঞ্জকে দোষ দেওয়া ঠিক fair
দাদা

1
1 টি চরিত্রের অন্তর্নির্মিত ব্যবহারটি খুব কষ্টের অনুশীলন। সহজরূপে কেবল বিল্টিনগুলি ব্যবহার করে সমাধানযোগ্য হয় না।
জেএডি

2
এই জাতীয় ক্ষেত্রে সেরা সমাধানটি টি গ্রহণ করার বৈশিষ্ট্যটি ভুলে যাওয়া, যা এখানে কোনওভাবেই প্রাসঙ্গিক নয়।
মিঃ এক্সকোডার

উত্তর:


9

হিহ যে খুব সুস্পষ্ট ছিল ...
এরিক দি আউটগল্ফার

2
আপনার গতির জন্য যদিও এপিএল এটি +1 প্রাপ্য।
জাকারি

@ জ্যাচারý আমি নিশ্চিত জেলি জে এটিকে বেছে নিয়েছে, ফলস্বরূপ এটি এপিএল থেকে উত্তরাধিকার সূত্রে পেয়েছে।
অ্যাডম

11

ডায়ালগ এপিএল, 1 বাইট

ডায়ালগ এপিএল একটি বিল্ট ইন রয়েছে অপারেটর ফাংশন রয়েছে (এটি পরিষ্কার করার জন্য জ্যাচারকে ধন্যবাদ) এটি করার জন্য।

উদাহরণ

⍋11 2 4 15
    2 3 1 4  
{⍵[⍋⍵]}11 4 2 15
    2 4 11 15

এখানে আমি তালিকাটিকে সাজানো সূচকগুলি অনুসারে বাছাই ক্রমে তালিকায় আনছি।


ওহ, আপনাকে কিছু বিভ্রান্তিকর পরিভাষা সম্পর্কে সতর্ক করার জন্য, এপিএলে বিল্টইনগুলি ফাংশন হিসাবে বিবেচিত হয়, যখন জিনিসগুলি ¨⍨⍣.∘/\⌿⍀⌸⍤অপারেটর হয়।
জ্যাকারি


9

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

এই দ্রবণটি 0-সূচকযুক্ত। এটি sorted()আসল তালিকার একটি অনুলিপি তৈরি করে এমন বিষয়টিকে অপব্যবহার করে ।

l=input()
for k in sorted(l):a=l.index(k);print a;l[a]=0

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


তুমি কেন এলোমেলো করেছ?
এরিক আউটগল্ফার

@ এরিকথ আউটগলফার স্থির, রোলব্যাক।
মিঃ এক্সকোডার

9

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

-2 বাইটস @ পোওয়েলেসকে ধন্যবাদ

এটি কেবল Array.prototype.sortস্থির যেখানে ব্রাউজারগুলিতে কাজ করে ।

a=>[...a.keys()].sort((b,c)=>a[b]-a[c])

1-ইনডেক্সড সংস্করণ (47 বাইট):

a=>a.map((_,i)=>i+1).sort((b,c)=>a[b-1]-a[c-1])

কোড স্নিপেট উদাহরণ:

f=
a=>[...a.keys()].sort((b,c)=>a[b]-a[c])
console.log("7,4,5 => "+f([7,4,5]))
console.log("1,2,3 => "+f([1,2,3]))
console.log("2,6,1,9,1,2,3 => "+f([2,6,1,9,1,2,3]))
console.log("4 -> "+f([4]))


[...a.keys()]পরিবর্তে a.map((_,i)=>i)আপনি কয়েক বাইট সংরক্ষণ করতে হবে।
বুলেট

7

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

lambda x:sorted(range(len(x)),key=x.__getitem__)

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


ভাল লাগল, আমি ছাড়িয়ে গেলাম> _ <। আমি পাইথন 3 এ আমার উত্তরটি
এমনভাবে বদলেছি

4
@ মিঃ এক্সকোডার ওয়েল, এটি তার কাজ ...
নীল

@ মিঃ এক্সকোডার আসুন, এর জন্য আপনার খারাপ লাগা উচিত নয়! আপনি একটি সম্পূর্ণ প্রোগ্রাম তৈরি করেছেন, আমি একটি ফাংশন তৈরি করেছি, এবং আমার পন্থাটি কিছুটা আলাদা।
এরিক আউটগল্ফার

আমার খারাপ লাগছে না, আমি জানতাম এটি উপস্থিত হবে (আমি ব্যক্তিগতভাবে __<blahblah>__বাক্য গঠনটি ঘৃণা করি )। আমি কিছু জেলি করব, আমি আমার প্রশিক্ষণ হারাতে চাই না :)
মিঃ এক্সকডার

1
@ মিঃ এক্সকোডার কোডগল্ফের অর্থ সুন্দর সিনট্যাক্স এবং বিন্যাসকরণ নয়। ;)
এরিক দি আউটগলফার

5

পার্ল 6 ,  27  21 বাইট

*.pairs.sort(*.value)».key

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

->\x{sort {x[$_]},^x}

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

পাইথন উত্তরের দ্বারা অনুপ্রাণিত

সম্প্রসারিত:

->    # pointy block lambda
  \x  # declare sigilless parameter
{
  sort
    { x[$_] },  # sort by the value in 「x」 at the given position
    ^x          # Range up-to the number of elements in 「x」
}


4

সুইফট 4 , 82 বাইট

func f(l:[Int]){var l=l;for k in l.sorted(){let a=l.index(of:k)!;print(a);l[a]=0}}

পরীক্ষা স্যুট.

ব্যাখ্যা

সুইফটে, l.sorted()মূল অ্যারের একটি বাছাই করা অনুলিপি তৈরি করে। আমরা তালিকায় সাজানো উপাদান দিয়ে মূল অ্যারের মধ্যে প্রতিটি আইটেমের এর সূচীতে মুদ্রণ পর লুপ let a=l.index(of:k)!;print(a), এবং তারপর, অর্ডার অ্যারের মধ্যে সঠিক ইনডেক্স রাখার, আমরা দায়িত্ব অর্পণ l[a]করতে 0, কারণ এটি আমাদের স্বাভাবিক আউটপুট প্রভাবিত করে না।


নোট করুন যে এটি 0-সূচকযুক্ত, যেহেতু এটি আমার পাইথন সমাধানের বন্দর। আপনি এটা 1-সূচীবদ্ধ হতে চান, প্রতিস্থাপন print(a)সঙ্গে print(a+1)বা অনলাইনে চেষ্টা করুন!


4

আর , 5 বাইট

এর জন্য একটি বিল্টিন ফাংশন রয়েছে।

order

3
Standard rules is to provide a program of function. order is already a function, so you don't have to handle input using scan(). This would be 5 bytes.
JAD

rank() would save a byte
gstats

1
I am sure there was a rank answer by @JarkoDubbeldam, but I do not see it anymore.
djhurio

1
Correct, it does not follow the spec so I deleted it.
JAD




3

Octave, 17 bytes

@(i)[~,y]=sort(i)

Try it online!

Octave is like MATLAB but with inline assignment, making things possible that gives the folks at Mathworks HQ headaches. It doesn't matter what you call y, but you can't do without that dummy variable, as far as I know.


3

MY, 3 bytes

MY also has a builtin for this!

⎕⍋↵

Try it online!

How?

Evaluated input, grade up, then output with a newline.

Indexed however you set the index, with /0x48. (Can even be some weird integer like -1 or 2, the default is 1).


3

Java 8, 128 + 19 = 147 bytes

Based on Mr. Xcoder's solution. 0-based. Lambda takes input as an Integer[] and returns Integer[]. Byte count includes lambda expression and required import.

import java.util.*;

l->{Integer o[]=l.clone(),s[]=l.clone(),i=0;for(Arrays.sort(s);i<l.length;)l[o[i]=Arrays.asList(l).indexOf(s[i++])]=0;return o;}

Try It Online

Ungolfed lambda

l -> {
    Integer
        o[] = l.clone(),
        s[] = l.clone(),
        i = 0
    ;
    for (Arrays.sort(s); i < l.length; )
        l[o[i] = Arrays.asList(l).indexOf(s[i++])] = 0;
    return o;
}

Notes

I use Integer[] instead of int[] to allow use of Arrays.asList, which has no primitive versions. Integer is preferred to Long because values are used as array indices and would require casting.

This ended up being shorter than my best procedural-style List solution because of the cost of class and method names.

This also beat a solution I tried that streamed the inputs, mapped to (value, index) pairs, sorted on values, and mapped to indices, mostly because of the baggage needed to collect the stream.

Acknowledgments

  • -5 bytes thanks to Nevay

1
You don't need j: l->{Integer o[]=l.clone(),s[]=l.clone(),i=0;for(Arrays.sort(s);i<l.length;l[o[i]=Arrays.asList(l).indexOf(s[i++])]=0);return o;} (19+128 bytes).
Nevay




2

MATLAB / Octave, 29 bytes

[~,y]=sort(input(''));disp(y)

Try it online!


While your answer is perfect MATLAB, you can actually do inline assignment in anonymous functions in Octave.
Sanchises

Good one! I knew about in-line assignment, but I didn't know you could output directly like that
Luis Mendo

1
To be honest, me neither. I started with something like @(X)([~,y]=sort(X)), and while I was looking of a way to get y from this, I realized y was actually the return value from the assignment, and closer inspection revealed that brackets weren't even needed. MATLAB likes everything explicit; Octave is happy when it's unambiguous.
Sanchises

2

JavaScript (ES6), 69 bytes

0-indexed. Works for lists containing up to 65,536 elements.

a=>[...a=a.map((n,i)=>n<<16|i)].sort((a,b)=>a-b).map(n=>a.indexOf(n))

Test cases


Can you change n=>a.indexOf(n) to just a.indexOf?
Zacharý

@Zacharý Unfortunately not. A method of an instanced object cannot be used as a callback.
Arnauld

@Zacharý Even worse is that Array#map passes 3 arguments to the callback function, and Array#indexOf expects 2, so it will give undesirable results.
kamoroso94


2

Husk, 10 7 bytes

This is a direct port of my Haskell answer, also 1-indexed:

m→O`z,N

Try it online!

Ungolfed/Explained

Code        Description               Example
         -- implicit input            [2,6,1]
      N  -- natural numbers           [1,2,3,..]
   `z,   -- zip, but keep input left  [(2,1),(6,2),(1,3)]
  O      -- sort                      [(1,3),(2,1),(6,2)]
m→       -- keep only indices         [3,1,2]

2

Java (OpenJDK 8), 72 bytes

l->l.stream().sorted().map(i->{int j=l.indexOf(i);l.set(j,0);return j;})

Try it online!

Takes a List<Integer>, returns a Stream<Integer> containing the results.

We get a Stream based off the initial list, sort it, then map each number to it's index in the list. In order to accommodate duplicate elements, we set the original element in the list to 0.


2

SmileBASIC, 67 bytes

DEF I(A)DIM B[0]FOR I=1TO LEN(A)PUSH B,I
NEXT
SORT A,B
RETURN B
END

Very simple, all it does is generate a list of numbers from 1 to (length of array) and sort this by the same order as the input.


2

Python 3 with Numpy, 38 26 bytes

12 bytes saved thanks to Jo King (no need to give the function a name)

import numpy
numpy.argsort

Output is 0-based.

Try it online!


The function could just be numpy.argsort without the lambda part
Jo King

@JoKing Thanks for the suggestion. I wrote it that way because with just numpy.argsort;import numpy I get an error (numpy has not been imported yet), and with import numpy;numpy.argsort I need to move f= to the code part. Do you know that the standard procedure is in these cases? Move the f= and not count it?
Luis Mendo

Yeah, I guess. Maybe just redefine f=numpy.argsort in the footer
Jo King

@JoKing Good idea. Done. Thanks!
Luis Mendo




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