Hộp XY bouncey có điểm đánh dấu tại Z


10

Thời gian dài lurker lần đầu tiên poster ở đây.

Viết chương trình có 3 đầu vào: X, Y và Z.

  • X = ngang (cột)
  • Y = xuống (hàng)
  • Z = Điểm đánh dấu vị trí

Chương trình sau đó sẽ in một lưới hình ảnh X ngang qua và Y xuống. Lưới này có thể được tạo từ bất kỳ ký tự nào ngoại trừ "+". Mỗi 'vị trí' được cung cấp một số chỉ mục, đếm từ 1 tại tọa độ 1, 1 và sau đó xuống cho đến khi kết thúc.

X và Y sẽ luôn có ít nhất 3 và Z sẽ không bao giờ lớn hơn X * Y.

Z sẽ đại diện cho vị trí được in dưới dạng "+", trên vị trí cũng như 1 ký tự trái, phải, lên và xuống. Ví dụ:

 +
+++
 +

Cuối cùng, nếu các ký tự + sẽ chặn các cạnh (trên cùng, hầu hết bên trái, hầu hết bên phải và / hoặc hầu hết các cạnh), thì dấu + sẽ bị trả lại dọc theo cùng một trục và tràn qua phía bên kia.

Ví dụ: Đầu vào = 5, 5, 13

-----
--+--
-+++-
--+--
-----

Đầu vào = 10, 10, 10

-------+++
---------+
---------+
----------
----------
----------
----------
----------
----------
----------

Đầu vào = 10, 10, 21

----------
+---------
+++-------
+---------
----------
----------
----------
----------
----------
----------

Chỉnh sửa: ví dụ không vuông 16,3,32

---------------+
-------------+++
---------------+

Tôi nghĩ rằng tôi đã bao gồm tất cả mọi thứ. Không nên có giới hạn cho đầu vào, nhưng nếu chương trình của bạn yêu cầu, hãy tắt nó ở 64 * 64.

Điểm thưởng (tôi có thể làm điều đó không?): Đầu vào Z không được> X * Y, nhưng nếu nó lớn hơn Y * Z, thì hãy xuất tâm + vào giữa lưới. EDIT: Z đầu vào không thể lớn hơn X * Y

Chỉnh sửa 2 :. Thực hiện một số thay đổi cho X và Y để hy vọng rõ ràng hơn

Đây là mã golf, mã ngắn nhất thắng.


Chào mừng bạn đến với Câu đố lập trình và Code Golf! Đây là một thử thách thú vị, nhưng tôi khuyên bạn nên đăng các thử thách trong tương lai lên Sandbox nơi họ có thể nhận phản hồi trước khi được đăng lên trang web chính.
betseg

"Điểm thưởng" là gì? Việc thực hiện tính năng chính xác đó có mang lại lợi thế cho số byte của bạn không? Nếu có, bạn nên lưu ý rõ ràng mức độ lớn của phần thưởng. (Như một lưu ý phụ, tiền thưởng trong môn đánh gôn thường không được khuyến khích )
James

@betseg - ôi. Xin lỗi, hy vọng tôi có thể đạt được một số lợi ích đã bỏ lỡ bước quan trọng đó.
Jake Harry

@DrMcMoylex - Lưu ý, cảm ơn, đã xóa phần thưởng ngay bây giờ.
Jake Harry

2
Bạn không nên chấp nhận câu trả lời trong ngày đầu tiên đăng bài, tôi khá tự tin rằng một tay golf MATL / Jelly / 05AB1E sẽ thấy điều này và giải quyết nó với số byte ít hơn nhiều so với Python. Tôi nghĩ rằng hầu hết mọi người có xu hướng chờ đợi ít nhất một tuần.
Kade

Câu trả lời:


1

Python 2, 172 171 byte

def f(x,y,z):A=[['-']*x for _ in' '*y];z-=1;X,Y=z%x,z/x;a=[2,-1];A[Y][X]=A[Y+a[Y>0]][X]=A[Y-a[Y<y-1]][X]=A[Y][X+a[X>0]]=A[Y][X-a[X<x-1]]='+';print'\n'.join(map(''.join,A))

Chỉnh sửa: Đã lưu 1 byte bằng cách chuyển đổi thành chức năng.

Trước đó (dễ đọc hơn):

x,y,z=inputtt
A=[['-']*x for _ in' '*y]
z-=1
X,Y=z%x,z/x
a=[2,-1]
A[Y][X]=A[Y+a[Y>0]][X]=A[Y-a[Y<y-1]][X]=A[Y][X+a[X>0]]=A[Y][X-a[X<x-1]]='+'
print'\n'.join(map(''.join,A))

công việc tốt, nghĩ rằng tôi đã phá vỡ nó mặc dù với 10.100.300. Dường như không cư xử ở ranh giới ngoài cùng bên phải?
Jake Harry

@JakeHarry Hoạt động cho tôi: ideone.com/G2fwV1
TFeld

Ahh, tôi là một stooge, ide tôi đã sử dụng không phải là chiều rộng cố định nên nó đúng về mặt kỹ thuật, chỉ là không để mắt.
Jake Harry

1

JavaScript (ES6), 165 byte

(x,y,z,a=[...Array(y)].map(_=>Array(x).fill`-`))=>a.map(a=>a.join``,a[b=--z/x|0][c=z%x]=a[b?b-1:2][c]=a[b][c?c-1:2]=a[y+~b?b+1:y-3][c]=a[b][++c<x?c:x-3]=`+`).join`\n`

1

Befunge, 175 byte

>&:10p60p&:00p&1-:10g%:20p\10g/:30p::1+00g-!-\!+2-50p::1+1v
vg02g01*`\4\`0:-g05\!-g03:g00p01-1<g06+p00-1<p04-2+!\-!-g0<
>-!*\10g40g-:0`\4\`**+!2*"+"+10g:#^_$5500g:#^_$$$>:#,_@

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

Dòng đầu tiên (và tiếp tục ngắn lên dòng thứ hai) là nơi các tham số được đọc và một vài hằng số được tính - tọa độ của vị trí ( lx , ly ), cũng như tọa độ được điều chỉnh để giải thích cho việc thoát ra các cạnh:

ax = lx - (lx+1==w) + (lx==0) - 2 
ay = ly - (ly+1==h) + (ly==0) - 2

Các dòng thứ hai và thứ ba chứa các vòng chính trên chiều cao và chiều rộng của lưới, đường dẫn thực hiện đi từ phải sang trái ban đầu trước khi quay lại dòng thứ ba từ trái sang phải. Đối với mỗi tọa độ trong lưới ( gx , gy ), chúng tôi tính toán điều kiện sau:

(gx==lx && gy>ay && gy<ay+4) || (gy==ly && gx>ax && gx<ax+4)

Nếu điều kiện đó là đúng, chúng ta đẩy a "+"lên ngăn xếp, nếu sai chúng ta đẩy a "-". Để tránh phân nhánh ở đây, chúng tôi thực sự chỉ cần đẩy 43 + 2 * !condition(43 là giá trị ASCII của cộng và 45 là trừ).

Khi các vòng lặp đã kết thúc, bit mã cuối cùng chỉ là một thói quen đầu ra tiêu chuẩn in ra mọi thứ trên ngăn xếp.


0

JavaScript (ES6), 170

Vẫn chơi gôn

(w,h,z,t=--z%w,u=z/w|0,r='-'.repeat(w),S=(f,j)=>(r+f+r).substr(w-j,w))=>[...Array(h)].map((q=u-!!u-!(u+1-h),y)=>y-u?y>=q&y<q+3?S('+',t):r:S('+++',t-!!t-!(t+1-w))).join`
`

Ít chơi gôn

(w, h, z
, t=--z%w
, u=z/w|0
, r='-'.repeat(w)
, S=(f,j)=>(r+f+r).substr(w-j,w)
) => [...Array(h)].map(
    (q = u-!!u-!(u+1-h), 
     y) => y-u?y>=q&y<q+3?S('+',t):r:S('+++',t-!!t-!(t+1-w))
).join`\n`

Kiểm tra

F=
(w,h,z,t=--z%w,u=z/w|0,r='-'.repeat(w),S=(f,j)=>(r+f+r).substr(w-j,w))=>[...Array(h)].map((q=u-!!u-!(u+1-h),y)=>y-u?y>=q&y<q+3?S('+',t):r:S('+++',t-!!t-!(t+1-w))).join`
`

function update() {
  var [x,y,z] = I.value.match(/\d+/g)
  O.textContent = F(+x,+y,+z)
}

update()
<input value='5 6 10' oninput='update()' id=I>
<pre id=O>

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.