(Inspirado fortemente por este desafio )
No desafio original, você deveria fazer um zíper horizontal; no entanto, olhando para o meu casaco, meu zíper é muito mais vertical (e um pouco quebrado): P
Entrada
Você receberá uma única string ( s
) e um par de números inteiros ( a
e b
) em qualquer formato. Onde:
a < (length-of-s / 2)
b <= ((length-of-s / 2) - (a + 1)) / 6
Saída e Pontuação
Seu programa pode ser um programa completo ou uma função que produz uma única seqüência de caracteres com a formatação correta ou uma matriz (um item por linha) que você escolher. Os espaços à esquerda e à direita e as novas linhas são opcionais, desde que os caracteres da saída estejam alinhados. por exemplo.
["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 "
são saídas aceitáveis para o caso de teste 1
As brechas padrão são proibidas e o código mais curto em bytes vence. Qualquer resposta sem explicação não será capaz de vencer.
Explicação
Para criar um zíper, você deve primeiro remover os caracteres de espaço em branco ou nova linha da sequência. E, em seguida, dobre-o ao meio dessa maneira (consulte o caso de teste 1 para obter mais informações)
abcde fgh ij klmnopqr
se torna as duas cordas abaixo, observe que a segunda metade está invertida.
abcdefghi
e rqponmlkj
Em seguida, começando no início de cada string, colocamos o mesmo caractere indexado de cada substring em uma linha com o espaçamento determinado da seguinte forma:
[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...
Isso faz a base para o nosso zíper. Agora os números inteiros a
e b
.
a
é a localização do nosso zip. Para determinar onde o zíper está localizado, usamos o índice de nossas linhas de saída como o ponto para fechar nosso zip. por exemplo, o quadrado entre colchetes [3]
no exemplo acima é onde está o zíper.
Antes que nosso zíper chegue ao fim, o zíper acima deve permanecer em um espaço de cinco espaços até chegar a a-2
onde se fecha para 3 espaços e a-1
onde se fecha a 1 espaço. Só para esclarecer, no exemplo acima a = 3
(indexado 0)
b
é o número de buracos no meu zíper. Para criar um buraco no zíper, dividimos a corda novamente com algum espaçamento.
Começando com o índice do furo de exemplo, à medida h
que aumentamos o espaçamento de h-1
para um espaço, h
para 3 espaços e de h+1
volta para um espaço, deixando h-2
e h+2
com apenas um caractere por linha, à medida que são contados como parte do furo.
Após o zip e entre cada um dos orifícios, deve haver um espaço de um caractere para que nosso zip pareça totalmente conectado entre os orifícios.
Você escolhe os índices dos furos, mas todos devem estar presentes na seção 'fechada' do zíper.
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
Espero que tudo faça sentido, se não perguntar. Na antecipação de perguntas, você pode perceber que o caractere p
no meu segundo exemplo está presente na segunda substring, no entanto, aparece no início de sua linha, isto é pretendido, você deve seguir a sequência de 1-2-1-2- 1-2, pegando um caractere de cada meia vez, independentemente de sua posição na saída.
Casos de teste
"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
- Coluna 1: "zíper estupidamente longo e inquebrável que não deveria existir em nenhum moletom decente", 24, 0
- Coluna 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: casos de teste adicionados
"abcde fgh ij klmnopqr","3","1"
a r
b q
c p
d
o
e
n f
m g
l h
k
i
j
Respostas:
PHP 7.1,
421 412 218 195 192 191195 bytesCorra com
-nr
ou experimente online .Imprime uma nova linha à esquerda, mas não à direita, e um espaço à esquerda em cada linha.
fonte
<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />