*** Phong cảnh ***


28

Mục tiêu : Viết một chương trình tạo ASCII (?) Phong cảnh nghệ thuật và đường chân trời đẹp!

Chương trình của bạn chỉ có một đầu vào: một chuỗi bao gồm bất kỳ sự kết hợp / lặp lại của các ký tự 0123456789abc.

Đối với mỗi ký tự đầu vào, xuất một dòng dọc được cấu tạo như sau:

         .
        ..
       ...
      oooo
     ooooo
    OOOOOO
   OOOOOOO
  XXXXXXXX
 XXXXXXXXX
XXXXXXXXXX

0123456789

abcThay vào đó, các chữ cái được theo sau bởi một số n và vẽ đường thẳng đứng n với 1,2 hoặc 3 lỗ (khoảng trắng) tương ứng ở phía dưới.

Ví dụ

Tòa nhà Crysler

Đầu vào: 2479742

   .
   .
  ...
  ooo
  ooo
 OOOOO
 OOOOO
XXXXXXX
XXXXXXX
XXXXXXX

Đền Taj Mahal

Đầu vào: 0804023324554233204080

 .                  .
 .                  .
 o                  o
 o        oo        o
 O O     OOOO     O O
 O O  OO OOOO OO  O O
 X X XXXXXXXXXXXX X X
 X X XXXXXXXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXX

Tháp Eiffel

Đầu vào: 011a2b3b5c9c9b5b3a2110

      ..
      ..
      ..
      oo
     oooo
     OOOO
    OOOOOO
   XXX  XXX
 XXX      XXX
XXX        XXX

Bạn có thể cho rằng đầu vào không trống và nó được định dạng tốt.
Bất kỳ ngôn ngữ nào cũng được chấp nhận, từ A + đến Z ++ .

Đây là code-golf: mã nguồn ngắn nhất sẽ thắng .
Nếu bất cứ điều gì trong các quy tắc không rõ ràng, vui lòng hỏi bên dưới trong các ý kiến.

Hãy vui vẻ và chụp các cấu trúc cao hàng trăm mét trong một vài byte!

(và đừng quên đưa tòa nhà yêu thích của bạn vào giải pháp của bạn)

PS: không, bạn không thể tải xuống / truy cập dữ liệu từ Internet, sử dụng tên tệp của bạn làm dữ liệu và tất cả nội dung đó. Hãy công bằng và chỉ sử dụng các kỹ năng chơi gôn của bạn.


Có vẻ cao 9 đối với tôi ...: -?
Gabriele D'Antona

Ồ, tôi hiểu rồi: đỉnh được định nghĩa là "c9", có nghĩa là: vẽ một đường thẳng đứng có chiều cao 9 và cạo sạch 3 ký tự phía dưới. Đó là lý do tại sao nó có vẻ cao 7 đối với bạn. Đọc các quy tắc một lần nữa và cho tôi biết nếu nó ổn.
Gabriele D'Antona

ok, tôi đọc sai thông số kỹ thuật của bạn về phần bù.
Howard

Câu trả lời:



5

Hồng ngọc 88 85

Thử thách thú vị!

9.downto(0){|h|puts$*[0].gsub(/(\D?)(.)/){'XXXOOoo... '[h<$1.hex-9||$2.hex<h ?-1:h]}}

Đưa đầu vào vào dòng lệnh, vd:

ruby landscapes.rb 011a2b3b5c9c9b5b3a2110

Sẽ in ra:

      ..      
      ..      
      ..      
      oo      
     oooo     
     OOOO     
    OOOOOO    
   XXX  XXX   
 XXX      XXX 
XXX        XXX

5

Con trăn 2.7 - 186

Có lẽ có thể ngắn hơn ...

x=[]
l=iter(raw_input())
a="XXX00oo..."
for i in l:
 try:i=int(i);o=0
 except:o=" abc".index(i);i=int(next(l))
 x.append(" "*o+a[o:i+1]+" "*(9-i))
for i in zip(*x)[::-1]:print''.join(i)

Chạy mẫu:

08040233245542332040800000247974200000011a2b3b5c9c9b5b3a2110
                             .              ..
 .                  .        .              ..
 .                  .       ...             ..
 o                  o       ooo             oo
 o        oo        o       ooo            oooo
 0 0     0000     0 0      00000           0000
 0 0  00 0000 00  0 0      00000          000000
 X X XXXXXXXXXXXX X X     XXXXXXX        XXX  XXX
 X X XXXXXXXXXXXX X X     XXXXXXX      XXX      XXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXX

Cầu bến cảng Sydney

a1a13443a1a2a3a4a5a6a6a7a7a8a8a8a8a9a9a9a9a9a9a8a8a8a8a7a7a6a6a5a4a4a3a2a13443a1a1
                   ......
               ..............
             ..................
           oooooooooooooooooooooo
          oooooooooooooooooooooooo
   00    000000000000000000000000000    00
  0000  00000000000000000000000000000  0000
  XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  XXXX                                 XXXX

Cầu cổng vàng / logo Cisco

a2a0a0a4a0a06a0a0a4a0a0a2a0a0a4a0a06a0a0a4a0a0a2



      o           o
      o           o
   0  0  0     0  0  0
   0  0  0     0  0  0
X  X  X  X  X  X  X  X  X
X  X  X  X  X  X  X  X  X
      X           X

Bằng cách này, câu hỏi tuyệt vời!


Những di tích vĩ đại! :)
Gabriele D'Antona

5

C64 BASIC, 276 ký tự PETSCII

Giải pháp của riêng tôi, đã đánh xuống tới 276 ký tự và 10 dòng BASIC V2.0!

0inputa$:dIc$(10):fOi=0to9:rE c$(i):nE:fOr=0to9
1z=1
2c=aS(mI(a$,z,z+1))
3ifc>57tHgO8
4ifc>=57-r tH?c$(9-r);:gO6
5?" ";
6z=z+1:ifz<=len(a$)gO2
7?:nE:eN
8z=z+1:w=aS(mI(a$,z,z+1)):ifw>=57-r aNc<=73-r tH?c$(9-r);:gO6
9?" ";:gO6:dA"x","x","x","o","o","W","W",".",".","."

(sao chép và dán vào trình giả lập để xem kết quả).

Và cuối cùng, tượng đài yêu thích của tôi, Cầu Brooklyn :)

nhập mô tả hình ảnh ở đây


5

C, 130 126 ký tự

Khá lâu so với cuộc thi, nhưng tôi đổ lỗi cho ngôn ngữ ...

char*p,b[99];r=10,q;main(o){for(gets(&b);r--;puts(""))
for(p=b;q=*p++;)o=q<60?putchar("XXXOOoo... "[o<r&r<q-47?r:10]),-1:q-97;}

Tôi không biết về tòa nhà yêu thích , nhưng một trong những thứ dễ nhận biết hơn ở đây là Globen , vì vậy đây là một biểu hiện nghèo nàn của nó.

% ./a.out <<<24556667777776665542


       ......       
    oooooooooooo    
  oooooooooooooooo  
 OOOOOOOOOOOOOOOOOO 
 OOOOOOOOOOOOOOOOOO 
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX

Bạn có thể cắt bỏ một ký tự bằng cách chuyển thứ tự khai báo để char b[99],*p;nó đọc char*p,b[99];. Ngoài ra nó có thể ngắn hơn để sử dụng putsđể in dòng mới.
C0deH4cker

@ C0deH4cker tốt đẹp, cảm ơn! Điều đó giúp tôi tiết kiệm bốn ký tự.
FireFly

@friol oh, tôi không có ý như vậy chút nào, chỉ là tôi không biết những gì tôi coi là tòa nhà yêu thích của tôi. : P
FireFly

3

APL ( 69 66)

' XXXOOoo...'[1+⌽⍉⌽↑{z×(z<' abc'⍳⍵)<(1+⍎⍺)≥z←⍳10}/↑2↑¨I⊂⍨⎕D∊⍨I←⌽⍞]

Ví dụ:

      'XXXOOoo ...' [1 + {z × (z <'abc'⍳⍵) <(1 +) z ← 10} / 2 I⊂⍨⎕D∊⍨ Tôi ←]
0804023324554233204080

 . .
 . .
 oo 
 o oo o 
 OO OO 
 OO OO OO OO OO 
 XX XXXXXXXXXXXX XX 
 XX XXXXXXXXXXXX XX 
XXXXXXXXXXXXXXXXXXXXXXX

      'XXXOOoo ...' [1 + {z × (z <'abc'⍳⍵) <(1 +) z ← 10} / 2 I⊂⍨⎕D∊⍨ Tôi ←]
011a2b3b5c9c9b5b3a2110
      ..      
      ..      
      ..      
      oo      
     ồ     
     OOo     
    OOo    
   XXX XXX   
 XXX XXX 
XXX XXX

Tôi không biết rõ về APL, nhưng bạn có chắc bạn cần khoảng trống ở đầu chuỗi 'XXXOOoo ...' không?
Gabriele D'Antona

@friol: vâng, nó được sử dụng để lấp đầy khoảng trống "trống"
bến tàu



2

PHP ,131 114 byte

for($b=10;$b--;print"
")foreach(str_split($argn)as$a)$c=strpos(' abc',$a)?:!print$a<$b|$b<$c?' ':'XXXOOoo...'[$b];

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

$ echo 2479742|php -nF land.php 
   . 
   . 
  ... 
  ooo 
  ooo 
 OOOOO 
 OOOOO 
XXXXXXX 
XXXXXXX 
XXXXXXX 


$ echo 011a2b3b5c9c9b5b3a2110|php -nF land.php 
      .. 
      .. 
      .. 
      oo 
     oooo 
     OOOO 
    OOOOOO 
   XXX  XXX 
 XXX      XXX 
XXX        XXX 


$ echo a2a0a0a4a0a06a0a0a4a0a0a2a0a0a4a0a06a0a0a4a0a0a2|php -nF land.php 



      o           o 
      o           o 
   O  O  O     O  O  O 
   O  O  O     O  O  O 
X  X  X  X  X  X  X  X  X 
X  X  X  X  X  X  X  X  X 
      X           X


1

05AB1E (di sản) , 34 byte

Rvy.ïi"XXXOOoo..."y>£ëðAykÝǝ])ζRí»

Sử dụng phiên bản kế thừa của 05AB1E để lưu 2 byte, vì nó ζcũng hoạt động trên các chuỗi thay vì chỉ liệt kê các ký tự.

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

Giải trình:

R                  # Reverse the (implicit) input-string
 v                 # Loop `y` over each character:
  yi             #  If `y` is a digit:
      "XXXOOoo..." #   Push string "XXXOOoo..."
        y        #   And only leave the first `y`+1 characters as substring
     ë             #  Else (`y` is a letter):
       Ayk         #   Get the index of `y` in the lowercase alphabet
          Ý        #   Create a list in the range [0, alphabet-index]
      ð    ǝ       #   Replace in the string at the top of the stack the characters at
                   #   those indices with a space
 ]                 # Close the if-else statement and loop
  )                # Wrap all strings on the stack into a list
   ζ               # Zip/transpose; swapping rows/columns
    Rí             # Reverse this list, as well as each individual line
      »            # And join the strings by newlines
                   # (after which the result is output implicitly)

Đối với 'tòa nhà' yêu thích của tôi, hãy đi với cây này. ;)

b2b3b4b5b6b7898b7b6b5b4b3b2

       .       
      ...      
     .....     
    ooooooo    
   ooooooooo   
  OOOOOOOOOOO  
 OOOOOOOOOOOOO 
XXXXXXXXXXXXXXX
      XXX      
      XXX      

1

Japt -R , 36 byte

óȦnãÒXÌ î"XXXOOoo..."hSpXÎnD)s9Ãz3

Thử nó

óȦnãÒXÌ î"..."hSpXÎnD)s9Ãz3     :Implicit input of string
ó                                 :Partition at
 È                                :Characters that return true when passed through the following function
  ¦                               :  Test for inequality with
   n                              :  Convert to number
    Ã                             :End function
     £                            :Map each X
      Ò                           :  Bitwise increment
       XÌ                         :  Last character of X
          î                       :  Slice the following to that length
           "..."                  :    Literal string
                h                 :    Replace as many characters as necessary at the start of that string with
                 S                :      Space
                  p               :      Repeat
                   XÎ             :        First character of X
                     n            :        Convert from base
                      D           :        14
                       )          :      End repeat
                        s9        :      Slice off the first 9 characters
                          Ã       :End map
                           z3     :Rotate clockwise by 90 degrees 3 times
                                  :Implicit output, joined by newlines
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.