Tempatkan glider!

17

Ini:

masukkan deskripsi gambar di sini

adalah Glider .

Dalam Conway's Game of Life, glider adalah pola terkenal yang dengan cepat melintasi seluruh papan. Untuk tantangan hari ini, kita akan menggambar Game of Life Board seni ASCII, dan menempatkan glider di atasnya.

Papan yang kita mulai dengan ini adalah:

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

Papan ini seluruhnya terdiri dari pipa |dan garis bawah _, dan berukuran 10x10. Anda harus menulis sebuah program atau fungsi yang menggunakan dua bilangan bulat, 'x' dan 'y', dan mengeluarkan papan yang sama dengan glider pada koordinat tersebut. Misalnya, jika Anda memiliki glider di posisi (1, 1)(diindeks 0), Anda harus menampilkan yang berikut:

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

Anda dapat mengasumsikan bahwa glider tidak akan pernah ditempatkan di luar batas, sehingga x dan y akan selalu berada dalam [0-7]kisaran. Anda juga dapat memilih untuk mengambil koordinat 1-diindeks, tetapi Anda harus menentukan ini dalam jawaban Anda. Dalam hal ini, input akan selalu berada dalam [1-8]kisaran. Berikut adalah beberapa contoh (semua 0-diindeks):

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

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

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

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

Seperti biasa, Anda dapat mengambil IO Anda dalam format apa pun yang masuk akal. Ini termasuk, tetapi tidak terbatas pada string dengan baris baru, array string, array string 2d, atau menulis ke file / STDOUT. Anda juga dapat memilih urutan untuk menerima x dan y .

Karena ini adalah , celah standar dilarang, dan buat kode terpendek yang Anda bisa!

DJMcMayhem
sumber
Bisakah kita mengubah sudut mana yang mengidentifikasi posisi peluncur?
Stephen
@StephenS Tidak, koordinat harus Mengidentifikasi dari mana sudut kiri atas glider dimulai.
DJMcMayhem
Terkait
MD XF
2
the glider is a famous pattern that slowly traverses across the boar.. Perlahan? Ini adalah objek bergerak diagonal tercepat di GoL. Mencapai 1/4 dari kecepatan cahaya.
Christoph
1
@Christoph, poin yang bagus, kita bisa mengamati bahwa panjangnya tampaknya tidak berkontraksi ke arah perjalanan, tapi saya tidak tahu cara mengukur massa itu pada kecepatan relativistik.
Wossname

Jawaban:

7

MATL , 35 32 30 byte

20*+'|_'5E:21:I$)42b' 34'Q+(

Kode berisi karakter yang tidak diinginkan. Input berbasis 0. Cobalah online!

Luis Mendo
sumber
5

V , 31 , 30 byte

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

Cobalah online!

Hexdump:

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

Ini mengambil input sebagai argumen program, dan 1-diindeks.

Penjelasan:

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
DJMcMayhem
sumber
Dua pertanyaan: Apa? dan bagaimana?
Pureferret
1
@ Murniferret dua jawaban: Bahasa golf, SCIENCE (atau dia menulis V XD)
Christopher
1
@ Murniferret Saya sudah menambahkan penjelasan.
DJMcMayhem
2

Jelly , 37 35 byte

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

Cobalah online!

Bagaimana itu bekerja

ȷ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 “_*¶|”
fireflame241
sumber
1
Bagaimana Anda mengetik / menghasilkan program Anda?
RobotCaleb
1
@RobotCaleb: umumnya menyalin-menempel dari halaman kode Jelly . Saya menjalankannya di nexus TIO ketika tidak di mesin utama saya, dan tiruan dari repositori Jelly di komputer utama saya.
fireflame241
2

Python 2 , 151 byte

Akan bermain golf lebih banyak.

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)

Cobalah online!

benar-benar manusiawi
sumber
Jika Anda ingin beralih ke Python 3, Anda dapat menyimpan 3 byte dengan menggunakan [*'|_'*10+'|'] alih-alih list()panggilan.
L3viathan
2

Perl 6 , 88 byte

->\x,\y{(^10 »*»i X+ ^10).map:{<|* |_>[$_!=
(1-2i|2-i|0|1|2)+x+y*i+2i]~"|
"x(.re==9)}}
  • Bilangan kompleks digunakan untuk mewakili koordinat.

  • ^10 »*» i X+ ^10 menghasilkan grid semua bilangan kompleks dengan komponen integer dari nol hingga sembilan.

  • Mengembalikan daftar string, masing-masing memegang satu baris.

Sean
sumber
Menarik, saya tidak tahu Perl menggunakan non-ASCII. Apa yang »harus dilakukan Bagaimana cara disandikan?
DJMcMayhem
1
Hanya saja GUILLEMET KANAN POINTING Unicode, U + 00BB, dikodekan dalam UTF-8. Dalam Perl 6 dapat ditulis dengan dua kurung sudut >>, tetapi jumlah byte yang sama dengan guillemet, jadi untuk bermain golf, saya lebih suka yang terakhir karena terlihat IMHO yang lebih berkelas. Adapun apa yang dilakukannya, itu mengubah operator yang mengelilinginya menjadi "hyperoperator" yang berlaku berpasangan ke daftar atau nilai-nilai di kedua sisi. Di sini, itu mengalikan setiap elemen dari rentang 0-9dengan imemberi 0, i, 2i, ..., 9i.
Sean
1

Haskell , 96 byte

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]

Mengambil dua bilangan bulat ( xdan y) dan mengembalikan daftar Strings, yaitu daftar tipe 2D [[Char]].


Test suite:

import System.Environment

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

Ruby , 87 byte

->x,y{[a=(b='|_')*10+?|]*y+%w(|_|*|_ |_|_|* |*|*|*).map{|r|b*x+r+b*(7-x)+?|}+[a]*(7-y)}

Cobalah online!

GB
sumber
1

Mathematica, 115 113 byte

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

dimana

Ini mengambil input dalam {row, col}format, dan 1-diindeks, tetapi dapat diubah menjadi 0-diindeks tanpa menambahkan byte.

Beberapa catatan:

  1. \n adalah karakter baris baru, membutuhkan 1 byte.
  2. adalah \[Function], membutuhkan 3 byte.
  3. adalah \[Transpose], membutuhkan 3 byte.

Perhatikan bahwa "array of string" diperbolehkan, jadi saya bisa menghapus Riffle, memberi

Mathematica, 98 97 byte

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

Java 8, 165 144 byte

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

Penjelasan:

Coba di sini.

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
Kevin Cruijssen
sumber
1
Penjelasan memiliki kode yang berbeda dari jawaban Anda? Lihatlah tugas pertama ke r.
Computronium
@ Computronium Ups, terima kasih telah memperhatikan, memperbaiki. Hitungannya benar, penjelasannya benar, tautan TIO benar, tetapi jawaban yang sebenarnya masih salah yang lama ..
Kevin Cruijssen
1

JavaScript (ES6), 99 byte

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')

Mengambil input melalui currying: f(5)(2)untuk x = 5, y = 2. Koordinat tidak diindeks.

Cuplikan Tes

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">

Justin Mariner
sumber
0

SOGL , 23 byte

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

catatan: input ini diharapkan akan diindeks 1

Penjelasan:

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]
dzaima
sumber
0

Python 2 , 133 byte

x,y=input()
a=[[z for z in'_'*10]for o in'|'*10]
b=a[y+2]
a[y][x+1]=a[y+1][x+2]=b[x]=b[x+1]=b[x+2]="*"
for b in a:print o+o.join(b)+o

Cobalah online!

ElPedro
sumber
0

Arang , 28 byte

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

Cobalah online! Tautan ke mode verbose untuk deskripsi.

Khusus ASCII
sumber
Saya kecewa karena Charcoal tidak, well ... ASCII saja;)
Beta Decay
Anda dapat menghapus |_sebelum \nuntuk menyimpan byte terkompresi. (Saya mencoba beberapa cara berbeda untuk mencetak glider tetapi tidak ada yang menyelamatkan byte.)
Neil