โบว์ลิ่งมนุษย์หิมะ


29

(ที่เกี่ยวข้อง / แรงบันดาลใจจาก: วาดขบวนโบว์ลิ่ง )

งานอดิเรกที่สนุกสนานในช่วงฤดูหนาวที่นี่คือการเล่นโบว์ลิ่งหิมะโดยใช้ลูกบอลขนาดใหญ่ (เช่นบาสเก็ตบอล) และตุ๊กตาหิมะขนาดเล็ก มาสร้างใหม่กันใน ASCII

มนุษย์หิมะแต่ละคนประกอบด้วยสิ่งต่อไปนี้:

(.,.)
( : )

นี่คือการจัดตำแหน่งของมนุษย์หิมะสิบ "พิน"

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

เหล่านี้ "หมุด" มีความโดดเด่นจาก1การ10เป็น

7 8 9 10
 4 5 6
  2 3
   1

จนถึงมาตรฐานดังนั้น อย่างไรก็ตามไม่เหมือนกับโบว์ลิ่งทั่วไปหมุดหิมะจะถูกทำให้แบนและไม่ถูกลบออกไปอย่างสิ้นเชิง สิ่งนี้ทำโดยคนที่ต้องการหิมะให้เรียบด้วยหมุดที่ถูกกระแทก มนุษย์หิมะแบนจะแสดงโดย_____(ขีดล่างห้า) ด้วยช่องว่างด้านบน นี่คือตัวอย่างที่มี1 3 5 6 9 10หมุดแบน (หมายถึงเฉพาะ2 4 7 8หมุดที่เหลืออยู่):

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

         _____

อินพุต

  • รายการเลขจำนวนเต็มตั้งแต่1ถึงถึง10 ในรูปแบบที่สะดวกใด ๆ ที่แสดงว่าหมุดใดถูกขีดจึงจำเป็นต้องแบน
  • แต่ละหมายเลขจะปรากฏขึ้นเพียงครั้งเดียวเท่านั้นและหมายเลขสามารถเรียงตามลำดับใดก็ได้ (เรียงลำดับไม่เรียงลำดับเรียงจากมากไปน้อย) - ตัวเลือกของคุณไม่ว่าอะไรก็ตามที่ทำให้นักกอล์ฟรหัสของคุณ
  • อินพุตรับประกันว่ามีจำนวนเต็มอย่างน้อยหนึ่งตัว

เอาท์พุต

การแสดงภาพ ASCII ที่เป็นผลลัพธ์ของหมุดหิมะโดยที่หมุดถูกต้อง

กฎระเบียบ

  • ขึ้นบรรทัดใหม่หรือต่อท้ายช่องว่างหรือช่องว่างทั้งหมดเป็นตัวเลือกตราบใดที่ตัวละครตัวเองเข้าแถวอย่างถูกต้อง
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • หากเป็นไปได้โปรดใส่ลิงก์ไปยังสภาพแวดล้อมการทดสอบออนไลน์เพื่อให้ผู้คนสามารถลองใช้รหัสของคุณได้!
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการตีกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

ตัวอย่าง

1 3 5 6 9 10

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

         _____

1 2 3

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

      _____ _____

         _____

1 2 3 4 5 6 8 9 10

(.,.)
( : ) _____ _____ _____

   _____ _____ _____

      _____ _____

         _____

18
กอล์ฟรหัส? ไม่ใช่รหัสโบว์ลิ่งใช่ไหม
ทำเครื่องหมาย

เราสามารถนำตัวเลขอินพุตที่จัดทำดัชนีจาก 0 ได้หรือไม่? และถ้าเป็นไปได้ให้นำค่าอินพุทที่ไม่มีช่องว่างเช่น 0123456789 แทน 1 2 3 4 5 6 7 8 9 10?
นกกระทุงนกเป็ดน้ำ

สมบูรณ์แบบ: D ช่วยให้ฉันพยายามได้ง่ายขึ้นใน> <>
นกกระทุงนกเป็ดน้ำ

4
ฉันไม่เห็นด้วยกับตุ๊กตาหิมะที่แบนราบ

ฉันระบุว่าตัวเองเป็นมนุษย์หิมะและพบว่าแบนราบนี้
conquistador

คำตอบ:


7

05AB1E , 45 44 ไบต์

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

ลองออนไลน์!

คำอธิบาย

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

Snowman 1.0.2 , 157 bytes

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

ลองออนไลน์!

เมื่อฉันเห็นความท้าทายนี้ฉันรู้ว่าฉันต้องตอบเป็นภาษาที่สมบูรณ์แบบ ...

นี่คือรูทีนย่อยที่รับอินพุตเป็นอาร์เรย์ของตัวเลขและเอาต์พุตเป็นสตริงผ่านทาง permavar ปัจจุบัน

ห่อสำหรับ "ความสามารถในการอ่าน" / สุนทรียภาพ:

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

รุ่นที่ไม่ได้แสดงความเห็น / แสดงความคิดเห็นเล็กน้อย:

}
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
ค่อนข้างจะเป็นบริบทเดียวที่สิ่งนี้จะเป็นที่รู้จักกันในนาม "ภาษาที่สมบูรณ์แบบ",: P
DJMcMayhem

2
มนุษย์หิมะฆ่าเผ่าพันธุ์ของเขาเอง ... เจ้ามอนสเตอร์!
RudolfJelin

10

เรียงซ้อน , ไม่ใช่การแข่งขัน, 118 ไบต์

ฉันเพิ่มdeepmapและสิ่งอื่น ๆ หลังจากความท้าทายนี้พร้อมกับการแก้ไขข้อบกพร่องมากมาย ลองที่นี่!

@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

เอาท์พุท:

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

      _____ _____ 

         _____ 

ภาษานี้ดูดีมาก ตัวอย่างของ Fisher-Yates ใน wiki นั้นสวยงาม
Jordan

@ จอร์แดนขอบคุณมาก! ที่หมายถึงจำนวนมากที่จะฉัน :)
Conor โอไบรอัน

7

Python 2, 248 243 241 226 224 223 221 210 206 200 177 177 ไบต์

-5 ด้วย @Rod

-15 ขอขอบคุณ Rod อีกครั้ง

-1 ใช้การคำนวณอวกาศอีกครั้งจาก Rod

ดูยาวขึ้นเนื่องจากมีเส้นและเยื้องมากขึ้น แต่สั้นลงอย่างน่าประหลาดใจ 11 ไบต์

ฉันแน่ใจว่าจะต่ำกว่า 200 ...

ฉันพูดถูก แต่ไม่ใช่ถ้าไม่มีคำแนะนำร้ายแรงขนาด 23 ไบต์จาก @ Pietu1998 ขอบคุณมาก!

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

ลองออนไลน์!

รับอินพุตเป็นรายการจำนวนเต็ม ใหญ่เกินไปที่ 248 แต่ใช้งานได้


ขอให้เรายังคงอภิปรายนี้ในการแชท
PurkkaKoodari

6

C # 233 221 213 203 ไบต์

วิธีการใช้อาร์เรย์ int เป็นรายการของหมุดลดลง

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;}

ห่อ

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;}

ขยาย

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 และ auhmaan


2
ยินดีต้อนรับสู่ PPCG!
AdmBorkBork

ดี! คุณสามารถบันทึกไม่กี่ไบต์ (5?) ถ้าคุณใส่ i-- ใน for และเปลี่ยนnew[]{7,4,2,1}.Contains(i--)เป็นi<9&&i%3==1||i==2
Ghost

สามารถปรับปรุงนั้นได้อีกสอง (สำหรับ -7) ด้วยi==7||i<5&&i!=3
Ghost

@Ghost ขอบคุณ! ล้มลงอีกเล็กน้อยโดยการใช้ shortcurcuit ors and and non-shortcurcuit และยังคงลดลงด้วยการอ้างอิงครั้งสุดท้ายกับ ii==7|i<5&i--!=3
Erresen

คุณสามารถบันทึกไบต์บางส่วนโดยการแทนที่โดยvar o="";var x=... string o="",x=""...
raznagul

5

แบตช์ 262 ไบต์

@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

หมายเหตุ: บรรทัด 2, 3 และ 4 สิ้นสุดในช่องว่างและยังส่งออกพื้นที่ต่อท้ายในแต่ละบรรทัด สิ่งเหล่านี้สามารถลบได้ในราคา 5 ไบต์ ทำงานโดยการสร้างตัวแปร s1 ... s10 เป็นครึ่งล่างของ snowmen จากนั้นแฟบให้เป็นอาร์กิวเมนต์บรรทัดคำสั่ง แถวที่เหมาะสมจะถูกพิมพ์สองครั้งเป็นครั้งแรกที่มีส่วนครึ่งล่างถูกแทนที่ด้วยครึ่งบน สิ่งนี้จะช่วยประหยัด 18 ไบต์โดยใช้ชุดตัวแปรครึ่งบนและล่างสองชุด


1
นั่นเป็นคำตอบที่ลื่น
AdmBorkBork

4

JavaScript, 154 149 ไบต์

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 ไบต์

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

โปรแกรมที่รับอินพุตของรายการจำนวนเต็มและพิมพ์ผลลัพธ์

ชุดทดสอบ

[คำอธิบายมาในภายหลัง]


3

Pyth, 51 ไบต์

รหัสมีบาง unprintables ดังนั้นนี่คือxxdhexdump

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

ลองออนไลน์

หากไม่สามารถพิมพ์ได้ขนาด 52 ไบต์

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

ลองออนไลน์


2

Javascript 178 169 ไบต์

เป็นหลักพอร์ตจากคำตอบ C # ของฉัน

รับอาร์เรย์ int เป็นรายการของ "พิน" ที่แบน

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}

ห่อ:

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}

ขยายและอธิบาย:

// 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
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.