Neste desafio, você precisa simular um sapo pulando para frente e para trás em lírios. O lago é infinitamente grande, tem uma linha de um número infinito de lírios, e o sapo pode saltar sobre quantos lírios quiser.
Esse sapo gosta de pular para frente e para trás: depois de pular para frente, ele sempre pula para trás e vice-versa.
Você recebe uma lista de números inteiros, que representa seus saltos. Você precisa produzir o resultado de seus saltos.
Por exemplo, diga que você passou [2,3,6,8,2]
:
Nosso sapo começa pulando 2 lírios para a frente:
_2
Em seguida, 3 lírios de volta:
3__2
Então 6 lírios para a frente:
3__2__6
8 de volta:
8_3__2__6
Finalmente, 2 lírios para a frente (observe como os 2 substituem os 3):
8_2__2__6
Para ser mais explícito: sua entrada é uma matriz de números S
, você precisa exibir S[K]
na posição S[K] - S[K-1] + S[K-2] - S[K-3]...
.
- Se for necessário imprimir vários números em um determinado local, imprima apenas aquele com o índice mais alto.
- Você deve usar
_
se um local específico estiver vazio - Se um número tiver vários dígitos, ele não ocupará vários locais. (Em outras palavras, um local pode consistir em vários caracteres)
- Você pode assumir que sua lista não está vazia e que todos os números inteiros são maiores que 0.
Casos de teste:
5 ____5
2,2 2_2
4,3,2,1 3124
5,3,2,1 _3125
2,3,6,8,2 8_2__2__6
10,3,12,4,1,12,16 ___12__3__10____41__1216
100,4,7,2,2 _______________________________________________________________________________________________4___1002_2
Este é um código-golfe , então responda com o menor número de caracteres possível!
Respostas:
MATL ,
3534 bytesAgradecemos a @Emigna por economizar 1 byte!
Experimente online! Ou verifique todos os casos de teste .
Como funciona
Golf seu código, não suas explicações!
A seguir, use a entrada
[2,3,6,8,2]
como um exemplo. Para ver resultados intermediários no código real, você pode inserir um%
(símbolo de comentário) para interromper o programa nesse ponto e ver o conteúdo da pilha. Por exemplo, isso mostra a pilha após a instruçãoYs
(soma acumulada).fonte
'0'
, em vez de' 0 '
, porqueXz
remove os espaços depois'0'
in também'10'
é substituído. É por isso que eu adiciono uma inicial32
também' 0'
funcionaria tão bem?PHP,
10010199104 bytesrecebe entrada de argumentos de linha de comando; corra com
-nr
.demolir
fonte
2,3,6,8,2
, onde os8
saltos "para trás" passam do "começo" dos lírios?JavaScript (ES6),
99107 bytesEditar: como o OP esclareceu que o único limite deveria ser a memória disponível, isso foi atualizado para alocar exatamente o espaço necessário, em vez de depender de um intervalo máximo codificado.
Como funciona
Esta função funciona em duas passagens:
Durante o primeiro passe:
p
é inicializado para0
.x
variável é definida como uma sequência vazia, para que todas as tentativas de modificá-la sejam simplesmente ignoradas.m
eM
quais são, respectivamente, os valores mínimo e máximo alcançados porp
.f()
.Durante o segundo passe:
p
é inicializado para-m
.x
é definido como uma matriz de tamanhoM-m
, preenchida com_
caracteres.x
.x
, que é o resultado final.Casos de teste
Mostrar snippet de código
fonte
[1100]
resulta no número impresso na posição em1002
vez de na posição1100
.R ,
1009796 bytesExperimente online!
A linha 1 encontra todas as posições para onde saltar. Primeiro, todos os saltos
x
são multiplicados por 1 ou -1 e depois transformados nas posições finais usando a soma acumulada. O vetorc(-1,1)
é reciclado, se necessário; no entanto, quandox
tiver o comprimento 1,x
é reciclado. Portanto, apenasseq(x^0)
(equivalentes aseq_along(x)
) somas são consideradas. (Um aviso é gerado quando o comprimento dex
não é múltiplo de 2, mas não afeta o resultado)A linha 2 aumenta as posições de salto para que todos sejam pelo menos 1.
As linhas 3 e 4 criam a saída e imprimem.
-1 byte de Giuseppe
fonte
seq(x^0)
!-p+1
pode ter1-p
um byte a menos.Javascript (ES6), 109 bytes
Comentado:
fonte
Perl 6 ,
6867 bytesExperimente online!
Como funciona
Primeiro, ele determina os locais de salto cumulativos:
Em seguida, os transforma em índices de matriz baseados em 0, subtraindo o número mínimo (mas no máximo 1) de todos os números:
Em seguida, cria uma matriz com os números de entrada atribuídos a esses índices:
Por fim, concatena a matriz para uma cadeia de caracteres, com o sublinhado no lugar de elementos indefinidos:
fonte
Geléia ,
2824 bytes-2 (e permitindo ainda mais -2) graças ao FrownyFrog (use a funcionalidade [pós-desafio] do aplicativo de prefixo rapidamente
Ƥ
)Experimente online! Programa completo, para um conjunto de testes com a mesma funcionalidade, clique aqui .
Quão?
Notas:
A concatenação final de uma nova linha
;⁷
é para os casos em que não_
aparece na saída; nesse caso, a impressão implícita exibirá uma representação da lista, por exemplo[3, 1, 2, 4]
, em vez de algo como o exemplo_3125
. Para nenhuma nova linha à direita, uma pessoa poderia substituir;⁷
por;““
para adicionar uma lista de listas de caracteres[[''],['']]
(não é”
necessário fechar , pois é o último caractere de um programa).A função inverdade, Ṭ, fornece uma lista com
1
s nos índices em sua entrada, para um único número natural, n que é n-10
s seguido por uma1
permissão que permite que os números de entrada sejam colocados na sua distância correta da esquerda por multiplicação . A reversão,,Ṛ
é necessária para que as visitas de sapo sejam substituídas mais tarde do que as anteriores , quando a redução com ouo/
, é realizada.fonte
1,-ṁ×µ+\
→UƤ_@/€
?Ƥ
não era um recurso no momento em que isso foi escrito, mas sim, isso funcionará. Melhor éUƤḅ€-
(já que a conversão da base -1 é como multiplicar...,1,-1,1,-1,1,-1,1
e somar).UƤḅ-
desdeḅ
vetorizar :) (Eu também fui com o contrárioṚ
, já que não precisamos da complexidade do upendU
)APL (Dyalog Unicode) ,
45SBCS de 30 bytesExperimente online!
-\⍵
varra o argumento alternando-
e+
(⊢ - 1 ⌊ ⌊/)
disso (⊢
) subtraia 1 ou o mínimo (⌊/
), o que for menor (⌊
)i←
atribuir ai
⌈/ 1+
incrementar e tirar o máximo⍴∘'_'
produzir que muitos sublinhados⍵@i
coloque os números do argumento (⍵
) nas posiçõesi
∊⍕¨
formatar cada um e achatarfonte
Rubi , 85 bytes
Experimente online!
Registra as posições após cada salto, converte a matriz resultante em hash para remover duplicatas (preservando o último valor em cada posição duplicada) e cola os valores com a quantidade necessária de sublinhados.
fonte
Python 2 ,
113110 bytesExperimente online!
fonte