วางเครื่องร่อน!


17

นี้:

ป้อนคำอธิบายรูปภาพที่นี่

เป็นเครื่องร่อน

ในเกมแห่งชีวิตของคอนเวย์เครื่องร่อนเป็นรูปแบบที่มีชื่อเสียงที่ลัดเลาะไปทั่วกระดาน สำหรับความท้าทายในวันนี้เรากำลังจะวาด ASCII art Game of Life Board และวางเครื่องร่อนไว้

กระดานที่เราเริ่มต้นคือ:

|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

บอร์ดนี้ประกอบด้วยท่อ|และขีดล่าง_ทั้งหมดและเป็น 10x10 คุณต้องเขียนโปรแกรมหรือฟังก์ชั่นที่รับค่าเป็นจำนวนเต็มสองตัวคือ 'x' และ 'y' และเอาท์พุทบอร์ดเดียวกันนี้ด้วยเครื่องร่อนที่พิกัดเหล่านั้น ตัวอย่างเช่นหากคุณมีเครื่องร่อนที่ตำแหน่ง(1, 1)(ดัชนี 0) คุณจะต้องแสดงผลลัพธ์ต่อไปนี้:

|_|_|_|_|_|_|_|_|_|_|
|_|_|*|_|_|_|_|_|_|_|
|_|_|_|*|_|_|_|_|_|_|
|_|*|*|*|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

คุณสามารถสันนิษฐานได้ว่าเครื่องร่อนจะไม่ถูกวางไว้นอกขอบเขตดังนั้นทั้ง x และ y จะอยู่ใน[0-7]ช่วงเสมอ คุณอาจเลือกที่จะใช้พิกัด 1 ที่จัดทำดัชนี แต่คุณต้องระบุสิ่งนี้ในคำตอบของคุณ ในกรณีนี้อินพุตจะอยู่ใน[1-8]ช่วงเสมอ นี่คือตัวอย่าง (ดัชนี 0 ทั้งหมด):

0, 0:
|_|*|_|_|_|_|_|_|_|_|
|_|_|*|_|_|_|_|_|_|_|
|*|*|*|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

7, 7:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|*|_|
|_|_|_|_|_|_|_|_|_|*|
|_|_|_|_|_|_|_|*|*|*|

7, 4:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|*|_|
|_|_|_|_|_|_|_|_|_|*|
|_|_|_|_|_|_|_|*|*|*|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

5, 2:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|*|_|_|_|
|_|_|_|_|_|_|_|*|_|_|
|_|_|_|_|_|*|*|*|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

ตามปกติคุณอาจใช้ IO ในรูปแบบที่สมเหตุสมผล ซึ่งรวมถึง แต่ไม่ จำกัด เฉพาะสตริงที่มีการขึ้นบรรทัดใหม่อาร์เรย์ของสตริงอาร์เรย์ 2d ของสตริงหรือการเขียนลงในไฟล์ / STDOUT คุณสามารถเลือกสิ่งที่จะใช้xและyใน

ตั้งแต่นี้เป็นช่องโหว่มาตรฐานถูกแบนและทำให้รหัสที่สั้นที่สุดที่คุณสามารถ!


เราสามารถเปลี่ยนมุมที่ระบุตำแหน่งของเครื่องร่อนได้หรือไม่?
Stephen

@StephenS ไม่พิกัดควรระบุตำแหน่งที่มุมซ้ายบนของเครื่องร่อนเริ่ม
DJMcMayhem


2
the glider is a famous pattern that slowly traverses across the boar.. ช้า? มันเป็นวัตถุที่เคลื่อนที่ในแนวทแยงที่เร็วที่สุดใน GoL ถึง 1/4 ของความเร็วแสง
Christoph

1
@Christoph, จุดที่ดีเราสามารถสังเกตเห็นว่ามันมีความยาวไม่ปรากฏว่ามีการหดตัวในทิศทางของการเดินทาง แต่ฉันไม่ทราบวิธีการวัดมวลที่ความเร็วสัมพัทธ์
Wossname

คำตอบ:



5

V , 31 , 30 ไบต์

10O±°_|ÀGjjÀ|3r*kr*kh.Í*ü_/|&

ลองออนไลน์!

hexdump:

00000000: 3130 4fb1 b05f 7c1b c047 6a6a c07c 3372  10O.._|..Gjj.|3r
00000010: 2a6b 722a 6b68 2ecd 2afc 5f2f 7c26       *kr*kh..*._/|&

สิ่งนี้รับอินพุตเป็นอาร์กิวเมนต์ของโปรแกรมและทำดัชนี 1 รายการ

คำอธิบาย:

10O                         " On the following 10 lines, insert:
   ±°_                      "   10 '_' characters
      |                     "   And a '|'
       <esc>                " Return to normal mode
            ÀG              " Go to the a'th line
              jj            " Move down two lines
                À|          " Go to the b'th column
                  3r*       " and replace the next 3 characters with asterisks
                     k      " Move up a line
                      r*    " And replace this char with an asterisk
                        kh  " Move up a line and to the left
                          . " And repeat the last change we performed (replace with asterisk)
                            "
Í                           " On every line, substitute:
 *                          "   An asterisk
  ü                         "   OR
   _                        "   An underscore
    /                       " With:
     |&                     "   A bar followed by the matched pattern

คำถามสองข้อ: อะไรนะ แล้วยังไง?
Pureferret

1
@Pureferret สองคำตอบ: ภาษากอล์ฟวิทยาศาสตร์ (หรือเขาเขียน V XD)
Christopher

1
@Pureferret ฉันได้เพิ่มคำอธิบายแล้ว
DJMcMayhem

2

เยลลี่ , 37 35 ไบต์

ȷ2b1
Ḍ+“£Æßæç‘Ṭ+¢s⁵j3;0$€Fṭ0ị“_*¶|”

ลองออนไลน์!

มันทำงานอย่างไร

ȷ2b1                             - the literal [1,1,1,1,...,1,1,1] with 100 elements
Ḍ+“£Æßæç‘Ṭ+¢s⁵j3;0$€Fṭ0ị“_*¶|”   - input (x,y)
Ḍ                                - convert (x,y) to 10*x+y
 +                               - add, to get the five "*" positions,
  “£Æßæç‘                        - the literal [2,13,21,22,23]
         Ṭ                       - return an array with those positions as truthy elements
          +¢                    - Now we format: pad to length 100 with the above literal
            s⁵j3                 - add newlines (represented by 3) to each set of 10
                ;0$€F            - add pipes (represented by 0) to each
                     ṭ0          - add a 0 to the beginning
                       ị“_*¶|”   - index into the string “_*¶|”

1
คุณพิมพ์ / สร้างโปรแกรมของคุณอย่างไร?
RobotCaleb

1
@RobotCaleb: โดยทั่วไปคัดลอกวางจากเพจเจลลี่ ฉันเรียกใช้พวกเขาที่TIO Nexusเมื่อไม่ได้อยู่ที่เครื่องหลักของฉันและโคลนของที่เก็บ Jellyที่คอมพิวเตอร์หลักของฉัน
fireflame241

2

Python 2 , 151 ไบต์

จะตีกอล์ฟมากขึ้น

def f(x,y):r,x=[list('|_'*10+'|')for i in[1]*10],x*2;r[y][x+3]=r[y+1][x+5]=r[y+2][x+1]=r[y+2][x+3]=r[y+2][x+5]='*';print'\n'.join(''.join(i)for i in r)

ลองออนไลน์!


หากคุณยินดีเปลี่ยนเป็น Python 3 คุณสามารถบันทึก 3 ไบต์โดยใช้[*'|_'*10+'|']แทนlist()โทร
L3viathan

2

Perl 6 , 88 ไบต์

->\x,\y{(^10 »*»i X+ ^10).map:{<|* |_>[$_!=
(1-2i|2-i|0|1|2)+x+y*i+2i]~"|
"x(.re==9)}}
  • ใช้จำนวนเชิงซ้อนเพื่อแทนค่าพิกัด

  • ^10 »*» i X+ ^10 สร้างตารางของจำนวนเชิงซ้อนทั้งหมดที่มีส่วนประกอบจำนวนเต็มจากศูนย์ถึงเก้า

  • ส่งคืนรายการของสตริงแต่ละอันถือหนึ่งบรรทัด


น่าสนใจฉันไม่รู้ว่า Perl ใช้ non-ASCII อะไร»ทำอย่างไร มันเข้ารหัสอย่างไร
DJMcMayhem

1
มันเป็นเพียง GUILLEMET RIGHT POINTING ของ Unicode, U + 00BB, เข้ารหัสเป็น UTF-8 ใน Perl 6 มันสามารถเขียนเป็นวงเล็บสองมุม>>ได้ แต่นั่นคือจำนวนไบต์เท่ากับ guillemet ดังนั้นสำหรับการเล่นกอล์ฟฉันชอบอันหลังเพราะมันดู IMHO คลาสสิกเล็กน้อย สำหรับสิ่งที่มันทำมันจะแปลงโอเปอเรเตอร์ที่ล้อมรอบเป็น "ไฮเปอร์เปอร์เพอร์" ซึ่งใช้คู่กับรายการหรือค่าในแต่ละด้าน ที่นี่จะมีการคูณองค์ประกอบของช่วงแต่ละ0-9โดยให้i 0, i, 2i, ..., 9i
ฌอน

1

Haskell , 96 ไบต์

r=[0..9]
x#y=['|':(r>>=(\i->[last$'_':['*'|elem(i-x,j-y)$zip[1,2,0,1,2][0,1,2,2,2]],'|']))|j<-r]

รับค่าเป็นจำนวนเต็มสองจำนวน ( xและy) และส่งกลับรายการStrings เช่นรายการประเภท 2D[[Char]]ประเภท


ชุดทดสอบ:

import System.Environment

main :: IO ()
main = do
    args <- getArgs
    let (x, y) = (read $ args !! 0, read $ args !! 1)
    mapM_ putStrLn (x#y)


1

Mathematica, 115 113 ไบต์

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});""<>Riffle[#<>"|"&/@a,"\n"])

ที่ไหน

สิ่งนี้ใช้อินพุตใน{row, col}รูปแบบและถูกทำดัชนี 1 แต่สามารถเปลี่ยนเป็น 0 ได้โดยไม่ต้องเพิ่มไบต์

หมายเหตุบางส่วน:

  1. \n เป็นอักขระขึ้นบรรทัดใหม่ใช้เวลา 1 ไบต์
  2. คือ\[Function]ใช้เวลา 3 ไบต์
  3. คือ\[Transpose]ใช้เวลา 3 ไบต์

โปรดทราบว่าอนุญาตให้ใช้ "อาเรย์ของสตริง" ดังนั้นฉันสามารถลบออกRiffleได้

Mathematica, 98 97 ไบต์

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});#<>"|"&/@a)

1

Java 8, 165 144 ไบต์

x->y->{String r="";for(int i=0,j;++i<11;r+="\n")for(r+="|",j=0;++j<11;)r+=(i==x&j==y+1)|(i==x+1&j==y+2)|(i==x+2&j>=y&j<y+3)?"*|":"_|";return r;}

คำอธิบาย:

ลองที่นี่

x->y->{                  // Method with two integer parameters and String return-type
  String r="";           //  Result-String
  for(int i=0,j;++i<11;  //  Loop (1) over the rows
     r+="\n|")           //    And after each iteration add a new-line to the result-String
    for(r+="|",          //   Start by appending "|" at the start of the line
      j=0;++j<11;        //   Loop (2) over the columns
      r+=(i==x&j==y+1)|(i==x+1&j==y+2)|(i==x+2&j>=y&j<y+3)?
                         //    If this coordinate should contain a '*'
        "*|"             //     Append "*|"
       :                 //    Else:
        "_|"             //     Append "_|"
    );                   //   End of loop (2)
                         //  End of loop (1) (implicit / single-line body)
  return r;              //  Return the result-String
}                        // End of method

1
คำอธิบายมีรหัสที่แตกต่างจากคำตอบของคุณ? ดูที่การมอบหมายครั้งแรกเพื่อ r
Computronium

@Computronium โอ๊ะขอบคุณที่สังเกตเห็นได้รับการแก้ไข ลาก่อนนับถูกต้องคำอธิบายถูกต้อง TIO-link นั้นถูกต้อง แต่คำตอบที่แท้จริงยังคงเป็นคำตอบที่ไม่ถูกต้องเก่า ..
Kevin Cruijssen

1

JavaScript (ES6), 99 ไบต์

x=>y=>eval('for(i=0,o="";i<101;o+=((d=i-x-y*10)==1|d==12|d>19&d<23?"|*":"|_")+(++i%10?"":`|\n`))o')

ใช้อินพุตผ่านการเคอร์ริ่ง: f(5)(2)สำหรับ x = 5, y = 2 พิกัดจะไม่มีดัชนี

ตัวอย่างการทดสอบ

f=
x=>y=>eval('for(i=0,o="";i<101;o+=((d=i-x-y*10)==1|d==12|d>19&d<23?"|*":"|_")+(++i%10?"":`|\n`))o')

xi.oninput=yi.oninput=_=>O.innerHTML=f(xi.value)(yi.value)
O.innerHTML=f(xi.value=5)(yi.value=2)
<style>*{font-family:Consolas;}input{width:2.5em;}</style>
x: <input id="xi" type="number" min="0" max="7">,
y: <input id="yi" type="number" min="0" max="7">
<pre id="O">


0

SOGL , 23 ไบต์

LIΖ|_ΟL∙.«."¾'┼ΞΧ⌠²‘5nž

หมายเหตุ: สิ่งนี้คาดว่าอินพุตจะถูกจัดทำดัชนี 1

คำอธิบาย:

LI                       push 11
  Ζ|_                    push "|" and "_"
     Ο                   make an altrenates string [with 11 separators, which are "|" and parts "_"]
      L∙                 get an array of 10 of those
        .«               take input and multiply by 2 (x pos)
          .              take input (y pos)
           "¾'┼ΞΧ⌠²‘     push "_|*|__|_|**|*|*" - the glider in the map
                    5n   split into an array with items of length 5
                      ž  replace in the 1st [grid] array at positions [inp1*2, inp2] to 2nd array [glider]


0

ถ่าน 28 ไบต์

UO²¹χ|_J×N²N“ "}IyE%%mLBMφ/”

ลองออนไลน์! เชื่อมโยงไปยังโหมด verbose สำหรับคำอธิบาย


ฉันผิดหวังที่ Charcoal ไม่ได้เป็นอย่างนั้น ... ASCII-only;)
Beta Decay

คุณสามารถลบ|_ก่อนหน้า\nเพื่อบันทึกไบต์ที่บีบอัดได้ (ฉันลองพิมพ์วิธีที่แตกต่างกันหลายอย่างของเครื่องร่อน แต่ไม่มีใครบันทึกไบต์ใด ๆ )
Neil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.