Description de la tâche:
Ecrivez un programme aussi court que possible pour dessiner un dégradé radial dans l'art ASCII. La taille de la grille de sortie est prédéfinie. Le point central et les caractères à utiliser pour le dégradé sont fournis en entrée du programme.
Le dégradé aura une taille de 70 × 25 caractères avec les spécifications suivantes
- Le coin supérieur gauche de la grille a les coordonnées (0, 0).
- Le dégradé, composé des caractères fournis, est mappé en 35 unités de longueur . Une unité de longueur est constituée d'un caractère de hauteur et de deux caractères de largeur (étant donné
monospaced fonts
que les caractères sont généralement deux fois plus hauts que larges). - Dans ces 35 LU, la distance actuelle par rapport au centre est multipliée par le nombre de caractères en dégradé / 35 pour obtenir l'index du caractère à dessiner à ce point. Les nombres fractionnaires pour l'index sont arrondis à zéro ici. Les unités de longueur doivent être laissées comme un nombre réel. (Bien sûr, si les résultats sont les mêmes, l'implémentation n'a pas d'importance.)
- Au-delà de ces 35 LU, seul le dernier caractère dégradé apparaît. Cependant, étant donné que le dernier dégradé »bande« commence déjà dans la 35 LU, le dernier caractère commence à apparaître déjà avant la valeur de 35 LU.
Contribution:
L'entrée est donnée sur l'entrée standard et consiste en trois lignes, chacune terminée par un saut de ligne:
- La coordonnée x du centre du dégradé
- La coordonnée y du centre du dégradé
- Les caractères à utiliser pour dessiner le dégradé. Ceux-ci peuvent inclure des espaces.
Sortie:
La sortie est le gradient tel que défini par les règles ci-dessus sur la sortie standard. Le flux d'erreur standard est ignoré. Chaque ligne du dégradé se termine par un saut de ligne. Aucun autre caractère que ceux définis par l'entrée ne peut apparaître.
Exemple d'entrée 1:
58
14
.:;+=xX$&
Exemple de sortie 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========+++++++++;;;;;;;;;;;;;:::::::::::::;;;;;
Exemple d'entrée 2:
0
0
X.X.X.X
Exemple de sortie 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
Exemple d'entrée 3:
70
25
.:+#
Exemple de sortie 3:
######################################################++++++++++++++++
#################################################+++++++++++++++++++++
#############################################+++++++++++++++++++++++++
##########################################++++++++++++++++++++++++++++
#######################################+++++++++++++++++++++++++++++++
####################################++++++++++++++++++++++++++++++++++
##################################++++++++++++++++++++++++++++++++++++
################################++++++++++++++++++++++++++++++++++++++
##############################++++++++++++++++++++++++++++++++::::::::
#############################+++++++++++++++++++++++++++::::::::::::::
###########################+++++++++++++++++++++++++::::::::::::::::::
##########################++++++++++++++++++++++++::::::::::::::::::::
#########################++++++++++++++++++++++:::::::::::::::::::::::
########################+++++++++++++++++++++:::::::::::::::::::::::::
#######################++++++++++++++++++++:::::::::::::::::::::::::::
######################++++++++++++++++++++::::::::::::::::::::::::::::
#####################+++++++++++++++++++::::::::::::::::::::::::::::::
####################+++++++++++++++++++::::::::::::::::::::::::.......
####################++++++++++++++++++::::::::::::::::::::::..........
###################+++++++++++++++++++::::::::::::::::::::............
###################++++++++++++++++++:::::::::::::::::::..............
###################+++++++++++++++++:::::::::::::::::::...............
##################++++++++++++++++++::::::::::::::::::................
##################++++++++++++++++++:::::::::::::::::.................
##################++++++++++++++++++:::::::::::::::::.................
Exemple d'entrée 4
59
1
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<>|,.-#+!$%&/()=?*'_:;
Exemple de sortie 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
Une semaine a passé. Il est temps de dévoiler les solutions du concours de notre université:
167 - Python
189 - Haskell
203 - C
210 - VB.NET
219 - C
Et nos propres solutions:
91 - GolfScript
125 - Ruby
157 - PowerShell
Réponses:
Ruby 1.9,
116 114 108101 caractèresla source
Brainfuck - 1286
C'est l'une de mes créations préférées pour le moment. Inclut une fonction racine carrée de travail (pour certaines définitions de travail).
La sortie est un peu éteinte à cause d’erreurs d’arrondi, mais reste reconnaissable. Le point flottant dépasse mon niveau de compétence actuel. Malheureusement, cela ne fonctionnera qu'avec les cellules 16 bits, ce qui signifie que le chien sera lent.
Sortie 1:
Sortie 2:
la source
Python - 141 caractères
la source
Delphi, 200 (et 185)
Comme j'aime ascii-art, voici une version Delphi de ce code golf:
Pas très impressionnant sur le plan des caractères, car je devais utiliser l'unité Math pour créer un lien dans la fonction Min (). De plus, ReadLn () ne lit pas les entiers et les chaînes d’un appel, c’est donc assez cher aussi. La nouvelle ligne nécessite également beaucoup de caractères. En outre, Delphi a besoin de beaucoup d’espace autour de ses mots-clés. Pas très fier de celui-ci.
Quoi qu'il en soit, la sortie de l'échantillon 4 me donne:
Si vous acceptez les sorties indentées, cette version est un peu plus courte en modifiant la nouvelle ligne en une indentation menant à un retour à la ligne de 80 caractères (simulant une nouvelle ligne sur des consoles 80x25 standard):
(cela enregistre 15 caractères, pour un total de 185 caractères). Sa sortie pour "0 0 XXXX" est:
(Pouvez-vous voir le retrait?! ;-))
la source
APL (74)
La raison pour laquelle elle est encapsulée dans une fonction est que la modification apportée à
⎕IO
ne s'applique pas au reste du système.Explication:
L←⍴⊃C Y X⎕IO←⍞⎕⎕0
: Défini⎕IO
sur0
(les tableaux étant basés sur 0 au lieu de 1), définissez X sur⎕
(première ligne lue), définissez Y sur⎕
(deuxième ligne lue), définissez C sur⍞
(troisième ligne lue, sans mise en forme) et définissez L à la longueur (⍴
) deC
.25 70
: les dimensions de la matrice.¨⍳⍵
: pour chaque élément de la matrice où chaque élément a ses propres coordonnées ...⍵-Y X
: différence entre le point actuel et le point central1 2÷⍨
: divise la coordonnée X par 2 (car un caractère est deux fois plus large que haut).5*⍨+/2*⍨
: prendre la racine carrée de la somme des carrés35÷⍨
: diviser par 35⌊L⌊
: prenez le minimum de la quantité de caractères et la valeur actuelle et arrondissez-le,/
: Les valeurs sont toujours encapsulées dans une liste (d'un seul élément), ce qui créera un espacement dans la sortie, libérant ainsi les valeurs de leurs listes.C[
...]
: utilise la valeur trouvée comme index dans la liste des caractères⎕←
: nous avons maintenant une matrice où chaque élément (x, y) est le caractère de (x, y), sortez donc la matrice.la source
Perl 5.10, 103 caractères
la source
Perl, 120 caractères
la source
abs
est là pour une raison.$x,$y=<>,<>;
.Windows PowerShell, 157
Rien à signaler. Battu à mort déjà:
la source
C, 176
Voici une traduction de ma solution Delphi en C, enregistrant 24 caractères:
Vous pouvez tester ce code ici: http://www.ideone.com/oTvHt
la source
main()
je suppose et enregistrer un point-virgule de cette façon.Common Lisp, 173 caractères
Le seul vrai truc que j'utilise ici utilise
comme un littéral de caractère de nouvelle ligne
la source
scala 223 (204 sans App-Wrapper)
Avoir des colonnes et des lignes (70, 25) réglées de manière dynamique permettrait de réaliser des dégradés de trame.
la source
C # 311
Je pensais faire un long programme pour que les autres se sentent mieux:
La saisie est effectuée à partir de la console, une ligne à la fois (deux lignes pour les coordonnées et une pour les caractères de dégradé).
Merci à Joey pour les conseils.
Exemple 1: http://ideone.com/X0jIZ
Exemple 2: http://ideone.com/RvICt
la source
int
place defloat
, les expressionsx-i
ety-j
deviennent de typeint
. Pour cette raison, le `int Math.Abs (int value) sera appelé à la place du float, entraînant une perte de précision. J'ai essayé et j'ai eu quelques difficultésint
s économisera davantage;)). Oh, et*.5
ne coûte qu'un seul personnage.