একটি আদেশ অনুকরণ করুন


24

সংখ্যার দুটি তালিকা দেওয়া, একটি উত্স এবং একটি প্যাটার্ন , প্যাটার্নটির আপেক্ষিক ক্রমটির সাথে মিলিয়ে উত্সটিকে পুনরায় অর্ডার করুন। পুনঃনির্দিষ্ট উত্সের যে কোনও দুটি এন্ট্রি প্যাটার্নের একই অবস্থানগুলিতে প্রবেশের মতো একইভাবে তুলনা করা উচিত।

উদাহরণস্বরূপ, ইনপুট

s = [-5, 9, 4, 13, 11, -6, 0]
p = [7, -4, 1, -8, 4, -3, 12]

ফলাফল করা উচিত

    [11, -5, 4, -6, 9, 0, 13]

প্রথম এবং শেষ পদের তুলনা করে, ফলাফলটি এসেছে 11<13, যা 7<12প্যাটার্নে মেলে ।

ইনপুট: পূর্ণসংখ্যার দুটি সম-দৈর্ঘ্যের অ-খালি তালিকা। প্রতিটি তালিকার কোনও পুনরাবৃত্তি হবে না। উত্স বা প্যাটার্নটি প্রথমে দেওয়া হয়েছে কিনা তা আপনার বিষয়।

আউটপুট: এমন একটি তালিকা যা উত্স নম্বরগুলিকে প্যাটার্ন সংখ্যাগুলির মতো একই আপেক্ষিক ক্রম করতে পুনরায় সাজায়।

লিডারবোর্ড:


এটি কি কোনও ফাংশন / প্রোগ্রাম হতে হবে, বা একটি এক্সপ্রেশন / স্নিপেট যথেষ্ট?
অ্যাডাম

উত্তর:


10

সিজেম, 12 10 বাইট

{_$f#\$f=}

এটি একটি বেনাম ফাংশন, যা s pস্ট্যাকটি গ্রহণ করে এবং ফলটি স্ট্যাকের উপরে ফেলে। অনলাইন ডেমো

2 বাইটের জন্য মার্টিন বাটনারকে ধন্যবাদ জানাই

ব্যবচ্ছেদ

{         e# Define an anonymous function
  _$f#    e# Use a copy of the pattern to map each element to its sort index
  \$      e# Sort the source
  f=      e# Map each sort index to the corresponding source element
}

{_$@$er}দুটি বাইট সংক্ষিপ্ত।
ডেনিস

@ ডেনিস, এটি পৃথক উত্তর হিসাবে যথেষ্ট আলাদা
পিটার টেলর

আপনি যদি তাই মনে করেন তবে আমি উত্তর হিসাবে পোস্ট করব।
ডেনিস 20

10

জে, 9 বাইট

/:^:2~/:~

এটি একটি ডায়াডিক ক্রিয়া যা p এবং s কে বাম এবং ডান আর্গুমেন্ট হিসাবে গ্রহণ করে । এটি J.js এর সাথে অনলাইনে ব্যবহার করে দেখুন

টেস্ট রান

   7 _4 1 _8 4 _3 12 (/:^:2~/:~) _5 9 4 13 11 _6 0
11 _5 4 _6 9 0 13

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

বলুন আমরা এর মাধ্যমে উদাহরণ থেকে বাম এবং ডান ইনপুট নির্ধারিত করেছি

p =: 7 _4 1 _8 4 _3 12
s =: _5 9 4 13 11 _6 0

তারপর:

  • ট্রেন /:^:2~/:~ক্রিয়াপদের একটি হুক /:^:2~এবং /:~তাই কল করা

    p (/:^:2~/:~) s
    

    , executes

    p /:^:2~ /:~ s
    
  • ক্রিয়া বিশেষণ ~মধ্যে /:~হয় আত্মবাচক সাল থেকে /:monadically ব্যবহার করা হয়। এইভাবে, কলিং

    /:~ s
    

    , executes

    s /: s
    
  • ক্রিয়া বিশেষণ ~মধ্যে /:^:2~হয় প্যাসিভ যেহেতু ক্রিয়া, /:^:2dyadically ব্যবহার করা হয়। এইভাবে, কলিং

    p /:^:2~ y
    

    , executes

    y /:^:2 p
    
  • ক্রিয়া বিশেষণ ^:হয় ক্ষমতা । এইভাবে, কলিং

    y /:^:2 p
    

    , executes

    y /: y /: p
    

সব একসাথে রাখা, কল করা

p (/:^:2~/:~) s

, executes

(s /: s) /: (s /: s) /: p

কিভাবে যে কাজ করে

ডায়াডিক /:হ'ল গ্রেড আপ , অর্থাৎ xx /:y এর উপাদানগুলি প্রদান করে যা এর সাথে সম্পর্কিত মান অনুসারে বাছাই করা হয় ।y

  • s /: sকেবল এস এর উপাদানগুলি সাজায়

  • (s /: s) /: pপি এর সম্পর্কিত মান অনুসারে এর (সাজানো) উপাদানগুলি সাজায়

  • দুইবার আপ গ্রেডিং মূলত তার সঠিক যুক্তির অর্ডিনালগুলি গণনা করে।

    সুতরাং, পি এর উপাদানগুলির ক্রম অনুকরণ করে এর(s /: s) /: (s /: s) /: p (সাজানো) উপাদানগুলি সাজান ।


9

গণিত, 32 27 বাইট

Sort@#~Permute~Ordering@#2&

ব্যবহারের উদাহরণ:

Sort@#~Permute~Ordering@#2 &[{-5, 9, 4, 13, 11, -6, 0}, {7, -4, 1, -8, 4, -3, 12}]
(* {11, -5, 4, -6, 9, 0, 13} *)

পূর্ববর্তী প্রচেষ্টা:

Sort[#][[Ordering@Ordering@#2]]&

@ ডেভিডকারারহর স্থির!
2012 ক্র্যাম্পিয়ন

1
+1 আমি আপনার 4 মিনিটের পরে এই খুব একই সমাধানটি আবিষ্কার করেছি! আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন:o = Ordering; (Sort@#)[[o@o@#2]] &
ডেভিডসি

মাধ্যমে সুন্দর নতুন সমাধান Permute! আদেশের খুব দরকারী ব্যবহার।
ডেভিডসি

7

জে, 17 বাইট

(A.^:_1/:~)~A.@/:

এটি একটি ডায়ডিক (অর্থ বাইনারি) ক্রিয়াটির মূল্যায়ন করে। এটি নিম্নলিখিত হিসাবে উত্সাহিত করা যেতে পারে:

  _5 9 4 13 11 _6 0 ((A.^:_1/:~)~A.@/:) 7 _4 1 _8 4 _3 12
11 _5 4 _6 9 0 13

ব্যাখ্যা

এটি সংক্ষিপ্ততম জে সমাধান নাও হতে পারে তবে এটি একটি অভিনব পদ্ধতির।

                   Left input is x, right input is y.
            A.@/:  The index of the permutation P that sorts y. /: gives the
                   permutation itself, and A. gives its index in the sorted
                   list of all its permutations.
       /:~         x sorted in ascending order. We are applying the x-sorting
                   permutation to x itself.
(A.^:_1   )~       The inverse of the permutation P applied to the sorted
                   version of x. Since P maps y to its sorted version, its
                   inverse maps the sorted version to y, and thus sorted x to
                   the correct output.

6

পাইথ, 10 বাইট

@LSvzxLSQQ

অনলাইনে চেষ্টা করুন: বিক্ষোভ

ব্যাখ্যা

@LSvzxLSQQ implicit: z = first input line as string
                     Q = second input line evaluated
       SQ  sorted(Q)
     xLSQQ find the index for each element of Q in sorted(Q)
  Svz      sorted(evaluated z)
@LSvz      take the element in ^ for each index

XQSQSvzতিন বাইট সংক্ষিপ্ত।
ডেনিস

@ ডেনিস ডাং আমি কেন এটুকু করিনি? আপনি কি এটি পোস্ট করতে চান?
জাকুবে

1
যদি আপনি এটিকে আপনার পদ্ধতির থেকে যথেষ্ট পৃথক মনে করেন তবে অবশ্যই।
ডেনিস

6

পাইথ, 7 বাইট

XQSQSvz

এটি একটি সম্পূর্ণ প্রোগ্রাম যা দুটি লাইনে s এবং p এর স্ট্রিং উপস্থাপনা আশা করে। এটি অনলাইনে চেষ্টা করুন।

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

           Store the first line of input (rep. of s) in z.
           Evaluate the second line of input and store the result (p) in Q.
  SQ       Sort the elements of p.
    Svz    Evaluate the repr. of s and sort its elements.
XQ         Perform transliteration on p.
           This replaces the lowest element of p with the lowest element of s, etc.

5

পাইথন 2, 51

lambda s,p,a=sorted:[a(s)[a(p).index(x)]for x in p]

আমি বিভ্রান্ত: তিনটি পরামিতি কেন?
পিটার টেলর

@PeterTaylor তৃতীয় প্যারামিটারটি, একটি ডিফল্ট মান আছে তাই এটি একমাত্র 2. বলা যেতে পারে
feersum

@ পিটারটেলর একটি পৃথক লাইন যুক্ত a=sortedকরার একই প্রভাব থাকবে।
xnor

Aaaaaah! আমি ভুলভাবে বিভক্ত হয়েছি এবং ভেবেছিলাম যে দেহটি শুরু হয়েছিল =
পিটার টেলর

5

গণিত 56 56 30 29 বাইট

o=Ordering;Sort[#][[o@o@#2]]&

Ordering@#2প্যাটার্নে সংখ্যার ক্রম প্রদান করে। Ordering@Ordering@#2উত্সে বাছাই করা উপাদানগুলি দখল করা উচিত এমন অবস্থান দেয়।

Sort[#][[o@o@#2]]& প্রয়োজনীয় অবস্থানগুলিতে উত্সটি দেয়, যথা, প্যাটার্ন তালিকার মতো একই আপেক্ষিক ক্রম রয়েছে।

পরীক্ষামূলক

o=Ordering;Sort[#][[o@o@#2]]&[{-5, 9, 4, 13, 11, -6, 0}, {7, -4, 1, -8, 4, -3, 12}]

{11, -5, 4, -6, 9, 0, 13}


5

সিজেম, 8 বাইট

{_$@$er}

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

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

_      e# Push a copy of p.
 $     e# Sort it.
  @    e# Rotate s on top of p and the sorted p.
   $   e# Sort s.
    er e# Perform transliteration.
       e# This replaces the lowest element of p with the lowest element of s, etc.

4

জে, 13 বাইট

/:@/:@[{/:~@]

আমি এখনও জে'র ক্রিয়া রচনাটির চারপাশে আমার মাথা গুটিয়ে রাখতে সমস্যা বোধ করছি, তাই আমি সেগুলির মধ্যে কিছু মনে করি @এবং []এটি অপ্রয়োজনীয় হতে পারে। যদি আরও কিছু অভিজ্ঞ জে ব্যবহারকারী আমাকে এই সংকুচিত করা যায় তবে আমাকে জানাতে পারতেন, এটি দুর্দান্ত। :)

ক্রিয়াটি নিম্নলিখিত হিসাবে ব্যবহার করা যেতে পারে:

   7 _4 1 _8 4 _3 12 (/:@/:@[{/:~@]) _5 9 4 13 11 _6 0
11 _5 4 _6 9 0 13

ব্যাখ্যা

/:@/:@[{/:~@] NB. Left input is the pattern, right input is the source.
        /:~@] NB. Sort the source.
/:@/:@[       NB. Compute the ordering of the ordering of the pattern.
       {      NB. Use those as indices into the sorted source.

আপনি dyadic ব্যবহার করতে পারেন /:পরিত্রাণ পেতে {এবং @11 বাইট জন্য:/:~@]/:/:@[
ডেনিস

@ ডেনিস ধন্যবাদ, জগারব এর মধ্যে আরও একটি 11-বাইট সমাধান খুঁজে পেয়েছে যার জন্য কেবল দুটি দরকার /:, তবে উত্তরটি আপডেট করার মতো এখনও আমি পাইনি ({~/:)&/:{[)
মার্টিন ইন্ডার

4

এপিএল, 17 12 বাইট

{⍺[⍋⍺][⍋⍋⍵]}

@ ডেনিসকে ধন্যবাদ, এটি এখন খুব মার্জিত।

এখানে একটি দুর্দান্ত 14-বাইট সমাধান রয়েছে যা ডাবল ইনডেক্সিং ব্যবহার করে না:

{⍺[(⍋⍋⍺)⍳⍋⍋⍵]}

দুর্ভাগ্যক্রমে, আমরা এপিএলে ট্রেনগুলির মধ্যে থেকে অ্যারেগুলি সূচক করতে পারি না।


4

পাইথন 2, 48

lambda*l:map(dict(zip(*map(sorted,l))).get,l[0])

ফাংশন একটি বড় গ্লোব। এটি অভিধান ব্যবহার করে অন্যান্য অনেক উত্তরের উপাদান অনুবাদ পদ্ধতির ব্যবহার করে।

তারকাচিহ্নিত ইনপুট *lসেই ক্রমে নিদর্শন এবং উত্স আশা করে এবং সেগুলিকে একটি তালিকায় পরিণত করে l

ম্যাপিং sortedউভয় তালিকাগুলি বাছাই করে এবং dict(zip(_))দ্বিতীয় তালিকার মানগুলির সাথে মিলিত প্রথম তালিকার কীগুলির সাহায্যে অভিধানের একটি জোড়কে অভিধানে পরিণত করে as সুতরাং, ফলাফলটি হ'ল iপ্যাটার্নটির যে- iবৃহত্তম বৃহত্তম উপাদানটি উত্সের চতুর্থ বৃহত্তম উপাদানটির সাথে মেলে ।

পরিশেষে, আমরা l[0]এই অভিধানটির মাধ্যমে এর .getপদ্ধতিটি ম্যাপ করে প্যাটার্নটি ( ) রূপান্তর করি ।


3

বাশ + কোর্টিলস, 55

nl $2|sort -nk2|paste <(sort -n $1) -|sort -nk2|cut -f1

উত্স এবং প্যাটার্নের জন্য যথাক্রমে ইনপুট দুটি ফাইলের নাম হিসাবে নেওয়া হয়:

$ ./imitord.sh source.txt pattern.txt 
11  
-5  
4   
-6  
9   
0   
13  
$ 



2

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

import Data.List
s#p=[sort s!!i|b<-p,(i,e)<-zip[0..]$sort p,b==e]

ব্যবহারের উদাহরণ: [-5,9,4,13,11,-6,0] # [7,-4,1,-8,4,-3,12]-> [11,-5,4,-6,9,0,13]

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

           b<-p                              -- for every b in p
               ,(i,e)<-zip[0..]$sort p       -- walk through the sorted list of p 
                                             -- paired with it's index ->
                                             -- (index,element) or (i,e)
                                      ,b==e  -- for those cases where b equals e
 sort s!!i                                   -- take the i-th element from the
                                             -- sorted list s


2

টিস্ক্রিপ্ট, 15 বাইট

ys¡m™x[yi(l)])

এটি অ্যারের হিসাবে ইনপুট নেয়। ইন্টারপ্রেটারটি বর্তমানে নিচে আছে কারণ আমি অভিনব নতুন দোভাষীকে সংযুক্ত করছি

ব্যাখ্যা

y      // Second input
 s¡    // Sort it = s()
m™     // Map over it = m(#
  x[      // Num in first input at index...
    yi(l) // Current char's index in y
  ]
)

হয় আমি ব্যাখ্যায় খারাপভাবে ভুল বোঝাবুঝি করছি, বা এটি কাজ করে না ... আমি যা পাই তা আমি পাইপ-তে কোড করেছিলাম এবং 13 9 -6 4 11 -5 0নমুনা ইনপুটটি পেয়েছি । ??
DLosc

2

জেলি , 6 বাইট, ভাষা পোস্টডেটস চ্যালেঞ্জ

Œ¿œ?Ṣ}

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

এটি উত্সটি অনুসরণ করে, উত্সটি অনুসরণ করে দুটি পৃথক যুক্তি হিসাবে।

ব্যাখ্যা

Œ¿œ?Ṣ}
Œ¿      Generate an integer that describes the order of {the first input}
  œ?    Use that integer to reorder
    Ṣ}  the sorted version of the second {input}

1

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

import Data.List
p%s=[sort s!!(length$filter(<x)p)|x<-p]

একটি বাইনারি ফাংশন সংজ্ঞায়িত করে %। প্রতিটি এন্ট্রি একই আদেশের পরিসংখ্যান সহ pএর প্রবেশদ্বারে রূপান্তরিত হয় s, অর্থাৎ তালিকায় তার তুলনায় আপেক্ষিক পদমর্যাদায়। ক্রম পরিসংখ্যাত xমধ্যে pউপাদানের চেয়ে ছোট করে (গণনা দ্বারা পাওয়া যায় sort p!!xএকটি বিরক্তিকর উত্পাদন করে Maybe)। ফলাফল ইনডেক্স করা হয়sort s

একটি সংখ্যা zip/lookupএকই দৈর্ঘ্য, এটি Justসংখ্যা দেয় না ।

import Data.List
p%s=[lookup x$zip(sort p)(sort s)|x<-p]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.