var QUESTION_ID=4114,OVERRIDE_USER=73772;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Odpowiedzi:
Golfscript, 27 znaków
Wynikowe drzewo wygląda następująco:
Wersja, która używa parametru wysokości tylko raz, jest o jeden znak dłuższa:
Odczyt wysokości ze standardowego wejścia (z wejściem „10” w celu wygenerowania drzewa przykładów) zajmuje taką samą liczbę znaków (28):
źródło
Wiem, że to nie jest zgodne ze specyfikacją, ale pomyślałem, że spróbuję dodać trochę różnorodności drzewom, imitując tę klasyczną scenę świąteczną ASCII autorstwa Joan G. Stark .
Nie próbowałem odtworzyć całego obrazu - byłoby to trochę za dużo - ale tylko drzewo, dla którego przedstawiam ten 138-bajtowy program Perl:
I, oczywiście, oto próbka danych wyjściowych:
Wypróbuj online!
Kod korzysta z funkcji Perl 5.10+
say
, dlatego należy go uruchomić za pomocą przełącznika wiersza polecenia-M5.010
(lub-E
). (Właściwie samo zastąpieniesay
na końcuprint
uniknęłoby tego, kosztem dwóch kolejnych bajtów i utraty nowej linii po ostatnim wierszu danych wyjściowych.)Zauważ, że większość drzewa jest generowana losowo, więc rozmieszczenie ozdób będzie się różnić w zależności od serii. Anioł, stojak i górny rząd drzewa są jednak nieruchome.
Aby ta popularna odpowiedź nie została szybko usunięta zgodnie z polityką ustanowioną po jej opublikowaniu , oto również rozwiązanie zgodne ze specyfikacją tokena (45 bajtów, również Perl 5):
Wypróbuj online!
Podobnie jak powyższy program, ten należy również uruchomić na Perlu 5.10+ z
-M5.010
przełącznikiem, aby włączyć tęsay
funkcję. Oczywiście (jest to wyzwanie złożoności Kołmogorowa ) daje dokładnie takie same nudne wyniki, jak wszystkie inne zgodne wpisy, których tutaj nie zawracam sobie głowy. (Można także w niewielkim stopniu zmienić rozmiar, zmieniając liczbę10
na dowolną inną wartość).źródło
GolfScript (33 znaki)
Wersja o stałej wysokości:
Lub dla dokładnie tej samej długości
Drzewo wygląda niezwykle podobnie do wszystkich innych:
Wersja, która pobiera wysokość ze standardowego wejścia:
Początek poprzedniej linii jest jednym z lepszych uśmieszek, które zrobiłem w „przydatnym” programie GolfScript.
źródło
Skrypt powłoki, 44 znaki
Drukuje to drzewo:
źródło
Klon, 30/37 znaków
Zainspirowany wpisem Matematyki Wizarda , przedstawiam to 30- znakowe polecenie Maple 12:
Wydajność:
Mogę również pozbyć się nawiasów kosztem siedmiu dodatkowych znaków:
Wyjście pominięte - wygląda tak jak powyżej, tylko bez nawiasów. Niestety nie znam żadnego sposobu, aby powstrzymać Maple przed wstawieniem pustych linii między wierszami wyjściowymi w trybie tekstowym. Wygląda lepiej w klasycznym trybie arkusza roboczego. Chyba mogę dołączyć zrzut ekranu ...
(Zrzut ekranu pokazuje wcześniejszą 44-znakową wersję polecenia, ale jestem zbyt leniwy, aby ją powtórzyć. Wynik jest nadal taki sam.)
No i tak, rozmiar jest w pełni regulowany: wystarczy zastąpić 8 z n -2 dla drzewa n- rzędowego. W pierwszym rozwiązaniu przejście powyżej 25 wierszy (lub 10 w GUI) wymaga jednak również ustawienia interfejsu (rtablesize = n ).
(Ps. Myślałem, że udało mi się pokonać GolfScript w najnowszej wersji, ale niestety ... )
źródło
Perl, 42 znaki
Wydajność:
Wysokość drzewa można zmienić między 1 a 11 rzędami, zastępując
8
na końcu wartościami od-1
do9
. Wyjście powyżej 11 wierszy wymaga również zwiększenia dwóch9
s wcześniej w kodzie, które kontrolują, jak daleko od lewej strony ekranu jest wcięte drzewo.źródło
Groovy, 65
Zaskakująco, drzewo wygląda następująco:
źródło
Ruby, 46 znaków
Aby zmienić wysokość, musiałbyś zmienić zarówno 8s, jak i oczywiście 9. Wyjście programu jest następujące:
Edycja : Niewykluczone, że pominąłem dane wyjściowe w pierwszym przesłaniu.
źródło
PowerShell, 41
Nic dziwnego, że wyświetla to samo drzewo, co drzewo wszystkich innych :-p
Jeśli sparametryzujesz to 8, to da ci rozmiar do twojej konsoli, powiedzmy, 48 znaków :
Lub, jako pełny skrypt, który wymaga argumentu, 53 znaki :
Nazywany wygląda następująco:
źródło
Python 3: 62 znaki
Wydajność:
Zauważ, że to zasadniczo bije odpowiedź @ Ante o 11 znaków, ponieważ ta odpowiedź, po konwersji do Pythona 3, używa 73 znaków.
Zmień każdą
9
wartość na inną dla innej wysokości.źródło
for
.Python, 59
źródło
print
nie jest funkcją).Prolog: 183 lub 186
Wydruki:
Może być ściśnięty w przypadku niektórych tłumaczy (np. Używając tab / 1 na SWI)
Wywołaj za pomocą x (N). Gdzie N to liczba wierszy w rzeczywistym drzewie (bez gwiazdy). Nadanie mu stałej wysokości obniżyłoby ją do 183
źródło
do
To jest wersja C Wade Tandy, ale nieco zmodyfikowana:
źródło
Mathematica, 50
źródło
Applesoft BASIC, 143 znaki
Ponieważ to pytanie przypomina mi zadanie domowe, które miałem w szkole średniej (kiedy uczyli na Apple // e):
Użyłem JavaScript Applesoft BASIC znalezionego tutaj: http://www.calormen.com/applesoft/
WYDAJNOŚĆ:
źródło
Prolog: 127 znaków
Wydajność:
Używane,
Prolog
ponieważ nie byłem w stanie pobićGroovy
rekordu bez obejrzenia jego kodu :(.źródło
PostScript (ze sparametryzowaną wysokością), 114 znaków
Wydajność:
Co chciałeś, żeby to wydrukowało?
źródło
JavaScript (Rhino: 108, węzeł: 114, konsola programistyczna Webkit: 119, wtyczka jQuery: 132)
Nosorożec jest najkrótszy (ma 108 znaków), ponieważ (a) jego
print
funkcja ma krótką nazwę i (b) pozwoli ci przypisać funkcje wbudowane do krótszej nazwy zmiennej. Więc:Node.js pojawia się w
console.log
krótkim momencie (przy 114 znakach), ponieważ jego funkcja drukowania ma dłuższą nazwę, ale pozwoli nam również przypisać ją do krótkiej zmiennej:Jednak konsola deweloperska Webkit (i prawdopodobnie również Firebug) uważa, że
p=console.log
jest to zbyt podstępne (gdy spróbujesz zadzwonićp()
, narzeka na ciebie). Musimy więc wydłużyć czas do 119 znaków:(Co ciekawe,
with
ratuje nas tylko postać).Wreszcie ... wtyczka jQuery (wciąż tweetowana przy 132 znakach!):
I możesz ją wywołać w stopce tej samej strony:
$('#footer').xms(3)
Oczywiście nie musi to być wtyczka ... ponieważ prawdopodobnie musielibyśmy użyć konsoli JavaScript, aby dodać ją do strony i wywołać, mogliśmy po prostu zrobić fragment jQuery :
który waży 116 bardziej konkurencyjnych znaków - w rzeczywistości przewyższa inne implementacje konsoli programistów. Ale znowu użycie jQuery i / lub silnika układu przeglądarki można uznać za oszustwo. :)
źródło
C, 67
Wiem, że to już dawno minęło, ale to moja pierwsza próba gry w golfa kodowego i myślę, że mam całkiem niezłe rozwiązanie w języku C.
Co ciekawe, wymyśliłem to niezależnie od bardzo podobnego rozwiązania @ Patrick.
I tak, nie wygrywam żadnych więzi z moimi zakodowanymi wartościami;) W każdym razie jestem całkiem zadowolony.
źródło
Wyrocznia
źródło
PHP, 106 znaków
7 mniej niż poprzednie:
źródło
<?=
i zapisz kolejne 5 z „echa”.LOLCODE, 527 bajtów
Wypróbuj online!
Wydajność:
źródło
Python, 70 znaków
Nie tak krótkie, ale rekurencyjne rozwiązanie :-)
Zmień 8, aby ustawić wysokość.
źródło
JavaScript, 119 znaków
Wyjścia do konsoli Firebug
źródło
PHP 113
Pomyślałem, że włączyłem wersję php:
113 znaków (dostosuj,
$h
aby zmienić wysokość, liczba linii obejmuje gwiazdkę):Starałem się, aby było to krótkie, nieczytelne i już wiedzieliśmy, że php nie może konkurować w zwięzłości, więc to nic nie wygra, wciąż zabawna łamigłówka.
dane wyjściowe są zgodne ze specyfikacją:
źródło
C, 77
Przed dokładniejszym przeczytaniem specyfikacji printf miałem tę uroczą małą liczbę do 138 znaków:
źródło
Java, 192 (198 z param)
class V{public static void main(String[]a){int c=10,i=-1,j=0;String s="";while(j++<c)s+=" ";s+="*";while(++i<c){for(j=-2;++j<c-i;)s+=" ";for(j=0;++j<2*i;)s+="0";System.out.println(s);s="";}}}
Drukuje żądane drzewo:
Dla zmiennej wysokości, nieco dłużej:
class W{public static void main(String[]a){int c=a.length,i=-1,j=0;String s="";while(j++<c)s+=" ";s+="*";while(++i<c){for(j=-2;++j<c-i;)s+=" ";for(j=0;++j<2*i;)s+="0";System.out.println(s);s="";}}}
Długość listy argumentów wiersza poleceń określa wysokość (np.
java W a a a a a
Da wysokość 5).(Jest to w zasadzie wersja Java rozwiązania Wade Tandy's C.)
źródło
while (++i < c) {
->for (s += "*";++i < c;s = "") {
i usunąćs += "*";
is = "";
Vim, 18 bajtów
Wypróbuj online w kompatybilnym wstecznie tłumaczu V!
Chociaż jest to bardzo podobne podejście jak mój V odpowiedź, ten jest nie niekonkurującymi od vim fiksuje stary. :)
Wyjaśnienie:
źródło
Scala, 74 bajty
h
- wysokość drzewaWydajność
źródło
C, 80
Zainicjuj k do wysokości drzewa, i do k-1. F jest flagą pierwszego wiersza. Bez argumentu, F powinno wynosić 1 przy wejściu.
Nieco dłuższa (81) wersja, w której f nie jest flagą pierwszego wiersza:
źródło