Táo đang rơi xuống


15

Giới thiệu

Có một thân cây Apple nằm giữa -2 đến 2 trên trục x, trong đó một số quả táo rơi xuống xung quanh nó:

        |   |
        |   |
<-------|---|------->
       -2   2

Mỗi ngày, n quả táo rơi xuống. Mỗi quả táo duy trì tọa độ x của nó khi rơi thẳng xuống đất.

Nhưng nếu nó nằm trên một quả táo khác, nó sẽ lăn theo các quy tắc sau cho đến khi nó chạm đất hoặc một lớp táo hỗ trợ:

  1. Nếu không gian tại x + 1 ở độ cao hiện tại của nó trống thì quả táo hiện tại sẽ ở đó.
  2. Khác nếu không gian tại x-1 trống, quả táo hiện tại sẽ ở đó.
  3. Mặt khác, quả táo hiện tại vẫn ở vị trí của nó trên quả táo khác.

Thử thách

Đầu vào sẽ là n vị trí bắt đầu của mỗi quả táo theo thứ tự. Bạn có thể lấy nó dưới dạng một mảng hoặc các số riêng biệt hoặc theo bất kỳ cách hợp lệ nào khác, chỉ cần đảm bảo rằng bạn giải thích nó trong câu trả lời của bạn.

Đầu ra phải là bản vẽ ASCII của thân cây và những quả táo xung quanh. Bạn không cần phải vẽ trục x ở bên trái của quả táo ngoài cùng bên trái và bên phải của quả táo ngoài cùng bên phải, nhưng bạn cần phải vẽ nó ở bất cứ đâu bên dưới quả táo. Bạn cũng có thể mở rộng cây trên quả táo cao nhất.

Bạn có thể giả sử tất cả các tọa độ x nằm trong khoảng từ -100 đến 100, nhưng không nằm trong khoảng từ -2 đến 2.

Đây là .. Câu trả lời ngắn nhất trong byte thắng!

Ví dụ

Đầu vào: [-3, 5, 5, -4, -4, 5, -3]

Đầu ra:

  a|   |
aaa|   | aaa
---|---|----

Đầu vào: [3, 3, 3, 3, 8, 9]

Đầu ra:

|   |a
|   |aaa  aa
|---|-------

Đầu vào: [-5, -5, -5, -5, -5, -5, -5, -5, -5]

Đầu ra:

  a  |   |
 aaa |   |
aaaaa|   |
-----|---|


Các ví dụ của bạn ngụ ý rằng mức độ tối thiểu có thể theo hướng x nên được hiển thị (không có mặt đất trống ở bên trái và bên phải của cây và táo). Đó có phải là một yêu cầu? Ngoài ra, chúng ta có được phép in dấu cách, ít nhất là để đầu ra cho hình chữ nhật không?
Martin Ender

1
Tiền thưởng không phổ biến lắm. Tôi nghĩ rằng yêu cầu đầu ra "hiển thị" là tối thiểu (không có hàng trống ở trên cùng, không có ô mặt đất ở các cạnh trống) là tốt, nhưng tôi chắc chắn sẽ cho phép đệm đầu ra vào một hình chữ nhật có khoảng trắng.
Martin Ender

Ngoài ra, phần thưởng của bạn hiện không có ý nghĩa vì thông số kỹ thuật thực sự không cho phép bất kỳ định dạng đầu ra khác nhau nào bắt đầu.
Martin Ender

2
Tôi sẽ đưa ra một khoản tiền thưởng 100 rep cho câu trả lời đầu tiên trong Marbelous. Táo rơi được tính toán bằng những viên bi rơi ... nó quá vừa vặn.
quintopia

Câu trả lời:


1

PHP, 230 byte

Tôi đã thêm hai dòng mới đầu tiên để dễ đọc.

function($l){for($y=count($l);$y>=0;$f[]="$a|   |$a")$a=str_repeat($y--?$w=' ':'-',99);
foreach($l as$x){for($x+=101,$s=$y=0;!$s;$b[$x]!=$w?$b[$x+1]!=$w?$b[$x-1]!=$w?$s=1:--$x
:++$x:0)$b=$f[$y++];$f[$y-2][$x]=a;}echo join('
',$f);};

Ideone

Đây là phiên bản chưa được chỉnh sửa:

function drawApples(array $listStartX)
{
    $field = [];
    $maximalHeight = count($listStartX);
    for ($y = $maximalHeight; $y >= 0; --$y)
    {
        $line = str_repeat($y > 0 ? ' ' : '-', 98);
        $field[] = $line .'|   |'. $line;
    }

    foreach ($listStartX as $x)
    {
        $x += 100;
        for ($y = 0; true; ++$y)
        {
            if ($field[$y][$x] === ' ') {
                continue;
            }

            if ($field[$y][$x + 1] === ' ') {
                ++$x;
                continue;
            }

            if ($field[$y][$x - 1] === ' ') {
                --$x;
                continue;
            }

            $field[$y - 1][$x] = 'a';
            break;
        }
    }

    echo implode("\n", $field);
}

1

Python 2.7, 282 byte

from collections import*;a=Counter();a[2]=-1;a[-2]=-1
for d in input():
 while 0<=a[d+1]<a[d]:d+=1
 while 0<=a[d-1]<a[d]:d-=1
 a[d]+=1
m=max(a.values())+1
print'\n'.join(''.join(' '*(m-a[i]-1)+'a'*a[i]+'-'if i**2!=4 else'|'*m for i in range(min(a),max(a)+1))[i::m]for i in range(m))

Ideone

Tôi cũng đã thử.

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.