Desafio
Já viu aqueles títulos de trailers de filmes (Marciano, Interestelar etc.) em que eles têm grandes lacunas entre as letras se espalhando lentamente?
O desafio é recriar esse efeito, com base em uma seqüência, multiplicador de gap e direção, inserindo a quantidade apropriada de espaços entre as letras.
Exemplo
Entrada : 'INTERSTELLAR', multiplicador de gap: 1.0, Direção: Aumentando para dentro
Output: I N T E R S T E L L A R
O espaçamento é: [1, 2, 3, ..., 3, 2, 1]; substituindo os espaços por '.' para demonstrar melhor o espaçamento:
I.N..T...E....R.....S......T.....E....L...L..A.R
Entrada : 'INTERSTELLAR', multiplicador de gap: 0,5, Direção: Aumentando para dentro
Output: IN T E R S T E L L AR
O espaçamento é multiplicado por 0,5; portanto, obtemos [0, 1, 1, 2, ... 2, 1, 1, 0] da divisão inteira; usando '.':
IN.T.E..R..S...T..E..L.L.AR
Entrada : 'CODEGOLF', multiplicador de gap: 2,0, Direção: Aumentando para fora
Output: C O D E G O L F
O espaçamento é multiplicado por 2, aumentando para fora, portanto obtemos [8,6,4,2,4,6,8]; substituindo por '.':
C........O......D....E..G....O......L........F
Entrada : 'CODEGOLF', multiplicador de gap: 0,4, Direção: Aumentando para fora
Output: C O DEGO L F
O espaçamento é multiplicado por 0,4, aumentando para fora, portanto obtemos [1,1,0,0,0,1,1]; substituindo por '.':
C.O.DEGO.L.F
Regras
- São necessárias 3 entradas: string, multiplicador de gap e direção
- Se o comprimento da string de entrada for ímpar (mesmo no número de intervalos), por exemplo, 'OLÁ!', O espaçamento das 2 lacunas mais internas deve ser o mesmo
H E L L O
- O multiplicador de direção e intervalo pode ser analisado da maneira que desejar, por exemplo, você pode usar -2 como 'aumentando para dentro com um multiplicador de 2', 1 como 'aumentando para fora com um multiplicador de 1', etc.
- Só é necessário usar espaços, no entanto, é um bônus se o preenchimento de caracteres for personalizável.
Animação de referência
Divirta-se jogando golfe!
Increasing
para1 => Inward, 0 => Outward
ou vice-versa.C..O....D......E........G......O....L..F
Respostas:
JavaScript (ES6),
86828180 bytesA entrada é esperada na currying sintaxe
f(s)(r)
, com:s
= stringr
= razão + direção: uma bóia negativa para dentro ou uma bóia positiva para forafonte
05AB1E , 33 bytes
Usos a codificação CP-1252 .
O multiplicador de diferença é considerado negativo quando aumenta para o exterior.
Experimente online!
fonte
APL, 40 bytes
Isso leva a string como argumento à direita, a razão como argumento à esquerda e a direção como operando à esquerda (0 para o interior e 1 para o exterior).
Explicação:
⍳⍴1↓⍵
: obtenha uma lista de números de 1 a N-1, onde N é o comprimento da sequência(⌽⌊+)
: inverta a lista e, em cada posição, obtenha o menor número de ambas as listas (isso fornece os tamanhos das lacunas se aumentar para dentro)(1+⌈/-+)⍣⍺⍺
: subtraia cada número da lista do número mais alto da lista e adicione 1. Faça isso algumas⍺⍺
vezes. (Se⍺⍺=0
nada acontecer, e se⍺⍺=1
, isso fornecerá o tamanho das lacunas se aumentar para fora.)-⌊⍺×
: multiplique cada espaço⍺
, arredonde-o para baixo e negue-o.∊1,⍨1,¨
: adicione 1 na frente de cada intervalo e 1 no final da lista.0~⍨
: remova quaisquer zeros.⍵\⍨
: use a lista resultante para expandir⍵
. Expand (\
) funciona da seguinte maneira: para cada número positivo, o caractere atual é replicado várias vezes e para cada número negativo, são inseridos muitos espaços, com a ressalva de que0
e¯1
faça a mesma coisa, razão pela qual todas as zeros tiveram que ser removidos antes.fonte
MATL , 31 bytes
As entradas são: string;
0
ou1
para aumento interno ou externo; multiplicador.Experimente online!
Explicação
Considere entradas
'INTERSTELLAR'
,1
,0.5
como um exemplo.fonte
Raquete 348 bytes
Ungolfed:
Teste:
Resultado:
fonte
PHP, 129 bytes
12 bytes salvos por @Titus Thank You
string = $ argv [1], razão = $ argv [2], direção = $ argv [3] para dentro = 0, para fora = 1
fonte
str_pad
deve salvar 4 bytes. Tente++$i>$l?$l-$i/2:$i/2
e em$t[$i++]/2
vez de incrementar na pós-condição do loop; isso deve economizar 9. Por quê0^
?0^3.12
resultado em3
que é necessário$i=0
é desnecessário.++$i>
ainda economiza um byte$i++>=
. E você pode salvar mais um byte movendo esse incremento para a pré-condição: em++$i<2*$l=...
vez de$i+1<2*$l=...
, troque ramos verdadeiros e falsos do ternário externo, em$i
vez de++$i
e em$t[$i/2-.5]
vez de$t[$i++/2]
.1
e externo como2
deve permitir que você salve outros 3 bytes: em($l>>1)
vez de(0^$l/2+1)
; mas eu não testei nenhum deles.