Giới thiệu:
Khi chúng ta nghĩ về Ladybugs, chúng ta thường nghĩ về một con bọ màu đỏ hoặc màu cam sẫm có đốm đen. Mặc dù điều này không cần thiết đúng, vì cũng có màu đen với bọ rùa đốm đỏ / cam hoặc bọ rùa không có đốm , chúng tôi chủ yếu hình dung bọ rùa giống như bọ rùa châu Á này:
Một điều cần lưu ý là các đốm trên bọ rùa hầu như luôn luôn đối xứng. Và đó là nơi thử thách này đến.
Thử thách:
Cho một số nguyên n( >= 0), xuất ra bọ rùa nghệ thuật ASCII sau một hoặc nhiều lần, với các điểm đối xứng được chia đều giữa hai bên, cũng như hai hoặc nhiều bọ rùa.
Đây là cách bố trí bọ rùa mặc định:
_V_
/(@I@)\
/ | \
| | |
\ | /
''-!-''
Nếu n=0, chúng tôi xuất ra bọ rùa ở trên.
Khi nlớn hơn 0, chúng ta sẽ điền vào chỗ trống của lỗi nghệ thuật ASCII bằng chữ thường ohoặc thay thế |ở giữa bằng chữ hoa O. Mục tiêu là để thực hiện các nthay đổi đối với bọ rùa 'trống rỗng', trong khi vẫn tạo ra một đầu ra đối xứng (trên mỗi con bọ rùa) và xuất ra càng ít bọ rùa càng tốt.
Vì vậy, đầu ra hợp lệ n=1là:
_V_
/(@I@)\
/ O \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| | |
\ O /
''-!-''
Nhưng điều này sẽ không hợp lệ:
_V_
/(@I@)\
/ | \
| o | |
\ | /
''-!-''
Đầu ra hợp lệ cho n=2là:
_V_
/(@I@)\
/ O \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ O \
| | |
\ O /
''-!-''
_V_
/(@I@)\
/ o|o \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| o | o |
\ | /
''-!-''
etc. There are a lot of possible outputs.
Cái đầu tiên nkhông thể phù hợp với một con bọ rùa duy nhất nữa là n=24. Trong trường hợp đó, bạn sẽ phải chia nó càng nhiều càng tốt thành hai con bọ rùa (bạn có thể chọn đầu ra chúng cạnh nhau, hoặc bên dưới nhau - với tùy chọn một khoảng trắng hoặc một dòng mới ở giữa chúng). Ví dụ:
_V_ _V_
/(@I@)\ /(@I@)\
/o o|o o\ /o o|o o\
|o o | o o||o o | o o|
\o o|o o/ \o o|o o/
''-!-'' ''-!-''
HOẶC LÀ:
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
Quy tắc thử thách:
nsẽ trong phạm vi0-1000.- Bạn có thể chọn xuất ra STDOUT, trả về dưới dạng chuỗi hoặc danh sách / chuỗi 2D-char, v.v. Cuộc gọi của bạn.
- Hàng đầu dòng mới hoặc khoảng trắng không cần thiết không được phép. Trailing-space trắng và một dòng mới trailing được cho phép.
- Như đã đề cập ở trên, khi cần có hai hoặc nhiều bọ rùa, bạn có thể chọn đầu ra chúng cạnh nhau hoặc bên dưới nhau (hoặc kết hợp cả hai ..)
- Khi hai hoặc nhiều bọ rùa được in cạnh nhau, một khoảng trống tùy chọn ở giữa được cho phép. Khi hai hoặc nhiều bọ rùa được in xuống nhau, một dòng mới tùy chọn ở giữa được cho phép.
- Bạn có thể chọn bố cục của bọ rùa ở bất kỳ bước nào trong chuỗi, miễn là chúng đối xứng và bằng với đầu vào
n. - Vì mục tiêu là có
nnhững thay đổi VÀ càng ít bọ rùa càng tốt, bạn sẽ bắt đầu sử dụng nhiều hơn một con bọ rùa khi ở trênn=23. Bố cục của những con bọ rùa này không cần thiết phải giống nhau. Trong thực tế, điều này thậm chí không thể đối với một số đầu vào, nhưn=25hoặcn=50đặt tên hai. - Ngoài ra, đôi khi không thể chia đều các chấm giữa hai hoặc nhiều bọ rùa. Trong trường hợp đó, bạn sẽ phải chia chúng càng nhiều càng tốt, với nhiều nhất là chênh lệch 1 giữa chúng.
Vì vậy n=50, để ghi nhớ hai quy tắc cuối cùng, đây sẽ là một đầu ra hợp lệ có thể (trong đó lỗi đầu tiên có 16 điểm và hai quy tắc còn lại có 17):
_V_ _V_ _V_
/(@I@)\ /(@I@)\ /(@I@)\
/oooOooo\ / O \ /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
\ | / \oooOooo/ \o oOo o/
''-!-'' ''-!-'' ''-!-''
Quy tắc chung:
- Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất bằng byte thắng.
Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'. - Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, các chương trình đầy đủ. Cuộc gọi của bạn.
- Lỗ hổng mặc định bị cấm.
- Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
- Ngoài ra, xin vui lòng thêm một lời giải thích nếu cần thiết.
ovà Othay vào đó. Tôi đã thay đổi từ ngữ một chút.
n=50dụ, tôi tin rằng bạn có nghĩa là lỗi đầu tiên có 16 điểm và hai điểm còn lại có 17.


Chúng tôi bắt đầu bằng cách khởi tạo dòng mới và
Tiếp theo chúng ta đọc số lượng điểm từ stdin và tính số lượng bọ rùa cần thiết.
Sau đó chúng ta có thể bắt đầu vòng lặp bên ngoài cho tập hợp các lỗi, tính toán số lượng điểm cho bọ rùa tiếp theo được hiển thị.
Đối với mỗi con bọ rùa, chúng tôi tính toán xem điểm trung tâm lớn có cần được hiển thị (nếu
Tương tự, chúng tôi tính toán xem cặp điểm lớn khác có cần được hiển thị hay không (nếu
Phần cuối cùng của khởi tạo bảng tra cứu là một vòng lặp tính toán những điểm nhỏ nào cần được hiển thị. Về cơ bản thuật toán là: nếu
Tiếp theo, chúng ta đẩy đại diện chuỗi được mã hóa của bọ rùa lên ngăn xếp. Đây thực chất chỉ là một chuỗi đơn giản, nhưng nó trở nên hơi phức tạp khi tôi cố gắng nén nó vào các khoảng trống trong mã để nguồn sẽ tạo thành một hình chữ nhật.
Tại thời điểm này, chúng tôi đã sẵn sàng bắt đầu vòng lặp đầu ra, xử lý từng ký tự một, chuyển đổi các trường hợp đặc biệt (các điểm, ngắt dòng, v.v.) thông qua bảng tra cứu được xây dựng trước đó.
Cuối cùng, chúng tôi kiểm tra xem chúng tôi đã hiển thị tất cả các bọ rùa cần thiết hay chưa, nếu không thì tiếp tục quay lại bắt đầu vòng lặp bên ngoài.