Większy, lepszy (zepsuty) zamek błyskawiczny

9

(Zainspirowany tym wyzwaniem )

W oryginalnym wyzwaniu miałeś zrobić poziomy zamek, jednak patrząc na moją bluzę, mój zamek jest znacznie bardziej pionowy (i trochę zepsuty): P

Wejście

Otrzymasz pojedynczy ciąg ( s) i parę liczb całkowitych ( ai b) w dowolnym formacie. Gdzie:

a < (length-of-s / 2)

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

Wyjście i ocena

Twój program może być pełnym programem lub funkcją, która generuje pojedynczy ciąg znaków z poprawnym formatowaniem lub tablicą (jeden element w wierszu), którą wybierzesz. Wiodące i końcowe spacje i znaki nowej linii są opcjonalne, o ile znaki wyjściowe są ustawione w jednej linii. na przykład.

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

lub

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

są akceptowalnymi wyjściami dla przypadku testowego 1

Standardowe luki są zabronione, a najkrótszy kod w bajtach wygrywa. Każda odpowiedź bez wyjaśnienia nie będzie w stanie wygrać.

Wyjaśnienie

Aby utworzyć zamek błyskawiczny, musisz najpierw usunąć wszelkie białe znaki lub znaki nowej linii z łańcucha. A następnie złóż go tak na pół (więcej w przypadku testowym 1)

abcde fgh ij klmnopqr staje się dwoma ciągami poniżej, zauważ, że druga połowa jest odwrócona.

abcdefghi i rqponmlkj

Następnie, zaczynając od początku każdego łańcucha, umieszczamy ten sam indeksowany znak z każdego podłańcucha w jednym wierszu z odstępami określonymi w następujący sposób:

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

To stanowi podstawę naszego zamka błyskawicznego. Teraz liczby całkowite ai b.

ajest lokalizacja naszego zip. Aby ustalić, gdzie znajduje się zamek błyskawiczny, używamy indeksu naszych linii wyjściowych jako punktu zamknięcia naszego suwaka. np. nawias kwadratowy [3]w moim powyższym przykładzie to miejsce, w którym znajduje się zamek błyskawiczny.

Zanim nasz zamek błyskawiczny dobiegnie końca, powyższy zamek błyskawiczny musi pozostać w odstępie pięciu pól, aż osiągnie miejsce, w a-2którym zamyka się 3 pola i a-1gdzie zamyka się 1 pole. Żeby było jasne, w powyższym przykładzie a = 3(indeksowane 0)


bto liczba dziur w moim suwaku. Aby utworzyć dziurę w zamku, ponownie rozdzielamy sznurek z pewnymi odstępami.

Począwszy od wskaźnika na przykład dziury jak hmożemy zwiększyć odstęp h-1do jednego miejsca, hdo 3 miejsc i h+1z powrotem do jednej przestrzeni, pozostawiając h-2i h+2za pomocą jednego znaku w każdym wierszu, ponieważ są one liczone jako część otworu.

Po suwaku i między każdą dziurką musi znajdować się przerwa jednego znaku, aby nasz zamek wyglądał w pełni połączony między dziurami.

Możesz wybrać indeksy otworów, ale wszystkie muszą znajdować się w „zamkniętej” części zamka błyskawicznego.

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

Mam nadzieję, że wszystko ma sens, jeśli nie spytać. W oczekiwaniu na pytania możesz zauważyć, że znak pw moim drugim przykładzie jest obecny w drugim podciągu, jednak pojawia się na początku swojej linii, jest to zamierzone, musisz postępować zgodnie z sekwencją 1-2-1-2- 1-2, biorąc postać z każdej połowy po kolei, niezależnie od jej pozycji na wyjściu.

Przypadki testowe

"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
  • Kolumna 1: „głupio długi, nieprzerwany zamek błyskawiczny, który nie powinien istnieć na żadnej porządnej bluzie z kapturem”, 24, 0
  • Kolumna 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

EDYCJA: Dodano przypadki testowe

"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
źródło
1
Wydaje mi się, że podoba mi się to wyzwanie, ale przeczytałem je trzy razy i wciąż nie jestem w 100% świadomy tego, co powinienem zrobić. Myślę, że warto by zasady i specyfikacje były krótsze i jaśniejsze niż pełne akapity.
TheLethalCoder
Mogę spróbować: P
MysticVagabond
jakieś jaśniejsze? @TheLethalCoder
MysticVagabond
Cześć, usunąłem znacznik ascii do wydruku , ponieważ jest on używany w wyzwaniach o ograniczonym źródle, a nie w układzie wyjściowym.
AdmBorkBork,
Widziałem, że dzięki @AdmBorkBork ponownie edytowałem, aby alfabetycznie wyjaśnić, aby, mam nadzieję, wyjaśnić, skąd pochodzą znaki.
MysticVagabond

Odpowiedzi:

1

PHP 7.1, 421 412 218 195 192 191 195 bajtów

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

Uruchom -nrlub wypróbuj online .
Drukuje wiodącą, ale nie kończącą się nową linię i jedną wiodącą spację w każdej linii.

Tytus
źródło
TIO daje mi ten błąd:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond
@Xynos Ustaw wersję PHP na 7.1
Titus
twoja odpowiedź umieszcza dziurę zbyt blisko zamka błyskawicznego, źle dodam prawidłowe dane wyjściowe jako dane testowe :)
MysticVagabond
Luki @Xynos dodane
Titus