O desafio
Dada uma sequência de entrada (ou matriz) que consiste em <
e >
, gera uma sequência (matriz ou sequência) de números inteiros, tais como:
- os operadores estão todos corretos quando aplicados em ordem entre números consecutivos na saída
- todos os números inteiros são positivos (1 ou maior)
- a soma dos números inteiros é tão pequena quanto é matematicamente possível
As entradas podem variar para corresponder a "maior que" e "menor que" no idioma escolhido.
Como saída alternativa, basta especificar a soma dos números na saída. Indique qual versão você está resolvendo no título da resposta.
Exclusões e regras usuais se aplicam, os menores bytes são ganhos.
Você pode assumir que a sequência de entrada nunca levará a um estouro de número inteiro no seu idioma, se isso ajudar.
Exemplos
>
dá2 1
quais somas para3
>>>
dá4 3 2 1
quais somas para10
><
dá2 1 2
quais somas para5
dá
1
quais somas para1
>>>>>>>>>
dá10 9 8 7 6 5 4 3 2 1
quais somas para55
>><<>><>>>
dá3 2 1 2 3 2 1 4 3 2 1
quais somas para24
><>><>><>
dá2 1 3 2 1 3 2 1 2 1
quais somas para18
<<<<>
dá1 2 3 4 5 1
quais somas para16
<<<<><<>
dá1 2 3 4 5 1 2 3 1
quais somas para22
>><<
dá3 2 1 2 3
quais somas para11
code-golf
sequence
mathematics
simonalexander2005
fonte
fonte
>
e<
?><>
Respostas:
Geléia , 19 bytes
Experimente online!
O valor de cada número é max ( número de
>
imediatamente à direita , número de<
imediatamente à esquerda ) + 1 .Alternativamente...
Experimente online!
fonte
> <> ,
4038 bytesExperimente online!
Um idioma apropriado. Para referência em
><>
si produz 2,1,2,1.Como funciona:
fonte
Python 3, 93 bytes
Experimente online!
Sem embaralhar:
fonte
Haskell , 119 bytes
Experimente online!
Explicação
A idéia aqui é que temos execuções de
>
s ou<
s, cada uma mapeada para faixas ascendentes e descendentes. Então nós usamosgroup
para dividir a sequência em grupos de caracteres consecutivos. Nosso trabalho é costurá-las da maneira adequada.Quando temos
<>
, queremos unir as duas listas, tomando o maior valor final, por exemploé dividido
mapeado para intervalos
Então, quando costuramos, caímos
3
porque é menor (3
não é maior que7
).Quando temos
><
o oposto, diminuímos o valor maior.O código real atinge isso criando um operador
%
. A definição de%
é bastante complexa, mas basicamente lê da esquerda para a direita, acompanhando quantos caracteres consecutivos são iguais. Faz isso à esquerda tinha o valor do operador. Quando chegamos a um lugar onde os caracteres mudam, realizamos a costura como descrevi.fonte
(2%)
?%
com2
como o primeiro argumento.main
implementação completa ?Retina 0.8.2 , 36 bytes
Experimente online! O link inclui casos de teste. Explicação:
Inserir
1
s antes, entre e após os<
s e>
s.Aumente repetidamente números inteiros até que todas as comparações sejam satisfeitas.
Soma os números inteiros e converta em decimal.
fonte
Java 10,
198181 bytesExperimente online.
Explicação:
fonte
Haskell , 87 bytes
Experimente online!
Um porto da minha resposta Jelly.
fonte
Stax , 21 bytes
Execute e depure
Ele funciona codificando a entrada no comprimento da execução e concatenando os intervalos gerados juntos. Descompactado, não jogado e comentado, é assim.
Execute este
fonte
Perl 5
-p
, 53 bytesExperimente online!
fonte
Vermelho , 185 bytes
Após a explicação de user202729 ...
Experimente online!
fonte