กินช็อกโกแลตบาร์


11

ฉันมีช็อคโกแลตบาร์และฉันต้องการความช่วยเหลือในการกินดังนั้นคุณจะสามารถเขียนโปรแกรมเพื่อทำสิ่งนั้นได้

คำอธิบาย

บรรทัดแรกคืออินพุต ตัวอย่างถูกคั่นด้วยบรรทัดว่าง

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

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

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

0


1
   ____
   |__|

สเป็ค

หวังว่าตัวอย่างจะระบุความท้าทายนี้อย่างชัดเจน แต่เพื่อหลีกเลี่ยงความสับสนที่อาจเกิดขึ้นต่อไปนี้เป็นข้อมูลจำเพาะ:

คุณสามารถมีช่องว่างต่อท้าย / นำหน้าตัวเลือกเดียว

อินพุตของ0เป็นเอาต์พุตว่าง

หากอินพุตเป็นเลขคู่แถวบนสุดจะมีลักษณะดังนี้:

_______
|__|__|

ถ้ามันแปลกแถวบนสุดคือ:

   ____
   |__|

ถ้ามันแปลกและมากกว่า 1 แถวบนสุดคือ:

  ____
__|__|

แถวต่อไปนี้คือ:

|__|__|

จนกว่าจำนวนอินสแตนซ์ของ|__|จะเหมือนกันกับอินพุต


เอาต์พุตสำหรับอินพุต1คืออะไร 0จำเป็นต้องได้รับการสนับสนุนอินพุทหรือไม่?
Doorknob

@Doorknob ใช่ฉันได้อัปเดตความท้าทายแล้ว
Downgoat

1. เราสามารถส่งฟังก์ชั่นได้หรือไม่? 2. เราสามารถรับอินพุตจากอาร์กิวเมนต์ STDIN / function ได้หรือไม่ 3. เราต้องแสดงผลซ้ำหนึ่งหรือทั้งหมดหรือไม่
yyny

@YoYoYonnY ใช่โดยเริ่มต้นที่คุณสามารถ (ลิงค์นี้สามารถตอบคำถามที่สองของคุณมากเกินไป) ฉันไม่แน่ใจว่าสิ่งที่คุณหมายถึงโดยการทำซ้ำ ลองดูตัวอย่างนั่นคือทั้งหมดที่คุณต้องทำ
Downgoat

อนุญาตให้มีบรรทัดว่างนำหน้าได้หรือไม่
Neil

คำตอบ:



4

Haskell, 101 ไบต์

Haskell ไม่เคยยอดเยี่ยมสำหรับการเล่นกอล์ฟรหัส ...

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

ขึ้นอยู่กับว่าคุณจะมองอย่างไร Java> Python> Haskell> GolfLang ฉันใช้ python;)
J Atkin

@JAtkin ดูคำตอบ PHPของฉันแล้วคุณจะเห็นว่าอะไรที่เลวร้ายที่สุด
timmyRS

3

JavaScript ES6, 80 ไบต์

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

ใช้เทคนิคเดียวกับคำตอบ Japt ของฉันและไม่แปลกใจอีกต่อไป ...


1

C, 104 102 ไบต์

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

บางทีฉันอาจใช้เล่ห์เหลี่ยม printf เพื่อปรับปรุงสิ่งนี้ ...
เห็นได้ชัดว่าฉันทำได้


1

𝔼𝕊𝕄𝕚𝕟, 53 ตัวอักษร / 67 ไบต์

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

Try it here (Firefox only).

นี่ค่อนข้างคล้ายกับคำตอบ Javascript ES6 แม้ว่าฉันจะพบว่ามันเป็นอิสระ คำอธิบายมาถึงเมื่อฉันเล่นกอล์ฟจนจบ


1

PHP, 134 ตัวอักษร

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

หมายเหตุ:

  • PHP ไม่ได้ถูกสร้างขึ้นสำหรับการเล่นกอล์ฟรหัส
  • ฉันแน่ใจว่ามีความสนุกในการสร้างตัวอย่างนี้
  • มันจะโยนข้อผิดพลาดถ้า argv ไม่ได้กำหนด
  • ความช่วยเหลือใด ๆ ที่จะย่อมันชื่นชม


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.