Ihre Aufgabe ist es, eine Darstellung des legendären Lebensbaums Yggdrasil auszugeben .
Sie müssen ein Programm schreiben, dessen Ausgabe genau das ist:
/\
/**\
/****\
/******\
/******\
/********\
/**********\
/************\
/**************\
/************\
/**************\
/****************\
/******************\
/********************\
/**********************\
/******************\
/********************\
/**********************\
/************************\
/**************************\
/****************************\
/******************************\
/************************\
/**************************\
/****************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/************************************************************************\
/**************************************************************************\
/****************************************************************************\
/******************************************************************************\
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|________|
Es gibt kein nachgestelltes Leerzeichen. Die letzte Zeile kann weggelassen werden.
Um die Überprüfung zu vereinfachen, sind hier die MD5-Summen der erwarteten Ausgabe:
374899e56bc854d04639c43120642e37
- Keine neue Zeile am Ende.03afb81d960b8e130fe2f9e0906f0482
- Newline am Ende
Es gelten Standardlücken. Das ist Code-Golf, also gewinnt der kleinste Eintrag in Bytes!
code-golf
ascii-art
kolmogorov-complexity
Caird Coinheringaahing
quelle
quelle
Antworten:
Golfscript,
8477767572 ZeichenAnderer Ansatz als bei Howard . Klicken Sie auf die Zeichenanzahl, um es zu versuchen.
Vielen Dank an Howard für das Speichern von 3 Zeichen!
Erklärung :
Dies ist mehr oder weniger ein einfacher Port meiner Python-Lösung . Nehmen Sie sich einige ausdrucksstarke Freiheiten (verwenden Sie benannte Variablen, anstatt die Stapelpositionen zu verfolgen, und
print
behalten Sie die Dinge wirklich auf dem Stapel, ohne zu drucken):quelle
'\\'n
die Newline in den String zu ziehen (+/- 0 Zeichen), muss der Backslash nicht mehr maskiert werden (-1 Zeichen).4*4+
ist das Gleiche wie)4*
und'_-'[=]
kann geschrieben werden'_-'1/=
, wodurch die letzte+
veraltet ist.Haml & Sass
37 + 277 = 314
Haml:
Sass:
* Sass ermöglicht Steueranweisungen, Verkettung und variable Dereferenzierung. All dies ist beim Styling nützlich, aber beim Golfen ausführlich.
wird generiert in:
HTML:
CSS:
die resultierende Seite
quelle
CJam , 62 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
GolfScript, 79 Zeichen
Probieren Sie den Code hier aus . Beachten Sie, dass die Zeilenumbrüche in diesem Code nicht optional sind
quelle
Python,
148129126121 ZeichenVielen Dank an Falko für das Speichern von 3 Charakteren und an Flornquake für das brillante Speichern von weiteren 5!
quelle
'**'*j
zum Speichern von 3 Zeichen. Abgesehen davon konvergiert meine Lösung zum exakt gleichen Code. :)for c in'-'*11+'_':print' '*35+'|'+c*8+'|'
.Bash,
236 19719310 Byte Code + 1 Byte Dateiname + 182 Byte Datendatei = insgesamt 193 Byte
Erläuterung
y
ist eine Datei, die Yggdrasil enthält, ohne abschließende neue Zeile, komprimiert mit dem zopfli- Algorithmus (aufgerufen alszopfli --i64
) und dann mit den letzten 8 Bytes entfernt. zopfli ist mit gzip kompatibel, daher kann ich die Datei mit Standard-Bash-Dienstprogrammen für gzip dekomprimieren. Die Größe der Datendatei beträgt 182 Bytes (229 Bytes bei Verwendung von normalem gzip). Die Größe des ursprünglichen Yggdrasil ohne die nachfolgende neue Zeile beträgt 5876 Byte.Das Entfernen der letzten 8 Bytes führt zu Fehlermeldungen, die durch das Senden von Standardfehlern an eine aufgerufene Datei unterdrückt werden
j
. Fallsj
vorhanden, wird es überschrieben.Die base64 von
y
ist (verwendenbase64 -d
, um die Originaldatei zu erhalten):Und die md5sum ist:
quelle
C 169
Ungolfed (und leicht entwirrt):
quelle
Rubin - 100
Setzt Auto-Flattens, so dass wir alle Zeilen auch in verschachtelten Arrays sammeln können. Benötigt Ruby 1.9
Versuche es bei ideone
quelle
PowerShell
104101quelle
C #
258234 ByteVielen Dank an einige nervige Benutzer für die vorgeschlagenen Änderungen, die die String.PadLeft-Methode gut nutzen!
Der Code ist ziemlich einfach, nicht viel zum Golfen übrig.
Formatierter Code:
quelle
\r
ist hier sinnlos. Das ist Code Golf.J
98 88 8475quelle
Perl, 127
Ungolfed:
quelle
Ruby -
139129126123121Hoisted "setzt" außerhalb der Array-Erstellung (Vorschlag von Bitpwner).
Ungolfed ("setzt" ungehißt):
quelle
PHP
223202181160156Bearbeiten Ich habe herausgefunden, wie man eine Funktion mit einer Variablen aliasiert und war in der Lage, einige weitere Zeichen abzuschneiden. Diese
str_repeat
Funktion war sehr ausführlichEdit 2: Danke an alle für die Vorschläge!
Golf gespielt:
Lesbar:
Ausgabe: http://brobin.me/yggdrasil.php
quelle
(39-$j)
,($j*2)
und($i==11)
. -2 durch Ersetzen\n
durch echte neue Zeilenzeichen (PHP erlaubt es in Buchstaben). -5 Zeichen durch Ersetzen (beider)for($i=0;$i<12;$i++)
mitfor($i=12;$i-->0;)
und$i==11
mit$i==0
.$s(($i==0?'_':'-'),8)
mit$s($i?'-':'_',8)
. (==> -5 Zeichen)$s('*',$j*2)
durch$s('**',$j)
. Ich denke, das ist die letzte Verbesserung, die ich finden kann.($j*2)
im inneren für zu ändern($j++*2)
und$j++
vonfor()
Argumenten zu entfernenfor($i=12;$i-->0;)
kann auffor($i=12;$i--;)
- weitere 2 Zeichen gekürzt werden .Delphi 429
Ich werde versuchen, mich später zu verbessern.
Golf gespielt
ungolfed
quelle
Javascript,
288281Chrome versteckt doppelte
console.log
s, verwenden Sie stattdessen IE.Ungolfed:
quelle
for(i=0;i++<39-w;)
stattfor(i=0;i<39-w;++i)
und so weiter. Auchp=console.log
anstelle vonc=console
undp
anstelle vonc.log
(obwohl ich letzteres nur in Node.js getestet habe, funktioniert es in Firefox nicht). Dies spart 12 Bytes.c=console.log
hat auch in Chrome nicht funktioniert, also habe ich es nicht benutzt. Die for-Loop-Tricks sparen jedoch 7 Bytes.JavaScript (console.log),
168166(Leerzeichen nur zur besseren Lesbarkeit)
quelle
C (219)
Vielen Dank an alle für die Golftipps - ich habe es geschafft, sie auf 219 zu senken.
Erforderlich beinhaltet:
quelle
32
anstelle von' '
und42
anstelle von'*'
:) verwendenHaskell,
153148Geradlinig, keine Tricks, nur einfaches Golfen:
Der
%
Operator zeichnet eine einzelne Zeile, wobei das erste Argument eineString
Länge von 3 ist, die die Rahmen und die Füllzeichen in dieser Zeile enthält (jetzt werden genau 3Char
s angenommen und 5 Bytes gespeichert). Das zweite Argument undInt
gibt die Hälfte der Anzahl der Füllzeichen an. Pattern Matching, Consing und Appending werden in Kombination verwendet, um Bytes zu sparen, indem auf den "Kleber" zwischenChar
und geachtet wirdString
. In dieser zweiten Version habe ich auch#
unendlich gemacht und ein eingeführttake 85
, um es wieder endlich zu machen (leider werden keine Bytes gespeichert).Der
#
Operator erstellt die Reihenfolge für dasn
Argument,%
die für den Baum erforderlich ist:[0..3], [3..7], ...
verkettet.&
ist nur eine Infix-Abkürzung fürreplicate
, die dreimal vorkommt.Der Baum wird in der letzten Zeile zusammengefasst, die Zeilenumbrüche werden von hinzugefügt
unlines
.quelle
Lua - 164
quelle
Mathematica
191178Mit Sicherheit nicht die beste Lösung:
Zeilenumbrüche nicht mitgezählt. Mathematica verzerrt die Ausgabe, da für Leerzeichen nicht die gleiche Breite verwendet wird wie für "*" und "/". Aber das Ergebnis ist richtig.
quelle
Java - 286
Mein erster Golf.
Golf gespielt:
Ungolfed:
Hier testen
quelle
Python 2, 117
Andere Versionen, die ich ausprobiert habe, sind:
quelle
Pyth,
101100999081 BytesProbieren Sie es online!
Python 3 Übersetzung:quelle
a
Entspricht die in Ihrem Python definierte Funktion nicht der in+
Listen?<list>+<str>
ist keine gültige Operation, aber ich könnte es genauso einfach verwenden["-"]*11+["_"]
. Ich habe beschlossen, meine eigene Funktion zu definieren, um genauer zu übersetzen, was Pyth tatsächlich tut.Powershell, 88 Bytes
quelle
Groovy 118
quelle
C 194
Dieser Code ist ein heißes Durcheinander und kann definitiv mehr Golf gespielt werden. Trotzdem bot sich die Gelegenheit, ein paar Dinge auszuprobieren, die ich noch nie zuvor getan hatte: ein Literal für eine Sternchenfolge und den Breitenbezeichner
*
mit einer Zeichenfolge inprintf
.quelle
Schläger
223 220 211 204198Golf gespielt:
Ungolfed:
quelle
Assembly (MIPS, SPIM) ,
768671659655654 BytesProbieren Sie es online!
Bearbeiten: ~ 100 Bytes werden gespeichert, indem jedes Zeichen in einem Register fest codiert und einfach in den Stapel geschrieben wird. Anschließend wird die Tatsache missbraucht, dass MIPS keine Typen hat, sodass implizites Wort in ASCII-Zeichenfolge zulässig ist.
Edit 2: Doppelte Stapelzuordnung entfernt. (
addi $sp -4
) Ups!Edit 3: Beim Umschreiben wurde das Zeichen für Baumstumpf 1 versehentlich zu kurz. (36 statt 35). Fest.
Bearbeiten Sie 4: -4 Bytes mit $ 8 und $ 9 anstelle von $ t0 und $ t1. Sie bedeuten dasselbe, aber $ t0 ist leichter zu lesen. Leider haben alle anderen t-Register die gleiche Länge, wenn sie gut geschrieben sind ($ t2 == $ 10, aber beide sind 3 Zeichen). Der Rest ist also eine Wäsche. Ich könnte (theoretisch) die verbleibenden 'a'-Register verwenden (5-7. Print syscall verwendet 4), aber afaik das Verhalten ist nicht definiert, wenn syscall verwendet wird.
-1 Byte durch Setzen von t8 auf 0 und Verzweigen auf less than anstatt on equal. Außerdem musste ich die Add-Ops neu anordnen, was leider dazu führte, dass die Ausführungszeit satte 3 Opcodes länger dauerte.
Nicht die besten bei MIPS, aber nachdem ich in einer Metadiskussion mein Gewissen davon geklärt habe, reiche ich sie ein. MIPS ist nicht dafür ausgelegt (keine Ausgabe, keine for-Schleifen), aber es macht ziemlich Spaß, dies vielleicht trotzdem zu tun.
Leider habe ich keine kommentierte Version für diese neue Lösung erstellt, aber Sie können die alte Version mit der vollständigen Dokumentation hier anzeigen
Nehmen Sie sich die Ehre und verbessern Sie diese Antwort, wenn Sie sie übertreffen können. Vermutlich fehlen hier und da einige Optimierungen.
quelle
addi $sp -4
wirklichaddi $sp $sp -4
von SPIM oder MIPS stammt. Wenn es also jemand anderes tut, lassen Sie es mich bitte wissen.Cobra - 166
228260quelle