Fermeture éclair plus grande et meilleure (cassée)

9

(Inspiré assez fortement par ce défi )

Dans le défi d'origine, vous deviez faire une fermeture à glissière horizontale, cependant, en regardant mon sweat à capuche, ma fermeture à glissière est beaucoup plus verticale (et un peu cassée): P

Contribution

Vous recevrez une seule chaîne ( s) et une paire d'entiers ( aet b) dans n'importe quel format. Où:

a < (length-of-s / 2)

b <= ((length-of-s / 2) - (a + 1)) / 6

Sortie et notation

Votre programme peut être un programme complet ou une fonction qui produit une seule chaîne avec la mise en forme correcte ou un tableau (un élément par ligne) que vous choisissez. Les espaces de début et de fin et les sauts de ligne sont facultatifs tant que les caractères de la sortie sont tous alignés. par exemple.

["f     r"],["u     e"],["l     p"],["l     p"],["y     i"],[" o   z "],["  p n  "],["   e   "]

ou

"f     r\nu     e\nl     p\nl     p\ny     i\n o   z \n  p n  \n   e   "

sont des sorties acceptables pour le cas de test 1

Les failles standard sont interdites et le code le plus court en octets l'emporte. Toute réponse sans explication ne pourra pas gagner.

Explication

Pour créer une fermeture éclair, vous devez d'abord supprimer les espaces ou les caractères de nouvelle ligne de la chaîne. Et puis pliez-le en deux comme ça (voir le cas de test 1 pour plus)

abcde fgh ij klmnopqr devient les deux chaînes ci-dessous, notez que la seconde moitié est inversée.

abcdefghi et rqponmlkj

Ensuite, en commençant au début de chaque chaîne, nous plaçons le même caractère indexé de chaque sous-chaîne sur une ligne avec l'espacement déterminé comme suit:

[0] a     r -- (a-3) five spaces
[1]  b   q  -- (a-2) three spaces
[2]   c p   -- (a-1) one space
[3]    d    -- (a)
[4]    o
[5]    e
[6]    n
etc...

Cela fait la base de notre fermeture éclair. Maintenant, les entiers aet b.

aest l'emplacement de notre zip. Pour déterminer où se trouve la fermeture éclair, nous utilisons l'index de nos lignes de sortie comme point de fermeture de notre fermeture éclair. par exemple, le carré entre crochets [3]dans mon exemple ci-dessus est l'endroit où se trouve le zip.

Avant que notre fermeture à glissière n'atteigne une fermeture, la fermeture à glissière ci-dessus doit rester à un espace de cinq espaces jusqu'à ce qu'elle atteigne a-2où elle se ferme à 3 espaces et a-1où elle se ferme à 1 espace. Juste pour être clair, dans l'exemple ci-dessus a = 3(indexé 0)


best le nombre de trous dans ma fermeture éclair. Pour créer un trou dans le zip, nous avons à nouveau divisé la chaîne avec un certain espacement.

En commençant par l'index du trou d'exemple lorsque hnous augmentons l'espacement d' h-1un espace, hà 3 espaces et de h+1retour à un espace, en laissant h-2et h+2avec un seul caractère par ligne car ils sont comptés comme faisant partie du trou.

Après le zip et entre chacun des trous, il doit y avoir un espace d'un caractère afin que notre zip semble entièrement connecté entre les trous.

Vous pouvez choisir les index des trous, mais ils doivent tous être présents dans la section «fermée» de la fermeture éclair.

Again using 'abcdefghi' and 'rqponmlkj'

[0] a     r -- (open)
[1]  b   q  -- (closing)
[2]   c p   -- (closing)
[3]    d    -- zip 
[4]    o    -- gap
[5]    e    -- start of hole  (h-2)
[6]   n f   -- one space      (h-1)
[7]  m   g  -- three spaces   (hole h)
[8]   l h   -- one space      (h+1)
[9]    k    -- end of hole    (h+2)
[10]   i    -- gap
[11]   j

J'espère que tout a du sens, sinon demandez loin. En prévision de questions, vous remarquerez peut-être que le personnage pde mon deuxième exemple est présent dans la deuxième sous-chaîne, cependant, apparaît au début de sa ligne, cela est prévu, vous devez suivre la séquence de 1-2-1-2- 1-2, en prenant tour à tour un personnage de chaque moitié quelle que soit sa position dans la sortie.

Cas de test

"fully open zipper", 7, 0                     | "fully closed zipper", 0, 0
fullyope reppizn                              | fullyclos reppizde
                                              |
f     r   *Note: i particularly like this     | f
u     e     example as it shows the reversing | r
l     p     of the second half of the string  | u
l     p     causes the words to wrap from top | e
y     i     left to the  bottom and back up   | l
 o   z      the right side                    | p
  p n                                         | l
   e                                          | p
                                              | y
                                              | i
                                              | c
                                              | z
                                              | l
                                              | d
                                              | o
                                              | e
                                              | s
  • Colonne 1: "Fermeture à glissière ininterrompue stupidement longue qui ne devrait pas exister sur un sweat à capuche décent", 24, 0
  • Colonne 2: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris faucibus molestie mi. Aliquam nec fringilla ipsum", 15, 5

:

s     e          |          L     m
t     i          |          o     u
u     d          |          r     s
p     o          |          e     p
i     o          |          m     i
d     h          |          i     a
l     t          |          p     l
y     n          |          s     l
l     e          |          u     i
o     c          |          m     g
n     e          |          d     n
g     d          |          o     i
u     y          |          l     r
n     n          |           o   f
b     a          |            r c
r     n          |             s
o     o          |             e
k     t          |             i
e     s          |            n t
n     i          |           m   a
z     x          |            a m
i     e          |             u
 p   t           |             e
  p n            |             q
   e             |             t
   d             |             i
   r             |             ,
   l             |            l c
   t             |           A   o
   u             |            . n
   h             |             i
   o             |             s
   a             |             m
   h             |            e e
   t             |           c   i
   s             |            t t
                 |             e
                 |             s
                 |             t
                 |             s
                 |             u
                 |             l
                 |             r
                 |             o
                 |             a
                 |             m
                 |             d
                 |             s
                 |             i
                 |             u
                 |             p
                 |            b i
                 |           i   s
                 |            c c
                 |             u
                 |             i
                 |             a
                 |             n
                 |             f
                 |             g
                 |             s
                 |             e
                 |             i
                 |            l r
                 |           i   u
                 |            t a
                 |             .
                 |             M

EDIT: cas de test ajoutés

"abcde fgh ij klmnopqr","3","1"

a     r
 b   q
  c p
   d
   o
   e
  n f
 m   g
  l h
   k
   i
   j
MysticVagabond
la source
1
Je pense que j'aime ce défi mais je l'ai lu trois fois et je ne suis toujours pas à 100% exactement sur ce que je suis censé faire. Je pense qu'il vaudrait la peine de rendre les règles et les spécifications plus courtes et plus claires plutôt que des paragraphes complets.
TheLethalCoder
Je peux
essayer
plus clair? @TheLethalCoder
MysticVagabond
Bonjour, j'ai supprimé la balise imprimable-ascii , car elle est utilisée pour les défis de source restreinte plutôt que pour la mise en page de sortie.
AdmBorkBork
J'ai vu que grâce à @AdmBorkBork, j'ai édité à nouveau pour alphabétiser l'explication afin, espérons-le, de voir plus clairement d'où viennent les personnages.
MysticVagabond

Réponses:

1

PHP 7.1, 421 412 218 195 192 191 195 octets

for([,$s,$a,$b]=$argv;$i-$k<strlen($s=strtr($s,[" "=>""]));$p=0)for($t=++$y>$a-2?$y>=$a?$y>$a?$b-->0?_4_4_4_31_23_31:_4:_31:_23:_15;$c=$t[$p++];)echo$c<_?str_pad("",$c).$s[++$f&1?$i++:$k-=1]:"
";

Courez avec -nrou essayez-le en ligne .
Imprime une nouvelle ligne de début mais pas de fin et un espace de début dans chaque ligne.

Titus
la source
TIO me donne cette erreur:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond
@Xynos Réglez la version PHP sur 7.1
Titus
votre réponse place le trou trop près du zip, mal ajouter la sortie correcte pour votre entrée comme cas de test :)
MysticVagabond
@Xynos lacunes ajoutées
Titus