Zjedz tabliczkę czekolady


11

Mam tabliczkę czekolady i potrzebuję pomocy w jedzeniu, więc napiszesz program, aby to zrobić.

Wyjaśnienie

Pierwszy wiersz to wejście. Przykłady są oddzielone pustą linią.

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

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

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

0


1
   ____
   |__|

Spec

Mamy nadzieję, że przykłady jasno określają to wyzwanie, ale aby uniknąć ewentualnych nieporozumień, oto specyfikacja:

Możesz mieć jeden opcjonalny biały / wiodący biały znak

Dane wejściowe 0to puste dane wyjściowe.

Jeśli dane wejściowe są parzyste, górne rzędy wyglądają następująco:

_______
|__|__|

Jeśli jest nieparzysty, górny wiersz to:

   ____
   |__|

Jeśli jest nieparzysty i większy niż 1, górne rzędy to:

  ____
__|__|

Następujące rzędy to:

|__|__|

dopóki liczba wystąpień nie |__|będzie taka sama jak na wejściu


Jaka jest wydajność dla danych wejściowych 1? Czy wejście 0musi być obsługiwane?
Klamka

@ Doorknob tak, zaktualizowałem wyzwanie
Downgoat

1. Czy możemy przesłać funkcję? 2. Czy możemy pobierać dane wejściowe z argumentów STDIN / function? 3. Czy musimy wyprowadzać JEDEN lub WSZYSTKIE iteracje?
yyny

@YoYoYonnY tak, domyślnie możesz (ten link odpowiada również na twoje drugie pytanie) . Nie jestem pewien, co masz na myśli przez iteracje. Spójrz na przykłady, to wszystko, co musisz
wydać

Czy dozwolone są wiodące puste linie?
Neil

Odpowiedzi:



4

Haskell, 101 bajtów

Haskell nigdy nie był świetny do gry w golfa ...

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

To zależy od tego, jak na to spojrzysz. Java> Python> Haskell> GolfLang. Używam python;)
J Atkin

@JAtkin Cóż, spójrz na moją odpowiedź PHP , a potem zobaczysz, co jest najgorsze
timmyRS

3

JavaScript ES6, 80 bajtów

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

Używa tej samej techniki co moja odpowiedź Japt i zaskakująco niewiele dłużej ...


1

C, 104 102 bajtów

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

Może mogę użyć sztuczek printf, aby to poprawić ...
Najwyraźniej mogę


1

𝔼𝕊𝕄𝕚𝕟, 53 znaki / 67 bajtów

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

Try it here (Firefox only).

Jest to dość podobne do odpowiedzi Javascript ES6, mimo że znalazłem ją niezależnie. Wyjaśnienie, które nastąpi, kiedy skończę grać w golfa.


1

PHP, 134 znaki

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

Uwagi:

  • PHP nie zostało stworzone do gry w golfa
  • Na pewno ZABAWA zrobiłem ten fragment
  • Zgłasza błąd, jeśli argv jest niezdefiniowany
  • Każda pomoc w skrócie jest doceniana.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.