Faça um programa que tenha um comprimento e uma lista de intervalos e produza uma régua desse tamanho com tiques mais longos para cada intervalo usando os caracteres de desenho de linha ┌ ┬ ┐ │ ╵
- A primeira linha da saída deve começar com o tick para 0 com
┌
e terminar com um tick para o comprimento com┐
,┬
sendo usado para cada caractere intermediário. Haverá um total delength
+ 1 caracteres de desenho de linha nesta primeira linha. - Um tiquetaque deve ser alongado verticalmente por incrementos de meio caractere usando
╵
e com│
base nos intervalos de entrada. - Os intervalos são listados do menor para o maior, em relação ao intervalo anterior. Para elaborar:
- O primeiro intervalo informa quantos ticks base (a primeira linha - um caractere por tick) estão no segundo menor intervalo (o menor intervalo é 1). Por exemplo, [3] aumentará a cada terceiro tick em meio caractere.
- O segundo e os intervalos subsequentes são em termos do próximo menor intervalo. Por exemplo, [3, 5] aumentará a cada 15ª escala de base por um caractere completo e [3, 5, 2] aumentará a cada 30ª escala de base por um caractere e meio.
- Um sub-intervalo de 1 é válido e significa efetivamente que as últimas linhas do intervalo são aumentadas por um caractere completo em vez de um meio-caractere.
- Os casos de teste de exemplo devem ajudar a esclarecer como isso funciona.
Exemplos / Casos de Teste
3, []:
┌┬┬┐
9, [3]:
┌┬┬┬┬┬┬┬┬┐
╵ ╵ ╵ ╵
30, [5, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │
32, [4, 2, 2, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │ ╵ │
│ ╵ │
48, [5, 3, 2]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │ ╵ ╵ │ ╵ ╵ │
╵ ╵
24, [7, 3]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │
17, [3, 2, 1]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵
╵ ╵ ╵
1, [23, 19, 13, 11, 7, 5, 3, 2, 1]
┌┐
│
│
│
│
╵
Outras regras / notas
- Entrada e saída podem usar qualquer formato conveniente
- A régua não precisa terminar em um grande tick
- A lista de intervalos pode estar vazia
- O zeroth está sempre dentro de todos os intervalos.
- Você pode assumir que o comprimento da régua e os intervalos sempre serão inteiros positivos menores que 120
- O espaço em branco à direita é bom, mas o espaço em branco à esquerda não é.
- Qualquer espaço fixo de largura única é permitido como caractere de espaçamento se, por algum motivo, você desejar usar algo diferente de espaços ASCII.
Golfe feliz!
Respostas:
JavaScript (Node.js) , 123 bytes
Experimente online!
Use esta função como
f(20)([5, 2])
.Obrigado Arnauld, economiza 4 bytes.
fonte
Perl 6 ,
130 122 10292 bytes-10 bytes graças ao nwellnhof!
Experimente online!
Ah sim, muito mais curto que o meu método anterior. Este é um bloco de código anônimo que retorna uma lista de linhas.
Explicação:
fonte
Dyalog APL,
66645852 bytesExperimente online!
¯2¯8¯14 bytes graças a ngn !fonte
∊'┌'(1↓⍵⍴'┬')'┐'
->'┌┬┐'/⍨2⍵2-1
+⌿0=(×\⍺)∘.|⍳1+⍵
->⊥¨⍨0=(⍵+1)⍴⍳⌽⍺
. aceitar⍺
em ordem inversa foi explicitamente permitido agora, então você também pode remover o⌽
('┌┬┐'/⍨2⍵2-1)
->'┌┬┐'[2,⍨×⍳⍵]
('┌┬┐'/⍨2⍵2-1)⍪⍉
->'┌┐'@0⍵@0⍉'┬',
Python 3 ,
173172 bytesExperimente online!
fonte
05AB1E , 51 bytes
Não está muito satisfeito com a
I¯Qiεõ}}
solução alternativa para listas de entradas vazias. E também pode ser jogado em outras partes.NOTA: Usa números inteiros compactados convertidos nos caracteres necessários, porque usar os caracteres necessários diretamente significa que terei que contar o programa inteiro em UTF-8, aumentando-o demais para todos os caracteres internos do 05AB1E.
Experimente online ou verifique todos os casos de teste .
Explicação:
Veja esta minha dica 05AB1E (seção Como comprimir números inteiros grandes? ) Para entender por que
•5·W4•
é94749589
e•áΣ=Yô•
é948495169488
.fonte
×S
pode serи
sиS
funciona, mas infelizmente é um byte mais longo, em vez de mais curto. É porque os números inteiros estão na pilha primeiro e as seqüências depois. Com×
isso, não importa se éint,string
oustring,int
, mas comи
isso esperastring,int
.и
! Será bom saber no futuro, eu não o tinha visto antes de uma de suas outras respostas.Carvão , 50 bytes
Experimente online! Link é a versão detalhada do código. Os caracteres de desenho de caixa têm uma representação de 3 bytes no carvão, portanto, a string acima tem apenas 40 caracteres. Explicação:
Calcular o produto cumulativo dos intervalos.
Imprima a primeira linha de marcas de escala. Os caracteres esquerdo e direito estão ao contrário, porque o resultado é refletido mais tarde.
Calcule o número de intervalos que são um fator de cada marca de escala. Gere uma sequência de
│
s com metade desse comprimento e adicione╵
comprimentos ímpares. Imprima cada sequência para baixo com as seqüências subsequentes nas colunas anteriores, ou seja, ordem inversa.Reflita tudo para obter a régua na ordem da esquerda para a direita.
fonte
Tela ,
424140 bytesExperimente aqui! ( com uma fonte que monospaces a saída )
fonte
Emacs Lisp , 303 bytes
Use esta função como
(f '(30 (5 2)))
.Versão melhor legível:
fonte
Geléia ,
4241 bytesUm programa completo.
Experimente online!
Ou consulte uma suíte de testes
Nota: esse código foi alterado de um programa completo -
ñ
(o próximo link como díade) foi substituído por1ŀ
(link no índice 1 como díade) para permitir que ele seja chamado várias vezes pelo rodapé .Quão?
fonte
Ruby , 126 bytes
Experimente online!
Parece bastante detalhado com tudo isso
each_slice
, mas servirá por enquanto, a menos que eu consiga encontrar uma abordagem mais eficiente.Aceita a entrada como
l
por comprimento ei
por intervalos, retorna uma matriz de seqüências de caracteres.fonte
R ,
175170 bytesExperimente online!
Toma intervalos vazios como
0
, retorna uma matriz de caracteres. O link TIO exibe a saída bem impressa.fonte
Haskell ,
167164149 bytesExperimente online! Abordagem diferente por golfe, por Οurous .
Experimente online! Ainda existem algumas redundâncias que parecem poder ser exploradas, mas até agora resistiram a todas as tentativas de golfe.
A solução anterior de 167 bytes é a mesma, exceto a manipulação de nova linha e provavelmente é um pouco melhor de ser lida:
Experimente online!
fonte
PowerShell , 152 bytes
Experimente online!
Desenrolado:
fonte
C # (compilador interativo do Visual C #) , 204 bytes
Experimente online!
Saídas, mas fica preso em um loop infinito.
fonte
Limpo ,
221201195162 bytesExperimente online!
Retorna uma lista de listas de caracteres UTF-8 (como seqüências de caracteres, pois o Clean não tem suporte UTF-8 inato).
Funciona gerando a primeira linha e, em seguida, obtendo o produto dos prefixos da lista fornecida em grupos de dois e verifica quais marcações serão sorteadas com base no fato de o produto dividir a posição atual do caractere.
Ungolfed:
fonte