Descripción de la tarea:
Dibuje un cubo en el arte ASCII en aproximadamente una proyección de gabinete.
Monospaced fonts
a menudo tienen caracteres que son aproximadamente dos veces más altos que anchos. Dado que la entrada es la longitud de las líneas verticales (excluyendo las esquinas), las líneas horizontales se dibujan con el doble de caracteres para que la imagen resultante sea realmente aproximadamente un cubo. Las líneas que retroceden se dibujan a la mitad de la longitud según lo ordenado por una proyección de gabinete.
Las esquinas del cubo están representadas por +
, líneas horizontales por -
, líneas verticales por |
y diagonales /
.
Resumiendo: deje que la entrada sea n , luego
- Se dibuja un borde horizontal del cubo
-
y consta de 2 n caracteres. - Se dibuja un borde vertical del cubo
|
y consta de n caracteres. - Se dibuja un borde diagonal del cubo
/
y consta de n / 2 caracteres. - Se dibujan las esquinas del cubo
+
. Las esquinas no se cuentan para la longitud de un borde como se detalla anteriormente (ver ejemplos a continuación también).
Entrada:
La entrada, dada en la entrada estándar, es un solo número positivo, par n (2 ≤ n ≤ 30) que da la longitud de las líneas verticales del cubo. Es seguido por un solo salto de línea.
Salida:
La salida es un cubo en la salida estándar siguiendo las reglas anteriores. Se ignora el espacio en blanco al final de las líneas.
Entrada de muestra 1:
2
Salida de muestra 1:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Entrada de muestra 2:
4
Salida de muestra 2:
+--------+
/ /|
/ / |
+--------+ |
| | |
| | +
| | /
| |/
+--------+
ETA: ahora acepté la solución más corta. Actualizaré la respuesta aceptada cuando aparezca una más corta.
Como algunas personas preguntaron por cuánto tiempo fueron las entradas de nuestros concursantes:
227 - Python
240 - Perl
310 - C
315 - C
326 - VB.NET
459 - C
Además de nuestras propias soluciones (no clasificadas con las demás):
140 - Golfscript
172 - Ruby
183 - PowerShell
Respuestas:
Golfscript - 96 caracteres
La mayor parte de la compacidad proviene del almacenamiento agresivo de casi todo en una variable (a menos que incluya estar escrito en golfscript).
Un par de otros pequeños trucos aquí.
'LR''str'*
->'LstrR'
.'/'
único deben pasar dos elementos de la pila (@
) en lugar de 3 (@ .. \
).fuente
Python -
248243230227191Ligeramente desordenado, pero básicamente imprime el cubo línea por línea (usando un búfer de cadena).
Gracias a @marcog, por señalar la primera línea, a @ThomasO por señalar la segunda línea y a @Juan por hacerme darme cuenta de que puedo combinar líneas.
fuente
s=" ";p="+";b="|";f="/";n="\n"
as,p,b,f,n=" +|/\n"
.Python - 179
Me gustaría tener en cuenta que tomé algunas ideas de JPvdMerwe (usar una cadena para imprimir una vez, y la frase que no sabía era la sintaxis correcta en Python).
fuente
fortran 77 - 484 caracteres
No tiene sentido proporcionar una versión "sin obstáculos". Y tenga en cuenta que el descuento no se lleva bien con los requisitos de sangría.
Intenté fortran debido a los bucles en línea proporcionados por la
write
declaración. Obviamente ayudan, pero no suman lo suficiente como para matar el verbo del lenguaje. Podría reducirse mediante el uso de entrada de forma libre.Validación:
Afortunadamente, la especificación no dice qué tamaño debería verse:
pero otros tamaños impares son razonables:
fuente
Mi propia solución, ya que Python ya la ha matado a golpes:
Windows PowerShell, 183
fuente
PostScript, 237
Historia:
def
editó algunas cosas más que aparecían a menudo.def
s.def
que ahorra dos bytes más.[
y]
tienen buenas propiedades cuando se usan como variables :-). Gracias a KirarinSnow .def
s. Thansk otra vez :-).fuente
Ruby 1.9,
172 165162 caracteresfuente
Ruby - 423 caracteres
Realmente no quiero compartir esto ya que es un recuento tan horrible, pero desde que lo he escrito también podría hacerlo.
Probablemente podría reducirse bastante, pero dudo que este enfoque de fuerza bruta se acerque a un número decente de personajes, por lo que no puedo molestarme.
fuente
PHP,
401392382363 caracteres:Originalmente hice esto para ver qué tan corto podía lograr hacer esto en PHP, ya que sabía que sería bastante largo. Estoy seguro de que podría reducirse, pero no considerando mucho que PHP no tiene muchos atajos.
Validación:
http://codepad.viper-7.com/ftYYz9.php53
Versión Ungolfed: http://codepad.viper-7.com/4D3kIA
fuente
Perl, 163
Perl 5.10 o posterior, ejecuta con
perl -E '<code here>'
Versión separada:
fuente
Perl,
269 269 262 256 245 244 237 226 228 224217 caracteresLa idea básica es hacer todo con sustituciones de expresiones regulares. Debido a que dos de los caracteres utilizados (+ y /) son caracteres especiales y aparecen mucho en las expresiones regulares, vale la pena usar otros caracteres y sustituirlos para imprimir.
Versión ligeramente más legible:
En cierto sentido, estoy haciendo trampa usando $ b como contador en el bucle intermedio; en su lugar, podría agregar espacios en blanco en el bucle sobre $ ay luego usar regex reemplaza para ese bucle también, pero voy a permitir esa ligera desviación de una solución de regex puro.
Sin duda alguna persona aterradora puede convertir esto en un script sed mucho más corto.
fuente
y
fortr
no es obvio, y en cuanto a la forma en que "while" puede ir antes o después ...LUA,
294302292 bytesGolfizado:
Sin golf:
fuente
or 6
después de laread()
llamada, lo que ahorra cuatro bytes :-)(...)
ya no funciona para mí en Lua 5.1.4.Lienzo , 63 bytes.
Pruébalo aquí!
fuente