Größerer, besserer (gebrochener) Reißverschluss

9

(Inspiriert ziemlich stark von dieser Herausforderung )

Bei der ursprünglichen Herausforderung war es, einen horizontalen Reißverschluss herzustellen. Wenn Sie jedoch auf meinen Hoodie hinunterblicken, ist mein Reißverschluss viel vertikaler (und etwas gebrochen): P.

Eingang

Sie erhalten eine einzelne Zeichenfolge ( s) und ein Paar Ganzzahlen ( aund b) in einem beliebigen Format. Wo:

a < (length-of-s / 2)

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

Ausgabe und Wertung

Ihr Programm kann ein vollständiges Programm oder eine Funktion sein, die eine einzelne Zeichenfolge mit der richtigen Formatierung oder ein von Ihnen ausgewähltes Array (ein Element pro Zeile) erzeugt. Führende und nachfolgende Leerzeichen und Zeilenumbrüche sind optional, solange die Zeichen der Ausgabe alle übereinstimmen. z.B.

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

oder

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

sind akzeptable Ausgaben für Testfall 1

Standardlücken sind verboten und der kürzeste Code in Bytes gewinnt. Eine Antwort ohne Erklärung kann nicht gewinnen.

Erläuterung

Um einen Reißverschluss zu erstellen, müssen Sie zuerst Leerzeichen oder Zeilenumbrüche aus der Zeichenfolge entfernen. Und dann falten Sie es wie folgt in zwei Hälften (siehe Testfall 1 für mehr)

abcde fgh ij klmnopqr wird die beiden Zeichenfolgen unten, beachten Sie, dass die zweite Hälfte umgekehrt ist.

abcdefghi und rqponmlkj

Dann setzen wir ab dem Beginn jeder Zeichenfolge das gleiche indizierte Zeichen aus jeder Teilzeichenfolge auf eine Zeile, wobei der Abstand wie folgt bestimmt wird:

[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...

Das macht die Basis für unseren Reißverschluss. Nun die ganzen Zahlen aund b.

aist der Ort unserer Postleitzahl. Um festzustellen, wo sich der Reißverschluss befindet, verwenden wir den Index unserer Ausgangslinien als Punkt, um unseren Reißverschluss zu schließen. In der eckigen Klammer [3]in meinem obigen Beispiel befindet sich beispielsweise der Reißverschluss.

Bevor unser Reißverschluss zu Ende geht, muss der obige Reißverschluss in einem Abstand von fünf Feldern bleiben, bis er dort erreicht, a-2wo er sich auf drei Felder a-1schließt und wo er sich auf 1 Feld schließt. Nur um klar zu sein, im obigen Beispiel a = 3(0-indiziert)


bist die Anzahl der Löcher in meinem Reißverschluss. Um ein Loch im Reißverschluss zu erzeugen, teilen wir die Schnur mit einem gewissen Abstand wieder auf.

Beginnend mit dem Index des Beispiel Loches als hwir den Abstand zu erhöhen , h-1um einen Raum, h3 Räume und h+1zurück zu einem Raum, so dass h-2und h+2mit nur einem Zeichen pro Zeile , wie sie als Teil des Lochs gezählt.

Nach dem Reißverschluss und zwischen jedem der Löcher muss eine Lücke von einem Zeichen vorhanden sein, damit unser Reißverschluss zwischen den Löchern vollständig verbunden aussieht.

Sie können die Indizes der Löcher auswählen, diese müssen jedoch alle im geschlossenen Bereich des Reißverschlusses vorhanden sein.

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

Ich hoffe, dass alles Sinn macht, wenn nicht weg fragen. Im Vorgriff auf Fragen stellen Sie möglicherweise fest, dass das Zeichen pin meinem zweiten Beispiel in der zweiten Teilzeichenfolge vorhanden ist. Es wird jedoch am Anfang der Zeile angezeigt. Dies ist beabsichtigt. Sie müssen die Reihenfolge von 1-2-1-2- befolgen. 1-2, wobei ein Zeichen aus jeder Hälfte der Reihe nach genommen wird, unabhängig von seiner Position in der Ausgabe.

Testfälle

"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
  • Spalte 1: "dumm langer, ungebrochener Reißverschluss, der auf keinem anständigen Hoodie existieren sollte", 24, 0
  • Spalte 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

BEARBEITEN: Testfälle hinzugefügt

"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
quelle
1
Ich denke, ich mag diese Herausforderung, aber ich habe sie dreimal gelesen und bin immer noch nicht zu 100% bei dem, was ich tun soll. Ich denke, es lohnt sich, die Regeln und Spezifikationen kürzer und klarer zu gestalten als vollständige Absätze.
TheLethalCoder
Ich kann es
versuchen
etwas klarer? @ TheLethalCoder
MysticVagabond
Hallo, ich habe das printable-ascii- Tag entfernt, da es eher für Herausforderungen mit eingeschränkten Quellen als für das Ausgabelayout verwendet wird.
AdmBorkBork
Ich habe gesehen, dass ich dank @AdmBorkBork die Erklärung erneut alphabetisch bearbeitet habe, um hoffentlich klarer zu machen, woher die Zeichen kommen.
MysticVagabond

Antworten:

1

PHP 7.1, 421 412 218 195 192 191 195 Bytes

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]:"
";

Laufen Sie mit -nroder versuchen Sie es online .
Druckt eine führende, aber keine nachfolgende neue Zeile und ein führendes Leerzeichen in jeder Zeile.

Titus
quelle
TIO gibt mir diesen Fehler:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond
@ Xynos Stellen Sie die PHP-Version auf 7.1
Titus
Ihre Antwort platziert das Loch zu nahe am Reißverschluss,
ich
@ Xynos Lücken hinzugefügt
Titus