আমাকে একটি সর্বনিম্ন যাদু যোগ করুন


27

এই চ্যালেঞ্জকে ছোট রাখছি Keep

আপনাকে 4 নম্বর দেওয়া হয়েছে: পি 1, পি 2, পি 3 এবং পি 4।

সংখ্যার ম্যাজিক যোগফলটি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়েছে:

magic_sum = |p1 - p2| + |p2 - p3| + |p3 - p4| + |p4 - p1|

আপনাকে কেবল উপরের পূর্ণসংখ্যার মানগুলি (পি 1, পি 2, পি 3 বা পি 4) পরিবর্তনের অনুমতি দেওয়া হয়েছে। আপনাকে মানটি এমন পরিবর্তন করতে হবে যে মানগুলির যাদু योग তার সর্বনিম্ন মান অর্জন করে।

উদাহরণ স্বরূপ:

p1, p2, p3, p4 = 17, -6, 15, 33. এই ক্ষেত্রে ম্যাজিক রাশিটির মান 78 হয় 78

আপনি এখানে -6 এখানে 16 এ পরিবর্তন করতে পারবেন এবং যাদুবিদ্যার যোগফলের মান 36 হবে যা ন্যূনতম প্রাপ্তিযোগ্য মান।

মনে রাখবেন যে সংখ্যাগুলি ইতিবাচক বা নেতিবাচক পূর্ণসংখ্যার হতে পারে।

এটি কোড-গল্ফ, তাই কোড জিততে কমপক্ষে বাইট। একটি বিনোদনমূলক ভাষার উপর ব্যবহারিক ভাষা ব্যবহারের জন্য ব্রাউন পয়েন্টগুলি। চতুর্থ আপনার সাথে থাকুক।

পুনরাবৃত্তি করতে:

নমুনা 1

ইনপুট ঘ

17 -6 15 33

আউটপুট 1

36

ব্যাখ্যা ঘ

-6 টি 16 দ্বারা প্রতিস্থাপন করা যেতে পারে এবং এটি আমাদের সম্ভাব্য ন্যূনতম অর্জনযোগ্য যাদুর যোগ দেয়।

নমুনা 2

ইনপুট 2

10 10 10 10

আউটপুট 2

0 or 2

হয় গ্রহণযোগ্য

ব্যাখ্যা ২

সর্বনিম্ন প্রাপ্য ম্যাজিক যোগফল 0 হয় যেহেতু 4 ধনাত্মক পূর্ণসংখ্যার সর্বনিম্ন যোগফল 0 হয়, তবে কোনও সংখ্যার পরিবর্তন করতে হয়, তবে 10 এর দশকের একটিকে 9 এ পরিবর্তন করা যেতে পারে এবং এভাবে আউটপুট 2 পাওয়া যায়।

নমুনা 3

ইনপুট 3

1 2 3 4

আউটপুট 3

4

ব্যাখ্যা 3

ইনপুট নিজেই এর যাদু যোগ হিসাবে 6 উপার্জন করে। 4 থেকে 1 পরিবর্তন করে সর্বনিম্ন যাদু যোগফল পাওয়া যায় যা 4 হয়।


10
+1, তবে আরও উদাহরণ দিয়ে করতে পারে।
জোনাথন অ্যালান

2
একটি সম্পূর্ণরূপে কাজের উদাহরণ এবং আরও কয়েকটি পরীক্ষার কেস এবং এটি +1আমার কাছ থেকে একটি ।
শেগি

@ শেগি সম্পন্ন হয়েছে আমার +1 কোথায়? : পি
কুইশোর রায়

1
@ কোয়েশোররোয় পরিবর্তন না করে কি 3 কে 6 এর পরীক্ষা করবে না?
wizzwizz4

@ wizzwizz4 | 1 - 2 | + | 2 - 3 | + | 3 - 4 | + | 4 - 1 | = 1 + 1 + 1 + 3 = 6। আপনি সঠিক. সম্পাদনা করেছেন।
কুইশোর রায়

উত্তর:



20

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

a,b,c,d=sorted(input())
print min(c-a,d-b)*2

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

প্রকারের হিসাবে ইনপুট a,b,c,d,ক্রম আরোহী, ছোট লাগে c-aএবং d-b, এবং এটি দ্বিগুণ। কেন এই কাজ করে?

প্রথম, নোট করুন যে যখন আমরা একটি উপাদানকে দূরত্বের মোট চক্রাকার যোগকে সর্বাধিক করে তোলার জন্য পরিবর্তন করি তখন অনুকূল (বা অনুকূলের জন্য বাঁধা) এটি প্রতিবেশীর সমান হিসাবে পরিবর্তন করা যেমন 17, -6, 15, 33 -> 17, 17, 15, 33। এর কারণ এটির বাম এবং ডান ঘূর্ণি প্রতিবেশীদের নতুন মোট দূরত্ব অন্তত সেই প্রতিবেশীদের মধ্যে দূরত্ব, সুতরাং এগুলি সমান করে তোলা আমাদের পক্ষে সবচেয়ে ভাল best

এখন, সংখ্যার দুটি সংলগ্ন অনুলিপিগুলির মধ্যে একটি মুছলে একই চক্রাকার দূরত্বের যোগফল পাওয়া যায়। উদাহরণস্বরূপ, এটি হল 17, 15, 33দূরত্ব দেওয়া 2 + 18 + 16। সুতরাং চারটি সংখ্যার একটির পরিবর্তে এটি কেবল তিনটি সংখ্যা রেখে এটি মুছে ফেলার সমান এবং তাদের চক্রীয় দূরত্বের যোগফল ব্যবহার করে।

লক্ষ্য করুন যে 3 টি সংখ্যার সাথে, বৃহত্তম দূরত্বটি হল দুটি ছোট সংখ্যার যোগফল। এটি হ'ল কারণ যদি আমরা সংখ্যাগুলি বাছাই করি a ≤ b ≤ cতবে |a - c| = |a - b| + |b - c|। অন্য কথায়, আমরা মাঝারি সংখ্যাটিকে পিট স্টপ হিসাবে একবারের মধ্য দিয়ে দুটি বার বৃহত্তম এবং ক্ষুদ্রতম সংখ্যার মধ্যে ভ্রমণ করি। সুতরাং, তিনটি দূরত্বের যোগফল ন্যূনতম এবং সর্বাধিকের মধ্যে দূরত্বের দ্বিগুণ, তাই (c-a)*2

সুতরাং, প্রশ্নটি হ'ল আমরা যে সংখ্যাটি মুছব তা নূন্যতম এবং সর্বোচ্চ তিনটি সংখ্যার মধ্যে সবচেয়ে কম দূরত্ব পেতে থাকবে। স্পষ্টতই আমরা সংখ্যার মধ্যে সবচেয়ে ছোট বা বৃহত্তম মুছুন। a, b, c, dবাছাই করা ক্রমে তাদের কল করা , aপাতা মুছে ফেলা d - bএবং dপাতাগুলি মুছে ফেলা c - aএবং চূড়ান্ত ফলাফল যা ছোট তার দ্বিগুণ।


এখানে একটি পরীক্ষার কেস আমাকে সাহায্য করুন। যদি জাদুটির যোগফল ইতিমধ্যে 0 হয় তবে এটি সর্বনিম্ন প্রাপ্ত সংখ্যা। সেক্ষেত্রে উত্তরটি 0 হওয়া উচিত? অথবা পরবর্তী সর্বনিম্ন সংখ্যা। ইনপুটটি অন্তর্ভুক্ত করুন [10,10,10,10], যাদুবিদ্যার যোগফল 0 হয় দ্বিতীয় সর্বনিম্ন সম্ভাব্য 2 me আপনি কী ভাবেন তা আমাকে জানান।
কুইশোর রায়

আমি আপনাকে যা বলতে শুনেছি তা হ'ল আপনি কেবলমাত্র প্রদত্ত চারটি সংখ্যার ক্রমটি উপেক্ষা করতে পারেন (আপনার প্রথম পদক্ষেপটি সেগুলি সাজানোর জন্য)। তবে যদি আমরা এর মাধ্যমে পাঁচটি সংখ্যার জন্য জিজ্ঞাসা করেছিলাম এবং এখনও কেবল একটি নম্বর পরিবর্তনের অনুমতি দিয়েছি তবে কী হবে ? চার সংখ্যার কেসটি খুব সহজ বলে মনে হচ্ছে (কেবলমাত্র আপনার উত্তর দেখার পরে)। p1p5
জেপ্প স্টিগ নীলসন

@ কোয়েশোররোয় আমি আপনার যে কোনও একটির অনুমতি দেওয়ার সমাধানটি পছন্দ করি।
xnor

@ জেপ্পস্টিগনিয়েলসন হ্যাঁ, অর্ডারটি 4 নম্বরগুলির পক্ষে বিশেষত্বের বিষয় নয় এবং এটি ঘটে কারণ তিনটি সংখ্যা তৈরি করার জন্য একটি মুছে ফেলার পরে সমস্ত সংখ্যার চক্রাকারে সংলগ্ন হয়। পাঁচটি সংখ্যার সাথে এটি কাজ করবে না (আপনি অবশ্যই একটি উদাহরণ খুঁজে পেতে পারেন), এবং চ্যালেঞ্জটি খুব আলাদা হবে।
এক্সএনওর

আশা করি আমি দু'বার উপড়ে যেতে পারতাম। সুন্দর পর্যবেক্ষণ, ভাল ব্যাখ্যা।
জোনাহ

9

আর , 66 33 বাইট

function(x)2*min(diff(sort(x),2))

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

এক্সনোরের অ্যালগরিদম সহ অনেক সংক্ষিপ্ত (তাদের ব্যাখ্যা পড়ুন এবং তাদের পোস্টকে উচ্চারণ করুন !)।

পুরনো সংস্করণ:

আর , 66 বাইট

function(x,m=matrix(x,3,4))min(colSums(abs(diff(rbind(m,m[1,])))))

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

4 সংখ্যার ভেক্টর হিসাবে ইনপুট নেয়।

এটি কাজ করে কারণ নূন্যতমটি তার প্রতিবেশীর এক হিসাবে সমান হিসাবে একটি সংখ্যা সেট করে অর্জন করা যেতে পারে (এটি সর্বনিম্ন অর্জনের একমাত্র উপায় নয়)। এটি কেন সত্য তা দেখার জন্য, এমন একটি কনফিগারেশন সন্ধান করুন যা সর্বনিম্ন অর্জন করে; বলুন আমরা পরিবর্তন । যে কোনও মান যেমন সমান পরিমাণ দেবে ( ধ্রুবক থাকে), তাই আমরা বেছে পারি ।p2p2p1p2p3|p1p2|+|p2p3|p2=p1

আমরা কোন নম্বরটি পরিবর্তন করব তা বেছে নেওয়ার 4 টি উপায় রয়েছে; এগুলির প্রত্যেকের জন্য, আমাদের কেবলমাত্র 3 টি সম্পূর্ণ পার্থক্যগুলির যোগফল গণনা করতে হবে।

কোডটি ম্যাট্রিক্সে মানগুলি সেট করে , যেখানে প্রতিটি কলাম 4 সংখ্যার 3 আকারের একটি উপসেট উপস্থাপন করে। প্রথম সারিটি একটি চতুর্থ সারিতে অনুলিপি করুন এবং পরম পার্থক্য গণনা করুন, তারপরে কলামের সর্বনিম্নের সর্বনিম্ন অংশ নিন।3×4rbind


4

জেলি , 11 10 বাইট

I;SASƲ$-ƤṂ

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

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


3

জেলি , 8 বাইট

ṁ-Ƥ⁸IA§Ṃ

পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে একটি মোনাডিক লিঙ্ক * যা পূর্ণসংখ্যা দেয়

* যেকোন সংখ্যা এত দীর্ঘ হতে পারে যেহেতু 1 এর বেশি রয়েছে; চারপাশে মোড়ানো প্রতিবেশীদের পার্থক্যের সংমিশ্রণ একই স্টাইলের যাদু সূত্র ব্যবহার করে।

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

কিভাবে?

ṁ-Ƥ⁸IA§Ṃ - Link: list of integers, X       e.g. [17,-6,15,33]
 -Ƥ      - for overlapping "outfixes" of length length(X)-1:
         -                                      [[-6,15,33],[17,15,33],[17,-6,33],[17,-6,15]]
ṁ  ⁸     -   mould like X                       [[-6,15,33,-6],[17,15,33,17],[17,-6,33,17],[17,-6,15,17]]
    I    - incremental differences              [[21,18,-39],[-2,18,-16],[-23,39,-16],[-23,21,2]]
     A   - absolute (vectorises)                [[21,18,39],[2,18,16],[23,39,16],[23,21,2]]
      §  - sums                                 [78,36,78,46]
       Ṃ - minimum                              36

3

জাপট -Q , 11 বাইট

ñÍó ®r- ÑÃn

@ Xnor এর অ্যালগরিদম ব্যবহার করে, যা আমাকে 4 বাইট সংরক্ষণ করেছে।

@ শেগি ধন্যবাদ 5 বাইট সংরক্ষণ করা

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


মনে হচ্ছে ঠিকঠাক কাজ করছে, তবে কেন আপনি এটি ব্যাখ্যা করবেন?
কোনিশোর রায়

@ কুইশোররোয় একটি ব্যাখ্যা যুক্ত করেছেন
অজ্ঞতার

29 বাইট (আমার মনে হয় )
শেগি

@ শ্যাগগি যখন আমি আমার উত্তর আপডেট করেছিলাম, আমি ঘটনাক্রমে মানচিত্রের সাথে যোগফলটি কিছু গল্ফকে অবৈধ করে তুলেছিলাম, তবে অন্যরা ভাল
অজ্ঞতার

সুন্দরভাবে (আরও) গল্ফড :) আপনি ÃÃএকটি নতুন লাইন প্রতিস্থাপন করে আরও 1 টি বাইট সংরক্ষণ করতে পারেন ।
শেগি

3

জে , 24 20 18 17 বাইট

এক্সনোর অ্যালগরিদম ব্যবহার করে বিকল্প সংস্করণ:

2*[:<./2 2-/@$\:~

কিভাবে

2x2 ম্যাট্রিক্সের প্রথম সারি থেকে দ্বিতীয় সারির 2 *মিনিট দুটি [:<./বিয়োগ করে সাজানো ইনপুটটি [:-/আকার 2 2$দিয়ে তৈরি করা হয়েছে\:~

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

আসল উত্তর: জে , 24 বাইট

[:<./1(1#.2|@-/\],{.)\.]

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

নিক কেনেডি এর ধারণা ব্যবহার করে।

  • 1(...)\.] দৈর্ঘ্য 1 এর সমস্ত আউটফিক্সে পেরেনগুলিতে ক্রিয়াটি প্রয়োগ করুন (দৈর্ঘ্য n এর একটি আউটফিক্স n এর সাথে সংযুক্ত উপাদানগুলি সরানো একটি তালিকা, সুতরাং এটি 1 এলম সরানো সহ প্রতিটি সম্ভাব্য তালিকা তৈরি করে)
  • (1 #. 2 |@-/\ ] , {.)এটি ইনপুটটিতে প্রথম এলম সংযোজন করে ] , {.এবং |@-/দৈর্ঘ্যের 2 ইনফিক্সে অ্যাবিএস পার্থক্য প্রয়োগ করে 2 ...\এবং ফলাফলের সংক্ষিপ্তসার করে যাদু योगের গণনা করে 1 #.
  • [:<./ মিনিট ফেরত

2

05 এ বি 1 , 11 7 বাইট

@ এক্সনোর এর জেলি উত্তর পোর্ট ।
-4 বাইটস @ এমিগনা এবং @ গ্রিমিকে ধন্যবাদ ।

{2ô`αß·

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

7 বাইট বিকল্প যা কেবল 05AB1E এর উত্তরাধিকার সংস্করণে কাজ করে ( নতুন সংস্করণে এর আগে একটি প্রয়োজন হবে ¥):

{2ôø¥W·

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

ব্যাখ্যা:

{        # Sort the (implicit) input-list
         #  i.e. [17,-6,15,33] → [-6,15,17,33]
 2ô      # Split this list into parts of size 2
         #  → [[-6,15],[17,33]]
   `     # Push both separated to the stack
    α    # And take their absolute differences
         #  → [23,18]
     ß   # Pop and push the minimum
         #  → 18
      ·  # Double it (and output implicitly as result)
         #  → 36

{        # Sort the (implicit) input-list
         #  i.e. [17,-6,15,33] → [-6,15,17,33]
 2ô      # Split this list into parts of size 2
         #  → [[-6,15],[17,33]]
   ø     # Zip/transpose, swapping rows/columns
         #  → [[-6,17],[15,33]]
    ¥    # Get the deltas/forward differences of the inner lists
         #  → [[23],[18]]
     W   # Get the flattened minimum (without popping)
         #  → 18
      ·  # Double it (and output implicitly as result)
         #  → 36

1
উত্তরাধিকারে 7 বাইট: {2ôø¥W·বা 8 পুনর্লিখনের সাথে।
এমিগিনা

2
অ-উত্তরাধিকারে 7 বাইট:{2ô`αW·
গ্রিমি

এমিলিগান স্মার্ট, ধন্যবাদ!
কেভিন ক্রুইজসেন

@ গ্রিমিকেও ধন্যবাদ!
কেভিন ক্রুইজসেন

1

সি ++ (জিসিসি)

পুরো প্রোগ্রাম: 138 বাইট

#include<iostream>
#include<regex>
using namespace std;int main(){int a[4];for(int&b:a)cin>>b;sort(a,a+4);cout<<min(a[2]-*a,a[3]-a[1])*2;}

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

মূল ফাংশন: 84 বাইট

#include<regex>
int m(int*a){std::sort(a,a+4);return std::min(a[2]-*a,a[3]-a[1])*2;}

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

এছাড়াও অ্যালগরিদম xnor ব্যবহার করে তার পাইথন 2 পোস্টে ব্যাখ্যা করা হয়েছে।


0

কাঠকয়লা , 20 বাইট

I⌊EEθΦθ⁻κμΣEι↔⁻λ§ι⊕μ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। দেখা যাচ্ছে আমি @ নিক কেনেডি এর ধারণাটি ব্যবহার করছি। ব্যাখ্যা:

   Eθ                   Map over input array
     Φθ                 Filter over input array where
       ⁻κμ              Outer and inner indices differ
  E                     Map over resulting list of lists
           Eι           Map over remaining values in list
                §ι⊕μ    Get the next value in the list
             ↔⁻λ        Compute the absolute difference with the current value
          Σ             Take the sum of absolute differences
 ⌊                      Take the minimum sum
I                       Cast to string and implicitly print

0

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

এক্সনরের আরও চতুর পদ্ধতিটি ব্যবহার করে :

a=>([a,b,c,d]=a.sort((a,b)=>a-b),b+c<a+d?c-a:d-b)*2

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


আসল উত্তর, 96 বাইট

4 টি সংখ্যার অ্যারে হিসাবে ইনপুট নেয়। সম্ভবত সংক্ষিপ্ততম পদ্ধতির নয়।

a=>a.map(m=x=>a.map((y,i)=>a[m=a.map(v=>s+=Math.abs(p-(p=v)),a[i]=x,p=a[3],s=0)|m<s?m:s,i]=y))|m

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



0

জাভা 8 , 235 বাইট

@ Xnor এর পাইথন উত্তর এবং অ্যালগরিদমের একটি বন্দর

import java.util.*;interface M{static void main(String[]A){Scanner I=new Scanner(System.in);int a[]={0,0,0,0};for(int i=0;i<4;a[i++]=I.nextInt());java.util.Arrays.sort(a);System.out.print(2*(a[2]-a[0]>a[3]-a[1]?a[3]-a[1]:a[2]-a[0]));}}

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

জাভা 10 , অপ্রমাণিত, 222 বাইট

জাভা 10 দিয়ে আমার স্ক্যানার ঘোষণার বাম দিকটি প্রতিস্থাপন করতে সক্ষম হওয়া উচিত var, যদিও আমি এটি অনলাইনে সংকলন করতে পারিনি এবং সুতরাং আমি এটি কেবল ট্রিভিয়া হিসাবে যুক্ত করতে পারি। দুঃখিত।

interface M{static void main(String[]A){var I=new java.util.Scanner(System.in);int a[]={0,0,0,0};for(int i=3;i<4;a[i++]=I.nextInt());java.util.Arrays.sort(a);System.out.print(2*(a[2]-a[0]>a[3]-a[1]?a[3]-a[1]:a[2]-a[0]));}}

1
আফাইক আপনার জমা দেওয়ার মতোই কেবল একটি কার্য করতে পারেন যেমন অন্যান্য উত্তরগুলি কীভাবে করেছে। আশেপাশের শ্রেণি, ইন্টারফেস ইত্যাদি অন্তর্ভুক্ত করার দরকার নেই
তাউ 18
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.