Leben und Tod von Bäumen

8

Die Herausforderung

Schreiben Sie ein Programm, das eine Ganzzahl N als Eingabe verwendet und die Phase von Leben oder Tod ausgibt, in der sich ein Baum gerade befindet. N liegt immer zwischen 0 und 10.

Die Stufen von Leben und Tod

  • Leben: Um einen Lebensabschnitt zu zeichnen, zeichnen Sie einfach eine Basis der Größe N , die aus ^Zeichen besteht, und bewegen Sie dann 2 von N nach oben , wenn das Ergebnis größer als 0 ist, und zeichnen Sie erneut eine Zeichenzeile ^mit der Größe der neuen N . Wiederholen Sie diesen Vorgang, während N größer als 0 ist. Zum Abschluss platzieren Sie entweder ein einzelnes |Zeichen, wenn der Startwert von N ungerade ist, oder zwei ||Zeichen, wenn er gerade war.
    Beispiel:N = 5

      ^
     ^^^
    ^^^^^
      |
    

    Beachten Sie, dass bei N = 0 nur der Stiel ohne die Blätter ( ^) gezeichnet wird .

  • Tod: Dies ist ungefähr das Gleiche wie Leben , außer dass die Basis 10 - N ist. Verwenden Sie Mstattdessen ^und addieren Sie 2 zu N und zeichnen Sie die Linien mit dem gleichen Verfahren wie oben neu, aber dieses Mal addieren Sie 2 zu N, während es ist kleiner oder gleich 10.
    Beispiel:N = 3

       M
      MMM
     MMMMM
    MMMMMMM
       |
    

Das Ziel

Ihr Programm muss in 2 verschiedenen Sprachen ausgeführt werden. Beide müssen eine Eingabe N annehmen . Die erste Sprache zur Ausgabe hat das Lebensstadium eines Baum nach N hat die zweite Sprache zur Ausgabe des Tod Stufe.

Regeln

  • Dies ist , der kürzeste Code in Bytes, der alle Anforderungen erfüllt, gewinnt.
  • Der Code muss in 2 verschiedenen Sprachen ausgeführt werden. Ja, Python 2 und Python 3 sind verschiedene Sprachen .
  • Standardlücken sind verboten.
  • Nachgestellte Zeilenumbrüche oder Leerzeichen sind zulässig.

Testfälle

Eingang: N = 1

Muttersprache (Leben):

 ^
 |

Zweite Sprache (Tod):

    M
   MMM
  MMMMM
 MMMMMMM
MMMMMMMMM
    |

Eingang: N = 10

Muttersprache (Leben):

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

Zweite Sprache (Tod):

||

Viel Glück beim Codieren!

Ian H.
quelle
Kann es nachfolgende / führende Zeilenumbrüche oder nachgestellte Leerzeichen geben?
Dzaima
@dzaima Ja, ich werde das in bearbeiten.
Ian H.

Antworten:

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

In der klassischen Dyalog APL-Codierung interpretiert : - Lebensdauer: (enthält nicht druckbare Dateien), erwartet⎕IO←1

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

TryAPL hier!

{' ^|..'[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

Interpretiert in SOGLs-Codierung - Tod:

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

Probieren Sie es hier aus!

Erläuterung:

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

Dies hat viel zu lange gedauert. Golftipps für den APL-Teil sind willkommen, meistens sollte alles anwendbar sein, solange es vorher nichts ändert ûP'

Sie können die Datei (nach dem Umkehren xxd) in SOGL laden, indem Sie die Datei im Browse...Dialogfeld auswählen und dann auf klicken load SOGL codepage encoded file.

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

Probieren Sie es online aus!

Python 2 / C (gcc) , 308 Byte

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

Probieren Sie es online aus!

Jonathan Frech
quelle