Escreva um programa ou função que receba um número inteiro positivo N e imprima ou retorne uma sequência de arte N × N ASCII cuja metade superior seja um semicírculo feito de (
's e cuja metade inferior seja um triângulo apontando para baixo feito de V
' s, com espaços usados como preenchimento.
Em outras palavras, faça um sorvete ASCII: (saída para N = 17)
(((((
(((((((((
(((((((((((((
(((((((((((((
(((((((((((((((
(((((((((((((((
(((((((((((((((((
(((((((((((((((((
VVVVVVVVVVVVVVVVV
VVVVVVVVVVVVVVV
VVVVVVVVVVVVV
VVVVVVVVVVV
VVVVVVVVV
VVVVVVV
VVVVV
VVV
V
Exemplos
Aqui estão as saídas para N = 1 a 5. Observe que para N ímpar, o triângulo sempre deve ser a metade maior.
V
((
VV
(((
VVV
V
((
((((
VVVV
VV
(((
(((((
VVVVV
VVV
V
Aqui está uma pastabin N = 101.
E aqui está uma implementação de referência Python 3 não-destruída:
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))
Detalhes
- Pegue a entrada de stdin, linha de comando ou como argumento de função. Saída para stdout ou similar, ou você pode retornar a string se escrever uma função.
- A parte do cone deve corresponder exatamente à implementação de referência para todos os N.
- A parte do sorvete não precisa corresponder exatamente à implementação de referência, desde que esteja claramente na forma de um semicírculo para todos os N. (Isso é para que você não precise se preocupar com pequenas diferenças no semicírculo devido a erros de arredondamento .)
- Não deve haver espaços à esquerda desnecessários, mas pode haver espaços à direita supérfluos.
- A saída pode opcionalmente conter uma nova linha à direita.
- Opcionalmente, pode utilizar quaisquer outros 3 distintas ASCII imprimível caracteres em lugar de
(
,V
e espaço.
Pontuação
O menor envio em bytes vence. O desempatador vai para a finalização mais antiga.
Respostas:
CJam, 46 bytes
Experimente online.
Acredito que isso atualmente imite exatamente a especificação original, necessária quando comecei a produzir esta resposta. Pode haver um potencial para salvar alguns bytes, tornando a matemática menos precisa para a especificação original, mas até encontrar uma maneira de salvar mais de um ou dois bytes, deixarei como está.
Explicação
fonte
2
'e1
' em vez de(
'eV
' e '?inca2
129123121111107Isso usa principalmente as fórmulas do exemplo python, mas usa pontos de anotação e iotas em vez de loop duplo. A
i
função executa o teste circular para aj
função que chama um ponto de anotação nela. E ak
função executa o teste do triângulo para al
função. Ac
função catenates os resultados dej
el
e remodela-o a N * N.edit: -6 combina 2 mapas em 1.
edit: -2 remove ravels inúteis.
editar: melhor datilografado.
edit: -10 aplica a expressão repetida em matriz.
edit: -4 fatoram a expressão repetida como uma função.
editar: comentário linha por linha.
Mais detalhadamente, o ponto de entrada é a
c
função que recebe um argumento implicitamente nomeadoy
.A
j
função recebe o mesmo valor de entrada que seuy
parâmetro.O jot-point aqui faz o loop duplo. Ele chama a
i
função com todas as combinações de elementos das matrizes esquerda e direita (0..n / 2 e 0..n). Assim, ai
função recebe comox
o y índice da tabela, e que recebe comoy
o x índice. Os nomes ficaram um pouco para trás aqui :).onde
q
fazde volta a
i
O piso não deve ser necessário. Mas, aparentemente, há um erro no intérprete.
A
l
função funciona de maneira semelhante àj
função, usando um ponto de anotação.A
k
função gera um valor booleano escalado por 2, para que os valores possam ser diferenciados dos valores de sorvete posteriormente, no mapeamento.Em ação (canalizando
tr
para remover os caracteres de tabulação que são o prompt do REPL):fonte
Python 2,
193192Não usa strings, apenas matemática
s(L,U)
retorna um número da forma "U
-dígitos com osL
zeros mais à direita e os demais"f(N,m)
retorna um número de dígito N com a seção interna de2
e uma borda de largura m de1
cada ladog(N,m)
faz o mesmo, mas o uso7
da 'cor' da seção interna, uma vez que coincide mais com a textura do coneResultado
fonte
Perl 6, 175
Implementação bastante direta, sem muito golfe, apenas eliminação de espaço em branco / pontuação estranha:
fonte