সর্বাধিক সংক্ষিপ্ত পণ্য


11

আমাদের পূর্ণসংখ্যার পি 1, ..., পিকে (অগত্যা স্বতন্ত্র নয়) এর একটি তালিকা দেওয়া আছে যেখানে প্রতিটিটির 1 এবং 9 এর মধ্যে মান রয়েছে lusive প্রতিটি পি 1, ..., পিকে ব্যবহার করে ঠিক একবার, আমরা সংখ্যার একটি নতুন তালিকা অর্জন করতে, অঙ্কের সংক্ষিপ্তকরণ গঠন করতে পারি; আমরা তখন এই নতুন তালিকার পণ্য আউটপুট। লক্ষ্যটি হ'ল এই পণ্যটির সর্বাধিক সংখ্যার অঙ্কের সেরা কনটেনটেশনগুলি বেছে নিয়ে।

উদাহরণস্বরূপ, আমাদের তালিকাটি দেওয়া হয়েছে: 2 3 2 (স্পেস দ্বারা পৃথক)। আমরা নিম্নলিখিত উপসংহার গঠন করতে পারি:

  • 2 3 2(এই কনটেন্টেশনের পণ্যটি হ'ল 12)
  • 23 2(পণ্য হ'ল 46)
  • 32 2(পণ্য হ'ল 64)
  • 22 3(পণ্য হ'ল 66)

যেহেতু বৃহত্তম পণ্য যা আমরা সংক্ষেপণ আকারে গঠন করতে পারি তা হ'ল 66, আমরা এটি আউটপুট।

নিয়মাবলী:

  • কমপক্ষে একটি গুণ হওয়া আবশ্যক (যেমন, আপনি কেবলমাত্র সমস্ত অঙ্ক এবং আউটপুট যেটিকে বোঝাতে পারবেন না)।
  • আপনি গুণ ছাড়া অন্য কোনও অপারেটর ব্যবহার করতে পারবেন না, বা প্রথম বন্ধনী ইত্যাদি cannotোকাতে পারবেন না
  • ধরে নিন যে প্রদত্ত পূর্ণসংখ্যার তালিকাটি ফাঁকা স্থান দ্বারা পৃথক করা হয় এবং সমস্ত পূর্ণসংখ্যার মান 1 এবং 9 এর মধ্যে থাকে।

সংক্ষিপ্ততম কোড (বাইটে) জয়!

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

ইনপুট: 1 2 3; আউটপুট: 63(যেমন, 21*3)

ইনপুট: 2 5 9; আউটপুট: 468( 52*9)

ইনপুট: 1 2 3 4; আউটপুট: 1312( 41*32)


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

হ্যাঁ, ভাল আছে।
রায়ান

প্রতিটি জোড় সংখ্যার জন্য, বি, পণ্যটি একটি * বি.আই সাধারণ কনট্যাকটেশন আবের চেয়ে কম (= a * 10 ^ (বি এর অঙ্কগুলি) + বি)। সুতরাং মাত্র 1 পণ্য (এটি বাধ্যতামূলক)। এটি যুক্ত করুন: কোডগল্ফ.স্ট্যাকেক্সেঞ্জারভিউ
কিউ

উত্তর:


8

সিজেম, 32 28 23 12 বাইট

0le!f{~*}:e>

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

আমাকে 16 টি পুরো বাইট সংরক্ষণ করতে সাহায্য করার জন্য @ ইউজার ২৩০১৩ ধন্যবাদ!

ধারণা

ইনপুট স্ট্রিং-এ অক্ষরগুলি ছড়িয়ে দেওয়া এটিকে স্পেস দ্বারা পৃথক করে পূর্ণসংখ্যায় (ধারাবাহিক অঙ্কের গোষ্ঠীগুলিতে) বিভক্ত করে। শূন্যের দিকে ধাক্কা দিয়ে এবং তারপরে অনুমতিপ্রাপ্ত ইনপুট স্ট্রিংটি মূল্যায়ন করে আমরা দুটি বা ততোধিক পূর্ণসংখ্যার ধাক্কা। শীর্ষস্থানীয় দুটিকে গুণিত করার ফলে ইনপুটটির ফলাফলটি হুবহু দুটি পূর্ণসংখ্যায় বিভক্ত হয় বা কিছু সাব-মানক মানের হয়।

কোড

 le!         e# Push all possible character permutations of the input.
0   f{  }    e# For each permutation:
             e#   Push 0, then the permuted string.
      ~      e#   Evaluate the string. Pushes one or more integers.
       *     e#   Multiply the two topmost integers.
         :e> e# Retrieve the greatest integer in the array.

1
l2%_,,1>\e!m*{~S+m<~*}%$W=
জিমি 23013

2
l2%S+e!{0\~*}%$W=
জিমি 23013

2

সিজেম, 36 35 বাইট

q~]_,([SL]m*{s},\e!\m*{z[s~]:*}%$W=

অনেকটাই অকপট. সমস্ত সম্ভাব্য সংমিশ্রণের উপরে আইট্রেট করে এবং তাদের পণ্য অনুসারে বাছাই করে। তারপরে বৃহত্তম আউটপুট দেয়। এই সমস্ত বিষয়টি মাথায় রেখে কমপক্ষে 1 গুণ থাকা উচিত।

শিগগিরই ব্যাখ্যা যুক্ত করবে।

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


1

জাভাস্ক্রিপ্ট (ES6) 125

সম্পাদন করা আমি মনে করি @ ওবরন এটি সঠিকভাবে পেয়েছে: "প্রতিটি নতুন অঙ্ক অবশ্যই সংক্ষিপ্ত সংখ্যায় সংযুক্ত করা উচিত"

আমি তার ধারণা চুরি করে এই উত্তরটি পরিবর্তন করব না। ES6- এ বাস্তবায়ন হবে 70 বাইট (সংখ্যার সাথে তুলনায় পরিবর্তিত চিহ্ন এবং স্ট্রিং নয়)

f=l=>l.split(' ').sort().reverse().map(d=>-a>-b?a+=d:b+=d,a=b='')||a*b

আমার সমাধান

f=l=>(i=>{for(r=0;a=b='',k=--i;r<a*b?r=a*b:0)for(v of l)k&1?a+=v:b+=v,k/=2})(1<<~-(l=l.split(' ').sort().reverse()).length)|r

আমি মন্তব্যে যেমন বলেছি, a, b, সংখ্যার প্রতিটি জোড়ার জন্য, পণ্য a * b সহজ কনটেনটেশন আব (= a * 10 ^ (b এর অঙ্কগুলি) + বি) এর চেয়ে কম। সুতরাং পণ্যগুলি এড়ানো এবং চূড়ান্তকরণ পছন্দ করা ভাল, তবে কমপক্ষে 1 টি পণ্যের অনুরোধ হিসাবে, আমাদের 2 টি সংখ্যা তৈরি করতে হবে এবং তাদের গুণ করতে হবে।

আমি সংখ্যাগুলির সম্ভাব্য সকল গোষ্ঠীকরণ চেষ্টা করি, বহুগুণে সংখ্যার জোড় তৈরি করি। প্রতিটি সংখ্যা হ্রাসমান ক্রমে অঙ্কগুলি গ্রহণ করে স্বতঃস্ফূর্তভাবে নির্মিত।

উদাহরণস্বরূপ, 4 সংখ্যার একটি তালিকা সহ, [1 2 3 4] - চেষ্টা করুন:

  • 4 * 321
  • 43 * 21
  • 42 * 31
  • 41 * 32
  • 432 * 1
  • 431 * 2
  • 421 * 3

এই মানটির সর্বাধিক হ'ল আমাদের প্রয়োজনীয় ফলাফল।

ন্যূনতম মান 0001 এবং সর্বাধিক মান 0111 সহ গ্রুপিংগুলি 4 বিটের বিটম্যাপে লুপিং গণনা করা যেতে পারে (এটি 1 << (4 -1) - 1)

এত গল্ফ হয় না

f=l=>{
  l = l.split(' '); // string to array
  l.sort().reverse(); // decreasing order 
  m = 1 << (l.length-1); starting value fro loop
  r = 0 
  // loop from m-1 down to 1
  for(i=m; --i; )
  {
    a = b = '';
    k = i;
    for(v of l) // divide the digits base on bits of i
    {
      k & 1 ? a+=v : b+=v;
      k /= 2;
    }
    if (r < a*b) r = a*b; // remember max value in r
  }
  return r
}

ফায়ারফক্সে নীচে স্নিপেট ব্যবহার করে পরীক্ষা করুন।

f=l=>(i=>{for(r=0;a=b='',k=--i;r<a*b?r=a*b:0)for(v of l)k&1?a+=v:b+=v,k/=2})(1<<~-(l=l.split(' ').sort().reverse()).length)|r

t=l=>(i=>{for(x=r='';a=b='',k=--i;r<a*b?(r=a*b,x=' = '+a+'x'+b):0)for(v of l)k&1?a+=v:b+=v,k/=2})
(1<<~-(l=l.split(' ').sort().reverse()).length)|| x

function go()
{
  R.value = f(I.value) // TEST AS IS
   + t(I.value) // Some more info
}

test=['1 2 3 4','1 2 3','2 5 9','8 9 8']

test.forEach(t => O.innerHTML = O.innerHTML + (t + ' -> ' + f(t)) + '\n')
Type your list: <input id=I><button onclick='go()'>-></button><input readonly id=R><br>
<pre id=O></pre>


1

পাইথন 3, 111 বাইট

এটি সম্ভবত আরও বেশি গল্ফযোগ্য। আমি তার চলমান সময়টি পছন্দ করি, যদিও (ও ( এন লগ এন ), তাই না?)।

l=sorted(map(int,input().split()),reverse=1);m=[0,0]
for x in l:i=m[0]>m[1];m[i]=m[i]*10+x
print(m[0]*m[1])

ব্যাখ্যার সাথে নিরবচ্ছিন্ন।

# edc65 has already explained that the optimal solution can be found applying a single
# multiplication. thus, given that
#     (10x + d)y > (10y + d)x
# where x, y are the two numbers and d is the next digit to insert, it follows that
#     y > x
# and thus each new digit must be concatenated to the smallest number. obviously, digits
# should be added in descending order.
l = sorted(map(int, input().split()), reverse=1)
m = [0,0]
for x in l:
    i = m[0] > m[1]
    m[i] = m[i]*10 + x
print(m[0] * m[1])

0

পাইথ, 25 বাইট

eSsmm*ss<dkss>dkr1ld.pcz)

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


0

আর, 164

function(n){l=length(n);a=sort(n,T);i=1;while(a[i]==a[i+1]&&i<l-2)i=i+2;a[c(i,i+1)]=a[c(i+1,i)];eval(parse(t=paste0(c(a[1:l%%2==1],"*",a[1:l%%2==0]),collapse='')))}

একটি পদ্ধতি হিসাবে আমি নিশ্চিত না এটি শক্তিশালী কিনা। আমি যে কেসগুলি পরীক্ষা করে দেখেছি প্রতিবার এটি কাজ করে। আমি এটি অপ্টিমাইজার সমাধানের বিরুদ্ধে পরীক্ষার চেষ্টা করেছি এবং এটির বিরুদ্ধেও এটি ঠিক আছে বলে মনে হয়। আমি ভুল প্রমাণিত হওয়ার চেয়েও বেশি প্রস্তুত আছি :) গল্ফ করার জন্য জায়গা রয়েছে তবে আমি প্রথমে পদ্ধতিটি সম্পর্কে কিছু প্রতিক্রিয়া প্রত্যাশা করছিলাম।

সাধারণ প্রক্রিয়াটি হ'ল:

  • অবতরণ ক্রমে তালিকাটি সাজান
  • পৃথক পৃথক প্রথম জোড় / এমনকি জোড় অদলবদল করুন
  • তালিকার সমতুল্য এবং বিজোড় আইটেমগুলিকে সংযুক্ত করুন
  • দুটি ফলাফলের পণ্য মূল্যায়ন করুন

কিছু মন্তব্য দিয়ে প্রসারিত

function(n){
    l=length(n);
    a=sort(n,T);    # sort descending order
    # Determine which pair to swap
    i=1;
    while(a[i]==a[i+1]&&i<l-2)i=i+2;
    a[c(i,i+1)]=a[c(i+1,i)];  # swap pair   
    # concatenate the even and odd indices items around a * and evaluate    
    eval(parse(t=paste0(c(a[1:l%%2==1],"*",a[1:l%%2==0]),collapse=''))) 
}

এবং কিছু পরীক্ষা চলে (g নামক একটি ফাংশন হিসাবে প্রয়োগ করা হয়)

> g(c(1,2,3))
[1] 63
> g(c(2,5,9))
[1] 468
> g(c(1,2,3,4))
[1] 1312
> g(c(1,2,3,5,5,5))
[1] 293132
> g(c(1,5,7,7,9,9))
[1] 946725
> g(c(1,7,8,9,9,9))
[1] 978117
> g(c(7,8,9,9,9))  #Test case provided edc65 to randomra
[1] 97713
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.