একটি এএসসিআইআই পোকার চিপ স্ট্যাকের ব্যবস্থা করুন


20

আপনি কীভাবে আপনার চিপগুলি প্রায়শই টুর্নামেন্টে প্রয়োগ করেন তা পোকারের শিষ্টাচার রয়েছে - আপনার চিপগুলি অন্যদের থেকে পিছনে হয়ে আপনার প্রতিপক্ষদের কাছ থেকে "গোপন" নাও হতে পারে, বেশিরভাগ ক্ষেত্রে বড় কিছু চিপ (গুলি) গোপন না করে।


চ্যালেঞ্জ

আমরা ASCII তে জুজু খেলতে যাচ্ছি, সুতরাং আমাদের এমন একটি ফাংশন বা প্রোগ্রাম লিখতে হবে যা আমাদের ASCII চিপ স্ট্যাকের বিন্যাসের মোট মান হিসাবে অঙ্কিত করবে n

ইনপুট
- একটি ধনাত্মক পূর্ণসংখ্যা, n(অবধি 2**32-1পরিচালনা করা উচিত)

আউটপুট
- নীচে সংজ্ঞায়িত হিসাবে স্ট্যাক বিন্যাসের একটি ASCII প্রতিনিধিত্ব।
এটিতে প্রতিটি লাইনের ডানদিকে সাদা স্থান থাকতে পারে যে দীর্ঘতম (নীচে) লাইনের মুদ্রণযোগ্য অক্ষরগুলির দ্বারা ব্যবহৃত দৈর্ঘ্যের চেয়ে কোনও লাইন আর এক অক্ষরের বেশি নয়;
এটিতে একটি একক পেছনের নতুন লাইন থাকতে পারে; এবং
চিপগুলি উপস্থাপন করে এমন অক্ষরগুলি যদি আপনি পছন্দ করেন তবে ছোট হাতের অক্ষরে থাকতে পারে।

স্ট্যাকের ব্যবস্থা করবে:

  • সংখ্যাসমূহ (নীচে দেখুন) প্রদত্ত সম্ভাব্য কয়েকটি চিপস অন্তর্ভুক্ত করুন;
  • "স্ট্যাকস" (কলাম) এ সমান মূল্যবান চিপস থাকবে;
  • অর্ডার করুন যাতে ছোট স্ট্যাকগুলি লম্বা স্ট্যাকের ডানদিকে থাকে; এবং
  • এই জাতীয় আদেশ দিন যে বৃহত্তর ডিনমোনিমেশন চিপ সহ স্ট্যাকগুলি নিম্ন বর্ণের সমান আকারের স্ট্যাকের ডানদিকে হবে (প্রতিনিধিত্ব করে যে তারা আমাদের প্রতিপক্ষের কাছে ডানদিকে দৃশ্যমান)

চিপগুলি তাদের রঙ সনাক্তকরণের জন্য স্বতন্ত্র অক্ষর হিসাবে প্রতিনিধিত্ব করতে হবে:

    White : 1    = W
      Red : 5    = R
    Green : 25   = G
    Black : 100  = B
   Yellow : 500  = Y
     Pink : 1K   = P
   Orange : 5K   = O
     Cyan : 25K  = C
  Magenta : 100K = M
Aqua-blue : 500K = A
 Lavender : 1M   = L
   Indigo : 5M   = I
Turquoise : 25M  = T
   Violet : 100M = V
   Silver : 500M = S

উদাহরণ

জন্য n = 276,352চিপ ক্ষুদ্রতম সংখ্যা হতে হবে:

2 * 100K + 3 * 25K + 1 * 1K + 3 * 100 + 2 * 25 + 2 * 1
    MM         CCC       P        BBB       GG       WW

একক Pঅবশ্যই অবশ্যই ডানদিকে যেতে হবে,
তারপরে মাপের তিনটি স্ট্যাকের 2অবশ্যই এগিয়ে যেতে হবে
- তবে MMডানদিকে অবশ্যই ডানদিকে যেতে হবে GGএবং তার পর WWথেকে 100K > 25 > 1 আকারের দুটি স্ট্যাক 3বাম দিকে যেতে হবে
- তবে CCCঅবশ্যই BBBযেহেতু ডানদিকে যান25K > 100

আমাদের আউটপুট তৈরি করতে এখন আমাদের এই চিপগুলি সত্যিকারের স্ট্যাকের মধ্যে রাখতে হবে:

BC
BCWGM
BCWGMP

পরীক্ষার মামলা

Input:
1

Output:
W


Input:
9378278

Output:
L
LWGPCM
LWGPCMB
LWGPCMBI


Input:
22222222

Output:
ROI
ROI
ROIWBPML
ROIWBPML


Input:
1342185143

Output:
WRCIV
WRCIVOLS
WRCIVOLSGBMT


Input:
2147483647

Output:
RMIS
RMISPC
RMISPCWL
RMISPCWLGBYOTV


Input:
4294967295

Output:
S
S
S
S
SRML
SRMLGOIT
SRMLGOITBPCV
SRMLGOITBPCVA

এটি , তাই বাইট জেতে সংক্ষিপ্ততম কোড। কোনও ফাঁক নেই, ইয়াডা ইয়াদা, আপনি ড্রিল জানেন।


বাহ, এটি মজাদার মনে হচ্ছে, বাড়ি এলে আমি জুলিয়া উত্তরের চেষ্টা করতে পারি।
ম্যাজিক অক্টোপাস উরন

আপনি কী বোঝাতে চেয়েছিলেন 2**31-1, না আপনার অভিপ্রায়টি সাইন ইন করা বেশিরভাগ intধরণের চেয়ে বড় হতে পারে ?
লিনাস

@ লিনাস হুম, আমি এটি স্বাক্ষরবিহীন করে দিয়েছি; আমি সুনির্দিষ্টভাবে জিজ্ঞাসা করেছি যে স্যান্ডবক্সে ইনপুট পরিসরটি ঠিক আছে কিনা এবং কেউ প্রতিক্রিয়া জানায় না। আপনি দেখতে পাচ্ছেন যে 2**32-1এটি একটি পরীক্ষার মামলা, তবে আমি এটি হ্রাস করতে ইচ্ছুক। (আকর্ষণীয় সত্য: পোকার স্টারসের 25Bতাদের চিত্র ফোল্ডারে একটি চিপ রয়েছে))
জোনাথন অ্যালান

উত্তর:


5

পাইথ, 56 55 52 বাইট

xxdকোডটিতে কিছু আন-প্রিন্টেবল রয়েছে, সুতরাং এখানে একটি বিপরীতমুখী হেক্সডাম্প রয়েছে।

00000000: 3d48 516a 5f2e 745f 2023 6c44 2a56 2e22  =HQj_.t_ #lD*V."
00000010: 4159 261c 0c24 2087 0c86 1e22 6d68 412e  AY&..$ ...."mhA.
00000020: 4448 645f 2e75 2a4e 5950 2a33 6a37 3733  DHd_.u*NYP*3j773
00000030: 3620 362f                                6 6/

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

প্রো টিপ: 1একটি ননজারো নম্বর গ্রহণ করার পরে একটি প্রোগ্রামের শেষে গল্ফ করতে Q, কেবল যুক্ত করুন //QQপাইথনের মধ্যে যা হবে Q // Q, এটি ননজারোর জন্য 1 Q

সংক্ষিপ্তকরণ এবং অপ্রিন্টারযোগ্য ছাড়াই (55 বাইট):

=HQj_.t_ #lD*V"SVTILAMCOPYBGRW"mhA.DHd_.u*NYP*3j7736 6/

6

জাভাস্ক্রিপ্ট (ES6), 185 177 ... 171 বাইট

f=(a,s='')=>(a=(a[0]?a:[...(m='25455')+m+m].map((m,i)=>(a-=(k=a/(v/=m)|0)*v,k*16+i),v=1E9).sort((a,b)=>b-a)).map(n=>n>15&&(s+='SVTILAMCOPYBGRW'[n&15],n-16)),s&&f(a)+`
`+s)

ফর্ম্যাট এবং মন্তব্য

(a, s = '') => (                           // a = bankroll OR array of chip stacks
  a = (                                    // s = string of chip initials for this iteration
    a[0] ?                                 // if 'a' already is an array:
      a                                    // use it as-is
    :                                      // else, 'a' is the bankroll:
      [...(m = '25455') + m + m]           // for each 'm' in [ 2, 5, 4, 5, 5, ... ] (x3)
      .map((m, i) =>                       // v = current chip value = previous value / m
        (                                  // k = floor(a / v) = number of these chips
          a -= (k = a / (v /= m) | 0) * v, // update remaining bankroll: a = a - k * v
          k * 16 + i                       // saved in array: chip index in bits 0-3
        ),                                 // and number of chips in bits 4+
        v = 1E9                            // initial chip value = 1 billion
      )                                    // (1B / 2 -> 500M, 500M / 5 -> 100M, etc.)
      .sort((a, b) => b - a)               // sort the chip stacks
  )                                        //
  .map(n =>                                // for each chip stack:
    n > 15 &&                              // if there's at least one remaining chip of
    (                                      // this kind:
      s += 'SVTILAMCOPYBGRW'[n & 15],      // append its initial to the string
      n - 16                               // decrement the number of chips in this stack
    )                                      //
  ),                                       // process recursive call if there was at least
  s && f(a) + '\n' + s                     // one non-empty chip stack (the next lines are
)                                          // appended at the beginning of the final string)

ডেমো

let f=(a,s='')=>(a=(a[0]?a:[...(m='25455')+m+m].map((m,i)=>(a-=(k=a/(v/=m)|0)*v,k*16+i),v=1E9).sort((a,b)=>b-a)).map(n=>n>15&&(s+='SVTILAMCOPYBGRW'[n&15],n-16)),s&&f(a)+`
`+s)

function update() {
  document.getElementById('o').innerHTML = f(+document.getElementById('i').value);
}
update();
<input id="i" value="1342185143" oninput="update()"><pre id="o"></pre>



4

পাইথন 2.7, 282 248 238 বাইট

c=input();L=[]
for i in range(15):m=[5,1,25,5,1][i%5]*10**int("886665533322000"[i]);L+=[[c/m,i,"SVTILAMCOPYBGRW"[i]]];c%=m
L.sort();S=[]
while L[~1][0]:
 s=""
 for X in L[::-1]:
  if X[0]>0:X[0]-=1;s+=X[2]
 S+=[s]
for s in S[::-1]:print s

ব্যাখ্যা: প্রতিটি ধরণের চিপের পরিমাণ নির্দেশ করে এমন উপাদানগুলির সাথে
তালিকা পূরণ করুন , যেখানে সমান পরিমাণের চিপগুলি বিপরীত ক্রমে সাজানো হয় তা নিশ্চিত করে ( প্রথমে উচ্চতর মান চিপস )। প্রতিটি লাইনের জন্য স্ট্রিং তৈরি করতে বিপরীত থেকে চিপস নিন । শীর্ষে ছোট লাইনগুলি পেতে বিপরীতে লাইনগুলি মুদ্রণ করুন।L[quanity, chip_order, chip_character]chip_orderL

কিছু উন্নতির জন্য ব্লু ধন্যবাদ ।


দুর্দান্ত উত্তর! তবে এটিকে আরও গল্ফ করতে আপনি কয়েকটি করতে পারেন। প্রথমত, আপনি সেমিকোলন দ্বারা পৃথক করে এক লাইনে একাধিক বক্তব্য রাখতে পারেন (তবে বিবৃতিগুলির জন্য নয় যা পরবর্তীকালে ইনডেন্টের প্রয়োজন হয়)। দ্বিতীয়ত, আপনি যদি একবার কেবল কোনও ভেরিয়েবল ব্যবহার করেন (প্রথম forলুপে এক্স, ওয়াই এবং এস এর মতো ), আপনি কিছু বাইট সংরক্ষণের জন্য কাঁচা মানটি প্রতিস্থাপন করতে পারেন। আরও টিপসের জন্য, কোডগল্ফ.স্ট্যাকেক্সেঞ্জিং
নীল

এছাড়াও, নিয়মিতভাবে inputআপনাকে পূর্ণসংখ্যার ডাব্লু / ও রূপান্তর X[0]>0করতে হবে , এবং ছোট করা যেতে পারেX[0]
ব্লু

@ ব্লু, ধন্যবাদ আমি পাইথনের ইনপুটটিকে ঘৃণা করি। আমি টিপস যাচাই করব এবং আমি অন্য কিছু নিয়ে আসতে পারি কিনা তা দেখুন।
লিনাস

3

গণিত, 440 বাইট

n=Input[]
c=Characters["SVTILAMCOPYBGRW"]
l=Reap[Do[n=n-#[[-i]]*Sow[Floor[n/#[[-i]]]]&@FoldList[Times,1,{5,5,4,5,2,5,5,4,5,2,5,5,4,5}],{i,1,15}]][[2,1]]
StringJoin@@((StringJoin[#,"\n"])&/@StringJoin/@Reverse/@((PadRight[#,Max[l],""]&/@Sort[Table[If[l[[n]]>0,Table[c[[n]],l[[n]]],Nothing],{n,1,15}],If[Length[#1]==Length[#2],Position[c,#1[[1]]][[1,1]]<Position[c,#2[[1]]][[1,1]],Length[#1]<Length[#2]]&])[[All,#]]&/@Range[Max[l]])//Reverse)

এএসসিআই-উপস্থাপনা এবং ডান অর্ডার বেশিরভাগ কোডকে গ্রাস করে।

* শুধুমাত্র সংস্করণ ১১ এবং উচ্চতর (কিছুই ব্যবহার না করা) নিয়ে কাজ করে *


1
আসলেই কোন গণিত নেই ?!
জোনাথন অ্যালান

3
আপনি বর্তমানে অনলাইনে এটি ব্যবহার করতে পারেন: develop.open.wolframcloud.com/app
জুলিয়েন ক্লুজ

0

পিএইচপি, 274 বাইট

$t=$argv[1];$n=[500,100,25,5,1];$c=YBGRWAMCOPSVTIL;foreach($n as$k=>$v)for($i=0;$i<3;)$r[$v*10**($i*3)]=$c[$k+$i++*5];krsort($r);foreach($r as$v=>$k)$t-=($x[$v]=floor($t/$v))*$v;ksort($x);arsort($x);for($y=max($x);$y;$y--){foreach($x as$k=>$v)if($v>=$y)echo$r[$k];echo"\n";}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.