ন্যূনতম স্কেলার পণ্য


16

ন্যূনতম স্কেলার পণ্য

এই কোড গল্ফ সমস্যার অনুপ্রেরণা হ'ল গুগলের কোড জ্যাম প্রতিযোগিতা । সমস্যার পিছনে ভিত্তিটি হল, বিভিন্ন দৈর্ঘ্যের দুটি ভেক্টরের ইনপুট দেওয়া হলে, সর্বনিম্ন সম্ভাব্য স্কেলারের সন্ধান করুন। নিম্নলিখিত সূত্রটি ব্যবহার করে একটি স্কেলার পাওয়া যাবে:

x1 * y1 + x2 * y2 + ... + xn * yn

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

আমাকে নিম্নলিখিত ভেক্টরগুলির সাথে একটি উদাহরণ দেওয়ার অনুমতি দিন।

ইনপুট

3
1 3 -5
-2 4 1

আউটপুট

-25

লাইনের প্রথম পূর্ণসংখ্যা প্রতিটি ভেক্টরে সংখ্যার সংখ্যা, এন, উপস্থাপন করে। এই ক্ষেত্রে, প্রতিটি ভেক্টরে আমাদের তিনটি সংখ্যা রয়েছে।

প্রতিটি পরীক্ষার ক্ষেত্রে এন সংখ্যাটি পৃথক হতে পারে তবে সর্বদা দুটি ভেক্টর থাকবে।

উদাহরণ ইনপুটটিতে, সর্বনিম্ন স্কেলার পণ্যটি -২৫ হবে be

(-5 * 4) + (1 * 1) + (3 * -2) = 25

বিধি

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

ইঙ্গিত: আপনার সমস্যাটি সংক্ষিপ্ততর না করে আপনার এই সমস্যাটিকে জোর করে চাপিয়ে দেওয়ার দরকার নেই। ন্যূনতম বিস্তৃত স্কেলারের সন্ধানের জন্য একটি নির্দিষ্ট পদ্ধতি জড়িত রয়েছে :)।


আমি সত্যিই কারওর জন্য লুণ্ঠন করতে চাই না, সুতরাং উত্তরটি না জানা থাকলে এটি খুলবেন না। এটি এত মজার বিষয় এটি সুপরিচিত। en.m.wikedia.org/wiki/Rearrangement_inequality
গর্বিত হাসেলেলার

উত্তর:


8

জেলি, 6 বাইট

ṢṚ×Ṣ}S

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

নিষ্ঠুর শক্তি ব্যবহার সমান সংক্ষিপ্ত:

Œ!×S€Ṃ

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

ṢṚ×Ṣ}S  Main link. Arguments: u (vector), v (vector)

Ṣ       Sort the components of u.
 Ṛ      Reverse.
   Ṣ}   Sort the components of v.
  ×     Multiply the results, element by element.
     S  Compute the sum of the products.


5

এপিএল, 15 বাইট

{+/⍺[⍒⍺]×⍵[⍋⍵]}

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

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



4

গণিত, 30 17 বাইট

মারফি দ্বারা -13 বাইট

Sort@#.-Sort@-#2&

ফাংশন, ইনপুটটি ভেক্টর 1 (তালিকা), ভেক্টর 2 (তালিকা) বেশ কয়েকটি সংশোধনী:

Plus@@(Sort@#*Reverse@Sort@#2)&(*me*)
Total[Sort@#*Reverse@Sort@#2]& 
Sort@#.Reverse@Sort@#2&        (*alephalpha*)
Sort@#.Sort[#2,#>#2&]&         (*murphy*)
Sort@#.SortBy[#2,-#&]          (*me*)
Sort@#.-Sort@-#2&              (*murphy*)

চতুর সমাধান!
বেসম্যান 101

2
Sort@#.Reverse@Sort@#2&
আলেফাল্ফ 12'16

Sort@#.Sort[#2,#>#2&]&
মার্ফি

1
Sort@#.-Sort@-#2&
মার্ফি

বা আপনার সমাধানের জন্য 1,Sort@#.SortBy[#2,-#&]
ক্যালকুলেটরফলাইন


2

জুলিয়া, 32 25 বাইট

x->y->-sort(-x)⋅sort(y)

এটি একটি বেনাম ফাংশন যা দুটি অ্যারে গ্রহণ করে এবং পূর্ণসংখ্যা ফেরত দেয়। এটিকে কল করতে এটি এটিকে একটি ভেরিয়েবলের জন্য নির্ধারণ করুন এবং করুনf(x)(y)

ইনপুট এক্স এবং ওয়াইয়ের জন্য , আমরা সহজেই x এর ডট প্রোডাক্টটি Y এর সাথে বাছাই করে বিপরীত ক্রমে সাজান। আমরা সমস্ত মানকে অগ্রাহ্য করে, বাছাই করে, আবার আবার উপেক্ষা করে বিপরীত সাজানো ক্রমে এক্স পাই ।

ডেনিসের জন্য 7 টি বাইট সংরক্ষণ করা!


2

জাভাস্ক্রিপ্ট ES6, 69 বাইট

a=>b=>a.sort((x,y)=>x-y).map((x,y)=>i+=b.sort((x,y)=>y-x)[y]*x,i=0)|i

বাহ, এটি অনেক দীর্ঘ।


আমি মনে করি বাছাই ফাংশনটি পুনরায় ব্যবহার করার চেষ্টা করতে আপনার ব্যয় হয় 3 বাইট।
নীল

আমি আরও গল্ফিং করেছি উত্তম?
মামা ফান রোল

আপনি সম্ভবত এর |iপরিবর্তে একটি বাইট সংরক্ষণ করতে পারেন&&i
ETH প্রোডাকশনগুলি

থেক্স @ ইটি প্রডাকশনগুলি
মামা ফান রোল

হ্যাঁ, আমি সেটাই ভাবছিলাম।
নীল



1

পাইথন, 139 বাইট

def mdp(n, a, b):
    a = list(reversed(sorted(a)))
    b = sorted(b)
    res = sum([a[i] * b[i] for i in range(len(a))])
    return res

1
সমান পাশের স্থানগুলি সরিয়ে আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন, উদাহরণস্বরূপ (2 বাইট সংরক্ষণিত) b = sorted(b)রূপান্তরিত হয় b=sorted(b)। আপনি একই সাথে সেমিকোলন দিয়ে আলাদা করে একই লাইনে একাধিক বক্তব্য রাখতে পারেন, উদাহরণস্বরূপa=list(reversed(sorted(a)));b=sorted(b);res=0
চার্রেডগ্রাস

@ চারেডগ্রাস আমি এখানে নতুন। প্রতিটি সম্ভাব্য বাইট সংরক্ষণ করার দরকার কী? আমি এটিকে পাঠযোগ্য করে তোলার চেষ্টা করছিলাম।
বিদ্রোহী

পিপিসিজিতে আপনাকে স্বাগতম! এই প্রশ্নটি একটি কোড-গল্ফের প্রতিযোগিতা যেখানে লক্ষ্যটি সম্ভব কম বাইটে চ্যালেঞ্জটি সম্পন্ন করার জন্য কোড লেখা, যার অর্থ সাধারণত কম পঠনযোগ্য কোড।
charredgrass

@ চারেডগ্রাস পেয়েছে!
বিদ্রোহী

2
অনেক খাটো: lambda a,b,s=sorted:sum(x*y for x,y in zip(s(a)[::-1],s(b)))। আমাদের নামকরণের জন্য ফাংশন সাবমিশনের প্রয়োজন নেই (সুতরাং একটি নামহীন ল্যাম্বদা বৈধ), এবং nপ্যারামিটারটি অপ্রয়োজনীয় (অন্যান্য অনেকগুলি জমা পুরোপুরি বাদ দেয়)।
মেগো

1

সি ++, 124 বাইট

#include<algorithm>
int m(int*a,int*b,int n){std::sort(a,a+n);std::sort(b,b+n);int r=0;while(--n>=0)r+=a[n]**b++;return r;}

ungolfed:

#include<algorithm>
int m(int*a,int*b,int n){
 std::sort(a,a+n);
 std::sort(b,b+n);
 int r=0;
 while(--n>=0)
  r+=a[n]*(*b++);
return r;
}

প্রথমে আমি std::greater<int>()বাছাইয়ের জন্য ব্যবহার করেছিলাম bতবে কেবলমাত্র ক্রমটির ক্রমকে সামনের দিকে ফেরানো সহজ।


1

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

import Data.List
v?u=sum$zipWith(*)(sort v)$reverse$sort u

0

ফিরে , 29 বাইট

[{␆␃}\{␆}␄␅[¤¥][×␌]#}␁[¤][+]#]

Try it here.

যে কোনও প্রতিস্থাপন করুন ␆␃␄␇যেকোনকে তাদের অপ্রিনিতযোগ্য প্রতিরূপ দিয়ে ।

বেনামে ল্যাম্বদা যা স্ট্যাক 2-এর ফলাফল ছেড়ে দেয়। ব্যবহার:

""{1 3 0 5-}""{0 2- 4 1}[{␆␃}\{␆}␄␅[¤¥][×␌]#}␁[¤][+]#]!

ব্যাখ্যা

[                                 ]  lambda
 {␆␃}                              sort and reverse first stack
       \{␆}                         sort second stack
            ␄␅                     transpose and flatten
               [  ][  ]#             while loop
                ¤¥                     check if 2 items exist in stack
                    ×                  if so, multiply top 2 items
                     ␌                 and push to stack2
                        }␁          switch to stack2
                           [¤][+]#   sum stack2

0

জে, 14 বাইট

+/@(*|.)&(/:~)

অন্যদের মতো একই নীতি ব্যবহার করে।

ব্যাখ্যা

+/@(*|.)&(/:~)  Input: x on LHS and y on RHS
        &(/:~)  Sort both x and y
     |.         Reverse the sorted y
    *           Multiply the sorted x and reversed sorted y elementwise
+/@             Reduce the products using addition and return
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.