Giới thiệu
Hãy xem xét một lưới các ký tự f A\/
như
f f f
A
A / \
\ / A
A \/
/
\/
Ở đâu:
f
đại diện cho một vòi đổ một dòng nước xuốngA
phân chia dòng nước ở trên để chính xác một nửa đi bên trái và chính xác một nửa đi bên phải\
chuyển dòng nước bên trên sang phải một đơn vị/
chuyển dòng nước bên trên sang bên trái một đơn vị- sự kết hợp
\/
tạo ra một máng có khả năng vô hạn thu thập các dòng nước bên trên nó [space]
là không gian trống hơn nước có thể di chuyển qua
Từ đó, chúng ta có thể tưởng tượng con đường mà nước ( *
) sẽ đi khi ra khỏi vòi và rơi vào máng hoặc ra khỏi khu vực lưới:
f f f <-- first second and third faucets
* * *A*
* *A*/ \*
\*/ * *A <-- a '*' is not drawn to the right of this A because it would be out of the 9×7 bounds
* *A*\/ <-- upper trough
**/ *
\/ * <-- lower trough
Giả sử 3 vòi sản lượng cùng một lượng nước tại một thời điểm chúng ta có thể thấy rằng
- Tất cả nước của vòi đầu tiên chảy xuống máng dưới.
- Một nửa lượng nước của vòi thứ hai chảy xuống máng dưới và nửa còn lại bị tách ra giữa máng dưới và rơi ra khỏi lưới điện.
- Một phần tư nước của vòi thứ ba chảy xuống máng dưới, một phần tư rơi xuống đáy lưới, một phần tư đi vào máng trên và một phần tư rơi khỏi lưới bên phải.
Từ đó, chúng ta có thể biết rằng (1 + 3/4 + 1/4 + 1/4) / 3 = 75%
nước bị các máng bắt và (1/4 + 1/4 + 1/4) / 3 = 25%
rơi ra khỏi lưới điện.
Thử thách
Bạn có thể hoàn thành bất kỳ hoặc tất cả những thách thức liên quan đến thiết lập dòng nước ASCII này. Tất cả đều là môn đánh gôn, câu trả lời ngắn nhất cho mỗi thử thách là người chiến thắng. Câu trả lời được chấp nhận sẽ là người hoàn thành nhiều thử thách nhất, với tổng chiều dài mã là bộ ngắt kết nối.
Thử thách 1
Viết chương trình đưa ra một phần nước chảy vào các máng cho một lưới nhất định. Đầu ra của ví dụ trên chỉ đơn giản là 0.75
.
Thử thách 2
Viết chương trình, được cung cấp một lưới, vẽ các điểm *
ở những nơi nước chảy như tôi đã làm ở trên. Bạn không nên ghi đè lên bất cứ thứ gì ngoài các ký tự khoảng trắng và lưới không nên thay đổi kích thước. Vì vậy, đối với một cái gì đó như
f
/A
không có gì cần phải làm vì mặc dù nước chảy ở hai bên của A, nhưng nó không thể bị hút về bên trái mà không cần tháo ra /
và nó không thể được kéo sang bên phải mà không làm cho lưới 2 × 2 lớn hơn.
Thử thách 3 (Đã cập nhật)
Viết chương trình có hai số nguyên không âm, tổng T và số tiền giữ K (T> = K). Tạo và vẽ một lưới với chính xác một lưới f
sao cho khi vòi đó đổ ra T đơn vị nước, chính xác K sẽ chảy vào các máng. Nếu không thể thực hiện điều này trong một lưới hữu hạn cho một cặp (T, K) cụ thể thì hãy xuất 'Không thể'.
Làm rõ (áp dụng cho tất cả các thử thách)
- Đầu vào có thể thông qua stdin, hoặc một tệp hoặc thậm chí là một hàm gọi trên biểu diễn chuỗi của lưới. Chỉ cần làm cho nó rõ ràng làm thế nào để chạy đầu vào khác nhau.
- Đầu ra phải đi đến thiết bị xuất chuẩn.
\A
vàA/
vàAA
cũng máng như bạn mong muốn.- Lưới w by h sẽ luôn là một hình chữ nhật được định dạng tốt gồm các ký tự w * h không tính các dòng mới. Sẽ không có khoảng trống bị thiếu và không có sự xuất hiện của
*
. - Kích thước lưới có thể nhỏ bằng 1 × 1 và lớn tùy ý. (Lớn tùy ý trong lý do, int.maxValue hoặc tương tự là một giới hạn chấp nhận được. Tương tự với T và K.)
- Một luồng trên một
f
dòng chảy qua nó. - Các vòi có thể ở bất cứ đâu, không chỉ ở hàng trên cùng.
A
luôn chia lượng nước đổ vào chính xác một nửa.
Lưu ý: Những thứ như /A
và //
hoàn toàn hợp lệ. Nước nào tự do chảy giữa các nhân vật (dù cho thách thức 2 không có đủ phòng để vẽ nó).
Vì vậy, trong thiết lập
ff
/A
Dòng f
chảy bên trái đổ xuống, chạm vào /
và dịch chuyển sang trái. f
Luồng bên phải đổ xuống, chạm vào A
, một nửa đi bên phải và một nửa đi bên trái giữa A
và /
.
ví dụ
ff
**
*/A*
** *
** *
/A
nếu nước rơi vào A
. Đối với tất cả các thách thức, sẽ là tốt để làm rõ liệu \A
là một máng. Đối với thử thách thứ ba, có nên A
giả định 3 đơn vị rơi vào một phân tách 1.5 / 1.5
(vì vậy đầu vào thực sự là một số hữu tỷ duy nhất) hoặc là 2 / 1
, trong trường hợp nào bên nào nhận được 2
?
A
sau đó cả hai bên làm được 1,5 Nó tùy thuộc vào các coder để đảm bảo độ chính xác phao không phải là một vấn đề..)
f
s