Défi
Avez-vous déjà vu ces titres de bandes-annonces de films (à savoir Martian, Interstellar, etc.) où ils ont d'énormes espaces entre les lettres qui s'étalent lentement?
Le défi consiste à recréer cet effet en fonction d'une chaîne, d'un multiplicateur d'écart et d'une direction, en insérant une quantité appropriée d'espaces entre les lettres.
Exemple
Entrée : 'INTERSTELLAR', Multiplicateur d'écart: 1.0, Direction: Augmentation vers l'intérieur
Output: I N T E R S T E L L A R
L'espacement est: [1, 2, 3, ..., 3, 2, 1]; remplacer les espaces par '.' pour mieux démontrer l'espacement:
I.N..T...E....R.....S......T.....E....L...L..A.R
Entrée : 'INTERSTELLAIRE', Multiplicateur d'espacement: 0,5, Direction: Augmentant vers l'intérieur
Output: IN T E R S T E L L AR
L'espacement est multiplié par 0,5, donc nous obtenons [0, 1, 1, 2, ... 2, 1, 1, 0] de la division entière; en utilisant '.':
IN.T.E..R..S...T..E..L.L.AR
Entrée : 'CODEGOLF', Multiplicateur d'écart: 2.0, Direction: Augmentation vers l'extérieur
Output: C O D E G O L F
L'espacement est multiplié par 2, augmentant vers l'extérieur, donc nous obtenons [8,6,4,2,4,6,8]; remplacer par «.»:
C........O......D....E..G....O......L........F
Entrée : 'CODEGOLF', Multiplicateur d'écart: 0,4, Direction: Augmentation vers l'extérieur
Output: C O DEGO L F
L'espacement est multiplié par 0,4, augmentant vers l'extérieur, donc nous obtenons [1,1,0,0,0,1,1]; remplacer par «.»:
C.O.DEGO.L.F
Règles
- Prend 3 entrées: chaîne, multiplicateur d'écart et direction
- Si la chaîne d'entrée est de longueur impaire (même en nombre d'espaces), par exemple 'BONJOUR', l'espacement des 2 espaces les plus intérieurs doit être le même
H E L L O
- Le multiplicateur de direction et d'écart peut être analysé comme vous le souhaitez, par exemple, vous pouvez utiliser -2 pour «augmenter vers l'intérieur avec un multiplicateur de 2», 1 pour «augmenter vers l'extérieur avec un multiplicateur de 1», etc.
- Il n'est nécessaire d'utiliser des espaces, mais c'est un bonus si le remplissage du personnage est personnalisable.
Animation de référence
Amusez-vous au golf!
Increasing
à1 => Inward, 0 => Outward
ou vice versa.C..O....D......E........G......O....L..F
Réponses:
JavaScript (ES6),
86828180 octetsUne entrée est attendue dans la syntaxe de curry
f(s)(r)
, avec:s
= chaîner
= ratio + direction: un flotteur négatif pour vers l'intérieur ou un flotteur positif pour vers l'extérieurla source
05AB1E , 33 octets
Utilise l' encodage CP-1252 .
Le multiplicateur d'écart est considéré comme négatif lorsqu'il augmente vers l'extérieur.
Essayez-le en ligne!
la source
APL, 40 octets
Cela prend la chaîne comme argument de droite, le rapport comme argument de gauche et la direction comme opérande de gauche (0 pour vers l'intérieur et 1 pour vers l'extérieur).
Explication:
⍳⍴1↓⍵
: obtenir une liste de nombres de 1 à N-1, où N est la longueur de la chaîne(⌽⌊+)
: inverser la liste, et à chaque position, obtenir le plus petit nombre des deux listes (cela donne la taille des espaces si elle augmente vers l'intérieur)(1+⌈/-+)⍣⍺⍺
: soustrayez chaque nombre de la liste du nombre le plus élevé de la liste et ajoutez 1. Effectuez cette opération plusieurs⍺⍺
fois. (Si⍺⍺=0
, rien ne se passera, et si⍺⍺=1
, cela donnera la taille des écarts si elle augmente vers l'extérieur.)-⌊⍺×
: multipliez chaque espace par⍺
, arrondissez-le vers le bas et annulez-le.∊1,⍨1,¨
: ajoutez un 1 devant chaque espace et un 1 à la fin de la liste.0~⍨
: supprime les zéros.⍵\⍨
: utilisez la liste résultante pour développer⍵
. Expand (\
) fonctionne de la manière suivante: pour chaque nombre positif, le caractère actuel est répliqué autant de fois, et pour chaque nombre négatif, que de nombreux espaces sont insérés, avec la mise en garde que0
et¯1
faire la même chose, c'est pourquoi tous les les zéros ont dû être supprimés plus tôt.la source
MATL , 31 octets
Les entrées sont: chaîne;
0
ou1
pour augmenter vers l'intérieur ou vers l'extérieur; multiplicateur.Essayez-le en ligne!
Explication
Tenez compte des entrées
'INTERSTELLAR'
,1
, à0.5
titre d'exemple.la source
Raquette 348 octets
Non golfé:
Essai:
Production:
la source
PHP, 129 octets
12 octets enregistrés par @Titus Merci
chaîne = $ argv [1], ratio = $ argv [2], direction = $ argv [3] vers l'intérieur = 0, vers l'extérieur = 1
la source
str_pad
devrait économiser 4 octets. Essayez++$i>$l?$l-$i/2:$i/2
et$t[$i++]/2
au lieu d'incrémenter en boucle post-condition; cela devrait sauver 9. Pourquoi0^
?0^3.12
Résultat @Titus3
qui est nécessaire$i=0
est inutile.++$i>
enregistre toujours un octet de plus$i++>=
. Et vous pouvez enregistrer un octet de plus en déplaçant cet incrément vers la condition préalable:++$i<2*$l=...
au lieu de$i+1<2*$l=...
, permutez les vraies et les fausses branches du ternaire externe,$i
au lieu de++$i
et$t[$i/2-.5]
au lieu de$t[$i++/2]
.1
vers l'extérieur comme2
devrait vous permettre d'économiser 3 autres octets:($l>>1)
au lieu de(0^$l/2+1)
; mais je n'ai testé aucun de ceux-ci.