Temos muitos eixos horizontais para números, mas honestamente acho que eles são meio chatos. Sua tarefa hoje é construir uma parte de um eixo diagonal entre dois números inteiros não negativos distintos dados como entrada.
Como construir um eixo diagonal?
Vamos dar um exemplo, com a entrada
0, 5
. Nosso eixo deve ficar assim:0 0 1 2 3 4 5
No entanto, nosso eixo deve ter uma boa aparência para números que também têm mais dígitos! Se a entrada for, por exemplo
0, 14
, o novo eixo deve ser:0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
A idéia é que o primeiro dígito do próximo número no eixo sempre seja colocado exatamente após o último dígito do número anterior. Para entender a idéia ainda melhor, aqui está outro exemplo com
997, 1004
:997 998 999 1000 1001 1002 1003 1004
Regras
Você pode assumir que a entrada está em ordem crescente ou decrescente (você pode escolher entre
5,3
e3,5
).Você também pode assumir que a diferença entre os dois números inteiros é menor que 100.
Você pode ter uma nova linha principal ou um espaço principal consistente (em cada linha). Espaços à direita / novas linhas também são bons.
Você pode receber e fornecer saída por qualquer média padrão .
Isso é código-golfe , então o código mais curto em bytes em todos os idiomas vence!
Outros casos de teste
1, 10
:1 2 3 4 5 6 7 8 9 10
95, 103
:95 96 97 98 99 100 101 102 103
999999, 1000009
:999999 1000000 1000001 1000002 1000003 1000004 1000005 1000006 1000007 1000008 1000009
Respostas:
05AB1E ,
876 bytesAgradecemos ao Magic Octopus Urn por salvar um byte!
De alguma forma funciona, mas sinceramente não tenho idéia do porquê.
Código
Usa a codificação 05AB1E . Experimente online!
Explicação
fonte
.O = pop a,b push connected_overlap(b) (deprecated)
Oh, eu acho?.O
é extremamente problemático e está obsoleto por mais de um ano, então não tenho idéia do que funciona e do que não funciona. Eu poderia jurar que precisavaÎ
, mas que de repente não parece mais ser o caso (?). Obrigado! :)Î
foi necessária para reduzir o número máximo de espaços à esquerda para 1.Python 2 , 43 bytes
Faz uso da guia vertical para fazer o efeito de escada. O modo como
\v
é renderizado depende do console, portanto, pode não funcionar em qualquer lugar (como o TIO).fonte
\x0b
no seu código para salvar um byte?\\v
e substituí-lo pelo\x0B
que mostra umVT
caractere em seu lugar para a pontuação. Você pode postar um hexdump reversível (xxd
ou algo assim) ou apenas declaro que: "\v
é uma guia vertical literal", acho que seria justo. Espero que ajude!Carvão ,
98 bytesExperimente online!
O link é para a versão detalhada do código. Entrada em ordem crescente.
fonte
R,
706961 bytesFunção que usa a variável inicial e final como argumentos. Faz um loop na sequência e imprime cada elemento, anexado com espaços suficientes.
F
começa comoFALSE=0
e durante cada iteração, a quantidade de caracteres para esse valor é adicionada a ele.F
decide a quantidade de espaços impressos.Experimente online!
-8 bytes graças a @ Giuseppe
fonte
scan()
duas vezes, pode ser reduzido para 67 bytesfor(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}
.F=0;for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}
(71 bytes)nchar
.\n
por uma nova linha real também funciona, e isso aparentemente não custa dois bytes.cat
, mas não conseguia pensar direito e descobrir por algum motivo.C #,
908985 bytesGuardou 1 byte graças a @LiefdeWen.
Guardado 4 bytes graças a @auhmaan.
Experimente online!
Versão completa / formatada:
fonte
i<=e
ae>i
i
e reutilizar as
vezPython 2 ,
5854 bytesExperimente online!
fonte
Mathematica, 59, bytes
entrada
-3 bytes @JungHwanMin
problema com 0 corrigido (ver comentários para detalhes)
thanx para @ngenisis
fonte
Spacings -> 0
se deseja que isso seja exato do caractere.Grid[(DiagonalMatrix@Range[1+##]/. 0->""+1)-1,Spacings->0]&
é o caminho mais curto que eu poderia encontrar para corrigir esses problemasGeléia , 9 bytes
Experimente online!
fonte
Mathematica, 48 bytes
como existem tantas respostas, achei que essa deveria ser incluída
entrada
saída
fonte
C,
1661349582 bytesNova resposta
Apenas como uma função, não como um programa completo.
Agradecemos a Falken por ajudar a eliminar 13 bytes (e corrigir uma falha)!
Agradecimentos a Steph Hen por ajudar a derrubar 12 bytes!
Agradecimentos a Zacharý pela ajuda, derrubando 1 byte!
Respostas antigas
Se livrou do int antes de main e alterou const char * v [] para char ** v e se livrou do retorno 0;
Esta é minha primeira vez jogando golfe e eu queria tentar algo em C. Não tenho certeza se formatei isso corretamente, mas me diverti fazendo isso!
Explicação
Uso
fonte
argc
eargv
para variáveis de uma letra.int s=0
para o loop for, como emfor(int s=0;a<=b;a++)
.int i=s;while(i--)
vez defor(int i=0;i<s;i++)
para o loop interno economizará dois bytes.C ++,
167165 bytes-2 bytes graças a Zacharý
fonte
int m=0,i=l,j
primeirofor
loop para salvar um byte? 2. Você pode mudarr+=t;r+=10
parar+=t+10
? 3. Eu venci alguém.r+=t+=10
, mas nãor+=t+10
, ele me deu um error+=t+=10
funciona? Isso não afetariat.size()
?++i
aostd::to_string(i)
comostd::to_string(i++)
para salvar mais um byte?APL (Dyalog) ,
2524 bytes-1 graças a Zacharý .
Assume
⎕IO←0
a contagem baseada em zero. Pega o limite inferior como argumento à esquerda e o limite superior como argumento à direita.Experimente online!
(
…)
Aplique a seguinte função tácita entre os argumentos:-
subtrair a parte superior inferior do limite superior1-
subtraia isso de um (ou seja, 1 + ∆)⊣+∘⍳
limite inferior esquerdo mais os inteiros 0 através desse⍕¨
formato (stringify) cada{
…}
Aplique o seguinte anônimo nisso (representado por ⍵):≢¨
comprimento de cada (número)+\
soma acumulada-
negar⍵↑⍨¨
para cada número estrito, pegue o número de caracteres do final (almofadas com espaços)↑
misturar lista de strings em matriz de caracteresfonte
+-⍨
ser--
?Retina ,
8178 bytesExperimente online! Recebe a entrada como uma lista separada por nova linha de dois números inteiros. Edit: Salvo 3 bytes, roubando o código de expansão da minha resposta para Nós compartilhamos o cluster principal? Explicação:
Converta ambas as entradas para unárias.
Enquanto os dois últimos elementos (a, b) da lista diferem em mais de 1, substitua-os por (a, a + 1, b). Isso expande a lista de uma tupla para um intervalo.
Converta de volta para decimal em duplicado.
Converta a cópia duplicada em espaços.
Soma cumulativamente os espaços de cada linha para a próxima.
fonte
Pyth ,
1413 bytesExperimente online!
fonte
LOGO , 53 bytes
Não há "Experimente online!" link porque todos os intérpretes on-line do LOGO não oferecem suporte à lista de modelos.
Essa é uma lista de modelos (equivalente à função lambda em outros idiomas).
Uso:
(
apply
chama a função)vai imprimir
Nota:
Isso usa tartarugas
ycor
(coordenada Y) para armazenar o número de espaços necessários para digitar, portanto:window
deve ser executado seycor
for muito grande que a tartaruga se mova para fora da tela. Descrição dowindow
comandoif the turtle is asked to move past the boundary of the graphics window, it will move off screen.
:, diferente da configuração padrãowrap
, queif the turtle is asked to move past the boundary of the FMSLogo screen window, it will "wrap around" and reappear at the opposite edge of the window.
Explicação:
fonte
05AB1E , 8 bytes
Experimente online!
-2 graças a Adnan .
fonte
vy
porʒ
egF
porv
salvar 2 bytes.ʒ
truque ainda fosse usado ...JavaScript (ES8),
696762 bytesRecebe a entrada como números inteiros, em ordem crescente, usando a sintaxe de currying. Retorna uma matriz de seqüências de caracteres.
Tente
fonte
Japonês , 12 bytes
Recebe entrada em qualquer ordem e sempre retorna os números em ordem crescente, como uma matriz de linhas.
Experimente online! com o
-R
sinalizador para ingressar na matriz com novas linhas.Explicação
Entrada implícita de
U
eV
.Crie um intervalo inclusivo
[U, V]
e mapeie cada valor para ...Os valores anteriores ao current (
¯Y
), unidos a uma string (¬
) e preenchidos com espaços (ç
).Mais o número atual. A matriz resultante é gerada implicitamente.
fonte
Python 2 ,
65 63 6261 bytes-2 bytes Graças a @Mr. Xcoder:
exec
não precisa de aparelho-1 tchau graças a @ Zacharý:
print s*' '
asprint' '*s
Experimente online!
fonte
m,n=input();s=0;exec(n-m+1)*"print s*' '+`m`;s+=len(`m`);m+=1;"
é suficiente.print s*' '
paraprint' '*s
salvar um byte.JavaScript, 57 bytes
fonte
y=>g=(x,s='')=>y<x?s:s+'\n'+g(x+1,s.replace(/./g,' ')+x)
Chamada com currying com os inteiros invertida:f(103)(95)
.x=>y=>g=(s='')=>y<x?s:s+'\n'+g(s.replace(/./g,' ')+x++)
Ligue comof(x)(y)()
.Python 2,
6059 bytes-1 byte graças a Mr.Xcoder por definir meu s = 0 como uma variável opcional em minha função.
Experimente online!
Eu acho que é possível transferir isso para uma versão lambda, mas não sei como. Eu também acho que existe algum tipo de mapeamento entre os espaços e o comprimento do número atual, mas isso eu ainda não descobri. Então, acho que ainda há espaço para melhorias.
O que fiz foi criar um intervalo entre o limite
l
inferioru
e o limite superior, imprimindo cada linha com um espaço multiplicado por um números
. Estou aumentando o multiplicador com o comprimento do número atual.fonte
Python 2,
787779 bytesExperimente online!
f(A, B)
imprimirá a parte do eixo entre A e B inclusive.Primeira vez que respondo a um desafio!
Usa e abusa dos backticks do Python 2 para contar o número de espaços que ele precisa adicionar antes do número.
-1 byte graças a Mr.Xcoder
+2 porque esqueci um
+1
fonte
sum(len(`j`)) for
pode se tornarsum(len(`j`)for
, -1 bytesrange(a,b)
porrange(a,b+1)
, porque o Python possui intervalos semi-inclusivos.C (gcc) ,
4138 bytes-3 bytes Graças a apenas ASCII
Funciona no RedHat6, acessado via PuTTY
Experimente online!
fonte
more
-loV , 16 bytes
Experimente online!
Isso seria muito mais fácil se eu pudesse
start
end - start
mas acho que isso está mudando um pouco demais o desafio.Isso leva o número inicial como entrada no buffer e o número final como argumento. Ele realmente cria a escada
start
parastart + end
e, em seguida, apaga tudo depois que o número final.fonte
MATL , 11 bytes
Experimente online!
Explicação
Isso funciona gerando uma sequência para cada número e concatenando-a com uma cópia logicamente negada da sequência anterior. Portanto, char 0 é precedido de 0 tantas vezes quanto o comprimento da string anterior. O caractere 0 é exibido como um espaço e cada sequência é exibida em uma linha diferente
fonte
Swift 4 , 115 bytes
Eu acho que ninguém teria postado uma solução Swift de qualquer maneira ...
Experimente online!
fonte
Perl, 19 bytes
Nota:
\x0b
é contado como um byte.Juntamente com outros, pensei que o uso de movimentos do cursor seria a rota mais curta, isso significa que não funciona no TIO:
Uso
fonte
1..
faz lá, uma vez que você recebe dois números inteiros.1..
eu não estava lendo completamente as especificações, isso foi corrigido agora! Quanto ao teste on-line, como a saída contém a guia vertical, ela não é renderizada conforme o esperado. Tentando ver se consigo encontrar um renderizador que suporte caracteres de controle ... Se não, esse pode ser meu novo projeto!Japonês ,
109 bytesTeste online! Retorna uma matriz de linhas;
-R
sinalizador incluído para participar de novas linhas para facilitar a visualização.Explicação
Versão antiga, 10 bytes:
Teste online!
fonte
D,
133127126125121119 bytesGelatina e APL foram tomados.
Experimente online!
Se você está bem com os resultados dependentes do console (segue o mesmo princípio da resposta C de Giacomos), aqui está um para
7271 bytes:Quão? (Apenas D truques específicos)
f(T)(T a,T b,T s=0)
O sistema de modelos de D pode inferir tiposfor(T j;j++<s;)
Os números inteiros são padrão para0
.' '.write;a.writeln
D permite que você liguefun(arg)
comoarg.fun
(uma das poucas coisas que D tem no golfe)a.text.length
O mesmo que acima, e D também permite chamar um método sem parâmetros, como se fosse uma propriedade (text
é a conversão para string)fonte
Java 8, 79 bytes
Experimente online!
fonte
(a,b)->
parab->a->
. (E você pode economizar mais três bytes acessando o Java 10 e alterandoString
paravar
.) Experimente online.