Aufgabenbeschreibung:
Schreiben Sie ein Programm so kurz wie möglich, um einen radialen Verlauf in ASCII-Kunst zu zeichnen. Die Größe des Ausgaberasters ist vordefiniert. Der Mittelpunkt und die Zeichen, die für den Verlauf verwendet werden sollen, werden als Eingabe für das Programm bereitgestellt.
Der Farbverlauf hat eine Größe von 70 × 25 Zeichen mit den folgenden Spezifikationen
- Die linke obere Ecke des Gitters hat die Koordinaten (0, 0).
- Der Verlauf, der aus den angegebenen Zeichen besteht, wird in 35 Längeneinheiten abgebildet . Eine Längeneinheit ist ein Zeichen groß und zwei Zeichen breit (da
monospaced fonts
Zeichen normalerweise doppelt so hoch wie breit sind). - Innerhalb dieser 35 LU wird der aktuelle Abstand vom Mittelpunkt mit der Anzahl der Gradientenzeichen / 35 multipliziert , um den Index des Zeichens zu erhalten, das an diesem Punkt gezeichnet werden soll. Bruchzahlen für den Index werden hier auf Null gerundet. Die Längeneinheiten sind als reelle Zahl zu belassen. (Wenn die Ergebnisse identisch sind, spielt die Implementierung natürlich keine Rolle.)
- Jenseits dieser 35 LU erscheint nur das letzte Farbverlaufszeichen. Da jedoch das letzte »Farbband« des Verlaufs bereits innerhalb der 35 LU beginnt, erscheint das letzte Zeichen bereits kurz vor der 35 LU.
Eingang:
Die Eingabe erfolgt über die Standardeingabe und besteht aus drei Zeilen, die jeweils durch einen Zeilenumbruch abgeschlossen werden:
- Die x- Koordinate des Verlaufsmittelpunkts
- Die y- Koordinate des Verlaufsmittelpunkts
- Die Zeichen, die zum Zeichnen des Verlaufs verwendet werden sollen. Diese können Leerzeichen enthalten.
Ausgabe:
Die Ausgabe ist der Gradient, wie er in den obigen Regeln für die Standardausgabe definiert ist. Der Standardfehlerstrom wird ignoriert. Jede Linie des Farbverlaufs wird durch einen Zeilenumbruch abgeschlossen. Außer den durch die Eingabe definierten Zeichen dürfen keine weiteren Zeichen auftreten.
Beispieleingang 1:
58
14
.:;+=xX$&
Beispielausgabe 1:
&&$$$$$$$$XXXXXXXXxxxxxxxxx===========++++++++++++++++++++++++++++++++
&$$$$$$$$XXXXXXXXxxxxxxxxx=========+++++++++++++;;;;;;;;;;;;;;;;;;;;;+
$$$$$$$$XXXXXXXXxxxxxxxx=========+++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;
$$$$$$$XXXXXXXXxxxxxxxx========++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$$$$$$XXXXXXXXxxxxxxxx========+++++++++;;;;;;;;;;;;;:::::::::::::;;;;;
$$$$$XXXXXXXXxxxxxxxx=======+++++++++;;;;;;;;;;;:::::::::::::::::::::;
$$$$$XXXXXXXxxxxxxxx=======+++++++++;;;;;;;;;:::::::::::::::::::::::::
$$$$XXXXXXXXxxxxxxx=======++++++++;;;;;;;;;:::::::::::::::::::::::::::
$$$$XXXXXXXxxxxxxx========+++++++;;;;;;;;::::::::::...............::::
$$$XXXXXXXXxxxxxxx=======+++++++;;;;;;;;:::::::::...................::
$$$XXXXXXXxxxxxxx=======++++++++;;;;;;;::::::::.......................
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;::::::::......... ........
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;:::::::........ ......
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;:::::::....... .....
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;:::::::....... .....
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;:::::::....... .....
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;:::::::........ ......
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;::::::::......... ........
$$$XXXXXXXxxxxxxx=======++++++++;;;;;;;::::::::.......................
$$$XXXXXXXXxxxxxxx=======+++++++;;;;;;;;:::::::::...................::
$$$$XXXXXXXxxxxxxx========+++++++;;;;;;;;::::::::::...............::::
$$$$XXXXXXXXxxxxxxx=======++++++++;;;;;;;;;:::::::::::::::::::::::::::
$$$$$XXXXXXXxxxxxxxx=======+++++++++;;;;;;;;;:::::::::::::::::::::::::
$$$$$XXXXXXXXxxxxxxxx=======+++++++++;;;;;;;;;;;:::::::::::::::::::::;
$$$$$$XXXXXXXXxxxxxxxx========+++++++++;;;;;;;;;;;;;:::::::::::::;;;;;
Beispieleingang 2:
0
0
X.X.X.X
Beispielausgabe 2:
XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX
XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX
XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX
XXXXXXXX............XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX
XXXXXX.............XXXXXXXXXX...........XXXXXXXXXX..........XXXXXXXXXX
..................XXXXXXXXXXX..........XXXXXXXXXX...........XXXXXXXXXX
................XXXXXXXXXXXX...........XXXXXXXXXX..........XXXXXXXXXXX
...............XXXXXXXXXXXX...........XXXXXXXXXX...........XXXXXXXXXXX
............XXXXXXXXXXXXXX...........XXXXXXXXXXX..........XXXXXXXXXXXX
.........XXXXXXXXXXXXXXX............XXXXXXXXXXX...........XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXX............XXXXXXXXXXX...........XXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX.............XXXXXXXXXXX...........XXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX..............XXXXXXXXXXXX...........XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX................XXXXXXXXXXXX............XXXXXXXXXXXXXXX
XXXXXXXXXXX..................XXXXXXXXXXXXX............XXXXXXXXXXXXXXXX
...........................XXXXXXXXXXXXX............XXXXXXXXXXXXXXXXXX
........................XXXXXXXXXXXXXXX............XXXXXXXXXXXXXXXXXXX
......................XXXXXXXXXXXXXXX.............XXXXXXXXXXXXXXXXXXXX
..................XXXXXXXXXXXXXXXXX.............XXXXXXXXXXXXXXXXXXXXXX
.............XXXXXXXXXXXXXXXXXXXX..............XXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXX...............XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX.................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXX......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Beispieleingang 3:
70
25
.:+#
Beispielausgabe 3:
######################################################++++++++++++++++
#################################################+++++++++++++++++++++
#############################################+++++++++++++++++++++++++
##########################################++++++++++++++++++++++++++++
#######################################+++++++++++++++++++++++++++++++
####################################++++++++++++++++++++++++++++++++++
##################################++++++++++++++++++++++++++++++++++++
################################++++++++++++++++++++++++++++++++++++++
##############################++++++++++++++++++++++++++++++++::::::::
#############################+++++++++++++++++++++++++++::::::::::::::
###########################+++++++++++++++++++++++++::::::::::::::::::
##########################++++++++++++++++++++++++::::::::::::::::::::
#########################++++++++++++++++++++++:::::::::::::::::::::::
########################+++++++++++++++++++++:::::::::::::::::::::::::
#######################++++++++++++++++++++:::::::::::::::::::::::::::
######################++++++++++++++++++++::::::::::::::::::::::::::::
#####################+++++++++++++++++++::::::::::::::::::::::::::::::
####################+++++++++++++++++++::::::::::::::::::::::::.......
####################++++++++++++++++++::::::::::::::::::::::..........
###################+++++++++++++++++++::::::::::::::::::::............
###################++++++++++++++++++:::::::::::::::::::..............
###################+++++++++++++++++:::::::::::::::::::...............
##################++++++++++++++++++::::::::::::::::::................
##################++++++++++++++++++:::::::::::::::::.................
##################++++++++++++++++++:::::::::::::::::.................
Probeneingabe 4
59
1
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<>|,.-#+!$%&/()=?*'_:;
Beispielausgabe 4
!+#-,|><87654210ZYWVUTRQPONLKJIHFEDCBzyxwutsrqonmlkjhgfedcbbbcdefghjkl
!+#-,|><87654210ZYWVUTRQPONLKJIHFEDCAzyxwutsrqonmljihgfdcba abcdfghijl
!+#-,|><87654210ZYWVUTRQPONLKJIHFEDCBzyxwutsrqonmlkjhgfedcbbbcdefghjkl
!+#-,|><97654310ZYXVUTSQPONMKJIHGEDCBAyxwvutrqponmkjihgffeedeeffghijkm
$+#-.|><98654320ZYXWUTSRQONMLKIHGFEDBAzyxwutsrqponmlkjihhggggghhijklmn
$!#-.,|<987643210YXWVUSRQPONLKJIHGEDCBAzywvutsrqponmllkjjjiiijjjkllmno
$!+#.,|><87654210ZYXVUTSRQONMLKJHGFEDCBAzywvutsrrqponnmmlllllllmmnnopq
%!+#-.|><987543210YXWVUTRQPONMLJIHGFEDCBAzyxwvutsrrqppooonnnnnoooppqrr
%$!+-.,|><87654310ZYXWVTSRQPONMLJIHGFEDCBAzyxxwvuttssrrqqqqqqqqqrrsstt
&%!+#-.,><987643210ZYXVUTSRQPONMLKJIHGFEDCBAzyyxwvvuutttssssssstttuuvv
&%$!+#.,|><986543210ZYWVUTSRQPONMLKJIHGFEDDCBAzzyyxwwwvvvuuuuuvvvwwwxy
/&%$!#-.,|><976543210ZYXVUTSRQPONMLKKJIHGFEEDCBBAAzzyyyxxxxxxxxxyyyzzA
(/&%!+#-.,|><876543210ZYXWVUTSRQPONMLKJJIHGGFEEDCCBBBAAAzzzzzzzAAABBBC
)(/%$!+#-.,|><876543210ZYXWVUTSRQPPONMLKKJIIHGGFFEEDDDCCCCCCCCCCCDDDEE
=)(&%$!+#-.,|><986543210ZYYXWVUTSRQPPONMMLKKJIIHHGGGFFFEEEEEEEEEFFFGGG
?=)(&%$!+#-.,|><9876543210ZYXWVVUTSRRQPOONMMLLKJJJIIIHHHHHHHHHHHHHIIIJ
*?=)(/%$!+#-.,|><98765432210ZYXWWVUTSSRQQPOONNMMLLLKKKJJJJJJJJJJJKKKLL
'*?=)(/&%$!+#-.,|><98765432110ZYXXWVUUTSSRRQPPOOONNNMMMMMLLLLLMMMMMNNN
_'*?=)(/&%$!+#-.,|><988765432210ZYYXWWVUUTTSSRRQQQPPPOOOOOOOOOOOOOPPPQ
:_'*?=)(/&%$!+##-.,|><9877654332100ZYYXXWVVUUTTTSSSRRRRQQQQQQQQQRRRRSS
;;:_'*?=)(/&%$!+#-.,,|><98876554322100ZZYYXXWWVVVUUUTTTTTTTTTTTTTTTUUU
;;;:_'*?=)(/&&%$!+#-.,,|><9987665443321100ZZYYYXXXWWWWVVVVVVVVVVVWWWWX
;;;;;:_'*?=)(/&%$$!+#-..,|>><9887665544322211000ZZZYYYYYYYYYYYYYYYYYZZ
;;;;;;:_'*??=)(/&%%$!+##-.,,|><<99877665544333222111100000000000001111
;;;;;;;;:_'*?==)(/&&%$!++#--.,,|>><<9887766655544433333322222223333334
Eine Woche ist vergangen. Es ist Zeit, die Lösungslängen aus dem Wettbewerb unserer Universität zu enthüllen:
167 - Python
189 - Haskell
203 - C
210 - VB.NET
219 - C
Und unsere eigenen Lösungen:
91 - GolfScript
125 - Ruby
157 - PowerShell
Antworten:
Ruby 1.9,
116 114 108101 Zeichenquelle
Brainfuck - 1286
Dies ist eine meiner Lieblingskreationen. Enthält eine funktionierende (für einige Definitionen der Funktion) Quadratwurzelfunktion.
Die Ausgabe ist aufgrund von Rundungsfehlern etwas abweichend, aber immer noch erkennbar. Der Fließkommawert liegt außerhalb meines aktuellen Kenntnisstands. Leider funktioniert dies nur mit 16-Bit-Zellen, was bedeutet, dass es hundeschwach wird.
Ausgang 1:
Ausgang 2:
quelle
Python - 141 Zeichen
quelle
Delphi, 200 (und 185)
Da ich Ascii-Art hier mag eine Delphi-Version dieses Codes Golf:
Vom Charakter her nicht sehr beeindruckend, da ich die Math-Einheit verwenden musste, um die Min () -Funktion zu verknüpfen. Außerdem liest ReadLn () nicht in einem Aufruf ganze Zahlen und Zeichenfolgen, was auch ziemlich teuer ist. Die Newline braucht auch viele Zeichen. Außerdem benötigt Delphi eine Menge Leerzeichen um seine Schlüsselwörter. Nicht sehr stolz auf diesen.
Wie auch immer, die Ausgabe von Beispiel 4 gibt mir:
Wenn Sie eine eingerückte Ausgabe akzeptieren würden, ist diese Version etwas kürzer, indem Sie die Zeilenumbrüche in Einrückungen umwandeln, die zu einem Zeilenumbruch von 80 Zeichen führen (simulieren Sie einen Zeilenumbruch auf Standard-80x25-Konsolen):
(Das spart 15 Zeichen für insgesamt 185 Zeichen). Die Ausgabe für "0 0 XXXX" lautet:
(Kannst du den Einzug sehen ?! ;-))
quelle
APL (74)
Der Grund, warum es in eine Funktion eingeschlossen ist, ist, dass die Änderung von
⎕IO
nicht auf den Rest des Systems angewendet wird.Erläuterung:
L←⍴⊃C Y X⎕IO←⍞⎕⎕0
: Setzen Sie⎕IO
auf0
(Array 0-basiert statt 1-basiert), setzen Sie X auf⎕
(Lesen der ersten Zeile), setzen Sie Y auf⎕
(Lesen der zweiten Zeile), setzen Sie C auf⍞
(Lesen der dritten Zeile, ohne Formatierung) und setzen Sie L auf die Länge (⍴
) vonC
.25 70
: die Dimensionen der Matrix.¨⍳⍵
: für jedes Element in der Matrix, wobei jedes Element seine eigenen Koordinaten hat ...⍵-Y X
: Differenz zwischen dem aktuellen Punkt und dem Mittelpunkt1 2÷⍨
: dividiere die X-Koordinate durch 2 (weil ein Saibling halb so breit wie hoch ist).5*⍨+/2*⍨
: nimm die Quadratwurzel aus der Summe der Quadrate35÷⍨
: durch 35 teilen⌊L⌊
: Nehmen Sie das Minimum der Anzahl der Zeichen und den aktuellen Wert und runden Sie ihn ab,/
: Die Werte werden immer noch in eine Liste (nur eines Elements) eingeschlossen. Dadurch entstehen Abstände in der Ausgabe, sodass die Werte aus den Listen entfernt werden.C[
...]
: Verwenden Sie den gefundenen Wert als Index für die Zeichenliste⎕←
: Wir haben jetzt eine Matrix, in der jedes Element (x, y) das Zeichen für (x, y) ist. Geben Sie also die Matrix aus.quelle
Perl 5.10, 103 Zeichen
quelle
Perl, 120 Zeichen
quelle
abs
gibt es einen Grund.$x,$y=<>,<>;
.Windows PowerShell, 157
Nichts Besonderes. Bereits zu Tode geprügelt:
quelle
C 176
Hier eine Übersetzung meiner Delphi-Lösung nach C mit 24 Zeichen:
Sie können diesen Code hier testen: http://www.ideone.com/oTvHt
quelle
main()
I rate setzen und auf diese Weise ein Semikolon speichern.Common Lisp, 173 Zeichen
Der einzige wirkliche Trick, den ich hier verwende, ist die Verwendung
als Newline-Zeichen-Literal
quelle
scala 223 (204 ohne App-Wrapper)
Wenn die Spalten und Zeilen (70, 25) dynamisch eingestellt werden, können Farbverläufe für die Bildschirmfüllung verwendet werden.
quelle
C # 311
Ich dachte, ich mache ein langes Programm, damit sich die anderen besser fühlen:
Die Eingabe erfolgt zeilenweise über die Konsole (zwei Zeilen für die Koordinaten und eine für die Verlaufszeichen).
Danke an Joey für die Tipps.
Beispiel 1: http://ideone.com/X0jIZ
Beispiel 2: http://ideone.com/RvICt
quelle
int
stattdessenfloat
die Ausdrücke verwendenx-i
undy-j
vom Typ werdenint
. Aus diesem Grund wird "int Math.Abs" (int value) anstelle von "float one" aufgerufen, was zu einem gewissen Genauigkeitsverlust führt. Ich habe es versucht und einigeint
s spart mehr;)). Oh, und*.5
kostet nur ein Zeichen.