(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 ( a
und 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 a
und b
.
a
ist 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-2
wo er sich auf drei Felder a-1
schließt und wo er sich auf 1 Feld schließt. Nur um klar zu sein, im obigen Beispiel a = 3
(0-indiziert)
b
ist 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 h
wir den Abstand zu erhöhen , h-1
um einen Raum, h
3 Räume und h+1
zurück zu einem Raum, so dass h-2
und h+2
mit 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 p
in 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
Antworten:
PHP 7.1,
421 412 218 195 192 191195 BytesLaufen Sie mit
-nr
oder versuchen Sie es online .Druckt eine führende, aber keine nachfolgende neue Zeile und ein führendes Leerzeichen in jeder Zeile.
quelle
<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />