Vida y muerte de los árboles


8

El reto

Escriba un programa que tome un número entero N como entrada y genere la etapa de vida o muerte en la que se encuentra actualmente un árbol. N siempre estará entre 0 y 10.

Las etapas de la vida y la muerte

  • Vida: para dibujar una etapa de la vida, simplemente dibuja una base de tamaño N , que consiste en ^caracteres, luego sube y resta 2 de N , si el resultado es mayor que 0, y dibuja una línea de ^caracteres nuevamente, nuevamente con el tamaño de la nueva N . Repita mientras N es mayor que 0. Para finalizar, coloque un solo |carácter si el valor inicial de N es impar o dos ||caracteres si fue par.
    Ejemplo:N = 5

      ^
     ^^^
    ^^^^^
      |
    

    Tenga en cuenta que si N = 0, solo se dibujará el tallo, sin las hojas ( ^) en ellos.

  • Muerte: Esto es más o menos lo mismo que Vida , excepto que la base es 10 - N , usa en Mlugar de ^y agrega 2 a N y vuelve a dibujar las líneas con el mismo procedimiento que el anterior, pero esta vez agrega 2 a N mientras es menor o igual a 10.
    Ejemplo:N = 3

       M
      MMM
     MMMMM
    MMMMMMM
       |
    

La meta

Su programa tiene que ejecutar en 2 idiomas diferentes ambos tienen que tener una entrada de N . El primer idioma tiene que dar salida a la etapa de vida de un árbol de acuerdo con N , el segundo idioma tiene que dar salida a la etapa de muerte .

Reglas

  • Este es el , el código más corto en bytes que cumple con todos los requisitos gana.
  • El código tiene que ejecutarse en 2 idiomas diferentes. Sí, Python 2 y Python 3 son idiomas diferentes .
  • Las lagunas estándar están prohibidas.
  • Se permiten nuevas líneas o espacios al final.

Casos de prueba

Entrada: N = 1

Primer idioma (vida):

 ^
 |

Segundo idioma (muerte):

    M
   MMM
  MMMMM
 MMMMMMM
MMMMMMMMM
    |

Entrada: N = 10

Primer idioma (vida):

    ^^
   ^^^^
  ^^^^^^
 ^^^^^^^^
^^^^^^^^^^
    ||

Segundo idioma (muerte):

||

Buena suerte codificando!


¿puede haber nuevas líneas finales / iniciales o espacios finales?
dzaima

@dzaima Sí, lo editaré en.
Ian H.

Respuestas:


10

Dyalog APL / SOGL, 70 65 63 62 bytes

0000000: 7b0d 04eb c0fd 5832 5c49 e32a 2e4c ac20  {.....X2\I.*.L. 
0000010: 4d2a 5b3a 836b 6b7d 01ea 500d 9b31 a90f  M*[:.kk}..P..1..
0000020: 7b0f c285 c8c7 b932 c00e f8b1 c70f 7db0  {......2......}.
0000030: 32c2 8531 9c85 80b2 b50f aa32 f97d       2..1.......2.}

Interpretado en la codificación Dyalog APL clásica : - vida: (contiene no imprimibles), espera⎕IO←1

{' ^|⎕X2I┤z.L?pMzÅÏÏ}ûP'[1+⍵{⍵,⍨⌽⍉(2|⍺)↓⍉⍵}↑2,⍨1/⍨¨⍳⌈⍵÷2]}

¡Prueba aquí!

{' ^|..'[1+⍵{⍵,⍨⌽⍉(2|⍺)↓⍉⍵}↑2,⍨1/⍨¨⍳⌈⍵÷2]}

         1+      add 1 to every value
 ' ^|..'[  ....] index the array getten below into " ^|.." with SOGLs code never being indexed in


⍵{..}↑2,⍨1/⍨¨⍳⌈⍵÷2

          1/⍨¨      replace each with that many 1s
              ⍳     the first ... numbers
               ⌈      ceiling of
                ⍵÷2     the right argument divided by 2
       2,⍨          append 2
      ↑             mix; convert to a 2D array, padding with zeroes
⍵{..}               execute that function with the arguments ⍵ - my right argument and the result of above


   {⍵,⍨⌽⍉(2|⍺)↓⍉⍵}  helper function
    ⍵,⍨             append the right arg to
               ⍉⍵     the right arg transposed
              ↓       without the first ... rows
         (2|⍺)          remainder of left arg ÷ 2
       ⌽⍉             transposed and reversed

Interpretado en la codificación SOGLs - muerte:

{∑⁴╝υ”X2\I┐*.Lκ M*[:≥kk}¹╚P∑Β1Ι»{»φ√ωΩΡ2υ«⌠ΝΩ»}μ2φ√1β√↓νΟ»ι2⌡}

Pruébalo aquí!

Explicación:

{∑⁴╝υ”X                         push "{∑⁴╝υ" and pop it - noop
       2\                       push input divides by 2
         I┐*                    get that many + 1 vertical bars
            .Lκ                 push 10-input
                M*              get that many "M"s as a string
                  [    }        while ToS isn't falsy (here: isn't "")
                   :              duplicate the string
                    ≥             put the duplicate at the stacks bottom
                     kk           remove the last 2 letters (does nothing when the string is empty)
                        ¹       wrap everything in an array
                         ╚      center horizontally
                          P     print that
                           ...  execute a bunch of random nonsense which luckily does nothing

Esto tomó demasiado tiempo. Los consejos de golf para la parte APL son bienvenidos, todo debería ser aplicable siempre que no cambie nada antes ûP'

Puede cargar el archivo (después de invertir xxd) en SOGL seleccionando el archivo en el Browse...cuadro de diálogo y luego haciendo clic load SOGL codepage encoded file.





2

C (gcc) / Python 2 , 308 bytes

#define _\
"""
main(N,n,j,k){scanf("%d",&N);j=-~!(N%2);for(n=j;n<=N;n+=2){printf("%*c",(N-n)/2+1,94);for(k=n-1;k;k--)printf("^");puts("");}printf("%*c",++N/2,124);N%2?puts("|"):0;}
#define _"""
#define/*
N=10-input();j=[1,0][N%2]
for n in range(1,-~N,2):print(N-n)/2*" "+"M"*(n+j)
print~-N/2*" "+"|"*-~j
#*/_

Pruébalo en línea!

Python 2 / C (gcc) , 308 bytes

#define _\
"""
main(N,n,j,k){scanf("%d",&N);j=-~!(N%2);for(n=j;n<=N;n+=2){printf("%*c",(N-n)/2+1,94);for(k=n-1;k;k--)printf("^");puts("");}printf("%*c",++N/2,124);N%2?puts("|"):0;}
#define _"""
#define/*
N=10-input();j=[1,0][N%2]
for n in range(1,-~N,2):print(N-n)/2*" "+"M"*(n+j)
print~-N/2*" "+"|"*-~j
#*/_

Pruébalo en línea!

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.