ASCII Destesi


13

AFAIK için hiçbir zaman kesin bir ASCII kart meydan okuması olmadı. Yani, aşağıdaki ASCII kart destesini kullanarak:

.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) |
| :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: |
| :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: |
| (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): |
| ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'

İki tamsayı alın pve qgirdi olarak; burada poyuncu qsayısı ve her oyuncunun aldığı kart sayısıdır.

  • Kart destesini rastgele karıştırın (bu belirsizdir, ancak tüm kartların bir kez aynı yerde görünme olasılığı yüksektir).
  • Çıkışı, oyuncu başına kartların 1 yuvarlak Deal qsıraları pkartları her satır.

Kurallar:

  • Sonuçlar eşit olarak rastgele olmalıdır, her kartın her yerde eşit olarak görünme olasılığı olmalıdır.
  • Bunun 0 < p*q <= 52 and p < 10karşılanmadığı senaryolar için tanımlanmamış davranışınız olabileceği garanti edilmektedir .
  • Her qsatıra kart içeren pkart sıraları çıkarmalısınız .
  • Her sütun | (boşluklarla çevrili bir boru karakter) ile ayrılmalıdır ; bundan farklı bir karakter seçerseniz, nedenini açıklayın. Buradaki çevre alanlar isteğe bağlı DEĞİLDİR.
  • Her satırın arasında 1 veya daha fazla yeni satır olmalıdır, birden fazla kabul edilebilir, 0 kabul edilmez (1 yeni satır varsayılan olarak yeni satır anlamına gelir).
  • Her satırın sahibi "Player N" (0 veya 1 dizine uygundur) biçiminde olan oynatıcı ile etiketlenmelidir.
  • Hiç bir kart birden fazla kez görünemez.
  • T On için.

Örnekler:

İşlev ( p=1,q=1):

Player 1 # Can also be 0.
.------.
|2.--. |
| (\/) |
| :\/: |
| '--'2|
'------'

İşlev ( p=2,q=1):

Player 1 | Player 2 # Can also be "Player 0 | Player 1"
.------. | .------.
|2.--. | | |T.--. |
| (\/) | | | (\/) |
| :\/: | | | :\/: |
| '--'2| | | '--'T|
'------' | '------'

İşlev ( p=2,q=2):

Player 1 | Player 2 # Can also be "Player 0 | Player 1"
.------. | .------.
|J.--. | | |3.--. |
| (\/) | | | :/\: |
| :\/: | | | :\/: |
| '--'J| | | '--'3|
'------' | '------'
.------. | .------.
|8.--. | | |6.--. |
| :(): | | | :/\: |
| ()() | | | (__) |
| '--'8| | | '--'6|
'------' | '------'

Bir yazı tipine sanatsal kredi: http://patorjk.com/software/taag


5
Patorjk.com/software/taag adresinde bulduğunuz kartlardan birçok kart zorluğu gönderecek misiniz?

1
Soooo ... Sonuç çıkarmak için bu siteyi "kullanabilir miyiz?"
J42161217

1
Demek istediğim: Son test durumunuz için patorjk.com/software/taag/… çıktısını veren bir program yapabilir miyim ?
J42161217

5
Ayrıca, Each row must have 1 or more newlines inbetween them, more than one is acceptable, 0 is not.... Ama test davalarınızın kartlar arasında yeni satırları yok ..?
totallyhuman

1
ASCII kartlarında neredeyse bir zorluk vardı: Oynatma süresi tarafımdan gönderildi.
sergiol

Yanıtlar:


6

Kömür , 142 133 125 bayt

NθFN«F¬¬ι«→↑×⁶θ| »Player IιFθ«↙↓.↓⁴←'←⁶↑'↑⁴.P⁶↓≔‽⁵²εW№υε≔‽⁵²ε⊞υε≔§”w↘τ[⁵PkxτG”εδδ.--.¶✂”{➙aETê;s∨Hμ⁼⎚↑Z~SÀd~⌀Tê”﹪ε⁴φ⁴'--'δ↘

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Düzenleme: Rasgele örnekleme kodumu geliştirerek 9 bayt kaydedildi. Takım elbise yazdırma kodumu geliştirerek 8 bayt daha kaydetti. Açıklama:

Nθ

İçine kart sayısını okuyun q.

FN«

Her oyuncunun üzerinden geçin.

F¬¬ι«→↑×⁶θ| »

Bu ilk oyuncu değilse, önceki ve bu oynatıcı arasındaki dikey çizgiyi yazdırın.

Player Iι

Oynatıcı numarasını yazdırın.

Fθ«

Her kartın üzerinden geçin.

↙↓.↓⁴←'←⁶↑'↑⁴.P⁶↓

Kartın kenarını yazdırın.

≔‽⁵²εW№υε≔‽⁵²ε⊞υε

Daha önce seçilmemiş bir kart dizini seçin ve onu seçili kart dizinleri listesine ekleyin.

≔§”w↘τ[⁵PkxτG”εδδ

Geçerli bir kart sıralaması dizisine ( 2-9, T, J, Q, K, A) çevrimsel olarak dizine ekleyerek kartın sırasını seçin ve yazdırın .

.--.¶

Elbisenin üst kısmını yazdırın.

✂”{➙aETê;s∨Hμ⁼⎚↑Z~SÀd~⌀Tê”﹪ε⁴φ⁴

Bir ipe dilimleyerek elbisenin ortasını yazdırın. Dilim kart indeksi modulo 4'te başlar ve dize bitene kadar (veya f= 1000'inci karaktere ulaşılana kadar) her 4 karakteri alır . 4 ve 13 eş zamanlı olduğu için 52 kartın da mümkün olmasını sağlar.

'--'δ↘

Elbisenin altını ve rütbenin bir kopyasını yazdırın ve ardından rütbenin kopyasından, bir sonraki kartın başlangıcından veya bölme çizgisinin başlangıcından çok uzak olmayan bir noktaya gidin. sonraki oyuncu.


Bunu kum havuzunda gördüğümde, güverteyi yazdırmak için bir kc meydan okumasıydı, bu da beni 102 bayt aldı: Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur.
Neil

3

Python 2 , 357 bayt

from random import*
p,q=input()
A,V=':/\:',':\/:'
c=sample([(""".------.
|%s.--. |
| %s |
| %s |
| '--'%s|
'------'"""%(n,s,t,n)).split('\n')for s,t in('(\/)',V),(A,V),(A,'(__)'),(':():','()()')for n in'123456789TJQKA'],p*q)
print' | '.join('Player '+`i`for i in range(p))
for i in range(0,p*q,p):print'\n'.join(map(' | '.join,zip(c[i:i+p][0],c[i:i+p][1])))

Çevrimiçi deneyin!

Hiçbir fikrim yok.


3

Jöle , 126 bayt

³‘Ḷj“×ṁẹHY»;⁶¤ṫ5W;
2r9;“TJQKA”
“¡ẏ%TZ=ẹaɦAY’ṃ“(\/)_:”s4s2
“E¬ƭḊHẈḢ“ðİ“|e*Ḳ?BḤ’ṃ“. -|1¶'”żÐ€¢FỴ$€p2£j/€Ẋ
¢ssḢµṣ€”1Zj€“ | ”Yµ€ÑY

Çevrimiçi deneyin!


3

JavaScript (ES6), 328 ... 312 bayt

Körili sözdiziminde girdi alır (p)(q). Oyuncular 0-endekslenir.

p=>g=(q,i=p*q*6,d=[...Array(52).keys(a=`:\\/:,(__),()(),(\\/),:/\\:,:():, | ,
,.3.,|0.--. |,| 1 |,| 2 |,| '--'0|,'3',Player 4`.split`,`)].sort(_=>Math.random()-.5))=>i--+p?g(q,i,d)+a[i%p?6:7]+a[i<0?14:i/p%6|8].replace(/\d/,c=>['TJQKA'[j=x>>2]||j-3,a['3454'[x&=3]],a[x%3],'------',p+i][c],x=d[i%p+p*(i/p/6|0)]):''

gösteri

Nasıl?

Bu, çıkışı aşağıdan yukarıya doğru oluşturan yinelemeli bir işlevdir. Kartların çekildiği ana kısım boyunca, sonuna kadar ibaşlatılır p*q*6ve azaltılır 0. Ardından daha fazla azaltılmasıyla başlık çizmek ivarıncaya kadar -p.

ASCII sanatı dizide saklanan küçük parçalara bölünür a[]. Aşağıdaki tablo a[], kodun geri kalanının daha kolay anlaşılmasını sağlayan içeriğini açıklamaktadır.

 Index | Content    | Description
-------+------------+------------------------------------------------
    0  | ":\\/:"    | bottom of 'diamonds' and 'hearts'
    1  | "(__)"     | bottom of 'spades'
    2  | "()()"     | bottom of 'clubs'
    3  | "(\\/)"    | top of 'hearts'
    4  | ":/\\:"    | top of 'diamonds' and 'spades'
    5  | ":():"     | top of 'clubs'
    6  | " | "      | player separator
    7  | "\n"       | line-feed
    8  | ".3."      | card row #1, "3" --> "------"
    9  | "|0.--. |" | card row #2, "0" --> symbol of card value
   10  | "| 1 |"    | card row #3, "1" --> top of color ASCII art
   11  | "| 2 |"    | card row #4, "2" --> bottom of color ASCII art
   12  | "| '--'0|" | card row #5, "0" --> symbol of card value
   13  | "'3'"      | card row #6, "3" --> "------"
   14  | "Player 4" | header, "4" --> player ID

Biçimlendirilmiş ve yorumlanmış

p => g = (                                // p = number of players
  q,                                      // q = number of cards
  i = p * q * 6,                          // i = counter
  d = [...Array(52).keys(                 // d = deck
    a = `:\\/:,(__),...`.split`,`         // a = ASCII art pieces (truncated, see above)
  )].sort(_ => Math.random() - .5)        // shuffle the deck
) =>                                      //
  i-- + p ?                               // if i is greater than -p:
    g(q, i, d) +                          //   do a recursive call and append ...
    a[i % p ? 6 : 7] +                    //   separator or line-feed
    a[i < 0 ? 14 : i / p % 6 | 8]         //   header or card row
    .replace(/\d/, c => [                 //   where digits are replaced with:
        'TJQKA'[j = x >> 2] || j - 3,     //     0: symbol of card value
        a['3454'[x &= 3]],                //     1: top of color ASCII art
        a[x % 3],                         //     2: bottom of color ASCII art
        '------',                         //     3: horizontal border
        p + i                             //     4: player ID
      ][c],                               //
      x = d[i % p + p * (i / p / 6 | 0)]  //   x = current card with: bits 0-1 = color
    )                                     //                          bits 2-5 = value
  :                                       // else:
    ''                                    //   stop recursion

2

Python 2 , 382 358 346 338 332 bayt

from random import*
p,n=input()
d=zip([0,1,2,3]*13,'23456789TJQKA'*4)
shuffle(d)
C=""".------.
|%s.--. |
| %s |
| %s |
| '--'%s|
'------'"""
print' | '.join('Player '+`i`for i in range(p))
exec"for l in zip(*[(C%(v,'(:::\/(//\)\):::'[s::4],':((:\_)\/_(/:)):'[s::4],v)).split('\\n')for s,v in d[:p]]):print' | '.join(l)\nd=d[p:]\n"*n

Çevrimiçi deneyin!


2

SOGL V0.12 , 106 bayt

E⁽⁰⅜║(Ηe─t¦4»\$²‘8n{"1<ω⅛┘‘4n╬¡;4n33žASUjk"TJQKA”+{a;22žF75ž}}'#δ№{ψ⌡≤οc+C}c_.∫:"▓⅛▲ŗ‘Κ⁽e{≤+};H?;lƧ |Γ∙┼;┼

Buradan Deneyin!

Kart oluşturma:

...‘                     push "(\/):\/::/\::\/::/\:(__):():()()" - the suits
    8n                   split to line lengths of 8 - individual suits
      {                  for each suit
       "...‘               push ".---| .-|   " - a quarter of a suit
            4n             split to line lengths of 4 - [".---", "| .-", "|   "]
              έ           quad palindromize - empty card
                ;          get the suit on top
                 4n        split to line lengths of 4
                   33ž     insert in the card at [3; 3]
                      A    save on variable A - card template
SU                         push "1234567890"
  jk                       remove the first and last digits
    "TJQKA”+               append "TJQKA"
            {         }    for each number - "23456789TJQKA"
             a               load the template
              ;22ž           at [2; 2] insert the current number
                  F75ž       at [7; 5] insert the current number

Karıştırılıyor:

'#             push 52
  δ            lower range - [0, 1, ..., 50, 51]
   №           reverse - [51, 50, ..., 1, 0]
    {       }  for each, pushing the current item
     ψ           get a random number from 0 to ToS (inclusive)
      ⌡          that many times
       ≤           put the first item of the stack on the top
        οc+C     prepend that to the variable C, predefined with an empty array

Mücadele:

c_              push Cs contents on the stack - the stack is now a mess of cards
  .∫            repeat input times - each player - pushing the current player number
    :             duplicate the number
     "..‘         push "player "
         Κ        prepend "player " to the number
          ⁽       uppercase the 1st letter
           e{  }  repeat 2nd input times
             ≤      put the first stack item on the top
              +     append it to "Player X" vertically (making an array)
;                 get the other copy of the player number
 H?               if POP-1 (aka if it's not 1)
   ;                swap the top 2 items - the current collumn and all the previous ones (by then they've been joined together)
    l               get its (vertical) length
     Ƨ |            push " |"
        Γ           palindromize - [" | "]
         ∙          multiply " | " vertically that length times
          ┼         append it horizontally (to the previous collumns)
           ;┼       append the current collumn

2

Yakut, 262 bayt

->p,q{a=[*0..51].shuffle
puts ["Player %d"]*p*(d=" | ")%[*1..p],(1..q*6).map{|i|(["'------'
.------.
|%X.--. |
| %s |
| %s |
| '--'%X|".split($/)[i%6]]*p*d%a[i/6*p,p].map{|j|["(\\/):()::/\\:"[u=j%4*4-4,4],":\\/:()():\\/:(__)"[u,4],j/4][i%3]}).tr("01BC","TJQK")}}

Takip etmesi daha zor ama daha kısa!

Yakut, 279 bayt

->p,q{puts [*1..p].map{|k|"Player #{k}"}*" | "
a=[*0..51].shuffle
(q*6).times{|i|puts [".------.
|%s.--. |
| %s |
| %s |
| '--'%s|
'------'".split($/)[i%6]]*p*" | "%a[i/6*p,p].map{|j|[":\\/:()():\\/:(__)"[u=j%4*4-4,4],("%X"%(j/4)).tr("01BC","TJQK"),"(\\/):()::/\\:"[u,4]][i%3]}}}

Her satır için bir biçim oluşturur, ardından onu doldurmak için %operatörü kullanır sprintf.

Kart değerinin her 3. sırada görünmesi kullanışlı. Kart değerleri, onlarla 01BCdeğiştirilen rakamlarla onaltılı olarak sunulur TJQK.

Elmas ve maça üst aynı olduğunu dikkate alarak takım sembollerden 4 bayt Kaydedilen ama için 2 sırtını eklenen -4sonunda j%4*4-4Suit kodları vardır -4 0 4 veya 8 nereye [-4,4]vasıta içinde 4 son karakteri başlayan 4 karakter dize.

Muhtemelen birkaç bayt daha kaydedebilir. Oynatıcı kimlikleri için kodu tekrar etmek çirkin.


2

PHP, 509 bayt

<?$hu='(\/}';$hv=$dv=':\/:';$du=$su=':/\:';$sv='(__)';$cu=':():';$cv='()()';$q="------";$t=$argv[1];foreach([h,d,s,c]as$a)foreach([2,3,4,5,6,7,8,9,T,J,Q,K,A]as$b)$c[]=[$b,$a];shuffle($c);$h=$a=0;for(;$a<$t;$a++)$e[]="Player $a";$f[]=join(" | ",$e);for($g=$argv[2];$g--;){$p=$i=$k=$l=$m=$r=[];$j=$h+$t;for(;$h<$j;$h++){$n=$c[$h][0];$o=$c[$h][1];$p[]=".$q.";$i[]="|$n.--. |";$k[]="| ${$o.u} |";$l[]="| ${$o.v} |";$m[]="| '--'$n|";$r[]="'$q'";}foreach([p,i,k,l,m,r]as$b)$f[]=join(" | ",${$b});}echo join('
',$f);

Çevrimiçi deneyin!

Bu kod golf benim ilk denemem, bu yüzden muhtemelen çok geliştirilebilir. Bir yerden başlamak zorunda olduğumu düşündüm. :)


1

Java (OpenJDK 8) , 784 835 843 826 815 781 775 bayt

String k(String s){return s.replaceAll("...$","\n");}
p->q->{int c=0,l=0,s[]=new int[p*q],i=0,j,t,b;java.util.List e=new java.util.Stack();String v="TJQK",o="",n[]=new String[p*q],x=o;for(;i<p;o+="Player "+i+++" | ",x+=v);o=k(o);for(i=0;i<q;i++){o=k(o+x.replace(v,".------. | "));for(j=0;j<p;j++){do{t=(int)(Math.random()*13)+1;b=(int)(Math.random()*4);}while(e.contains(t+""+v.charAt(b)));e.add(t+""+v.charAt(b));s[c]=b;n[c]=t<2?"A":t<10?""+t:""+v.charAt(t-10);o+="|2.--. | | ".replace("2",n[c++]);}o=k(o);for(j=0;j<p;j++,l++)o+="| "+(s[l]<1?"(\\/)":s[l]<3?":/\\:":":():")+" | | ";o=k(o);for(j=0;j<p;j++)o+="| "+(s[i*p+j]<2?":\\/:":s[i*p+j]<3?"(__)":"()()")+" | | ";o=k(o);for(j=0;j<p;)o+="| '--'2| | ".replace("2",n[i*p+j++]);o=k(k(o)+x.replace(v,"'------' | "));}return o;}

Çevrimiçi deneyin!

Neden downvote, spec ile uyumlu


Ayrıca, oluşturmak yerine alternatif yöntemler oluşturmalısınız Function<String,String>: ikincisi çok, çok maliyetlidir. Hem yaratılışta hem de kullanıldığında.
Olivier Grégoire

Downvote'un orijinal hata cevabı için olduğunu varsayıyorum, ancak akım doğru görünüyor, bu yüzden nötralize etmek için oy verdim. Golf yapmak için bazı küçük şeyler: parantez kaldırılabilir n[c]=t<2?"A":t<10?""+t:""+"TJQK".charAt(t-10); for(j=0;j<p;j++){o+=...;l++;}olabilir for(j=0;j<p;l++,j++)o+=...;; yapabilirsiniz return o;yerine System.out.print(o);ikinci kullanarak Functionyerine Consumer; ,y=p*qkaldırılabilir ve p*qbunun yerine doğrudan iki kez kullanabilirsiniz y. Kuşkusuz golf
oynamak

1
@KevinCruijssen Aslında hayır. İlk düzenlemeden sonra boşlukları kaldırmanın ve 1 karakterlik değişken isimlerinin kullanılmasının ötesinde "golf eforu yok" için indirdim . Benim tahminim, Roberto Graham tamamen Java golf için İpuçları yeniden okumalıdır . Mesele şu ki, meydan okuma özelliğine uyuyor, ancak kod golf etiketinin özelliğine uymuyor.
Olivier Grégoire

Daha fazla golf oynayabileceğini nasıl bilebilirim? Bu cevabı gördükten sonra vazgeçtiğimde yaklaşık 400 baytım ve geri kalanını bitirmek için yaklaşık 50 bayt daha tahmin ettim. 450 bayt - 850 arasında, neredeyse hiç golf yok.
Olivier Grégoire

s[l]<2?":/\\:":s[l]<3?":/\\:"olabilir s[l]<3?":/\\:"ve s[i*p+j]<1?":\\/:":s[i*p+j]<2?":\\/:"olabilir s[i*p+j]<2?":\\/:". @ OlivierGrégoire Ve bunun büyük olasılıkla neredeyse yarıya indirilebileceğinin farkındayım, bu yüzden aşağı oyu anlıyorum. Ancak bu çoğunlukla deneyim eksikliğidir ve gerçekten de tüm ipuçlarını defalarca okumamaktadır. Cevapta bazı şeyleri geçmişte de yaptım ve bu Java için kolay bir zorluk değil. Btw, 400-450 baytlık bir cevabınız varsa, neden ayrı bir cevap olarak göndermiyorsunuz (eğer yeterince farklıysa)? Benim oyumu alırdın. ;)
Kevin Cruijssen

1

Python 3, 332 Bayt

from random import*
P=lambda x:print(*x,sep=' | ')
R=range
def f(p,c):
 P(f"Player {i}"for i in R(p))
 d=[f".------.,|{n}.--. |,| {a[:4]} |,| {a[4:]} |,| '--'{n}|,'------'".split(",")for a,n in sample([*zip(r':/\:(__) (\/):\/: :/\::\/: :():()()'.split()*13,'A23456789TJQK'*4)],p*c)]
 for i in R(c):
  for t in zip(*d[i::c]):
   P(t)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.