Aufgabenbeschreibung:
Zeichnen Sie in ASCII-Kunst einen Würfel in einer ungefähren Schrankprojektion.
Monospaced fonts
Häufig sind die Zeichen doppelt so hoch wie breit. Da die Eingabe die Länge der vertikalen Linien (ohne die Ecken) ist, werden horizontale Linien mit doppelt so vielen Zeichen gezeichnet, sodass das resultierende Bild in etwa ein Würfel ist. Die zurückgehenden Linien werden auf die Hälfte der Länge gezeichnet, wie dies durch eine Kabinettprojektion vorgeschrieben ist.
Die Ecken des Würfels werden durch +
horizontale Linien -
, vertikale Linien |
und diagonale Linien dargestellt /
.
Zusammenfassen: Dann sei die Eingabe n
- Eine horizontale Kante des Würfels wird mit gezeichnet
-
und besteht aus 2 n Zeichen. - Eine vertikale Kante des Würfels wird mit n Zeichen gezeichnet
|
und besteht aus n Zeichen. - Eine diagonale Kante des Würfels ist mit
/
und besteht aus n / 2 Zeichen. - Würfelecken sind mit gezeichnet
+
. Ecken werden nicht wie oben beschrieben für die Länge einer Kante gezählt (siehe auch Beispiele unten).
Eingang:
Die Eingabe bei der Standardeingabe ist eine positive gerade Zahl n (2 ≤ n ≤ 30), die die Länge der vertikalen Linien des Würfels angibt. Es folgt ein einzelner Zeilenumbruch.
Ausgabe:
Die Ausgabe ist ein Würfel für die Standardausgabe gemäß den obigen Regeln. Das nachfolgende Leerzeichen in den Zeilen wird ignoriert.
Beispieleingang 1:
2
Beispielausgabe 1:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Beispieleingang 2:
4
Beispielausgabe 2:
+--------+
/ /|
/ / |
+--------+ |
| | |
| | +
| | /
| |/
+--------+
ETA: Ich habe jetzt die kürzeste Lösung akzeptiert. Ich werde die akzeptierte Antwort aktualisieren, wenn eine kürzere kommt.
Da fragten einige Leute, wie lange die Einsendungen unserer Teilnehmer waren:
227 - Python
240 - Perl
310 - C
315 - C
326 - VB.NET
459 - C
Sowie unsere eigenen Lösungen (nicht mit den anderen eingestuft):
140 - Golfscript
172 - Ruby
183 - PowerShell
Antworten:
Golfscript - 96 Zeichen
Der größte Teil der Kompaktheit ergibt sich aus der aggressiven Speicherung fast aller Daten in einer Variablen (es sei denn, Sie sind in Golfscript geschrieben).
Ein paar andere kleine Tricks hier.
'LR''str'*
->'LstrR'
.'/'
nur zwei Stapelelemente (@
) anstelle von 3 (@ .. \
) überschreiten müssen.quelle
Python -
248243230227191Etwas unordentlich, aber es druckt den Würfel grundsätzlich zeilenweise (unter Verwendung eines Zeichenfolgenpuffers).
Vielen Dank an @marcog für den Hinweis auf die erste Zeile, @ThomasO für den Hinweis auf die zweite Zeile und an @Juan, der mir klar gemacht hat, dass ich Zeilen kombinieren kann.
quelle
s=" ";p="+";b="|";f="/";n="\n"
zus,p,b,f,n=" +|/\n"
.Python - 179
Ich möchte darauf hinweisen, dass ich einige Ideen von JPvdMerwe übernommen habe.
quelle
fortran 77 - 484 Zeichen
Kein wirklicher Grund, eine "unbefangene" Version bereitzustellen. Beachten Sie, dass Markdown mit den Einrückungsanforderungen nicht gut zurechtkommt.
Ich habe fortran wegen der Inline for-Schleifen aus der
write
Anweisung ausprobiert . Offensichtlich helfen sie, aber sie summieren sich nicht auf genug, um die Worte der Sprache zu töten. Sie kann durch die Verwendung von Freiform-Eingaben verringert werden.Validierung:
Zum Glück sagt die Spezifikation nicht, wie die Größe aussehen soll:
aber andere ungerade Größen sind vernünftig:
quelle
Meine eigene Lösung, da sie von Python bereits zu Tode geprügelt wurde:
Windows PowerShell, 183
quelle
PostScript, 237
Geschichte:
def
noch einige Dinge hinzugefügt , die oft aufgetaucht sind.def
s.def
, die zwei weitere Bytes speichert.[
und]
haben schöne Eigenschaften, wenn sie als Variablen verwendet werden :-). Danke an KirarinSnow .def
s. Nochmals vielen Dank :-).quelle
Ruby 1.9,
172 165162 Zeichenquelle
Ruby - 423 Zeichen
Ich möchte das wirklich nicht teilen, da es so eine schreckliche Zählung ist, aber da ich es geschrieben habe, könnte es genauso gut sein.
Könnte wahrscheinlich um einiges reduziert werden, aber ich bezweifle, dass dieser Brute-Force-Ansatz eine annähernd anständige Anzahl von Charakteren erreichen wird, so dass ich mich nicht darum kümmern kann.
quelle
PHP,
401392382363 Zeichen:Ich habe das ursprünglich gemacht, um zu sehen, wie kurz ich das in PHP schaffen könnte, da ich wusste, dass es ziemlich lang werden würde. Ich bin sicher, es könnte reduziert werden, aber nicht viel, wenn man bedenkt, dass PHP nicht viele Verknüpfungen hat.
Validierung:
http://codepad.viper-7.com/ftYYz9.php53
Ungolfed Version: http://codepad.viper-7.com/4D3kIA
quelle
Perl, 163
Perl 5.10 oder höher kann mit ausgeführt werden
perl -E '<code here>'
Respaced Version:
quelle
Perl,
269 269 262 256 245 244 237 226 228 224217 ZeichenDie Grundidee ist, alles mit Regex-Substitutionen zu machen. Da zwei der verwendeten Zeichen (+ und /) Sonderzeichen sind und häufig in regulären Ausdrücken vorkommen, lohnt es sich, andere Zeichen zu verwenden und durch diese zu ersetzen.
Etwas besser lesbare Version:
In gewisser Weise betrüge ich, indem ich $ b als Zähler in der Zwischenschleife verwende - ich könnte stattdessen Leerzeichen in der Schleife über $ a anhängen und dann Regex-Ersetzungen für diese Schleife verwenden - aber ich werde diese leichte Abweichung zulassen aus einer reinen Regex-Lösung.
Zweifellos kann eine beängstigende Person daraus ein viel kürzeres Sed-Skript machen.
quelle
y
fortr
ist nicht offensichtlich und der Weg, den "while" gehen kann, bevor oder nachdem ...Lua,
294302292 BytesGolf gespielt:
Ungolfed:
quelle
or 6
nach demread()
Anruf weglassen, was vier Bytes spart :-)(...)
funktioniert es bei mir auf Lua 5.1.4 nicht mehr.Canvas , 63 Bytes
Probieren Sie es hier aus!
quelle