শাখা ছাড়াই সর্বোচ্চ 3 নম্বর সন্ধান করুন


17

এবার আপনার লক্ষ্যটির চারপাশে শাখা বা লুপগুলি ব্যবহার না করে সর্বোচ্চ 3 টি পূর্ণসংখ্যা (- (2 ^ 31) থেকে 2 ^ 31 - 1 বাইনারি 2 এর পরিপূরকটিতে) সন্ধান করা।

আপনি কেবল ব্যবহারের অনুমতিপ্রাপ্ত

  • বৈষম্য / সমতা ( ==, >, >=, <, <=, !=) হিসাবে এই COUNT টি 2 টোকেন।

  • পাটিগণিত ( +, -, *, /)

  • লজিকাল অপারেটর ( !না, &&এবং, || বা)

  • Bitwise অপারেটরদের ( ~না, &এবং, |বা, ^XOR, <<, >>, >>>গাণিতিক এবং লজিক্যাল বাম এবং ডান বদল আনতে)

  • ধ্রুবক। 0 টোকেন

  • পরিবর্তনশীল অ্যাসাইনমেন্ট 0 টোকেন

যেমন ইনপুট 3 ভেরিয়েবল a, bএবং c। সর্বাধিক সংখ্যা আউটপুট।

স্ট্যান্ডার্ড পারমাণবিক কোড-গল্ফ বিধি প্রযোজ্য। আপনার যদি কোনও প্রশ্ন থাকে তবে তাদের মন্তব্যগুলিতে রেখে দিন। একটি বিশেষ টোকেন উপরের যে কোনও বিশেষ নিয়ম সহ।


একটি অতিরিক্ত ফাংশন সংজ্ঞায়িত সম্পর্কে? যদি এটি অনুমোদিত হয় তবে এটি কত টোকেন হিসাবে গণনা করবে?
সুস্পষ্ট

@voidpigeon আপনার কেবলমাত্র একটি ফাংশন রাখার অনুমতি রয়েছে, এটি 3 টি ইনপুট এবং আউটপুট নেয়।
qwr

1
প্রথম নজরে আমি ভেবেছিলাম, " আমাদের এটি আগেও ছিল " , তবে আমি মনে করি 2 টি দামের তুলনাকারীরা গেমটি কিছুটা পরিবর্তন করে changes
প্রিমো

@ প্রিমো আমি বিশেষত 3 ইনপুট চেয়েছি কারণ এটি আসলে কিছু আকর্ষণীয় উন্নতির জন্য অনুমতি দেয়
qwr

2
আমরা কি অন্তর্নির্মিত ফাংশন ব্যবহার করতে পারি?
নিবন্ধিত ব্যবহারকারী

উত্তর:


7

জাভাস্ক্রিপ্ট 10 টোকেন

বিট ফিডলিংয়ের পরিবর্তে <এবং * ব্যবহার করে সম্পাদনা করুন - মন্তব্যগুলিতে উল্লিখিত হিসাবে, বিটস অপারেশনগুলি সীমার সীমা (30 বিটেরও বেশি) ইনপুট জন্য ব্যর্থ হতে পারে

function Max(x,y,z)
{
  var d=y-x;
  x=y-d*(d<0);
  d=x-z;
  return x-d*(d<0);
}

সি 8 টোকেন

ভাষার অজ্ঞেয়গত ভাষায়, ভাষার মতো যে কোনও সি করবে। পছন্দসই হওয়ার জন্য, স্ট্যান্ডার্ড সি তে এটি বহনযোগ্য নয় কারণ ডান শিফটটি সাইনটি প্রসারিত করতে পারে না (তবে সাধারণ বাস্তবায়নে এটি হয়)।

সি (এবং সি ++, সি #, এবং জাভাতে আমি মনে করি) বড় অস্থায়ী মানগুলি ব্যবহার করে আমরা সহজেই ওভারফ্লো সমস্যাগুলি পরিচালনা করতে পারি:

int Max(int x, int y, int z)
{
    long long X = x;
    long long Y = y;
    long long Z = z;
    long long D = Y-X;
    X=Y-((D>>63)&D);
    D=X-Z;
    return (int) (X-((D>>63)&D));
}

1
আমি বাছাই করছি, তবে সি intকোড ব্যবহার করে আপনার কোড x = 2147483647, y = -2, z = 0 এর জন্য কাজ করে না। আপনি যদি এটি পরিবর্তন করতে চান তবে আপনার পছন্দ
qwr

10

জাভাস্ক্রিপ্ট

6 টোকেন

function maxOf3(a, b, c) {
    (b>a) && (a=b);
    (c>a) && (a=c);
    return a;
}

6
+1 আমি শর্টকাট মূল্যায়নকে এক প্রকার শাখাগুলি হিসাবে দেখছি তবে এটি নিয়মে নিষিদ্ধ নয়
edc65

11
আমি এটিকে শাখা হিসাবে বিবেচনা করব, হাহা
জাস্টহেল্ফ

2
@ edc65 এটি। মঞ্জুরি দিচ্ছিল &&এবং ||সম্ভবত এটি ছিল একটি তদারকি, যা শোষণের পরিবর্তে নির্দেশ করা উচিত।
primo

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

2
আমি এটা করা উচিত 4 টোকেন অর্থাৎ 2 &&, <এবং >=একটি কাজ এবং 0 গন্য হিসাবে ব্যবহার করা হয়
ক্লাইড লোবো

6

সি: 10 টোকেন

int max(int a, int b, int c)
{
    a += (b > a) * (b - a);
    a += (c > a) * (c - a);
    return a;
}

@ ওপেনক্র্লোজের উত্তর দ্বারা অনুপ্রাণিত হয়ে সি তে রূপান্তরিত হয়েছে এবং শর্ট সার্কিট বুলিয়ান অপারেটরদের চেয়ে গুণকে ব্যবহার করে শাখাবিহীন করেছে।



2

বহু ভাষা (পাইথন) (10 টোকেন)

def max3(x,y,z):
    m = x ^ ((x ^ y) & -(x < y))
    return m ^ ((m ^ z) & -(m < z))

print max3(-1,-2,-3) # -1
print max3(-1,2,10) # 10

https://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax

ওহ, কেউ ইতিমধ্যে এটি পোস্ট করেছেন :)


আপনাকে নতুন ফাংশন তৈরি করার অনুমতি নেই
qwr

আহ ঠিক আছে! মন্তব্যগুলি
পড়েনি

@ কিউইউআর আমি এটি পেলাম না, আপনি বলেছেন: You are only allowed to have one function, the one that takes the 3 inputs and outputs.ঠিক এই উত্তরটি এটাই পেয়েছে। 2 টি প্রিন্ট কেবল পরীক্ষার কেস
ক্রંચার

1
@ ক্র্যাঞ্চার আমি উত্তরটি সম্পাদন করেছি আমি max2(max2(x,y),z)প্রথম দিকে :)
মার্ডক্সক্স

নিবন্ধন করুন ভাল +1
ক্রাঙ্কার

1

সি ++ 11: 15 টোকেন

শুধুমাত্র গাণিতিক এবং বিটওয়াইজ অপারেটরগুলি ব্যবহার করা (যেহেতু সমতা এবং বুলিয়ান লজিক অপারেটরগুলি এটি খুব সহজ করে তোলে) ...

#include <iostream>

auto max(int32_t a, int32_t b, int32_t c)->int32_t {
  return c - ((c - (a - ((a - b) & (a - b) >> 31))) & (c - (a - ((a - b) & (a - b) >> 31))) >> 31);
}

auto main()->int {
  // test harness
  std::cout << max(9, 38, 7) << std::endl;
  return EXIT_SUCCESS;
}

বড় সংখ্যার জন্য ব্যর্থ (> ২ ^ 30), মন্তব্য কোডগলফ.স্ট্যাকেক্সচেঞ্জ
প্রশ্নগুলি

আমার কাছে দুর্দান্ত দেখাচ্ছে: আদর্শ one.com/pEsvG3
দাঙ্গা

আপনি মনোযোগ সহকারে মন্তব্যটি পড়েছেন? আমি মনে করি 2 বিলিয়ন মিলিয়ন 0 এর চেয়ে বেশি [ আদর্শে / ভিএলসিএনকি 9 ]
edc65

আহ আমি দেখি; হ্যাঁ আপনার অন্যান্য মন্তব্যে এই সংখ্যাগুলির সাথে সমস্যা আছে, যখন কোনও 0 জড়িত থাকে। তবে আপনি যেমন বলেছিলেন 2 ^ 30 এর জন্য নয়। ideone.com/LicmXa
দাঙ্গা

এটি 0 জড়িত নয়। সমস্যাটি বড় সংখ্যা এবং ওভারফ্লো, সর্বাধিক (2000000000, -200000000, 1111111111) চেষ্টা করুন।
edc65

0

জে (প্রতিযোগিতা নয়)

আমি কেবল ভাবছিলাম যে জেলের সমাধানটি কেমন হবে। এটি একটি ,এবং #যদিও ব্যবহার করে , তাই এটি প্রতিযোগিতা হবে না।

((a<b),(b<c),(c<a))#b,c,a

এটি প্রতিযোগিতা করবে, তবে 9 টোকেন সহ অনেক দীর্ঘ:

(b*a<:b)+(c*b<c)+(a*c<a)

0

আমাদের নিম্নলিখিত অনুমান আছে:

  • max (a; b) = (a + b + | ab |) / 2

  • সর্বোচ্চ (ক; p; গ) = সর্বোচ্চ (সর্বোচ্চ (ক; p); গ)

  • অ্যাবস (এ) = (এ + (এ >> ৩১)) ^ (একটি >> ৩১)

আমরা সিডো-কোড ব্যবহার করতে পারি:

ফাংশন সর্বাধিক (ক, খ, সি)

{

আউট 1 = ((এ + বি) + (((অব)) + ((অব) >> ৩১)) ^ ((অব)) ৩১))) বিভাজন ২

আউট 2 = ((আউট 1 + সি) + (((আউট 1-সি) + ((আউট 1-সি) >> 31%)) ^ ((আউট 1-সি) >> 31 শতাংশ)) বিভাজন 2

out2

}


দয়া করে প্রকৃত কোডটি লিখুন এবং আপনার উত্তরে টোকেনের গণনা সরবরাহ করুন।
প্রোগ্রামফক্স

0

সি # (দ্বিতীয় চেষ্টা)

আমি এটি পেয়েছি ... কোন সংহত ফাংশন ...

তবে এটি কি অন্য সংহত ডেটাটাইপ বা কেবল প্লেইন ইনট ব্যবহারের অনুমতি রয়েছে? অনুমতি পেলে আমি প্রস্তাব দেব:

int foo2(int a, int b, int c)
{
   var x = new SortedList<int,int>();

   x[a] = 1;
   x[b] = 1;
   x[c] = 1;

   return x.Keys[2];
}

0

জাভাস্ক্রিপ্ট 8 টোকেন

যদিও @ ওপেনক্র্লোজের উত্তরের অনুরূপ, আমি কার্যত লজিকাল অপারেটরগুলি অ্যাসাইনমেন্টের জন্যই ব্যবহার করি।

function max( a, b, c ) {
    x=( a > b && a) || b;
    return ( x > c && x ) || c;
}

বেহালা


0

আর (10 টোকেন)

function max(a, b, c) {
  max <- a
  max <- max + (b - max) * (b > max)
  max <- max + (c - max) * (c > max)
  return(max)
}

0

ব্রেইনফাক (প্রতিযোগিতা নয়)

>,[-<+>>>+<<]>,[-<+>>>+<<]>[>[-<->>]<<]<[-]>[-]>[-]<<<[->>>>+<<<<]>>>>[-<+>>>+<<]>,[-<+>>>+<<]>[>[-<->>]<<]<<

0

টিআইএস -100, 8 টি অপারেশন

MOV ACC UP #A
SUB UP     #B
SUB 999
ADD 999
ADD UP     #B
SUB UP     #C
SUB 999
ADD 999
ADD UP     #C
MOV ACC DOWN

সরবরাহকারী (ইউপি) কেবল এমওভিগুলি করেন তাই কোডে দেখানো হয়নি সম্ভবত 999 প্রান্তের খুব কাছাকাছি হলে কাজ করবে না


-1

ভিবিএ (6 টোকেন)

 Function max3(a As Integer, b As Integer, c As Integer)
 i = IIf(a >= b And a >= c, a, IIf(b >= c, b, c))
 max3 = i
 End Function  

নিশ্চিত না যে এটি শাখা করছে না।


এটি শাখা হয়, কেবল ইনলাইন। বিশেষত, সর্বব্যাপী টার্নারি অপারেটর (এটি মূলত এটি) অনুমোদিত ক্রিয়াকলাপগুলির মধ্যে একটি নয়।
টমসডিং

ধন্যবাদ @ টমসমিডিং, আমি কি জিজ্ঞাসা করতে পারি যে সর্বব্যাপী টার্নারি অপারেটরটি (এটি আমার কোডে আইআইএফ ()?)
অ্যালেক্স

হ্যাঁ দুঃখিত, সর্বব্যাপী দিয়ে আমি বোঝাতে চেয়েছিলাম যে এটি প্রতিটি ভাষাতে উপস্থিত রয়েছে, এবং ত্রিশটি অপারেটরটি আপনার IIf, ইনলাইন-যদি। বেশিরভাগ ভাষায় এটি উদাহরণস্বরূপ a>=b ? a : b। এটা প্রকৃতপক্ষে শাখা হয়।
টমসডিং

-1

জাভাস্ক্রিপ্ট: 4 টোকেন ("অ্যাসাইনমেন্ট" এর বিস্তৃত ব্যাখ্যার উপর ভিত্তি করে!)

স্পষ্টতই আমার স্কোর 4 টি অত্যন্ত উদার / হালকা!

এই স্কোর এ পৌঁছানোর জন্য আমি "অ্যাসাইনমেন্ট" ধরে নিয়েছি (প্রশ্নের 0 টোকেনের মূল্য) এর মধ্যে অ্যাডিটিভ অ্যাসাইনমেন্ট, সাবটেক্টিভ অ্যাসাইনমেন্ট, গুণক অ্যাসাইনমেন্ট এবং এক্সওআর-ইনিং ( ^=) অ্যাসাইনমেন্টের মতো বিষয় রয়েছে

function f(a, b, c) {
  d = a;
  d -= b;
  d = d >= 0;

  a *= d;  //a = a if (a>=b), else 0
  d ^= true; //invert d
  b *= d;  //b = b if (b<a), else 0

  a += b;  //a is now max(a,b)

  d = a;
  d -= c;
  d = d >= 0;

  a *= d;  //a = a if (a>=c), else 0
  d ^= true; //invert d
  c *= d;  //c = c if (c<a), else 0
  a += c;  //a is now max(max(a,b),c)

  return a;
}

যদি সেই কাজগুলি আসলে স্কোর গণনা করে 14 :)


কারণ d -= bআসলে একইরূপে d = d - b, আমি বলব যে আপনি গাণিতিক ব্যবহার করেন এবং আপনার এটি একটি টোকেন হিসাবে গণনা করা উচিত।
প্রোগ্রামফক্স

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