Kardan adam bowling


29

(ilgili / ilham veren: Bir bowling formasyonu çizin )

Buradaki kış aylarında eğlenceli bir eğlence, büyük bir top (basketbol gibi) ve minik kardan adam figürleri kullanarak kardan adam bowlingi yapmaktır. Bunu ASCII'de yeniden oluşturalım.

Her kardan adam aşağıdakilerden oluşur:

(.,.)
( : )

İşte on kardan adam "pimleri" nin hizalanması

(.,.) (.,.) (.,.) (.,.)
( : ) ( : ) ( : ) ( : )
   (.,.) (.,.) (.,.)
   ( : ) ( : ) ( : )
      (.,.) (.,.)
      ( : ) ( : )
         (.,.)
         ( : )

Bu "pin" dan etiketlenmiş 1için 10olduğu gibi

7 8 9 10
 4 5 6
  2 3
   1

Şimdiye kadar, çok standart. Bununla birlikte, normal bowlingin aksine, kardan adam pimleri sadece düzleştirilir ve tamamen çıkarılmaz. Bu, vurulan herhangi bir pimin karını elle düzeltmesi gereken biri tarafından yapılır. Düzleştirilmiş bir kardan adam _____beyaz boşluk ile yukarıda (beş alt çizgi) ile temsil edilir . 1 3 5 6 9 10İğnelerin düzleştirilmiş bir örneği: (sadece 2 4 7 8iğnelerin kaldığı anlamına gelir ):

(.,.) (.,.)
( : ) ( : ) _____ _____
   (.,.)
   ( : ) _____ _____
      (.,.) 
      ( : ) _____

         _____

Giriş

  • Arasındaki tam bir listesi 1için 10 herhangi bir uygun biçimde pimler çarpması ve bu nedenle ihtiyaç edildi temsil düzleştirilebilmesini.
  • Her numara en fazla bir defa görünecektir ve sayılar herhangi bir sırada (sıralı, sıralanmamış, azalan) olabilir - seçiminiz, kodunuzu golf yapan ne olursa olsun.
  • Giriş en az bir tamsayıya sahip garantilidir.

Çıktı

Elde edilen ASCII sanatı, kardan adam pimlerinin, doğru pimlerin dümdüz şekilde gösterilmesi.

kurallar

  • Lider ya da izleyen yeni satırlar ya da boşluklar, karakterlerin kendileri doğru bir şekilde hizalandığı sürece isteğe bağlıdır.
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine geri gönderebilirsiniz.
  • Mümkünse, lütfen insanların kodunuzu deneyebilmesi için çevrimiçi bir test ortamına bir bağlantı ekleyin!
  • Standart boşluklar yasaktır.
  • Bu olduğundan, tüm normal golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Örnekler

1 3 5 6 9 10

(.,.) (.,.)
( : ) ( : ) _____ _____
   (.,.)
   ( : ) _____ _____
      (.,.) 
      ( : ) _____

         _____

1 2 3

(.,.) (.,.) (.,.) (.,.)
( : ) ( : ) ( : ) ( : )
   (.,.) (.,.) (.,.)
   ( : ) ( : ) ( : )

      _____ _____

         _____

1 2 3 4 5 6 8 9 10

(.,.)
( : ) _____ _____ _____

   _____ _____ _____

      _____ _____

         _____

18
Golf kodu ? Kod bowlingi değil mi?
Mark

0'dan indekslenen giriş numaralarını alabilir miyiz? Ve mümkünse, giriş değerlerini 1 2 3 4 5 6 7 8 9 10 yerine 0123456789 gibi boşluklar olmadan alın.
Peal Pelikan,

Mükemmel: D> <>
Teal pelikan,

4
Düzleşen kardan adamlara onay vermem.

kendimi bir kardan adam olarak tanımlıyorum ve bu düzleşmeyi buluyorum.
fetih

Yanıtlar:


7

05AB1E , 45 44 bayt

TF"(.,.)( : )"„ _5×{«4ä2ä¹N>åè})4L£Rvyø»}».c

Çevrimiçi deneyin!

açıklama

TF                                           # for N in [0 ... 9] do:
  "(.,.)( : )"                               # push string
              „ _                            # push the string " _"
                 5×                          # repeat it 5 times
                   {                         # sort
                    «                        # concatenate the strings
                     4ä                      # split the string in 4 parts
                       2ä                    # split the list in 2 parts
                         ¹N>åè               # if index+1 is in the input, push the first part
                                             # else push the second part
                              }              # end loop
                               )             # wrap stack in a list
                                4L£          # split list in parts of size 1,2,3,4
                                   R         # reverse list
                                    v        # for each list in list of lists
                                     yø      # transpose the list
                                       »     # join by spaces and newlines
                                        }    # end loop
                                         »   # join by newlines
                                          .c # centralize

46

Kardan adam 1.0.2 , 157 bayt

(()("789:045600230001"4aG::48nSdU][:#:]eq]/nM;AsI[:"_____"wR["     "wR/aC;:"( : )"wR["(.,.)"wR/aC;bI;:"  "wRdUaC;bI\#**\;aMaZ:" "aJ1AfL;aM;aM1AfL"
"aJ1AfL*))

Çevrimiçi deneyin!

Bu meydan okumayı gördüğümde, mükemmel bir dille cevap vermem gerektiğini biliyordum.

Bu, bir sayı dizisi olarak girdi alan ve geçerli permavar yoluyla bir dizge olarak çıkan bir alt yordamdır.

“Okunabilirlik” / estetik için sarılmış:

(()("789:045600230001"4aG::48nSdU][:#:]eq]/nM;AsI[
:"_____"wR["     "wR/aC;:"( : )"wR["(.,.)"wR/aC;bI
;:"  "wRdUaC;bI\#**\;aMaZ:" "aJ1AfL;aM;aM1AfL"
"aJ1AfL*))

Biraz ungolfed / yorum versiyonunu:

}
1wR`
3wR`aC`
5wR`aC`
6wR`aC`
9wR`aC`
*

((
    )(
    "789:045600230001"  // pin layout data
    4aG                 // split into groups of 4; we need each row twice
    :                   // map over groups of 2 output lines
        :               // map over pins (or whitespace)
            48nS        // subtract ascii '0'
            dU][        // duplicate the pin; we need it in the if{}
            :           // if (pin) {
                #:]eq]/nM;AsI[:"_____"wR["     "wR/aC;:"( : )"wR["(.,.)"wR/aC;bI
            ;:          // } else {
                "  "wRdUaC
            ;bI         // }
            \#**\       // maneuver the permavars around to discard pin
        ;aM
        aZ:" "aJ1AfL;aM
    ;aM
    1AfL                // flatten (simulate a flatmap)
    "
"aJ                     // join on newline
    1AfL                // flatten again into a single string
    *
))

#sP

17
Bu "mükemmel dil" olarak bilinen tek bağlam, hemen hemen: P
DJMcMayhem

2
Kendi türünü öldüren bir kardan adam ... Seni canavar!
RudolfJelin

10

yığılmış , rekabet etmeyen, 118 bayt

deepmapBu hatadan sonra bir kaç hata daha ekledim . Burada dene!

@a((7 8 9 10)(4 5 6)(2 3)(1)){e:('(.,.)
( : )' ' 
_'5 hrep)a e has#'  'hcat
}deepmap{e i:' 
 'i 3*hrep e,$hcat#/!LF+}map

Ungolfed

{ a :
  ((7 8 9 10) (4 5 6) (2 3) (1))
  { e :
    (
      '(.,.)' LF '( : )' + + 
      ' ' LF '_' + + 5 hrep
    ) @possible
    a e has @ind
    possible ind get @res
    '  ' @padding
    res padding hcat return
  } deepmap
  { e i:
    ' ' LF ' ' + + i 3 * hrep
    e ,
    $hcat insert!
    LF +
  } map
} @:bowl

(1 2 3 4 6 10) bowl out

Çıktı:

(.,.) (.,.) (.,.)       
( : ) ( : ) ( : ) _____ 
         (.,.)       
   _____ ( : ) _____ 

      _____ _____ 

         _____ 

Bu dil harika görünüyor. Vikideki Fisher-Yates örneği çok güzel.
Ürdün

@ Jordan çok teşekkür ederim! bu benim için çok şey ifade ediyor :)
Conor O'Brien,

7

Python 2, 248 243 241 226 224 223 221 210 206 200 177 bayt

-5 @Rod sayesinde

-15 Rod sayesinde tekrar

-1 Rod'dan alan hesaplamasını tekrar kullanarak

Daha fazla satır ve girintiden dolayı daha uzun görünüyor, ancak şaşırtıcı bir şekilde 11 bayt daha kısa.

Eminim bu 200'ün altına düşecek ...

Haklıydım ama @ Pietu1998'den 23 byte değerinde ciddi ipucu vermedim. Çok teşekkürler!

i,z=input(),0;m=['']*10;n=m[:]
for x in range(11):m[x-1],n[x-1]=('(.,.)',' '*5,'( : )','_'*5)[x in i::2]
for y in 10,6,3,1:
 for q in m,n:print' '*3*z+' '.join(q[y-4+z:y])
 z+=1

Çevrimiçi deneyin!

Bir tamsayı listesi olarak girdi alır. 248'de çok büyük ama işe yarıyor.



6

C # 233 221 213 203 bayt

yöntem bir int dizisini a düşen pimlerin listesi olarak alır.

string S(int[]a){string o="",x=o,y=o,z=o;for(int i=10;i>0;){var c=a.Contains(i);x=(c?"      ":"(.,.) ")+x;y=(c?"_____ ":"( : ) ")+y;if(i==7|i<5&i--!=3){o+=$"{z}{x}\n{z}{y}\n";x=y="";z+="   ";}}return o;}

örtülü

string S(int[]a){string o="",x=o,y=o,z=o;for(int i=10;i>0;)
{var c=a.Contains(i);x=(c?"      ":"(.,.) ")+x;y=(c?"_____ ":
"( : ) ")+y;if(i==7|i<5&i--!=3){o+=$"{z}{x}\n{z}{y}\n";x=y="";
z+="   ";}}return o;}

genişletilmiş

string S(int[] a)
{
    string o = "", x = o, y = o, z= o;
    for (int i = 10; i > 0;)
    {
        var c = a.Contains(i);
        x = (c ? "      " : "(.,.) ") + x;
        y = (c ? "_____ " : "( : ) ") + y;

        if (i==7|i<5&i--!=3)
        {
            o += $"{z}{x}\n{z}{y}\n";
            x = y = "";
            z += "   ";
        }
    }
    return o;
}

Ghost, raznagul ve auhmaan'ın yorumlarında önerileri ile birkaç bayt knocked.


2
PPCG'ye Hoşgeldiniz!
AdmBorkBork

Güzel! Eğer i koymak ve değiştirmek new[]{7,4,2,1}.Contains(i--)için birkaç bayt (5?) Kaydedebilirsinizi<9&&i%3==1||i==2
Ghost

Bunu ikie kadar artırabilir (-7 için) ilei==7||i<5&&i!=3
Ghost

@ Hayalet teşekkürler! kısa devre olmayan ors ve and'ları kullanarak biraz daha düşürdü ve hala son ref değeri i==7|i<5&i--!=3
düşürdüğü

Sen değiştirerek bazı bayt kaydedebilirsiniz var o="";var x=...tarafından string o="",x=""....
raznagul

5

Toplu iş, 262 bayt

@echo off
for /l %%i in (1,1,10)do set s%%i=( : ) 
for %%i in (%*)do set s%%i=_____ 
set l=call:l 
%l%%s7%%s8%%s9%%s10%
%l%"   %s4%%s5%%s6%
%l%"      %s2%%s3%
%l%"         %s1%
exit/b
:l
set s=%~1
set s=%s:( : )=(.,.)%
echo(%s:_____=     %
echo(%~1

Not: 2, 3 ve 4 numaralı satırlar bir boşlukta sona erer ve ayrıca her satırda arkada bir boşluk çıkar. Bunlar 5 baytlık bir maliyetle silinebilir. Kardan adamların alt yarısı olarak s1 ... s10 değişkenlerini oluşturarak, ardından komut satırı argümanları olarak verilenleri düzleştirerek çalışır. Uygun satırlar iki kez yazdırılır, ilk defa alt kısımlar üst kısımlarla değiştirilir. Bu, iki üst ve alt yarı değişken kümesini kullanarak 18 bayttan tasarruf sağlar.


1
Bu kaygan bir cevap.
AdmBorkBork

4

JavaScript, 154 149 bayt

f=
a=>`6 7 8 9
_3 4 5
__1 2
___0
`[r='replace'](/\d|_/g,m=>++m?~a.indexOf(m)?'_____':'( : )':'   ')[r](/.*\n?/g,m=>m[r](/ : |_/g,s=>s=='_'?' ':'.,.')+m)


I.oninput=()=>O.innerHTML=f(JSON.parse(`[${I.value.match(/\d+/g)}]`))
I.oninput()
<input id=I value="1 3 5 6 9 10"><pre id=O>


3

Pyth, 63 bayt

j.ejm+**3k;j;db)_CcR[1 3 6).e:*T]btMQ@m*T]*5d,d\_kc2"(.,.)( : )

Bir tamsayı listesinin girişini alan ve sonucu basan bir program.

Test odası

[Açıklama daha sonra gelecek]


3

Pyth, 51 bayt

Kod bazı yazdırılamayanları içeriyor, bu yüzden burada bir xxdhexdump var.

00000000: 6a6d 2e5b 3233 5f6a 3b6d 4063 323f 7d6b  jm.[23_j;m@c2?}k
00000010: 5172 2235 2035 5f22 392e 2220 3b5b 8db2  Qr"5 5_"9." ;[..
00000020: 1778 a822 6472 4673 4d50 4253 2d34 2f64  .x."drFsMPBS-4/d
00000030: 323b 38                                  2;8

Çevrimiçi deneyin.

Yazdırılamaz, 52 bayt

jm.[23_j;m@c2?}kQr"5 5_"9").,.() : ("drFsMPBS-4/d2;8

Çevrimiçi deneyin.


2

Javascript 178 169 bayt

Temelde C # cevabımdaki bir port.

Düzleştirilmiş "pimler" listesi olarak bir int dizisi alır;

f=a=>{o=x=y=z="";for(i=10;i>0;){c=a.includes(i);x=(c?"      ":"(.,.) ")+x;y=(c?"_____ ":"( : ) ")+y;if(i==7|i<5&i--!=3){o+=z+x+"\n"+z+y+"\n";x=y="";z+= "   ";}}return o}

sarılmış:

f=a=>{o=x=y=z="";for(i=10;i>0;){c=a.includes(i);
x=(c?"      ":"(.,.) ")+x;y=(c?"_____ ":"( : ) ")+y;
if(i==7|i<5&i--!=3){o+=z+x+"\n"+z+y+"\n";x=y="";
z+= "   ";}}return o}

Genişletilmiş ve Açıklaması:

// function f takes parameter a (an array of ints) 
f = a => {

    // four strings:
    // o: output
    // x: top row of snowmen
    // y: bottom row of snowmen
    // z: padding to indent the snowmen
    o = x = y = z = "";

    // loop from 10 to 1 (the pins)
    // remove the "afterthought" decrement - we can do that later
    for (i = 10; i > 0;) {

        // set the boolean c to whether the current pin has been flattened
        c = a.includes(i);

        // prefix x and y with the appropriate "sprite"
        // using a ternary if on c
        x = (c ? "      " : "(.,.) ") + x;
        y = (c ? "_____ " : "( : ) ") + y;

        // determine if we've reached the end of a row (i equals 7, 4, 2 or 1)
        // use non shortcircuit operators to save bytes and ensure we hit the final i, because...
        // we also decrement i here 
        // (we didn't do this in the for loop declaration to save a byte)
        if (i == 7 | i < 5 & i-- != 3) {

            // concatenate our rows x & y,
            // prefixing them with the padding z,
            // postfixing them with a newline
            o += z + x + "\n" + z + y + "\n";

            // reset x and y rows
            x = y = "";

            // increase our padding for next time
            z += "   ";
        }
    }

    // return our final string (no semicolon to save a byte)
    return o
}
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.