Một Bagatelle đơn thuần


13

Các thách thức

Đưa ra một bảng bagatelle như bảng dưới đây:

|                    |
|    /\            / |
|      \            /|
|  \      \ /\    \  |
|   \   /       \    |
|\     /   /  \      |
|   \            / \ |
|    \               |
|  \    / \ /\    \  |
|\     /   /  \     /|
|                /   |
|    /\         /  / |
|              /     |
|\     /   /  /      |
|                    |
----------------------

nhiệm vụ của bạn là biến một danh sách 'ném' thành điểm số.

Bảng sẽ luôn rộng 20 ký tự (cộng 2 cạnh), nhưng có chiều cao thay đổi. Mỗi 'cú ném' là một con số đại diện cho quả bóng rơi vào bảng, bắt đầu từ 0 cho đến hết bên trái lên đến 19 cho bên phải. Mỗi quả bóng sẽ rơi thẳng xuống trừ khi nó gặp a /hoặc a \. Gặp một /quả bóng dịch chuyển một cột sang trái, và một \quả bóng dịch chuyển một cột sang phải. Sau khi được chuyển, bóng tiếp tục đi thẳng xuống như trước. Điểm cho một cú ném phụ thuộc vào nơi bóng chạm vào đáy bảng.

Điểm cho mỗi vị trí hoàn thiện như sau:

|                    |
----------------------
 01234567899876543210

và giống nhau cho tất cả các bảng. Các hàng đầu tiên và cuối cùng sẽ luôn trống. Quả bóng được đảm bảo chạm tới đáy bất kể nó rơi từ đâu, vì vậy sẽ không có bảng nơi nó có thể bị mắc kẹt bởi \/, \|hoặc |/kết hợp.

Đầu vào

Đầu vào sẽ nằm trên STDIN và sẽ bao gồm bảng theo sau là một dòng trống, theo sau là một danh sách các số được phân tách bằng dấu cách biểu thị các lần ném.

Đầu ra

Ouput nên là tổng số điểm cho trò chơi đã cho.

Một vài ví dụ

Đầu vào

|                    |
| \                  |
|  \                 |
|   \                |
|    \               |
|     \              |
|      \             |
|       \            |
|        \           |
|         \          |
|          \         |
|           \        |
|            \       |
|             \      |
|              \     |
|               \    |
|                \   |
|                 \  |
|                    |
|                    |
----------------------

1 4 2 19 0 2 4 3 17 13 16

Đầu ra

9

Đầu vào

|                    |
| \                / |
|  \              /  |
|   \            /   |
|    \          /    |
|     \        /     |
|      \      /      |
|       \    /       |
|        \  /        |
|                    |
|                    |
|                    |
|                    |
|                    |
|                    |
|                    |
|                    |
|                    |
|                    |
----------------------

15 10 3 8 18 19 0 6 7 10

Đầu ra

72

Đầu vào

|                    |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
|                    |
----------------------

1 4 18 17 14 2 0 19 15

Đầu ra

18

Kiểm tra kịch bản

Tôi đã sử dụng một số tập lệnh thử nghiệm được viết bởi JoeyVentero (tôi hy vọng họ không phiền ...) để tạo một số thử nghiệm cho nhiệm vụ này: -

Sử dụng: ./test [your program and its arguments]

Đây là codegolf - chiến thắng giải pháp ngắn nhất.


Bạn cũng có thể có tập lệnh tạo của tôi cho họ :-). Cuối cùng tôi đã muốn công khai điều đó nhưng miễn là nó vẫn cần điều chỉnh cho nhiều nhiệm vụ tôi không muốn làm điều đó.
Joey

@Joey Một kịch bản tạo sẽ là một công cụ hữu ích có sẵn.
Gareth

Cả hai bộ kiểm tra nên được sửa chữa ngay bây giờ.
Gareth

Câu trả lời:


3

GolfScript, 60 59 ký tự

n/{},)\);{1>:x,,{.x=31%4%(+}%}%[10,.-1%+]+0@[~]{2${=}/+}/\;

Tôi rất cám dỗ để viết một giải pháp mà hoạt động bằng cách xác định lại những biểu tượng /, \space, nhưng nó thực sự khá tốn kém (đặc biệt là khi bạn không còn có thể sử dụng bản gốc \).

31%4%(được nicked từ giải pháp Keith Randall và bản đồ các mã ASCII cho space, /\để 0, -1, 1tương ứng. (Xem lịch sử chỉnh sửa).


1
Đáng ngạc nhiên dài cho GolfScript. :-) Làm thế nào mà bạn làm cho nó hoạt động với tập lệnh thử nghiệm? Tất cả tôi nhận được là lỗi khi tôi cố gắng ./test ruby golfscript.rb peter.gs? Tôi đã ném một số thử nghiệm vào nó như đầu vào đường ống thay thế.
Gareth

./test-bagatelle.sh `which golfscript.rb` bagatelle2.gs
Peter Taylor

4

Python 2, 147 132 130 ký tự

nhập khẩu hệ thống
s = 0
l = danh sách (sys.stdin)
cho t trong l [-1] .split ():
 p = int (t) +1
 cho r trong l [: - 3]: p- = "/".find(r[p])
 s + = phút (p-1,20-p)
in s

2
Có lẽ s+=min(p,19-p)nào?
Keith Randall

2
for r in l[:-3]:p-=" /".find(r[p])nên lưu một vài ký tự
gnibbler

1
Cảm ơn hai bạn. Đặc biệt là trò lừa của gnibbliner thực sự tuyệt vời - nhưng cũng không thể biết được chức năng tri ngắn hơn;)
cemper93

1
@gnibbler Đó là một trò lừa thiên tài.
Gareth

1
19-p+1 == 20-p
Lowjacker

3

Python, 165 159 ký tự

import sys
A=list(sys.stdin)
C=range(10)
C+=C[::-1]
for L in A[-4::-1]:C=[C[i+ord(L[i+1])%31%4-1]for i in range(20)]
print sum(C[int(x)]for x in A[-1].split())

Nó bắt đầu với một hàng điểm và hoạt động theo cách từ dưới lên, tính toán điểm số sẽ là bao nhiêu cho các quả bóng bắt đầu ở mỗi hàng.


list(sys.stdin)thay vìreadlines()
gnibbler

3

Ruby, 123 117 115 107 99 98 97

*b,_,_,n=*$<
p eval n.split.map{|k|i=k.to_i+1
b.map{|l|i-='\ /'.index(l[i])-1}
[i-1,20-i].min}*?+

1
Vì sao nên dùng cứu hộ? Bạn không thể cắt hai dòng từ b trong bài tập ban đầu?
Migimaru

@migimaru: Thật vậy. Nhưng tôi phải chặt ba dòng chứ không phải hai.
Lowjacker

Đúng. Ý tôi là hai dòng nữa . Lấy làm tiếc.
Migimaru

1
i-='\ /'...thay vào đó, bạn có thể sử dụng để lưu thêm một char
gnibbler
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.