Vida e Morte das Árvores


8

O desafio

Escreva um programa que use um número N como entrada e produza o estágio de vida ou morte em que uma árvore está atualmente. N sempre estará entre 0 e 10.

As etapas da vida e da morte

  • Vida: Para desenhar um estágio da vida, simplesmente desenhe uma base de tamanho N , composta por ^caracteres, mova para cima e subtraia 2 de N , se o resultado for maior que 0, e desenhe uma linha de ^caracteres novamente, novamente com o tamanho da nova N . Repita enquanto N é maior que 0. Para finalizar, coloque um único |caractere se o valor inicial de N for ímpar ou dois ||caracteres se for par.
    Exemplo:N = 5

      ^
     ^^^
    ^^^^^
      |
    

    Observe que, se N = 0, apenas a haste será desenhada, sem as folhas ( ^) nelas.

  • Death: É aproximadamente o mesmo que Life , exceto que a base é 10-N , você usa em Mvez de ^e adiciona 2 a N e redesenha as linhas com o mesmo procedimento acima, mas desta vez você adiciona 2 a N enquanto é menor ou igual a 10.
    Exemplo:N = 3

       M
      MMM
     MMMMM
    MMMMMMM
       |
    

O objetivo

O seu programa tem que ser executado em 2 línguas diferentes, tanto tem que dar uma entrada de N . O primeiro idioma deve produzir o estágio de vida de uma árvore de acordo com N , o segundo idioma deve gerar o estágio de morte .

Regras

  • Este é o , o código mais curto em bytes que atende a todos os requisitos.
  • O código deve ser executado em 2 idiomas diferentes. Sim, Python 2 e Python 3 são idiomas diferentes .
  • As brechas padrão são proibidas.
  • Novas linhas ou espaços à direita são permitidos.

Casos de teste

Entrada: N = 1

Primeira língua (vida):

 ^
 |

Segunda língua (morte):

    M
   MMM
  MMMMM
 MMMMMMM
MMMMMMMMM
    |

Entrada: N = 10

Primeira língua (vida):

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

Segunda língua (morte):

||

Boa sorte na codificação!


pode haver novas linhas à direita / à esquerda ou espaços à direita?
dzaima 30/09

@dzaima Sim, eu vou editar que no.
Ian H.

Respostas:


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 na codificação Dyalog APL clássica : - life: (contém não imprimíveis), espera⎕IO←1

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

TryAPL aqui!

{' ^|..'[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 na codificação de SOGLs - morte:

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

Experimente aqui!

Explicação:

{∑⁴╝υ”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

Isso demorou demais. Dicas de golfe para a parte APL são bem-vindas, tudo deve ser aplicado desde que não mude nada antes ûP'

Você pode carregar o arquivo (após a reversão xxd) no SOGL , selecionando o arquivo na Browse...caixa de diálogo e clicando em 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
#*/_

Experimente online!

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
#*/_

Experimente online!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.