Biorąc pod uwagę liczbę N
, jak mogę wydrukować choinkę wysokości, N
używając najmniejszej liczby znaków kodu? N
przyjmuje się, że jest ograniczony do minimalnej wartości 3
i do maksymalnej wartości 30
(ograniczenia i sprawdzanie błędów nie są konieczne). N
jest podawany jako jedyny argument wiersza poleceń dla twojego programu lub skryptu.
Wszystkie języki są mile widziane, jeśli widzisz język już zaimplementowany i możesz go skrócić, edytuj, jeśli to możliwe - skomentuj inaczej i mam nadzieję, że ktoś posprząta bałagan. Dodaj znaki nowej linii i białe spacje dla przejrzystości, ale nie uwzględniaj ich w liczbie znaków.
Choinka jest generowana jako taka, a jej „pień” składa się tylko z wyśrodkowanego „*”
N = 3:
*
***
*****
*
N = 4:
*
***
*****
*******
*
N = 5:
*
***
*****
*******
*********
*
N określa wysokość gałęzi, nie licząc pnia jednej linii.
Wesołych Świąt PPCG!
c=:[:((\:i.@#),}.)"1[:$&'*'"0[:>:0,~i.
Brainfuck, 240 znaków
Jeszcze nie skończone. Działa, ale tylko z liczbami jednocyfrowymi.EDYCJA: Gotowe! Działa dla tłumaczy używających 0 jako EOF. Zobacz
NOTE
s w skomentowanym źródle dla tych z -1.Znowu EDYTUJ: Powinienem zauważyć, że ponieważ Brainfuck nie ma standardowej metody odczytu argumentów wiersza poleceń, zamiast tego użyłem stdin (standardowe wejście). Oczywiście ASCII.
EDYCJA po raz trzeci: Ojej, wygląda na to, że usunąłem
.
(wyjściowe) znaki podczas zagęszczania kodu. Naprawiony...Oto podstawowe zarządzanie pamięcią głównej pętli. Jestem pewien, że można go znacznie zoptymalizować, aby zmniejszyć liczbę postaci o około 30.
Wersja skrócona:
I ładna wersja:
źródło
Perl, 50 znaków
(1 odpowiednie miejsca)
perl: wersja jednoliniowa:
a teraz z większą ilością bieli:
Rozszerzone objaśnienie dla użytkowników innych niż Perl.
źródło
Język: Python (przez powłokę), Liczba znaków: 64 (2 znaczące spacje)
źródło
x86 asm 16-bitowy, 50 bajtów
Nie masz jeszcze wersji zestawu? :)
(Uwaga: N jest ograniczony do 1 - 9 w tej wersji)
Pobierz tutaj
źródło
Język: skrypt wsadowy systemu Windows ( szokujący! )
źródło
setlocal enabledelayedexpansion
polecenia.Rubinowy, 64 bajty
Wesołych Świąt wszystkim!
Edycja: ulepszenia dodane zgodnie z sugestią Joshua Swink
źródło
n=$*[0].to_i;puts [*1..n,1].map{|i|" "*(n-i)+"*"*(2*i-1)}
obniża to do 58.Język: C #, Liczba znaków: 120
Tylko kod bez formatowania (120 znaków):
Wersja ze 109 znakami (tylko kod):
Wynik dla wysokości = 10:
źródło
Język: dc (przez powłokę) Liczba znaków: 83
Trochę krótsza wersja DC:
EDYCJA: zmieniono stałą 10 na 1 $
źródło
python, trick „-c” ... @ 61 znaków (i jeden wiersz)
źródło
Oto rozsądnie zajmująca mało miejsca wersja Haskell, o 107 znakach:
uruchomienie:
Wesołych Świąt wszystkim :)
źródło
Język: dc (przez powłokę), Liczba znaków: 119 (1 znacząca spacja)
Tylko dla niejasności :)
źródło
Lepsze C ++, około 210 znaków:
Zminimalizowane do 179:
źródło
Język: python, bez lew, 78 znaków
źródło
Groovy 62B
_
źródło
Poprawa odpowiedzi ΤΖΩΤΖΙΟΥ. Nie mogę komentować, więc oto nowy post. 72 znaki.
Przy użyciu lewy „python -c” 61 znaków.
Nauczyłem się funkcji środkowej i że „python -c” może zaakceptować więcej niż jeden kod linii. Dzięki ΤΖΩΤΖΙΟΥ.
źródło
C # przy użyciu Linq:
170 znaków.
źródło
AWK, 86 znaków w jednym wierszu.
źródło
Język: Java, liczba znaków: 219
Dla porównania, byłem w stanie ogolić poprzednie rozwiązanie Java, używając rekurencji, do 231 znaków, z poprzedniego minimum 269. Chociaż nieco dłużej, podoba mi się to rozwiązanie, ponieważ
T
jest naprawdę zorientowane obiektowo. Możesz utworzyć mały lasT
instancji o losowej wielkości . Oto najnowsza ewolucja tego rozwiązania:źródło
class T{public static void main(String[]v){long n=new Long(v[0]),r=1,s;String o="";for(;r<=n;r++){for(s=n-r;s-->0;)o+=' ';for(;++s<2*r;)o+='*';o+="\n";}while(n-->1)o+=' ';System.out.println(o+"*");}}
(199 znaków / bajty)Język: PowerShell, liczba znaków: 41 (w tym 1 spacja)
źródło
21 znaków z dyalogem APL.
⍳ daje wektor liczb całkowitych zaczynających się od 1.
1, ⍨ dodaje jeden na końcu wektora. To będzie stopa drzewa.
„*” \ ¨⍨ daje wektor ciągów * o długościach podanych przez poprzedni wektor.
↑ przekształca wektor w macierz i dodaje spacje po prawej stronie.
m ← przechowuje macierz wm.
0 1 ↓ upuszcza zero wierszy i pierwszą kolumnę.
⌽ odwraca matrycę.
m, ⍨ łączy się z m po prawej stronie.
źródło
m,⍨⌽0 1↓m←
->(⌽,0 1↓⊢)
Język: C, liczba znaków: 133
Ulepszenie wersji C.
Działa, a nawet przyjmuje wysokość drzewa jako argument. Potrzebuje kompilatora, który toleruje kod w stylu K&R.
Czuję się teraz taki brudny .. To jest kod brzydki.
źródło
R (62 bajty)
Nie widziałem jeszcze rozwiązania R. Popraw mnie, jeśli mi tego brakowało.
Wynik:
źródło
Język: C, liczba znaków: 176 (2 odpowiednie spacje)
źródło
Wersja powłoki, 134 znaki:
źródło
Język: Python, Znacząca liczba znaków: 90
Jest brzydki, ale działa:
...
źródło
Ponieważ jest to CW: Nie podoba mi się, że golfy kodowe są zawsze zorganizowane pod względem „liczby znaków” lub czegoś takiego. Czy nie można ich zorganizować pod względem liczby instrukcji dla kompilatora / tłumacza (lub innego podobnego kryterium)? Oto znowu rozwiązanie Ruby i jest w zasadzie takie samo, ale teraz również do spożycia przez ludzi:
źródło
Węgiel , 9 bajtów (niekonkurencyjny)
Wypróbuj online!
Gadatliwy
Wypróbuj online!
źródło
Galaretka , 12 bajtów
Wypróbuj online!
źródło
PHP, 111 znaków
(Ostatni znak powinien być znakiem nowej linii.)
Wersja do odczytu:
źródło