Descripción de la tarea:
Escriba un programa lo más corto posible para dibujar un gradiente radial en el arte ASCII. El tamaño de la cuadrícula de salida está predefinido. El punto central y los caracteres que se utilizarán para el gradiente se proporcionan como entrada al programa.
El gradiente tendrá un tamaño de celdas de 70 × 25 caracteres con las siguientes especificaciones
- La esquina superior izquierda de la cuadrícula tiene las coordenadas (0, 0).
- El gradiente, que consiste en los caracteres proporcionados, se mapea en 35 unidades de longitud . Una unidad de longitud tiene un carácter de alto y dos caracteres de ancho (ya que
monospaced fonts
generalmente tienen caracteres dos veces más altos que anchos). - Dentro de esos 35 LU, la distancia actual desde el punto central se multiplica por el número de caracteres de gradiente / 35 para obtener el índice del personaje para dibujar en ese punto. Los números fraccionales para el índice se redondean hacia cero aquí. Las unidades de longitud deben dejarse como un número real. (Por supuesto, si los resultados son los mismos, la implementación no importa).
- Más allá de esos 35 LU, solo aparece el último carácter de degradado. Sin embargo, dado que el último gradiente »banda« ya comienza dentro de los 35 LU, el último carácter comienza a aparecer por debajo de los 35 LU ya.
Entrada:
La entrada se proporciona en la entrada estándar y consta de tres líneas, cada una terminada por un salto de línea:
- La coordenada x del punto central del gradiente
- La coordenada y del punto central del gradiente
- Los caracteres a utilizar para dibujar el degradado. Esos pueden incluir espacios.
Salida:
La salida es el gradiente definido por las reglas anteriores en la salida estándar. La secuencia de error estándar se ignora. Cada línea del gradiente termina con un salto de línea. No pueden aparecer otros caracteres, excepto los definidos por la entrada.
Entrada de muestra 1:
58
14
.:;+=xX$&
Salida de muestra 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========+++++++++;;;;;;;;;;;;;:::::::::::::;;;;;
Entrada de muestra 2:
0
0
X.X.X.X
Salida de muestra 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
Entrada de muestra 3:
70
25
.:+#
Salida de muestra 3:
######################################################++++++++++++++++
#################################################+++++++++++++++++++++
#############################################+++++++++++++++++++++++++
##########################################++++++++++++++++++++++++++++
#######################################+++++++++++++++++++++++++++++++
####################################++++++++++++++++++++++++++++++++++
##################################++++++++++++++++++++++++++++++++++++
################################++++++++++++++++++++++++++++++++++++++
##############################++++++++++++++++++++++++++++++++::::::::
#############################+++++++++++++++++++++++++++::::::::::::::
###########################+++++++++++++++++++++++++::::::::::::::::::
##########################++++++++++++++++++++++++::::::::::::::::::::
#########################++++++++++++++++++++++:::::::::::::::::::::::
########################+++++++++++++++++++++:::::::::::::::::::::::::
#######################++++++++++++++++++++:::::::::::::::::::::::::::
######################++++++++++++++++++++::::::::::::::::::::::::::::
#####################+++++++++++++++++++::::::::::::::::::::::::::::::
####################+++++++++++++++++++::::::::::::::::::::::::.......
####################++++++++++++++++++::::::::::::::::::::::..........
###################+++++++++++++++++++::::::::::::::::::::............
###################++++++++++++++++++:::::::::::::::::::..............
###################+++++++++++++++++:::::::::::::::::::...............
##################++++++++++++++++++::::::::::::::::::................
##################++++++++++++++++++:::::::::::::::::.................
##################++++++++++++++++++:::::::::::::::::.................
Entrada de muestra 4
59
1
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<>|,.-#+!$%&/()=?*'_:;
Salida de muestra 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
Ha pasado una semana. Es hora de desvelar las longitudes de la solución del concurso de nuestra universidad:
167 - Python
189 - Haskell
203 - C
210 - VB.NET
219 - C
Y nuestras propias soluciones:
91 - GolfScript
125 - Ruby
157 - PowerShell
Respuestas:
Ruby 1.9,
116 114 108101 caracteresfuente
Brainfuck - 1286
Esta es una de mis creaciones favoritas todavía. Incluye una función de raíz cuadrada de trabajo (para algunas definiciones de trabajo).
La salida está un poco apagada debido a errores de redondeo, pero aún es reconocible. El punto flotante está más allá de mi nivel de habilidad actual. Desafortunadamente, esto solo funcionará con celdas de 16 bits, lo que significa que va a ser lento.
Salida 1:
Salida 2:
fuente
Python - 141 caracteres
fuente
Delphi, 200 (y 185)
Como me gusta el ascii-art aquí, una versión Delphi de este código de golf:
No es muy impresionante en cuanto a caracteres, ya que tuve que usar la unidad Math para vincular en la función Min (). Además, ReadLn () de alguna manera no lee enteros y cadenas en una sola llamada, por lo que también es bastante costoso. La nueva línea también necesita muchos personajes. Además, Delphi necesita bastante espacio en blanco alrededor de sus palabras clave. No muy orgulloso de este.
De todos modos, la salida de la muestra 4 me da:
Si aceptas la salida con sangría, esta versión es un poco más corta al cambiar la nueva línea a una sangría que conduce a un ajuste de 80 caracteres (simulando una nueva línea en las consolas estándar de 80x25):
(esto ahorra 15 caracteres, para un total de 185 caracteres). Su salida para "0 0 XXXX" es:
(¿Puedes ver el guión ?! ;-))
fuente
APL (74)
La razón por la que está envuelta en una función es que la modificación de
⎕IO
no se aplica al resto del sistema.Explicación:
L←⍴⊃C Y X⎕IO←⍞⎕⎕0
: Establezca⎕IO
en0
(hacer matrices basadas en 0 en lugar de 1), establezca X en⎕
(primera línea leída), establezca Y en⎕
(segunda línea leída), establezca C en⍞
(tercera línea leída, sin formato) y establezca L a la longitud (⍴
) deC
.25 70
: las dimensiones de la matriz.¨⍳⍵
: para cada elemento en la matriz donde cada elemento tiene sus propias coordenadas ...⍵-Y X
: diferencia entre el punto actual y el punto central1 2÷⍨
: divide la coordenada X por 2 (porque un carácter es la mitad de ancho que alto).5*⍨+/2*⍨
: toma la raíz cuadrada de la suma de los cuadrados35÷⍨
: dividir por 35⌊L⌊
: toma el mínimo de la cantidad de caracteres y el valor actual y redondea hacia abajo,/
: Los valores todavía están envueltos en una lista (de un solo elemento), y esto creará un espacio en la salida, por lo que 'libera' los valores de sus listas.C[
...]
: use el valor que encontramos como índice en la lista de caracteres⎕←
: ahora tenemos una matriz donde cada elemento (x, y) es el carácter de (x, y), por lo que genera la matriz.fuente
Perl 5.10, 103 caracteres
fuente
Perl, 120 caracteres
fuente
abs
Está ahí por una razón.$x,$y=<>,<>;
.Windows PowerShell, 157
Nada digno de mención. Golpeado hasta la muerte:
fuente
C, 176
Aquí una traducción de mi solución Delphi a C, ahorrando 24 caracteres:
Puede probar este código aquí: http://www.ideone.com/oTvHt
fuente
main()
supongo y guardar un punto y coma de esa manera.Lisp común, 173 caracteres
El único truco real que uso aquí es usar
como un literal de carácter de nueva línea
fuente
scala 223 (204 sin App-Wrapper)
Tener cols y filas (70, 25) configuradas dinámicamente permitiría gradientes de llenado de pantalla.
fuente
C # 311
Pensé que haría un programa largo para que los demás se sintieran mejor:
La entrada se toma de la consola, una línea a la vez (dos líneas para las coordenadas y una para los caracteres de degradado).
Gracias a Joey por los consejos.
Muestra 1: http://ideone.com/X0jIZ
Muestra 2: http://ideone.com/RvICt
fuente
int
lugar defloat
, las expresionesx-i
y sey-j
convierten en tipoint
. Debido a esto, se llamará a `int Math.Abs (valor int) en lugar del flotante, lo que provocará una pérdida de precisión. Lo probé y obtuve algunasint
s ahorrará más;)). Ah, y*.5
cuesta solo un char.