एक ASCII पोकर चिप स्टैक व्यवस्था करें


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प्रकारों से बड़ा होने का इरादा है ?
लाइनस

@Linus हम्म, मैंने इसे अहस्ताक्षरित कर दिया; मैंने वास्तव में विशेष रूप से पूछा कि क्या सैंडबॉक्स में इनपुट रेंज ठीक थी और किसी ने जवाब नहीं दिया। जैसा कि आप देख सकते हैं 2**32-1कि एक परीक्षण मामला है, लेकिन मैं इसे कम करने के लिए तैयार हूं। (दिलचस्प तथ्य: पोकरस्टार के 25Bचित्र फ़ोल्डर में एक चिप है।)
जोनाथन एलन

जवाबों:


5

पायथ, 56 55 52 बाइट्स

कोड में कुछ xxdunprintables होते हैं, इसलिए यहां एक प्रतिवर्ती हेक्सडंप है।

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

संपीड़न और unprintables के बिना (55 बाइट्स):

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

6

जावास्क्रिप्ट (ईएस 6), 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लूप में केवल एक बार चर (जैसे X, Y और S ) का उपयोग करते हैं, तो आप कुछ बाइट्स को बचाने के लिए कच्चे मान को प्रतिस्थापित कर सकते हैं। अधिक युक्तियों के लिए, codegolf.stackexchange.com/questions/54/…
ब्लू

इसके अलावा, नियमित रूप inputसे आपको पूर्णांक w / o में बदलना होगा, और X[0]>0छोटा किया जा सकता हैX[0]
Blue

@ धन्यवाद, धन्यवाद मुझे अजगर के इनपुट से नफरत है। मैं युक्तियों की जांच करूंगा और देखूंगा कि क्या मैं किसी और चीज के साथ आ सकता हूं।
लाइनस

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)

एएससीआई-प्रतिनिधित्व और सही क्रम अधिकांश कोड को निगल जाता है।

* केवल संस्करण 11 और उच्चतर (कुछ नहीं का उपयोग) के साथ काम करता है *


1
वहाँ वास्तव में कोई स्वतंत्र गणितज्ञ है ?!
जोनाथन एलन

3
आप वर्तमान में इसे ऑनलाइन उपयोग कर सकते हैं: develop.open.wolframcloud.com/app
जूलियन क्लूज

0

PHP, 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";}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.