¡Coloca un planeador!


17

Esta:

ingrese la descripción de la imagen aquí

es un planeador .

En Conway's Game of Life, el planeador es un patrón famoso que atraviesa rápidamente todos los ámbitos. Para el desafío de hoy, vamos a dibujar un tablero ASCII Art Game of Life y colocar un planeador sobre él.

El tablero con el que comenzamos es este:

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

Esta placa está compuesta completamente de tuberías |y guiones bajos _, y mide 10x10. Debe escribir un programa o función que tome dos enteros, 'x' e 'y', y genere este mismo tablero con un planeador en esas coordenadas. Por ejemplo, si tenía un planeador en la posición (1, 1)(0 indexado), debe generar lo siguiente:

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

Puede suponer que el planeador nunca se colocará fuera de los límites, por lo que tanto x como y siempre estarán en el [0-7]rango. También puede optar por tomar las coordenadas indexadas en 1, pero debe especificar esto en su respuesta. En este caso, las entradas siempre estarán en el [1-8]rango. Aquí hay algunos ejemplos (todos indexados a 0):

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

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

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

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

Como de costumbre, puede tomar su IO en cualquier formato razonable. Esto incluye, pero no se limita a una cadena con nuevas líneas, una matriz de cadenas, una matriz 2D de cadenas o escribir en un archivo / STDOUT. También puede elegir en qué orden tomar x e y .

Dado que este es el , las lagunas estándar están prohibidas y hacen el código más corto que puedas.


¿Podemos cambiar qué esquina identifica la posición del planeador?
Stephen

@StephenS No, las coordenadas deben identificar dónde comienza la esquina superior izquierda del planeador.
DJMcMayhem


2
the glider is a famous pattern that slowly traverses across the boar.. ¿Despacio? Es el objeto en movimiento diagonal más rápido en GoL. Alcanza 1/4 de la velocidad de la luz.
Christoph

1
@ Christoph, buen punto, podemos observar que su longitud no parece contraerse en la dirección del viaje, pero no conozco ninguna forma de medir su masa a velocidades relativistas.
Wossname

Respuestas:



5

V , 31 , 30 bytes

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

Pruébalo en línea!

Hexdump:

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

Esto toma la entrada como argumentos del programa, y ​​1 indexado.

Explicación:

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

Dos preguntas: ¿qué? ¿y cómo?
Pureferret 01 de

1
@Pureferret dos respuestas: idiomas de golf, CIENCIA (o escribió V XD)
Christopher

1
@Pureferret He añadido una explicación.
DJMcMayhem

2

Jalea , 37 35 bytes

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

Pruébalo en línea!

Cómo funciona

ȷ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
¿Cómo escribe / genera sus programas?
RobotCaleb

1
@RobotCaleb: generalmente copiar y pegar desde la página de códigos Jelly . Los ejecuto en el nexo TIO cuando no está en mi máquina principal, y un clon del repositorio Jelly en mi computadora principal.
fireflame241

2

Python 2 , 151 bytes

Jugará más al golf.

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)

Pruébalo en línea!


Si está dispuesto a cambiar a Python 3, puede guardar 3 bytes utilizando en [*'|_'*10+'|']lugar de la list()llamada.
L3viathan

2

Perl 6 , 88 bytes

->\x,\y{(^10 »*»i X+ ^10).map:{<|* |_>[$_!=
(1-2i|2-i|0|1|2)+x+y*i+2i]~"|
"x(.re==9)}}
  • Los números complejos se usan para representar las coordenadas.

  • ^10 »*» i X+ ^10 genera la cuadrícula de todos los números complejos con componentes enteros de cero a nueve.

  • Devuelve una lista de cadenas, cada una con una línea.


Interesante, no sabía que Perl utiliza no ASCII. ¿Qué »hacer? ¿Cómo se codifica?
DJMcMayhem

1
Es solo el GUILLEMET DE DERECHO DE UNICODE, U + 00BB, codificado en UTF-8. En Perl 6, también puede escribirse como dos paréntesis angulares, >>pero esa es la misma cantidad de bytes que el guillemet, por lo que para el golf prefiero el último ya que parece un poco más elegante en mi humilde opinión. En cuanto a lo que hace, transforma al operador que rodea en un "hiperoperador" que se aplica por pares a las listas o valores en ambos lados. Aquí, multiplica cada elemento del rango 0-9por i, dando 0, i, 2i, ..., 9i.
Sean

1

Haskell , 96 bytes

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]

Toma dos enteros ( xy y) y devuelve una lista de Strings, es decir, una lista de tipo 2D [[Char]].


Banco de pruebas:

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 bytes

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

dónde

Esto toma la entrada en {row, col}formato y está indexado en 1, pero puede convertirse en indexado en 0 sin agregar bytes.

Algunas notas:

  1. \n es un carácter de nueva línea, toma 1 byte.
  2. es decir \[Function], toma 3 bytes.
  3. es decir \[Transpose], toma 3 bytes.

Tenga en cuenta que "matriz de cadenas" está permitido, por lo que puedo eliminar Riffle, da

Mathematica, 98 97 bytes

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

1

Java 8, 165 144 bytes

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

Explicación:

Pruébalo aquí

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
¿La explicación tiene un código diferente que tu respuesta? Mira la primera asignación a r.
Computronium

@Computronium Vaya, gracias por notarlo, solucionado. El conteo de adiós fue correcto, la explicación fue correcta, el enlace TIO fue correcto, pero la respuesta real seguía siendo la antigua incorrecta ..
Kevin Cruijssen

1

JavaScript (ES6), 99 bytes

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

Toma entrada a través de curry: f(5)(2) para x = 5, y = 2. Las coordenadas están indexadas a cero.

Fragmento de prueba

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 bytes

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

nota: esto espera que la entrada se indexe en 1

Explicación:

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

Carbón , 28 bytes

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

Pruébalo en línea! Enlace al modo detallado para la descripción.


Estoy decepcionado de que el carbón no sea, bueno ... solo ASCII;)
Beta Decay

Puede eliminar |_antes \nde guardar un byte comprimido. (Intenté varias formas diferentes de imprimir el planeador pero ninguna guardó ningún byte.)
Neil
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.