Desafío
¿Alguna vez has visto esos títulos de avances de películas (es decir, marcianos, interestelares, etc.) en los que tienen grandes brechas entre las letras que se extienden lentamente?
El desafío es recrear este efecto dada una cadena, multiplicador de espacio y dirección, insertando la cantidad adecuada de espacios entre las letras.
Ejemplo
Entrada : 'INTERSTELLAR', Multiplicador de brecha: 1.0, Dirección: Aumentando hacia adentro
Output: I N T E R S T E L L A R
El espacio es: [1, 2, 3, ..., 3, 2, 1]; reemplazando los espacios con '.' para demostrar mejor el espacio:
I.N..T...E....R.....S......T.....E....L...L..A.R
Entrada : 'INTERSTELLAR', Multiplicador de brecha: 0.5, Dirección: Aumentando hacia adentro
Output: IN T E R S T E L L AR
El espaciado se multiplica por 0.5, por lo tanto, obtenemos [0, 1, 1, 2, ... 2, 1, 1, 0] de la división de enteros; utilizando '.':
IN.T.E..R..S...T..E..L.L.AR
Entrada : 'CODEGOLF', Multiplicador de brecha: 2.0, Dirección: Incremento hacia afuera
Output: C O D E G O L F
El espaciado se multiplica por 2, aumentando hacia afuera, por lo tanto, obtenemos [8,6,4,2,4,6,8]; reemplazando con '.':
C........O......D....E..G....O......L........F
Entrada : 'CODEGOLF', Multiplicador de brecha: 0.4, Dirección: Incremento hacia afuera
Output: C O DEGO L F
El espaciado se multiplica por 0.4, aumentando hacia afuera, por lo tanto obtenemos [1,1,0,0,0,1,1]; reemplazando con '.':
C.O.DEGO.L.F
Reglas
- Toma 3 entradas: cadena, multiplicador de huecos y dirección
- Si la cadena de entrada tiene una longitud impar (incluso en # de espacios), por ejemplo, 'HOLA', el espacio entre los 2 espacios más internos debe ser el mismo
H E L L O
- La dirección y el multiplicador de espacio se pueden analizar como desee, por ejemplo, podría usar -2 como 'aumentar hacia adentro con un multiplicador de 2', 1 como 'aumentar hacia afuera con un multiplicador de 1', etc.
- Solo es necesario usar espacios, sin embargo, es una ventaja si el relleno del personaje es personalizable.
Animación de referencia
Diviértete jugando al golf!
Increasing
a1 => Inward, 0 => Outward
o viceversa.C..O....D......E........G......O....L..F
Respuestas:
JavaScript (ES6),
86828180 bytesSe espera una entrada en la sintaxis de curry
f(s)(r)
, con:s
= cadenar
= relación + dirección: un flotador negativo hacia adentro o un flotador positivo hacia afuerafuente
05AB1E , 33 bytes
Utiliza la codificación CP-1252 .
El multiplicador de huecos se toma como negativo cuando aumenta hacia afuera.
Pruébalo en línea!
fuente
APL, 40 bytes
Esto toma la cadena como su argumento derecho, la relación como su argumento izquierdo y la dirección como su operando izquierdo (0 para adentro y 1 para afuera).
Explicación:
⍳⍴1↓⍵
: obtenga una lista de números del 1 al N-1, donde N es la longitud de la cadena(⌽⌊+)
: invierte la lista, y en cada posición, obtén el número más bajo de ambas listas (esto da los tamaños de los huecos si aumenta hacia adentro)(1+⌈/-+)⍣⍺⍺
: resta cada número de la lista del número más alto de la lista y suma 1. Haz esto⍺⍺
veces. (Si⍺⍺=0
no pasa nada, y si⍺⍺=1
, esto dará el tamaño de los espacios si aumenta hacia afuera).-⌊⍺×
: multiplica cada espacio por⍺
, redondea hacia abajo y niega.∊1,⍨1,¨
: agregue un 1 delante de cada espacio y un 1 al final de la lista.0~⍨
: elimina los ceros.⍵\⍨
: use la lista resultante para expandir⍵
. Ampliar (\
) funciona de la siguiente manera: para cada número positivo, el carácter actual se replica que muchas veces, y para cada número negativo, que muchos espacios se insertan, con la advertencia de que0
, y¯1
hacer lo mismo, por lo que todo el los ceros tuvieron que ser eliminados antes.fuente
MATL , 31 bytes
Las entradas son: cadena;
0
o1
para aumentar hacia adentro o hacia afuera; multiplicador.Pruébalo en línea!
Explicación
Considere insumos
'INTERSTELLAR'
,1
,0.5
como un ejemplo.fuente
Raqueta 348 bytes
Sin golf:
Pruebas:
Salida:
fuente
PHP, 129 bytes
12 Bytes guardados por @Titus Gracias
cadena = $ argv [1], relación = $ argv [2], dirección = $ argv [3] hacia adentro = 0, hacia afuera = 1
fuente
str_pad
debería guardar 4 bytes. Intente++$i>$l?$l-$i/2:$i/2
y en$t[$i++]/2
lugar de incrementar la condición posterior del bucle; eso debería salvar 9. ¿Por qué0^
?0^3.12
resultado en el3
que es necesario$i=0
es innecesario++$i>
Todavía guarda un byte$i++>=
. Y puede guardar un byte más moviendo ese incremento a la condición previa: en++$i<2*$l=...
lugar de$i+1<2*$l=...
, intercambiar ramas verdaderas y falsas del ternario externo, en$i
lugar de++$i
y en$t[$i/2-.5]
lugar de$t[$i++/2]
.1
afuera como2
debería permitirle guardar otros 3 bytes: en($l>>1)
lugar de(0^$l/2+1)
; pero no he probado ninguno de estos.