Siêu mưa mưa


11

Chương trình khuyến mại mùa đông Scream ™ đã bắt đầu và bạn vừa giành cho mình một trò chơi hành động tối giản mãnh liệt, Super Square . Khi chơi nó, bạn nhận ra rằng trò chơi chỉ cực kỳ khó khăn hoặc bạn thực sự xấu về nó. Đặc biệt, có kiểu "mưa" này dường như khiến bạn gặp phải mỗi lần ...

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

Thất vọng, bạn quyết định cho mình một thử thách khác: Vẽ mô hình mưa trong nghệ thuật ASCII!

Đầu vào

Đầu vào là một số nguyên dương duy nhất cho biết kích thước của mẫu n, được đưa ra thông qua STDIN hoặc đối số hàm.

Đầu ra

Đầu ra là mẫu mưa ở kích thước đã chỉ định, được trả về dưới dạng chuỗi hoặc được in qua STDOUT. Khoảng trắng hàng đầu hoặc dấu trước hoặc sau toàn bộ hình ảnh đều ổn. Ngoài ra, hình ảnh không cần phải được đặt ở bên trái màn hình, nhưng phải rõ ràng.

Đây là n = 10:

 ...................
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ...................

Đây là n = 5:

 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 

Và cuối cùng, đây n = 1(chỉ là hai bức tường trong cùng):

 - 

 - 

Xây dựng (cho rõ ràng hơn)

Khu vực chơi được chia thành hai cặp góc phần tư như vậy:

 AAAAAAAAA
B AAAAAAA B
BB AAAAA BB
BBB AAA BBB
BBBB A BBBB
BBBBB BBBBB
BBBB A BBBB
BBB AAA BBB
BB AAAAA BB
B AAAAAAA B
 AAAAAAAAA

Các góc phần tư trên / dưới nên xen kẽ giữa các bức tường ngang được biểu thị bằng dấu gạch nối -và các khoảng trống được tô bóng bằng các dấu chấm .. Các góc phần tư trái / phải nên xen kẽ giữa các không gian và các bức tường thẳng đứng được biểu thị bằng các đường ống |. Các đường chéo chính trống và phải luôn được lấp đầy khoảng trống.

Mô hình mưa ncó kích thước có 2ncác bức tường, với các bức tường từ các góc phần tư trên / dưới gần trung tâm nhất và các bức tường xen kẽ giữa các góc phần tư khi chúng ta di chuyển ra khỏi trung tâm.

Chấm điểm

Đây là mã golf, vì vậy mã trong ít byte nhất sẽ thắng.


4
Trò chơi này ... tôi biết bạn đang nói về cái gì Nó đã đánh cắp như 40 giờ của cuộc đời tôi cho đến khi tôi đánh bại nó. ^^
ThreeFx 24/12/14

Câu trả lời:


3

CJam, 93 87 78 61 59 byte

ri:K_+){K" |"*KKI-z:I-I2%:L+<SL>\+_W%L'-'.?I2*Ig-*@I0=>N}fI

Nhận giá trị nqua STDIN

Một vài ví dụ:

1
 - 

 - 
2
 ... 
| - |
|   |
| - |
 ... 
5
 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 
10
 ................... 
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ................... 

Điều này có thể được chơi golf rất nhiều, mà tôi sẽ làm điều đầu tiên vào ngày mai.

Dùng thử trực tuyến tại đây


5

Haskell 150 byte

Tôi nhận ra rằng nó sẽ không chiến thắng, chỉ muốn đăng codegolf đầu tiên của tôi: D

q n=putStr$unlines$iterate(\l->let[a,b]=if l!!0!!1=='-'then"|."else" -";c=[a:s++[a]|s<-l];t=' ':[b|x<-l!!0]++" "in t:c++[t])[" - ","   "," - "]!!(n-1)

Sử dụng bằng cách tải vào GHCi và gọi q nnơi nlà kích thước.

Vài ví dụ:

*Main> q 1
 - 

 - 
*Main> q 2
 ... 
| - |
|   |
| - |
 ... 
*Main> q 5
 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 
*Main> q 10
 ................... 
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ................... 

Ai đó có thể có thể làm tốt hơn, tôi khá mới với Haskell.


6
Đừng lo lắng về chiến thắng. ;) Chiến thắng là dành cho CJam và Pyth. Chơi golf trong các ngôn ngữ khác là về việc đánh bại các bài nộp trong cùng một "hạng cân" và học một số tính năng mới tối nghĩa của ngôn ngữ của bạn. Chào mừng đến với PPCG!
Martin Ender

3

Python, 204 , 198 , 191 byte

r=lambda a,b,d=' ':d.join((a,b,a[::-1]))
def f(s,i,n):d=[r(s[:i],'.-'[(n-i)%2]*((n-i)*2-1))];return i==n and[r(s,' '*(2*(i%2)+1),'')]or d+f(s,i+1,n)+d
g=lambda n:'\n'.join(f('| '*(n/2),0,n))

"r" là một hàm tiện ích ghi "b" được bao quanh bởi "a" được phản ánh, với một dấu phân cách tùy chọn, (có tham số lambda có thể có mặc định). "f" là đệ quy, tạo các mặt và phần giữa cho mỗi cấp "g" là hàm mưa, có thể được gọi với một số nguyên để trả về văn bản được yêu cầu.


Tôi chỉ nhận ra rằng tôi đã quên cho phép các hàm trả về chuỗi, mà tôi thường cho phép (đã chỉnh sửa nó trong). Bạn vẫn có thể lưu vào một vài ký tự bằng cách xóa khoảng trắng và đặt các dòng 4, 5 trên một dòng :)
Sp3000

Với một chút đánh giá ngắn mạch, bạn có thể giảm liên kết
Sp3000

Xin lỗi, tôi đã đánh giá thấp bạn do một tai nạn. Tôi có thể hủy nó nếu bạn chỉnh sửa.
nutki

1

Perl 5: 74 byte (73 mã + -p)

#!perl -p
s/.*/ /;$a=qw(- .)[$|--]x
s/.+/$"$&$"/g,s/^|\z/ $a 
/g,$"^="\\"for($_)x$&

Đưa tham số vào đầu vào (kết thúc ký tự dòng cần thiết cho chức năng phù hợp):

$ perl rain.pl <<<"3"
 ----- 
  ...  
 | - | 
 |   | 
 | - | 
  ...  
 ----- 

Ung dung:

                         # Read the input line into $_ (-p)
s/.*/ /;                 # Replace the input with a space (plus the original eol), saves the parameter in $&
for(($_)x$&) {           # Iterate $& times without affecting $_
  $c=s/.+/$"$&$"/g;      # Add $" (initially space) at the start and the end of each line, stores number of lines in $c
  $a=("-",".")[$|--]x$c; # Set $a to $c times minus or dot using magic $| (which iterates over 1 and 0 on decrement)
  s/^|\z/ $a \n/g;       # Equivalent to $_=" $a \n$_ $a \n"
  $"^="\\";              # Alternate $" between space and bar using the string xor 
}
                         # Print $_ (-p)
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.