Kehidupan dan Kematian Pohon

8

Tantangan

Tulis sebuah program yang mengambil bilangan bulat N sebagai input, dan output tahap kehidupan atau kematian tempat pohon saat ini. N akan selalu antara 0 dan 10.

Tahapan Hidup dan Mati

  • Kehidupan: Untuk menggambar tahap kehidupan, cukup menggambar basis ukuran N , yang terdiri dari ^karakter, lalu naik dan kurangi 2 dari N , jika hasilnya lebih besar dari 0, dan menggambar garis ^karakter lagi, lagi dengan ukuran dari N baru . Ulangi sementara N lebih besar dari 0. Untuk menyelesaikan, letakkan salah satu |karakter jika nilai awal N adalah ganjil, atau dua ||karakter jika itu genap.
    Contoh:N = 5

      ^
     ^^^
    ^^^^^
      |
    

    Perhatikan bahwa jika N = 0, hanya batang yang akan ditarik, tanpa daun ( ^) pada mereka.

  • Kematian: Ini kira-kira sama dengan Life , kecuali bahwa dasarnya adalah 10 - N , Anda menggunakan Msebagai ganti ^dan Anda menambahkan 2 ke N dan menggambar ulang garis dengan prosedur yang sama seperti di atas, tetapi kali ini Anda menambahkan 2 ke N saat itu lebih kecil atau sama dengan 10.
    Contoh:N = 3

       M
      MMM
     MMMMM
    MMMMMMM
       |
    

Hasil

Program Anda harus dijalankan dalam 2 bahasa yang berbeda baik harus mengambil masukan N . Bahasa pertama harus menampilkan tingkat kehidupan pohon menurut N , bahasa kedua harus keluaran tingkat kematian .

Aturan

  • Ini adalah , kode terpendek dalam byte yang memenuhi semua persyaratan yang dimenangkan.
  • Kode harus dijalankan dalam 2 bahasa yang berbeda. Ya, Python 2 dan Python 3 adalah bahasa yang berbeda .
  • Celah standar dilarang.
  • Trailing newlines atau spasi diizinkan.

Uji Kasus

Memasukkan: N = 1

Bahasa pertama (kehidupan):

 ^
 |

Bahasa kedua (kematian):

    M
   MMM
  MMMMM
 MMMMMMM
MMMMMMMMM
    |

Memasukkan: N = 10

Bahasa pertama (kehidupan):

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

Bahasa kedua (kematian):

||

Semoga berhasil coding!

Ian H.
sumber
dapatkah ada trailing / memimpin baris baru atau spasi tambahan?
dzaima
@zaza Ya, saya akan mengeditnya.
Ian H.

Jawaban:

10

Dyalog APL / SOGL, 70 65 63 62 byte

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

Ditafsirkan klasik Dyalog APL encoding : - hidup: (mengandung unprintables), mengharapkan⎕IO←1

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

CobaAPL di sini!

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

Diterjemahkan dalam pengkodean SOGL - kematian:

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

Coba Di Sini!

Penjelasan:

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

Ini memakan waktu terlalu lama .. Tip golf untuk bagian APL dipersilakan, semuanya sebagian besar harus berlaku selama itu tidak mengubah apa pun sebelumnya ûP'

Anda dapat memuat file (setelah membalikkan xxd) di SOGL dengan memilih file dalam Browse...dialog dan kemudian mengklik load SOGL codepage encoded file.

dzaima
sumber
7

Python 2 dan Python 3 , 119 110 109 byte

r=p='';n=1/2>0;b=(-1)**n*int(input())+10*n
while b>0:r=p+'^M'[n]*b+'\n'+r;b-=2;p+=' '
print(r+p[1:]+'||'[b:])

Cobalah online! (Python 2, hidup)

Cobalah online! (Python 3, kematian)

ovs
sumber
b=int(input())dan kemudian if n:b=10-bmenyimpan byte.
Lynn
2

C (gcc) / Python 2 , 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
#*/_

Cobalah online!

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

Cobalah online!

Jonathan Frech
sumber