Casciitum Scribe


23

Giới thiệu

Cacti có nhiều kích cỡ, hình dạng và màu sắc khác nhau. Tuy nhiên, cây xương rồng mang tính biểu tượng nhất và phải có ở mọi phương Tây phải là saguaro . Các tính năng quan trọng là kích thước và cánh tay của nó, đã xác định diện mạo xương rồng rập khuôn.

Nhiệm vụ của bạn là đưa saguaro vào thế giới ASCII. Tuy nhiên, - như trong thế giới thực - không có saguaro giống như thế khác, vì vậy chương trình của bạn phải có khả năng tạo saguaros với các cấu hình cánh tay khác nhau.

Một ví dụ saguaro

  • Đầu vào: [0b10, 0b11]( [2, 3]ở dạng thập phân, độ dài đầu vào của 2)
     _     
    / \    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

Thông số kỹ thuật

Một saguaro luôn có một đế và đỉnh, với số lượng thân khác nhau ở giữa. Các bộ phận thân cây có thể không có cánh tay, một cánh tay bên phải, một cánh tay trái hoặc hai cánh tay.

Các mẫu tăng trưởng Saguaro được đưa ra dưới dạng danh sách đầu vào chứa các giá trị hai bit. 00có nghĩa là không có cánh tay, 01một cánh tay bên phải, 10một cánh tay bên trái và 11hai cánh tay (tất cả đều ở dạng nhị phân). Độ dài của danh sách đầu vào xác định chiều cao của saguaro.

Phần Saguaro trông như sau. Các bộ phận xương rồng được bao quanh bởi octothorps #, cho rõ ràng sẽ không được in.
Chiều cao của saguaro luôn bằng 4+6*kký tự cho các số nguyên không âm k.

#############
#     _     # Saguaro top
#    / \    #
#############
# _  | |  _ # Stem, both arms
#/ \ | | / \# Stem id: 11
#| | | | | |#
#\ \_| |_/ /#
# \__   __/ #
#    \ /    #
#############
# _  | |    # Stem, left arm
#/ \ | |    # Stem id: 10
#| | | |    #
#\ \_| |    #
# \__  |    #
#    \ |    #
#############
#    | |  _ # Stem, right arm
#    | | / \# Stem id: 01
#    | | | |#
#    | |_/ /#
#    |  __/ #
#    | /    #
#############
#    | |    # Stem, no arms
#    | |    # Stem id: 00
#    | |    #
#    | |    #
#    | |    #
#    | |    #
#############
#    | |    # Saguaro base
#    | |    #
#############

Đầu vào

Như đã nói trước đây, đầu vào bao gồm một danh sách các giá trị hai bit ( 0, 1, 2, 3theo số thập phân). Nó có thể được đưa ra trong bất kỳ định dạng hợp lý. Phần tử đầu tiên của danh sách tương ứng với phần thân cao nhất của saguaro, phần tử thứ hai với phần thân cao thứ hai của nó, v.v.
Nếu bạn muốn, bạn có thể yêu cầu độ dài của danh sách đầu vào làm đầu vào bổ sung. Vui lòng ghi rõ trong câu trả lời của bạn nếu bạn làm như vậy.

Đầu ra

Saguaro ASCII đầu ra của bạn nên được xây dựng bằng cách sử dụng các bộ phận chính xác như được mô tả ở trên. Trailing space trên một dòng và trailing dòng mới được bỏ qua; bạn có thể in nhiều hơn, ít hơn hoặc nhiều như được chỉ định ở trên.

Quy tắc

  • Áp dụng sơ hở tiêu chuẩn
  • Đây là , số byte của chương trình nên tối thiểu

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

  • Một ngoại lệ. Đầu vào:[0b01, 0b00, 0b01, 0b11]
     _     
    / \    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

  • Cánh tay xen kẽ. Đầu vào:[0b10, 0b01, 0b10]
     _     
    / \    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
    | |    
    | |    

  • Một sự phong phú của vũ khí. Đầu vào:[0b11, 0b11]
     _     
    / \    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

  • Không có cánh tay, còn được gọi là giáo. Đầu vào:[0b00]
     _     
    / \    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    

  • Không có cơ thể, một số người gọi nó là một cây xương rồng trẻ. Đầu vào:[]
     _     
    / \    
    | |    
    | |    


Tôi có thể lấy đầu vào làm số lượng phần và sau đó mỗi phần số riêng biệt không? (ví dụ: trường hợp thử nghiệm đầu tiên sẽ là 4 1 0 1 3)
dzaima

chúng ta có thể bỏ qua các không gian dấu?
Brian H.

@dzaima Bạn có thể.
Jonathan Frech

@BrianH. Vâng; dấu cách được bỏ qua trên mỗi dòng.
Jonathan Frech

Câu trả lời:


10

Than , 50 49 byte

↘_\¶/F²«J¹¦²Fθ¿﹪÷Iκ⁺¹ι²”{➙∧⊟≕δaL7YF¬⊕ρ↥↖_K”↓⁶↓²‖T

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

↘_\¶/

Vẽ đỉnh.

F²«

Vòng qua mỗi bên.

J¹¦²

Nhảy đến ngay dưới bên phải của đầu.

Fθ

Vòng qua từng phần thân.

¿﹪÷Iκ⁺¹ι²

Kiểm tra xem có một cánh tay.

”{➙∧⊟≕δaL7YF¬⊕ρ↥↖_K”

Nếu vậy in một cánh tay.

↓⁶

Nếu không thì chỉ cần in một hàng dọc.

↓²

Sau khi in thân cây, in cơ sở.

‖T

Phản ánh sẵn sàng để vẽ phía bên kia. Khi cả hai bên được rút ra, các bên sẽ được phản hồi trở lại vị trí cuối cùng của chúng.


7

JavaScript (ES6), 210 byte

Tôi đã dành quá nhiều thời gian cho một giải pháp khác trước khi nhận ra có một cách tốt hơn, nó không khiến tôi mất nhiều thời gian như tôi muốn làm việc này.

a=>`     _
    / \\`+a.map(([x,y])=>`
 1  | |  2
3 5 | | 4 6
7 7 | | 8 8
5 51| |24 4
 511${`| `[x]} ${`| `[y]}224
    ${`|\\`[x]} `.replace(/\d/g,m=>` _/\\|`[m%2?x*-~m/2:y*m/2])+`|/`[y],s=`
    | |`).join``+s+s

Thử nó

o.innerText=(f=
a=>`     _
    / \\`+a.map(([x,y])=>`
 1  | |  2
3 5 | | 4 6
7 7 | | 8 8
5 51| |24 4
 511${"| "[x]} ${"| "[y]}224
    ${"|\\"[x]} `.replace(/\d/g,m=>` _/\\|`[m%2?x*-~m/2:y*m/2])+"|/"[y],s=`
    | |`).join``+s+s
)(i.value=["11","10","01","00"]);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>


điều này trong việc lấy nghĩa đen 00,01,10,11làm đầu vào, thay vì đầu vào nhị phân hoặc 0,1,2,3. sử dụng OP test trường hợp này thất bại.
Brian H.

@BrianH.: Trích dẫn thông số thách thức về đầu vào: " Nó có thể được đưa ra ở bất kỳ định dạng hợp lý nào "
Shaggy

1
nhưng nó nói "đầu vào bao gồm một danh sách các giá trị hai bit (0, 1, 2, 3 ở dạng thập phân)." ngay trước đó ... (btw tôi không hạ thấp hoặc bất kỳ điều gì, điều này cực kỳ thông minh, đó chỉ là theo cách giải thích của tôi về các quy tắc mà đầu vào không khớp)
Brian H.


3

Python 2 , 256 253 ... 205 203 199 byte

r=[('     _',''),('/','\ ')]
for a in input()+[0]:r+=zip(*[['|'*6,'_|    |_,,/|  \/  |\,,||  ||  ||,,\| _\/_ |/,,\ ____ /,,\/'[i::2].split(',')][2-i&a>0]for i in 0,1])
for l in r[:-4]:print'%5s %s'%l

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


Như bạn làm trong các chuỗi ký tự khác, trong dòng đầu tiên, bạn có thể bỏ qua dấu gạch chéo ngược thoát.
Jonathan Frech

Có vẻ như bạn có thể tiết kiệm 18 byte bằng cách xóa tất cả các dấu cách.
Xù xì

for ...:\n r...\n r...-> for ...:r...;r...tiết kiệm ba byte.
Jonathan Frech

1

PowerShell , 235 byte

param($a)'     _
    / \'
($a|%{((,'1|'*6),('1|  _
1| / \
1|2
1|_/ /
1 __/ 
1/'),(' _ 2
/ \2
| |2
\ \_| |
 \__  |
    \ |'),(' _ 2  _
/ \2 / \
| |22
\ \_| |_/ /
 \__   __/
    \ /'))[$_]})-replace1,'    | '-replace2,' | |'
,'    | |'*2

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

PowerShell không có một maphoặc ziphay một cách thật dễ dàng để đảo ngược chuỗi, vì vậy chúng tôi đang trái với cái gì khác - thay thế đơn giản của phần lặp đi lặp lại.

Hai dòng đầu tiên lấy đầu vào là một mảng các số nguyên và xuất ra đỉnh của cây xương rồng. Sau đó, chúng tôi lặp qua $avà chọn vào một mảng gồm bốn chuỗi dựa trên giá trị hiện tại. Những chuỗi đó được để lại trên đường ống và sau đó chúng tôi sử dụng của chúng tôi -replaceđể điền vào các điểm thích hợp. Sau đó, chúng tôi cũng đặt đáy của cây xương rồng lên đường ống.

Mọi thứ được thu thập từ đường ống dẫn và một sự cố ngầm Write-Outputxảy ra khi hoàn thành chương trình, chèn một dòng mới giữa mọi yếu tố.


1

05AB1E , 76 75 byte

„ _…/ \‚4ú»,v6F'|4ú"_ |/\"•Aö¡Èèj{^ë•5вèJ5ôNè©‚y1›èð'|®∞2äθ‚yÉèJ,}}„| 4úû=,

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


1
Meh, tôi đang cố gắng để đánh bại bạn, mặc dù nghi ngờ điều đó.
Bạch tuộc ma thuật Urn

@MagicOctopusUrn: Chúc may mắn! Hy vọng bạn quản lý nó (và có thể biến nó thành một cuộc giao tranh: P)
Emigna

Một ý tưởng hay của tôi để đánh bại điều này đã bị phá hủy bằng 30 byte b / c của lệnh tôi đã đăng trong cuộc trò chuyện "ốc đảo / 05AB1E". Golf tốt, nếu tôi thử bây giờ thì nó sẽ quá gần.
Bạch tuộc ma thuật Urn

1

Java (OpenJDK 8) , 626 566 499 466 398 312 310 308 byte

Có thể chơi golf một tấn

a->{String r=" |,",g="    |",n="     _,    / \\,";boolean j,k;for(int e:a)n+=((k=e>1)?" _  |":g)+((j=e%2>0)?" |  _,":r)+(k?"/ \\ |":g)+(j?" | / \\,":r)+(k?"| | |":g)+(j?" | | |,":r)+(k?"\\ \\_|":g)+(j?" |_/ /,":r)+(k?" \\__ ":g)+(j?"  __/,":r)+(k?"    \\":g)+(j?" /,":r);return(n+g+r+g+r).replace(",","\n");}

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


1
Bạn có thể tiết kiệm 2 byte bằng cách thay đổi {j=e>1;k=e%2>0;n+=(k?" _ |":g)+(j?" | _,":r)+để n+=((k=e%2>0)?" _ |":g)+((j=e>1)?" | _,":r)+và loại bỏ việc đóng cửa }của cho vòng lặp là tốt.
Kevin Cruijssen

Bạn có "vòng tay" sai cách 'vòng cho 12.
Xù xì

0

SOGL V0.12 , 56 54 53 byte

5⁷yΙ‚‘∑≡`a#¾‘O.{@.2%i»¹{"⁸G‘6∙;?X"j1>ζ╔²i[n¹‘5n}┼±↔}O

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

Giải trình:

..‘                   push the ending part - "    | |\n    | |"
   ..‘O               output the starting part - "     _ \n    / \"
       .{             input times do
         @              push a space
          .2%           push input%2
             i»         push floor(prevInput/2)
               ¹        wrap the two in an array

{                   }   for each of the two numbers
 "..‘                     push "|    " - base stem
     6∙                   multiply vertically 6 times
       ;?       }         if the current item iterating over is truthy (i.e. != 0)
         X                  remove ToS - the regular stem - from the stack 
          "..‘              push "|  _ | / \| | ||_/ / __/ /    " - stem with an arm
              5n            split it into line lengths of 5
                 ┼        add that horizontally to the space pushed earlier (or whatever it's become)
                  ±↔      reverse ToS - the stem currently - horizontally
                     O  output the array of the current part
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.