Escriba un programa o función que tome un entero positivo N e imprima o devuelva una cadena de arte ASCII N × N cuya mitad superior es un semicírculo hecho de ('sy cuya mitad inferior es un triángulo apuntando hacia abajo hecho de V' s, con espacios utilizados como relleno.
En otras palabras, haga un cono de helado ASCII: (salida para N = 17)
(((((
(((((((((
(((((((((((((
(((((((((((((
(((((((((((((((
(((((((((((((((
(((((((((((((((((
(((((((((((((((((
VVVVVVVVVVVVVVVVV
VVVVVVVVVVVVVVV
VVVVVVVVVVVVV
VVVVVVVVVVV
VVVVVVVVV
VVVVVVV
VVVVV
VVV
V
Ejemplos
Aquí están las salidas para N = 1 a 5. Tenga en cuenta que para N impar, el triángulo siempre debe ser la mitad más grande.
V
((
VV
(((
VVV
V
((
((((
VVVV
VV
(((
(((((
VVVVV
VVV
V
Aquí hay una N = 101 pastebin.
Y aquí hay una implementación de referencia de Python 3 sin golf:
N = int(input())
ic = [[' '] * N for _ in range(N)]
for y in range(N//2):
for x in range(N):
if (x - (N - 1) / 2)**2 + (y - (N - 1) / 2)**2 < (N / 2)**2:
ic[y][x] = '('
for y in range(N//2, N):
for x in range(y - N//2, N - (y - N//2)):
ic[y][x] = 'V'
for line in ic:
print(''.join(line))
Detalles
- Tome la entrada de stdin, línea de comando o como argumento de función. Salida a stdout o similar, o puede devolver la cadena si escribe una función.
- La porción del cono debe coincidir exactamente con la implementación de referencia para todos los N.
- La porción de helado no necesita coincidir exactamente con la implementación de referencia, siempre y cuando tenga claramente la forma de un semicírculo para todo N. (Esto es para que no tenga que preocuparse por pequeñas diferencias en el semicírculo debido a errores de redondeo .)
- No debe haber espacios iniciales innecesarios, pero puede haber espacios finales superfluos.
- La salida puede contener opcionalmente una nueva línea final.
- Opcionalmente, puedes usar cualquier otro 3 distintas ASCII imprimibles caracteres en lugar de
(,Vy espacio.
Puntuación
La presentación más corta en bytes gana. Tiebreaker va a la presentación más antigua.

Respuestas:
CJam, 46 bytes
Pruébalo en línea.
Creo que actualmente imita exactamente la especificación original, que era necesaria cuando comencé a producir esta respuesta. Puede existir la posibilidad de ahorrar algunos bytes haciendo que las matemáticas sean menos precisas para la especificación original, pero hasta que vea una manera de guardar más de uno o dos bytes, lo dejaré tal cual.
Explicación
fuente
2'sy1' en lugar de('syV' s?inca2
129 129123121111107Esto usa principalmente las fórmulas del ejemplo de Python, pero usa jot-dots e iotas en lugar de doble bucle. La
ifunción realiza la prueba circular para lajfunción que invoca jot-dot sobre ella. Y lakfunción realiza la prueba de triángulo para lalfunción. Lacfunción clasifica los resultados dejyly los rediseña a N × N.editar: -6 combinar 2 mapas en 1.
editar: -2 eliminar enredos inútiles.
editar: mejor mecanografiado.
editar: -10 aplica expresiones repetidas en forma de matriz.
editar: -4 factorizar la expresión repetida como una función.
editar: comentario línea por línea.
Más detalladamente, el punto de entrada es la
cfunción que toma un argumento implícitamente nombradoy.La
jfunción recibe el mismo valor de entrada que suyparámetro.El punto jot aquí hace el doble bucle. Llama a la
ifunción con cada combinación de elementos de las matrices izquierda y derecha (0..n / 2 y 0..n). Entonces elifunción recibe comoxel índice y de la tabla, y recibe comoyel índice x . Los nombres se pusieron un poco al revés aquí :).donde
qhacede regreso
iEl piso no debería ser necesario. Pero aparentemente hay un error en el intérprete.
La
lfunción funciona de manera similar a lajfunción, utilizando un punto de jot.La
kfunción produce un valor booleano escalado en 2 para que los valores se puedan distinguir de los valores de helado más adelante, en el mapeo.En acción (canalizando
trpara eliminar los caracteres de tabulación que son la solicitud de REPL):fuente
Pitón 2,
193192No usa cadenas, solo matemáticas
s(L,U)devuelve un número de la forma "U-dígitos con losLceros más a la derecha y los restantes"f(N,m)devuelve un número de N dígitos con la sección interna de2y un borde de ancho m de1cada ladog(N,m)hace lo mismo, pero usando7para el 'color' de la sección interior, ya que coincide más con la textura del conoSalida
fuente
Perl 6, 175
Implementación bastante sencilla sin mucho golf, solo espacios en blanco extraños / eliminación de puntuación:
fuente