N
Wie kann ich bei einer gegebenen Zahl einen hohen Weihnachtsbaum N
mit der geringsten Anzahl von Codezeichen ausdrucken ? N
wird auf einen Minimalwert von 3
und einen Maximalwert von beschränkt angenommen 30
(Grenzen und Fehlerprüfung sind nicht erforderlich). N
wird als einziges Befehlszeilenargument für Ihr Programm oder Skript angegeben.
Alle Sprachen sind willkommen, wenn Sie eine bereits implementierte Sprache sehen und sie kürzer machen können. Bearbeiten Sie sie, wenn möglich. Kommentieren Sie sie anders und hoffen Sie, dass jemand das Chaos beseitigt. Fügen Sie der Klarheit halber Zeilenumbrüche und Leerzeichen hinzu, aber schließen Sie sie nicht in die Zeichenanzahl ein.
Ein Weihnachtsbaum wird als solcher erzeugt, dessen "Stamm" nur aus einem zentrierten "*" besteht.
N = 3:
*
***
*****
*
N = 4:
*
***
*****
*******
*
N = 5:
*
***
*****
*******
*********
*
N definiert die Höhe der Zweige ohne den einzeiligen Stamm.
Frohe Weihnachten PPCG!
c=:[:((\:i.@#),}.)"1[:$&'*'"0[:>:0,~i.
Brainfuck, 240 Zeichen
Noch nicht fertig. Es funktioniert, aber nur mit einstelligen Zahlen.EDIT: Fertig! Funktioniert für Dolmetscher, die 0 als EOF verwenden. Siehe
NOTE
s in der kommentierten Quelle für diejenigen mit -1.Erneut BEARBEITEN: Da es in Brainfuck keine Standardmethode zum Lesen von Befehlszeilenargumenten gibt, habe ich stattdessen stdin (Standardeingabe) verwendet. ASCII natürlich.
Ein drittes Mal BEARBEITEN: Oh je, es scheint, als hätte ich
.
beim Verdichten des Codes Zeichen entfernt (ausgegeben). Fest...Hier ist die grundlegende Speicherverwaltung der Hauptschleife. Ich bin sicher, es kann stark optimiert werden, um die Anzahl der Zeichen um 30 oder so zu reduzieren.
Kondensierte Version:
Und die hübsche Version:
quelle
Perl, 50 Zeichen
(1 relevante Leerzeichen)
Perl: einzeilige Version:
und jetzt mit mehr whitesapce:
Erweiterte Erklärung für Nicht-Perl-Benutzer.
quelle
Sprache: Python (durch Shell), Zeichenanzahl: 64 (2 signifikante Leerzeichen)
quelle
x86 asm 16-Bit, 50 Bytes
Noch keine Montageversion? :)
(Hinweis: N ist in dieser Version auf 1 - 9 begrenzt.)
Hier herunterladen
quelle
Sprache: Windows Batch Script ( schockierend! )
quelle
setlocal enabledelayedexpansion
Befehl aktiviert werden .Ruby, 64 Bytes
Frohe Weihnachten euch allen!
Bearbeiten: Verbesserungen hinzugefügt, wie von Joshua Swink vorgeschlagen
quelle
n=$*[0].to_i;puts [*1..n,1].map{|i|" "*(n-i)+"*"*(2*i-1)}
Sprache: C #, Zeichenzahl: 120
Nur der Code ohne Formatierung (120 Zeichen):
Version mit 109 Zeichen (nur der Code):
Ergebnis für Höhe = 10:
quelle
Sprache: dc (durch Shell) Zeichenanzahl: 83
Ein bisschen kürzere DC-Version:
BEARBEITEN: Konstante 10 in $ 1 geändert
quelle
Python, "-c" Trick ... bei 61 Zeichen (und einer Zeile)
quelle
Hier ist eine einigermaßen platzsparende Haskell-Version mit 107 Zeichen:
Laufen es:
Frohe Weihnachten euch allen :)
quelle
Sprache: dc (durch Shell), Zeichenanzahl: 119 (1 signifikantes Leerzeichen)
Nur für die Dunkelheit davon :)
quelle
Besser C ++, ca. 210 Zeichen:
Auf 179 minimiert:
quelle
Sprache: Python, keine Tricks, 78 Zeichen
quelle
Groovy 62B
_
quelle
Die Antwort von ΤΖΩΤΖ verbessern. Ich kann keinen Kommentar abgeben. Hier ist ein neuer Beitrag. 72 Zeichen.
Mit dem Trick "python -c" 61 Zeichen.
Ich habe die Center-Funktion gelernt und festgestellt, dass "python -c" mehr als einen Zeilencode akzeptieren kann. Danke, ΤΖΩΤΖ.
quelle
C # mit Linq:
170 Zeichen.
quelle
AWK, 86 Zeichen in einer Zeile.
quelle
Sprache: Java, Zeichenzahl: 219
Als Referenz konnte ich die vorherige Java-Lösung mit einer Rekursion von bis zu 231 Zeichen von dem vorherigen Minimum von 269 rasieren. Obwohl diese Lösung etwas länger ist, gefällt sie mir, weil sie
T
wirklich objektorientiert ist. Sie könnten einen kleinen Wald vonT
Instanzen in zufälliger Größe erstellen . Hier ist die neueste Entwicklung auf diesem Gebiet:quelle
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 Zeichen / Bytes)Sprache: PowerShell, Zeichenanzahl: 41 (einschließlich 1 Leerzeichen)
quelle
21 Zeichen mit dyalog APL.
⍳ gibt einen Vektor von ganzen Zahlen an, der mit 1 beginnt.
1, ⍨ fügt am Ende des Vektors eine Eins hinzu. Dies wird der Fuß des Baumes sein.
'*' \ ¨⍨ gibt einen Vektor von * -Strings mit Längen an, die durch den vorherigen Vektor gegeben sind.
↑ transformiert den Vektor in eine Matrix und fügt rechts Leerzeichen ein.
m ← speichert die Matrix in m.
0 1 ↓ löscht null Zeilen und die erste Spalte.
⌽ kehrt die Matrix um.
m, ⍨ verkettet sich mit m auf der rechten Seite.
quelle
m,⍨⌽0 1↓m←
->(⌽,0 1↓⊢)
Sprache: C, Zeichenzahl: 133
Verbesserung der C-Version.
Funktioniert und nimmt sogar die Baumhöhe als Argument. Benötigt einen Compiler, der K & R-Code toleriert.
Ich fühle mich jetzt so schmutzig. Dieser Code ist hässlich.
quelle
R (62 Bytes)
Ich habe die R-Lösung noch nicht gesehen. Korrigieren Sie mich, wenn ich es verpasst habe.
Ausgabe:
quelle
Sprache: C, Zeichenanzahl: 176 (2 relevante Leerzeichen)
quelle
Shell-Version, 134 Zeichen:
quelle
Sprache: Python, Signifikante Zeichenanzahl: 90
Es ist hässlich, aber es funktioniert:
...
quelle
Da dies ein CW ist: Ich mag es nicht, dass Codegolfs immer nach "Anzahl der Zeichen" oder ähnlichem organisiert sind. Könnten sie nicht in Bezug auf die Anzahl der Anweisungen für den Compiler / Interpreter (oder ein ähnliches Kriterium) organisiert werden? Hier ist wieder die Ruby-Lösung , und sie ist im Grunde die gleiche, aber jetzt auch für den menschlichen Verzehr:
quelle
Kohle , 9 Bytes (nicht konkurrierend)
Probieren Sie es online!
Ausführlich
Probieren Sie es online!
quelle
Gelee , 12 Bytes
Probieren Sie es online!
quelle
PHP, 111 Zeichen
(Das allerletzte Zeichen sollte ein Zeilenumbruch sein.)
Lesbare Version:
quelle