Sự sống và cái chết của cây


8

Các thách thức

Viết chương trình lấy số nguyên N làm đầu vào và đưa ra giai đoạn sống hoặc chết mà cây hiện đang ở. N sẽ luôn nằm trong khoảng từ 0 đến 10.

Các giai đoạn của sự sống và cái chết

  • Cuộc sống: Để vẽ một giai đoạn của cuộc sống, chỉ cần vẽ một cơ sở có kích thước N , bao gồm các ^ký tự, sau đó di chuyển lên và trừ 2 từ N , nếu kết quả lớn hơn 0 và vẽ lại một dòng ^ký tự, một lần nữa với kích thước của mới N . Lặp lại trong khi N lớn hơn 0. Để kết thúc, đặt một |ký tự đơn nếu giá trị bắt đầu của N là số lẻ hoặc hai ||ký tự nếu là số chẵn.
    Thí dụ:N = 5

      ^
     ^^^
    ^^^^^
      |
    

    Lưu ý rằng nếu N = 0, chỉ có thân cây sẽ được rút ra, không có lá ( ^) trên chúng.

  • Cái chết: Điều này gần giống với Cuộc sống , ngoại trừ cơ sở là 10 - N , bạn sử dụng Mthay vì ^và bạn thêm 2 vào N và vẽ lại các dòng với quy trình tương tự như trên, nhưng lần này bạn thêm 2 vào N trong khi nó nhỏ hơn hoặc bằng 10.
    Ví dụ:N = 3

       M
      MMM
     MMMMM
    MMMMMMM
       |
    

Mục đích

Chương trình của bạn có để chạy trong 2 ngôn ngữ khác nhau cả hai đều có tham gia một đầu vào N . Ngôn ngữ thứ nhất phải xuất ra giai đoạn sống của cây theo N , ngôn ngữ thứ hai phải xuất ra giai đoạn chết .

Quy tắc

  • Đây là , mã ngắn nhất tính bằng byte đáp ứng tất cả các yêu cầu thắng.
  • Mã phải chạy bằng 2 ngôn ngữ khác nhau. Có, Python 2 và Python 3 là các ngôn ngữ khác nhau .
  • Sơ hở tiêu chuẩn bị cấm.
  • Trailing newlines hoặc không gian được cho phép.

Các trường hợp thử nghiệm

Đầu vào: N = 1

Ngôn ngữ đầu tiên (cuộc sống):

 ^
 |

Ngôn ngữ thứ hai (cái chết):

    M
   MMM
  MMMMM
 MMMMMMM
MMMMMMMMM
    |

Đầu vào: N = 10

Ngôn ngữ đầu tiên (cuộc sống):

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

Ngôn ngữ thứ hai (cái chết):

||

Chúc may mắn mã hóa!


có thể có dấu vết / dẫn dòng mới hoặc dấu cách không gian?
dzaima

@dzaima Vâng, tôi sẽ chỉnh sửa nó trong.
Ian H.

Câu trả lời:


10

Thuốc nhuộm 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.}

Giải thích trong mã hóa APL Dyalog cổ điển : - cuộc sống: (chứa không thể in được), mong đợi⎕IO←1

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

Hãy thử tại đây!

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

Giải thích trong mã hóa SOGL - cái chết:

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

Hãy thử nó ở đây!

Giải trình:

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

Điều này diễn ra quá lâu .. Lời khuyên chơi gôn cho phần APL đều được hoan nghênh, mọi thứ chủ yếu nên được áp dụng miễn là nó không thay đổi bất cứ điều gì trước đó ûP'

Bạn có thể tải tệp (sau khi đảo ngược xxd) trong SOGL bằng cách chọn tệp trong Browse...hộp thoại và sau đó nhấp load SOGL codepage encoded file.





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

Hãy thử trực tuyến!

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

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.