বহু-স্তরের বিপণন "পা" বিনিয়োগের নিয়ম


10

মাল্টি-লেভেল বিপণন সম্পর্কিত চ্যালেঞ্জ।

একজন পিয়ার পুরষ্কার পেতে চায়। সুতরাং এটি Nবিনিয়োগকারীদের আকর্ষণ করে ( N>=1), প্রতিটি আই-তম বিনিয়োগকারী বিনিয়োগ করে x[i]। যখন মোট অঙ্কের পরিমাণ প্রান্তিক ছাড়িয়ে যায় তখন একজন x[0]+x[1]+...+x[N-1] >= Tপিয়ারকে পুরস্কৃত করা যেতে পারে। তবে কেবলমাত্র যদি নিম্নলিখিত শর্তগুলি সন্তুষ্ট হয়:

  • ন্যূনতম পরিমাণ বিনিয়োগকারী এর চেয়ে বেশি হওয়া উচিত M, ( M<=N)
  • অন্তত একটি পূর্ণসংখ্যা জন্য k, যেখানে k>=Mএবং k<=Nযে কোনো kবিনিয়োগকারীদের অন্তত বিনিয়োগ করতে হবে T/kপ্রতিটি;

দেওয়া N, x[], T, Mআপনার পীরের পুরষ্কার তৈরি হয়েছে কিনা তা নির্ধারণ করা উচিত (বুলিয়ান ফলাফল, "হ্যাঁ" বা "না")। সংক্ষিপ্ততম কোড জিতেছে।

উদাহরণ:


N=5; M=3; T=10000, পিয়ারের পুরষ্কার তৈরি করতে নিম্নলিখিতগুলির মধ্যে একটি সন্তুষ্ট থাকতে হবে:

  • যে কোনও 3 কমপক্ষে 3334 বিনিয়োগ করেছেন
  • যে কোনও 4 বিনিয়োগ করেছেন কমপক্ষে 2500 প্রতিটি
  • সমস্ত 5 প্রতিটি কমপক্ষে 2000 বিনিয়োগ করেছেন

N=6; M=2; T=5000:

  • যে কোনও 2 কমপক্ষে 2500 বিনিয়োগ করেছেন
  • যে কোনও 3 কমপক্ষে 1667 বিনিয়োগ করেছেন
  • যে কোনও 4 কমপক্ষে 1250 বিনিয়োগ করেছেন
  • যে কোনও 5 প্রতিটি অন্তত 1000 বিনিয়োগ করেছেন
  • সমস্ত 6 কমপক্ষে 834 বিনিয়োগ করেছেন

জেনারালাইজড: কারও জন্য k, কোথায় k>=Mএবং k<=N:

  • কোন kএর Nবিনিয়োগকারীদের বিনিয়োগকৃত অন্তত T/kপ্রতিটি

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

বিন্যাস:

N, x[], T, M -> correct answer

6, [999, 999, 59, 0, 0, 0], 180, 3 -> 0
6, [0, 60, 0, 60, 60, 0], 180, 3 -> 1
6, [179, 89, 59, 44, 35, 29], 180, 3 -> 0
6, [179, 89, 59, 44, 35, 30], 180, 3 -> 1
6, [179, 89, 59, 44, 36, 29], 180, 3 -> 1
6, [179, 90, 59, 44, 35, 29], 180, 3 -> 0
6, [30, 30, 30, 30, 29, 30], 180, 3 -> 0
6, [30, 30, 30, 30, 30, 30], 180, 3 -> 1

1
@ জোনাথান অ্যালান নিশ্চিত, আপনার ভাষা যদি এটির অনুমতি দেয় তবে লেখার len(x)চেয়ে লেখাগুলি আরও কম হবে N। এটি তৈরি করা হয়েছে, কারণ সিটিতে গতিশীলভাবে বরাদ্দকৃত অ্যারের xজন্য কোনও সরাসরি len(x)কাজ নেই - সুতরাং আপনি সর্বদা দৈর্ঘ্যের হিসাবে উল্লেখ করতে পারেন N। সুবিধার জন্য, আপনি সমস্ত ইনপুট ডেটা N, x[], T, Mকিছু বাহ্যিকভাবে সংজ্ঞায়িত ধ্রুবক হিসাবে বা কিছু ভাষা বিল্ট-ইন হিসাবে বিবেচনা করতে পারেন ।
xakepp35

1
আমি মনে করি না যে এই বিজ্ঞপ্তিগুলি আমার হাইবক্সে পেয়েছি (হাইফেন সহ) তাদের কাছে পৌঁছেছে।
জোনাথন অ্যালান


1
এছাড়াও, আউটপুট কি বিপরীত হতে পারে? এর জন্য একটি মিথ্যা মান trueএবং সত্য সত্য false?
শেগি

1
@ ওয়াটসিসওয়ার্ড কোড গল্ফ একটি বিজয়ী মানদণ্ড ... ট্যাগগুলি দেখুন।
mbomb007

উত্তর:


4

জেলি ,  12  9 বাইট

ṢṚ×J$ṫ⁵<Ṃ

একটি সম্পূর্ণ প্রোগ্রাম যা পীরকে পুরস্কৃত করা হয় এবং যদি তা না দেয় তবে তা গ্রহণ করে x T Mএবং মুদ্রণ 0করে 1

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

কিভাবে?

ṢṚ×J$ṫ⁵<Ṃ - Main Link: list of numbers, x; number, T   e.g. [100, 50, 77, 22, 14, 45], 180
Ṣ         - sort x                                          [ 14, 22, 45, 50, 77,100]
 Ṛ        - reverse                                         [100, 77, 50, 45, 22, 14]
    $     - last two links as a monad:
   J      -   range of length                               [  1,  2,  3,  4,  5,  6]
  ×       -   multiply                                      [100,154,150,180,110, 84]
     ṫ    - tail from index:
      ⁵   -   5th argument (3rd input), M   (e.g. M=3)      [        150,180,110, 84]
       <  - less than T?                                    [          1,  0,  1,  1]
        Ṃ - minimum                                         0

মনে হচ্ছে কাজ করছে না: tio.run/##y0rNyan8///hzkWHp/uoHJ5wbMnDnasfNW61ebiz6dCah7sW/P//…
xakepp35

উদাহরণস্বরূপ তৃতীয় বিনিয়োগকারীরা টি এর ১ /
তৃতীয়েরও

হ্যাঁ, আমি এটি বিপরীত-বাছাই করা মানগুলির উপসর্গ ব্যবহার করে তৈরি করেছি এবং ভেবেছিলাম যে আমি এটিকে সাজানোর পোস্ট-ফিক্সে পরিবর্তন করতে পারি, তবে বাস্তবে তা করতে পারিনি কারণ আমি তখন টেইলিং করছি ... উল্টানো :)
জোনাথন অ্যালান

1
হ্যাঁ, এখন আমি গল্ফিং শেষ করেছি আমি একটি ব্যাখ্যা লিখছি।
জোনাথন অ্যালান

1
এটি এখন " 0পিয়ারকে পুরস্কৃত করা হয় এবং 1যদি না দেয় তবে তা মুদ্রণ করে "। (অর্থাত্ 0"হ্যাঁ")। এটি 1 বাইট সংরক্ষণ করে :)
জোনাথন অ্যালান

3

05 এ বি 1 ই , 9 বাইট

{Rƶ.ssè›ß

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

পোর্ট অফ @JonathanAllan এর জেলি উত্তর , তেমনি ইনপুট নেয় x T Mএবং আউটপুট 0জন্য "yes"এবং 1জন্য "no"। যদি এটি অনুমোদিত না হয় এবং এটি উল্টানো উচিত, একটি পিছন _যোগ করা যেতে পারে।

ব্যাখ্যা:

{           # Sort the (implicit) input `x`
            #  i.e. `x`=[100,50,77,22,14,45] → [14,22,45,50,77,100]
 R          # Reverse it
            #  i.e. [14,22,45,50,77,100] → [100,77,50,45,22,14]
  ƶ         # Multiply it by it's 1-indexed range
            #  i.e. [100,77,50,45,22,14] → [100,154,150,180,110,84]
   .s       # Get all the suffices of this list
            #  i.e. [100,154,150,180,110,84]
            #   → [[84],[110,84],[180,110,84],[150,180,110,84],[100,154,150,180,110,84]]
     s      # Swap to take the (implicit) input `T`
      è     # Get the prefix at index `T`
            #  i.e. [[84],[110,84],[180,110,84],[150,180,110,84],[100,154,150,180,110,84]]
            #   and `T=3` → [150,180,110,84]
           # Check for each list-value if the (implicit) input `M` is larger than it
            #  i.e. [150,180,110,84] and `M`=180 → [1,0,1,1]
        ß   # And pop and push the minimum value in the list (which is output implicitly)
            #  i.e. [1,0,1,1] → 0

এর বিকল্প .ssè:

sG¦}

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

s       # Swap to take the (implicit) input `T`
 G }    # Loop `T-1` times:
  ¦     #  Remove the first item from the list that many times
        #   i.e. [100,154,150,180,110,84] and `T=3` → [150,180,110,84]

1
আমি "আপনার কীভাবে আউটপুট মানচিত্র করা উচিত" এ সম্পর্কে বিবৃত করিনি, কেবল এটির বুলিয়ান হতে হবে (যেখানে কেবলমাত্র 2 টি রাজ্য থাকতে হবে)। সুতরাং হ্যাঁ, অবশ্যই আপনি "হ্যাঁ" এর জন্য 0 এবং "" নয় "এর জন্য 1 ব্যবহার করতে পারেন :)
xakepp35

2

জাভাস্ক্রিপ্ট, 54 52 বাইট

(x,t,m,n)=>x.sort((a,b)=>a-b).some(i=>i*n-->=t&n>=m)

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


এছাড়াও 35-40% আরও পারফর্মেন্ট যা 72-বাইটেড সমাধান। লাভলি কোড, মনে হচ্ছে এটি প্রস্তুত এমএলএম-সম্পর্কিত ওয়েব প্রকল্পগুলিতে এম্বেড হওয়ার জন্য প্রস্তুত: ^)
xakepp35

এই মাত্র লক্ষ্য করা হল. টেস্ট কেস # 2 দেখে [0, 60, 0, 60, 60, 0], 180, 3 -> trueমনে হচ্ছে কাজ হচ্ছে না! 72 বাইটেড বেরশন এটি হ্যান্ডেল করে। বাগ বা বৈশিষ্ট্য?)
xakepp35

2

রেটিনা , 79 বাইট

\d+
*
O^`_+(?=.*])
_+(?=.*])(?<=(\W+_+)+)
$#1*$&
+`\W+_+(.*_)_$
$1
(_+).*], \1,

এটি অনলাইন চেষ্টা করুন! ফর্ম্যাটে ইনপুট নেয় [x], T, M। লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

\d+
*

অ্যানারিতে রূপান্তর করুন।

O^`_+(?=.*])

[x]অবতরণ ক্রমে বাছাই করুন ।

_+(?=.*])(?<=(\W+_+)+)
$#1*$&

এর প্রতিটি [x]সূচকে এর সূচকে গুণ করে।

+`\W+_+(.*_)_$
$1

এর প্রথম M-1উপাদানগুলি মুছুন [x]

(_+).*], \1,

বাকি যে কোনও উপাদান এর [x]চেয়ে বড় বা সমান কিনা তা পরীক্ষা করুন T


2

পার্ল 6 , 46 33 29 বাইট

{$^b>all $^a.sort Z*[...] @_}

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

নামবিহীন কোড ব্লকগুলি যা ফর্মটিতে ইনপুট নেয় list, amount, length of list, minimum amount of investorsএবং সত্যবাদী / মিথ্যা allজংশন দেয়, যেখানে সত্যতা ব্যর্থ হয় এবং মিথ্যা সাফল্য।

ব্যাখ্যা:

{                           }  # Anonymous code block
     all                       # Are all of
         $^a.sort                # The sorted list
                  Z*             # Zip multiplied by
                     [...] @_    # The range from length of list to the minimum amount
 $^b>                          # Not smaller than the given amount?

2

05 এ বি 1 ই , 6 বাইট

অনুক্রমে গ্রহণ ইনপুট T, N, x[], M
আউটপুট হল 0পিয়ার পুরস্কার এবং 1যদি না

Ÿs{*›W

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

ব্যাখ্যা

Ÿ        # push the range [N ... T]
 s{      # push the list x[] sorted ascending
   *     # elementwise multiplication (crops to shortest list)
    ›    # for each element, check if M is greater than it
     W   # push min of the result
         # output implicitly

পরিচ্ছন্নতার *সাথে তালিকাটি ক্রপ করার জন্য দুর্দান্ত কৌশল!
কেভিন ক্রুইজসেন 14

2

সি # (.নেট কোর) , 129 , 89 বাইট

সম্পাদনা: কেন মেকানিক্স ব্যাখ্যা করার সময় 40 বাইট বন্ধ গল্ফ করার জন্য কেভিন ক্রুইজসেনকে ধন্যবাদ!

(n,q,t,m)=>{int c=0,j;for(;m<=n&c<1;c=c<m++?0:1)for(j=n;j-->0;)c+=q[j]<t/m?0:1;return c;}

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


1
106 বাইট আমি কিছু পরিবর্তন করেছি: nআপনি যে কোনও জায়গায় এটি ব্যবহার করবেন না বলে ইনপুট সরানো হয়েছে ; kআপনি mনিজেই ব্যবহার করতে পারেন যেহেতু অপসারণ ; যেহেতু আপনি এটি দুটিবার ব্যবহার করেন তার lজন্য একটি পরিবর্তনশীল যুক্ত q.Lengthকরেছেন; ভেরিয়েবলগুলি সংযুক্ত করে int c=0,l=q.Length,j;যাতে আপনার অতিরিক্ত প্রয়োজন হয় না var; লুপের শরীরে সবকিছু রেখে অপ্রয়োজনীয় বন্ধনীগুলি সরিয়ে নিয়েছে; c>=kচেক পরিবর্তন করে c<k; এবং পরিবর্তিত if(c>0)break;করা m=c>0?l+1:m;, যেহেতু লুপ যদি স্টপ m<=lপরিবর্তন mকরতে l+1উপর একটি বাইট সংরক্ষণ break(এবং এটি 2 বন্ধনী সঞ্চয়)। :)
কেভিন ক্রুইজসেন

1
আপনি যদি এখনো দেখা যায় না পারেন, C # golfing জন্য টিপস এবং মধ্যে golfing জন্য টিপস <সমস্ত ভাষা> মাধ্যমে পড়তে আকর্ষণীয় হতে পারে।
কেভিন ক্রুইজসেন 16

1
89 বাইট আমার প্রথম মন্তব্যে গল্ফগুলিতে কিছু সংযোজন। m=c>0?l+1:mসম্পূর্ণরূপে মুছে ফেলা হতে পারে এবং একটি &c<1চেক পরিবর্তে লুপ যোগ করা যেতে পারে। এবং nআবার ইনপুট নিয়ে , আপনার q.Lengthআর দরকার নেই তবে nপরিবর্তে ব্যবহার করতে পারেন ।
কেভিন ক্রুইজসেন

2

পতাকা #/u:System.Linq.Enumerable 69 বাইট সহ সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক)

(n,x,t,m)=>Range(0,n-m+1).Where(b=>x.Count(a=>a>=t/(b+m))>=b+m).Any()

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

// Takes in 4 parameters as input
(n,x,t,m)=>
// Create a new array with the length of all the numbers from m to n, inclusive
Range(0,n-m+1)
// And filter the results by
.Where((_,b)=>
// If the number of people that invested more than the total amount divided by the index plus m
x.Count(a=>a>=t/(b+m))
// Is greater than the index plus m
>= b+m)
// And check if there is at least one value in the filtered IEnumerable<int>, and if there is, return true
.Any()

কোনও পতাকা ছাড়াই, 73 বাইট

(n,x,t,m)=>new int[n-m+1].Where((_,b)=>x.Count(a=>a>=t/(b+m))>=b+m).Any()

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


আমি এটি ভেবেছিলাম, এবং বর্ণনায় বলেছি যে এন> = 1, এবং এম <= এন সুতরাং আপনি নিজের সমাধানটি কিছুটা ছোট করতে পারেন :)
xakepp35

1

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

কোড

(x,T,M)=>x.sort(t=(d,e)=>e-d).map((s,i)=>s*i+s).slice(M-1).sort(t)[0]>=T

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

বিন্যাসে ইনপুট গ্রহণ করে (x [], টি, এম)

ব্যাখ্যা

x.sort(t=(d,e)=>e-d)     \\sort numbers in reverse numerical order
.map((s,i)=>s*i+s)       \\Multiply each number in array by position(1 indexed) in array
.slice(M-1)              \\Remove the first M-1 elements (at least M people)
.sort(t)[0]              \\Get the maximum value in the array
>=T                      \\True if the maximum value is >= the threshold


1
(অথবা 53 বাইট যদি বুলিয়ান মান অর্থ উল্টানো যাবে না।)
Arnauld

@ আর্নল্ড, ৫২ বাইট ;)
শেগি

(যাই হোক, আমি আমার সমাধান করা আপনার মন্তব্যকে স্বাধীনভাবে নিয়ে এসেছেন, যদি আপনি হতাশ হয়েছে -। এটা আমার Japt সমাধানের একটি বন্দর মোবাইল ইত্যাদি দেখতে পারে না টাইমস্ট্যাম্প সঠিকভাবে যারা প্রথম পোস্ট বলতে।)
রোমশ

1

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

তারা পূরণ হয়েছে তা নিশ্চিত করার জন্য কেবল শর্তগুলি পরীক্ষা করে। 1 পুরষ্কার দেওয়া হয়, যদি না হয় 0।

lambda N,x,T,M:(sum(x)>=T)*(M<=N)*any(any(all(j>=T/k for j in i)for i in combinations(x,k))for k in range(M,N+1))
from itertools import*

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


1

পাইথন ,  71  65 বাইট

lambda x,T,M:all(i*v<T for i,v in enumerate(sorted(x)[-M::-1],M))

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

একটি নামহীন ফাংশন; আমার জেলি উত্তর বন্দর। যেমন "হ্যাঁ" হয় Falseএবং "না" হয় True। এখানে, আমরা বিপরীত অংশ হিসাবে টেস্ট-কেসগুলি বাতিল করে দেই এবং enumerateগণনা শুরু করার ক্ষমতার সুযোগ নিয়ে থাকি M। ( minএর জায়গায়ও কাজ করবে all)


1

আর , 43 42 বাইট

আরও ঘনিষ্ঠভাবে পদ্ধতির প্রয়োগ করে -1 বাইটস

function(N,x,S,M)min(sort(x,T)[M:N]*M:N<S)

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

জোনাথনের জেলি পদ্ধতির সহজ আর বাস্তবায়ন। আমি একগুচ্ছ বৈচিত্রের চেষ্টা করেছি তবে এই পাইপগুলি কয়েকটা বাইটের দ্বারা আমি সবচেয়ে ভালভাবে ভাবতে পারি।

1 ব্যর্থতা বোঝায়, 0 সাফল্যের ইঙ্গিত দেয়।


1

জাপট, 16 14 13 11 বাইট

ñ í*WõX)d¨V

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

ñ í*WõX)d¨V
                  :Implicit input of array U=x and integers V=T, W=M & X=N
ñ                 :Sort U
  í               :Interleave with
    WõX           :  Range [W,X]
   *              :  And reduce each pair of elements by multiplication
       )          :End interleaving
        d         :Any
         ¨V       :  Greater than or equal to V

0

জাভা 8, 91 (বা 89?) বাইট

(N,x,T,M)->{int c=0,j;for(;M<=N&c<1;c=c<M++?0:1)for(j=N;j-->0;)c+=x[j]<T/M?0:1;return c;}

পোর্ট অফ @Destroigo এর সি # .NET উত্তর (পর আমি golfed এটি কিছু বেশি), তাই নিশ্চিত তাকে ভোট দিন করতে!

লাগে ইনপুট N,x,T,Mএবং আউটপুট true/ falseজন্য "yes"/ "no"যথাক্রমে।

যেহেতু চ্যালেঞ্জটি বিশেষত booleanফলাফলগুলির জন্য জিজ্ঞাসা করে , আমি 1/ 0যেমনটি ফিরিয়ে দিতে পারি না , যেহেতু এটি জাভাতে বৈধ সত্যবাদী / মিথ্যা মান নয় । পরিবর্তে এই চ্যালেঞ্জের জন্য "yes"/ এর জন্য কোনও দুটি স্বতন্ত্র আউটপুট মান "no"বৈধ হয়, তার বিনিময়ে >0দুটি বাইট সংরক্ষণ করতে বাদ দেওয়া যায় , সেক্ষেত্রে যথাক্রমে 1/ এর 0জন্য "yes"/ ফিরে আসবে "no"

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

ব্যাখ্যা:

(N,x,T,M)->{           // Method with the four parameters and boolean return-type
  int c=0,             //  Count integer, starting at 0
      j;               //  Temp index integer
  for(;M<=N            //  Loop as long as `M` is smaller than or equal to `N`
       &c<1            //  and `c` is not 1 yet:
      ;                //    After every iteration:
       c=c<M++?        //     If `M` is smaller than `c`:
                       //     (and increase `M` by 1 afterwards with `M++`)
          0            //      Set `c` to 0
         :             //     Else:
          1)           //      Set `c` to 1
    for(j=N;j-->0;)    //   Inner loop `j` in the range (`N`,0]:
       c+=             //    Increase the counter `c` by:
          x[j]         //     If the `j`'th value in `x`
              <T/M?    //     is smaller than `T` divided by `M`:
                   0   //      Leave the counter `c` unchanged by adding 0
                  :    //     Else:
                   1;  //      Increase the counter `c` by 1
  return c>0;}         //  Return whether the counter `c` is 1

0

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 66 বাইট

(n,x,t,m)=>Enumerable.Range(m,n-m+1).Any(k=>x.Count(y=>y>=t/k)>=k)

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

@ এম্বোডিমেন্টঅফজেনশন এর উত্তর দ্বারা অনুপ্রাণিত

আমি এর আগেও এটি উল্লেখ করেছি, তবে সি # 8 এর একটি পরিসীমা আক্ষরিক রয়েছে যা উত্তরটি এরকম কিছু করতে পারে:

(n,x,t,m)=>[m..n-m+1].Any(k=>x.Count(y=>y>=t/k)>=k)

আমি একটি উদাহরণ সহ শার্পল্যাবের একটি লিঙ্ক দেখেছি , তবে আমি নিজে এটি কাজ করতে সক্ষম হইনি।

একটি জিনিস আমি পরিবর্তন করেছিলাম xএবং tমানগুলি হ'ল দশমিক। এটি কেসটি পরিচালনা করে যেখানে আরও ভালভাবে tবিভাজ্য হয় না k

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