Ăn thanh sô cô la


11

Tôi có một thanh sô cô la và tôi cần trợ giúp để ăn nó vì vậy bạn sẽ viết một chương trình chỉ để làm điều đó.

Giải trình

Dòng đầu tiên là đầu vào. Các ví dụ được phân tách bằng một dòng trống.

7
   ____
 __|__|
|__|__|
|__|__|
|__|__|

6
_______
|__|__|
|__|__|
|__|__|

5
   ____
 __|__|
|__|__|
|__|__|

0


1
   ____
   |__|

Thông số kỹ thuật

Hy vọng các ví dụ xác định rõ ràng thách thức này nhưng để tránh mọi sự nhầm lẫn có thể xảy ra, đây là một thông số:

Bạn có thể có một khoảng trắng tùy chọn duy nhất

Một đầu vào 0là một đầu ra trống.

Nếu đầu vào là chẵn, các hàng trên cùng trông như:

_______
|__|__|

Nếu là số lẻ, hàng trên cùng là:

   ____
   |__|

Nếu số lẻ và lớn hơn 1, các hàng trên cùng là:

  ____
__|__|

Các hàng sau đây là:

|__|__|

cho đến khi số lượng phiên |__|bản giống như đầu vào


Đầu ra cho đầu vào là 1gì? Có đầu vào của 0cần phải được hỗ trợ?
Doorknob

@Doorknob vâng, tôi đã cập nhật thử thách
Downgoat 6/2/2016

1. Chúng tôi có thể gửi một chức năng? 2. Chúng ta có thể lấy đầu vào từ STDIN / đối số hàm không? 3. Chúng ta có phải xuất MỘT hoặc TẤT CẢ các lần lặp không?
yyny

@YoYoYonnY có, theo mặc định bạn có thể (liên kết này cũng trả lời câu hỏi thứ hai của bạn) . Tôi không chắc ý của bạn là gì khi lặp đi lặp lại. Hãy xem các ví dụ, đó là tất cả các bạn phải đầu ra
Downgoat

Là dòng trống hàng đầu được phép?
Neil

Câu trả lời:



4

Haskell, 101 byte

Haskell chưa bao giờ tuyệt vời cho việc chơi gôn ...

b="\n|__|__|"
h="   ____\n "
f 1=h++"  |__|"
f 2="_______"++b
f 3=h++"__|__|"++b
f n=f(n-2)++b
f _=""

Nó phụ thuộc vào cách bạn nhìn vào nó. Java> Python> Haskell> GolfLang. Tôi sử dụng python;)
J Atkin

@JAtkin Hãy nhìn vào câu trả lời PHP của tôi , sau đó bạn sẽ thấy điều gì tồi tệ nhất
timmyRS 6/2/2016

3

JavaScript ES6, 80 byte

x=>(x%2?`   ____
 ${x<2?"  ":"__"}|__|`:x?"_______":"")+`
|__|__|`.repeat(x/2)

Sử dụng kỹ thuật tương tự như câu trả lời Japt của tôi, và đáng ngạc nhiên là không lâu nữa ...


1

C, 104 102 byte

f(x){x?x%2?printf("   ____\n%3s|__|\n",x<2?"":"__"):puts("_______"):0;for(x/=2;x>0;x--)puts("|__|__|");}

Có lẽ tôi có thể sử dụng một số thủ thuật printf để cải thiện điều này ...
Rõ ràng tôi có thể


1

, 53 ký tự / 67 byte

ï%2?`   ⟮__⟯Ⅰ
 ⦃ï<2?⍞  :⍞Ⅰ⦄|Ⅰ|`:ï?⍘_ď7:⬯⦄
|Ⅰ|Ⅰ|`ď ï/2

Try it here (Firefox only).

Điều này khá giống với câu trả lời Javascript ES6, mặc dù tôi đã tìm thấy nó một cách độc lập. Giải thích sẽ đến khi tôi chơi golf xong.


1

PHP, 134 ký tự

<?$i=$argv[1];if($i>0){echo($i%2===0?"_______\n|__":"   ____\n".($i>1?"___":"   "))."|__|\n";echo str_repeat("|__|__|\n",($i-1)/2);}?>

Ghi chú:

  • PHP không được xây dựng để chơi gôn
  • Tôi chắc chắn đã có FUN làm đoạn trích này
  • Nó đưa ra một lỗi nếu argv không được xác định
  • Bất kỳ trợ giúp để rút ngắn nó được đánh giá cao.


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.