Umieść szybowiec!

17

To:

wprowadź opis zdjęcia tutaj

jest szybowcem .

W grze życia Conwaya szybowiec jest znanym wzorem, który szybko przemierza planszę. Na dzisiejsze wyzwanie narysujemy deskę ASCII Game of Life Board i umieścimy na niej szybowiec.

Plansza, od której zaczynamy jest następująca:

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

Ta deska składa się w całości z rur |i znaków podkreślenia _i ma wymiary 10x10. Musisz napisać program lub funkcję, która przyjmuje dwie liczby całkowite, „x” i „y”, i wysyła tę samą tablicę szybowcem na tych współrzędnych. Na przykład, jeśli miałeś szybowiec w pozycji (1, 1)(indeksowany 0), musisz wypisać następujące dane:

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

Możesz założyć, że szybowiec nigdy nie zostanie umieszczony poza granicami, więc zarówno x, jak i y zawsze będą w [0-7]zakresie. Możesz także wybrać współrzędne 1-indeksowane, ale musisz to określić w swojej odpowiedzi. W takim przypadku dane wejściowe zawsze będą w [1-8]zakresie. Oto kilka przykładów (wszystkie indeksowane 0):

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

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

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

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

Jak zwykle możesz wziąć swoje IO w dowolnym rozsądnym formacie. Obejmuje to między innymi ciąg znaków z nowymi liniami, tablicę ciągów, tablicę ciągów 2d lub zapis do pliku / STDOUT. Można również wybrać, co by wziąć X i Y w.

Ponieważ jest to , standardowe luki są zakazane i tworzą najkrótszy kod, jaki możesz!

DJMcMayhem
źródło
Czy możemy zmienić, który narożnik określa pozycję szybowca?
Stephen
@StephenS Nie, współrzędne powinny określać, gdzie zaczyna się lewy górny róg szybowca.
DJMcMayhem
2
the glider is a famous pattern that slowly traverses across the boar.. Powoli? Jest to najszybciej poruszający się po przekątnej obiekt w GoL. Osiąga 1/4 prędkości światła.
Christoph
1
@Christoph, dobra uwaga, możemy zauważyć, że jego długość nie wydaje się kurczyć w kierunku podróży, ale nie znam żadnego sposobu pomiaru jej masy przy prędkościach relatywistycznych.
Wossname

Odpowiedzi:

7

MATL , 35 32 30 bajtów

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

Kod zawiera znaki niedrukowalne. Dane wejściowe są oparte na 0. Wypróbuj online!

Luis Mendo
źródło
5

V , 31 , 30 bajtów

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

Wypróbuj online!

Hexdump:

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

Pobiera to dane wejściowe jako argumenty programu i indeksowane 1.

Wyjaśnienie:

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
źródło
Dwa pytania: co? i jak?
Pureferret
1
@Pureferret dwie odpowiedzi: języki golfa, NAUKA (lub napisał V XD)
Christopher
1
@Pureferret Dodałem wyjaśnienie.
DJMcMayhem
2

Galaretka , 37 35 bajtów

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

Wypróbuj online!

Jak to działa

ȷ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
źródło
1
Jak piszesz / generujesz swoje programy?
RobotCaleb
1
@RobotCaleb: ogólnie kopiowanie-wklejanie ze strony kodowej Jelly . Uruchamiam je w Nexusie TIO, gdy nie ma go na moim głównym komputerze, oraz klon repozytorium Jelly na moim głównym komputerze.
fireflame241
2

Python 2 , 151 bajtów

Będzie więcej golfa.

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)

Wypróbuj online!

całkowicie ludzki
źródło
Jeśli chcesz przejść na Python 3, możesz zapisać 3 bajty, używając [*'|_'*10+'|']zamiast list()połączenia.
L3viathan
2

Perl 6 , 88 bajtów

->\x,\y{(^10 »*»i X+ ^10).map:{<|* |_>[$_!=
(1-2i|2-i|0|1|2)+x+y*i+2i]~"|
"x(.re==9)}}
  • Liczby zespolone służą do przedstawienia współrzędnych.

  • ^10 »*» i X+ ^10 generuje siatkę wszystkich liczb zespolonych ze składnikami liczb całkowitych od zera do dziewięciu.

  • Zwraca listę ciągów znaków, z których każda zawiera jedną linię.

Sean
źródło
Interesujące, nie wiedziałem, że Perl wykorzystuje nie-ASCII. Co ma »zrobić? Jak to jest zakodowane?
DJMcMayhem
1
To tylko GUILLEMET PRAWEGO POINTINGU Unicode, U + 00BB, zakodowany w UTF-8. W Perlu 6 można go równie dobrze zapisać jako dwa nawiasy kątowe, >>ale jest to ta sama liczba bajtów, co guillemet, więc do gry w golfa wolę ten drugi, ponieważ wygląda nieco bardziej klasycznie IMHO. Jeśli chodzi o to, co robi, przekształca otaczającego operatora w „hiperoperator”, który stosuje się parami do list lub wartości po obu stronach. Tutaj mnoży każdy element zakresu 0-9przez i, dając 0, i, 2i, ..., 9i.
Sean
1

Haskell , 96 bajtów

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]

Pobiera dwie liczby całkowite ( xi y) i zwraca listę Strings, tj. Listę typu 2D [[Char]].


Zestaw testowy:

import System.Environment

main :: IO ()
main = do
    args <- getArgs
    let (x, y) = (read $ args !! 0, read $ args !! 1)
    mapM_ putStrLn (x#y)
Rozszerzona czwarta
źródło
1

Mathematica, 115 113 bajtów

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

gdzie

To wymaga wkładu {row, col} formacie i jest indeksowane 1, ale można je przekształcić w indeksy 0 bez dodawania bajtów.

Niektóre uwagi:

  1. \n jest znakiem nowej linii, zajmuje 1 bajt.
  2. to \[Function]zajmuje 3 bajty.
  3. to \[Transpose]zajmuje 3 bajty.

Pamiętaj, że „tablica ciągów znaków” jest dozwolona, ​​więc mogę ją po prostu usunąć Riffle , daje

Mathematica, 98 97 bajtów

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});#<>"|"&/@a)
użytkownik202729
źródło
1

Java 8, 165 144 bajtów

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

Wyjaśnienie:

Wypróbuj tutaj.

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
źródło
1
Wyjaśnienie ma inny kod niż twoja odpowiedź? Spójrz na pierwsze przypisanie do r.
Computronium
@ Computronium Ups, dzięki za zauważenie, naprawione. Liczba bajtów była poprawna, wyjaśnienie poprawne, link TIO był poprawny, ale faktyczna odpowiedź wciąż była stara, niepoprawna.
Kevin Cruijssen
1

JavaScript (ES6), 99 bajtów

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

Pobiera wkład poprzez curry: f(5)(2) dla x = 5, y = 2. Współrzędne są zerowane.

Test Snippet

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
źródło
0

SOGL , 23 bajty

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

Uwaga: oczekuje się, że dane wejściowe będą indeksowane 1

Wyjaśnienie:

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
źródło
0

Python 2 , 133 bajty

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

Wypróbuj online!

ElPedro
źródło
0

Węgiel drzewny , 28 bajtów

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

Wypróbuj online! Link do trybu pełnego opisu.

Tylko ASCII
źródło
Jestem rozczarowany, że węgiel drzewny nie jest, cóż ... Tylko ASCII;)
Beta Decay
Możesz usunąć |_przed, \naby zapisać skompresowany bajt. (Próbowałem kilku różnych sposobów drukowania szybowca, ale żaden nie zapisał żadnych bajtów.)
Neil