Introdução
Às vezes, minhas caixas são pequenas demais para caber em qualquer coisa. Eu preciso que você faça um expansor de caixa! Então, o que faz de uma caixa uma caixa nesse desafio.
OOOO
O O
O O
O O
OOOO
Os cantos da caixa são sempre espaços. A própria caixa pode ser feita com o mesmo caractere. Esse caractere pode ser qualquer caractere ASCII imprimível , exceto um espaço. Então, esses são os caracteres:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Os comprimentos laterais da caixa acima são 4, 3 . Você pode assumir que o comprimento do lado é sempre positivo . Isso significa que esta é a menor caixa que você precisa manusear:
#
# #
#
Para expandir uma caixa, você precisa incrementar o comprimento de cada lado. Vamos passar por isso, passo a passo, com o exemplo acima. Primeiro, pegamos o lado superior da caixa, que é:
OOOO
Expandimos isso em um, obtendo:
OOOOO
Esta é a parte superior e inferior da caixa agora. Depois disso, fazemos o mesmo com os lados à esquerda e à direita:
O
O
O
Torna-se:
O
O
O
O
Agora montamos novamente a caixa, que resulta em:
OOOOO
O O
O O
O O
O O
OOOOO
A tarefa
Dada uma caixa, expanda-a por 1. A caixa pode ser fornecida em várias linhas ou em uma matriz.
Casos de teste
OOOO OOOOO
O O > O O
OOOO O O
OOOOO
XXXXXX XXXXXXX
X X > X X
X X X X
XXXXXX X X
XXXXXXX
~ ~~
~ ~ > ~ ~
~ ~ ~
~~
Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
Respostas:
V ,
65 bytesExperimente online!
Na verdade, é um byte mais longo do que deveria. Deveria ter sido:
Mas isso tem um erro desconhecido. :(
Explicação:
fonte
ä
é o operador duplicado (essencialmente "y" e "p" em conjunto em um byte) de modoäê
é "coluna duplicado"Vim, 7 bytes
onde ♥ é Control-V.
fonte
YP
dois momentos para obter consistência?p
durante a gravação da animação, então fiquei com ela ao transcrever a resposta. Isso importa? > _>;<C-v> G
eYP
. Isso faz meu idioma parecer barato. : /JavaScript (ES6),
575352 bytesExplicação: O primeiro regexp duplica a segunda coluna e o segundo regexp duplica a segunda linha, ampliando a caixa conforme desejado. Editar: salvou 4 bytes graças ao MartinEnder ♦.
fonte
Python,
4942 bytesLambda anônima:
-7 de xnor
Versão anterior:
D é uma função que duplica o segundo item de uma sequência.
fonte
lambda L:[s[:2]+s[1:]for s in L[:2]+L[1:]]
.map(D,D(s))
daria 43 vezRetina , 20 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Experimente online! (Existem várias linhas adicionais que permitem um conjunto de testes em que os casos de teste são separados por dois feeds de linha.)
Explicação
1
é um limite que restringe a Retina a aplicar a substituição apenas na primeira correspondência encontrada.¶
corresponde a um único avanço de linha, portanto, precisamos considerar apenas a substituição do avanço de linha no final da primeira linha. É substituído por¶$%'¶
, onde$%'
insere toda a linha após a correspondência (um elemento de substituição específico da Retina). Portanto, isso duplica a segunda linha.Aqui,
%
é o modo por linha, para que cada linha seja processada individualmente e as linhas sejam unidas novamente depois.2=
também é um limite. Este significa "aplicar a substituição apenas ao segundo jogo". A partida em si é simples, um único caractere e a substituição a duplica. Portanto, esse estágio duplica a segunda coluna.fonte
Haskell, 24 bytes
Usa a idéia do RootTwo de duplicar a segunda linha e coluna. O
map f
faz isso para cada linha e of.
faz para as linhas.fonte
PowerShell v2 +,
575352 bytesUm pouco semelhante à resposta JavaScript de Neil . A primeira substituição corresponde ao início da linha e aos próximos dois caracteres e os substitui pelo primeiro caractere e pelo segundo caractere duas vezes. Em vez de uma segunda substituição, ela foi trocada pela indexação de matriz para duplicar a segunda linha. Recebe entrada como uma matriz de seqüências de caracteres. As fatias da matriz resultantes são deixadas no pipeline e a impressão é implícita.
Economizou 4 bytes graças a Martin.
Alguns exemplos:
fonte
Braquilog ,
2826 bytes2 bytes graças a Fatalize.
Experimente online!
fonte
MATL , 12 bytes
A entrada é uma matriz de caracteres 2D, com ponto e vírgula como separador de linhas. Por exemplo, o primeiro caso de teste tem entrada
Experimente online! Casos de teste 1 , 2 , 3 .
Explicação
O código faz o seguinte duas vezes: repita a segunda linha da matriz e transponha.
Para repetir a segunda linha de uma matriz
m
×n
, o vetor[1 2 2 3 ... m]
é usado como índice de linha. Esse vetor é gerado da seguinte maneira: range[1 2 3 ... m]
, anexar outro2
, classificar.fonte
Pitão , 10 bytes
Experimente online!
fonte
SED
69 19(14 + 1 para -r) 15fonte
/.\(.\)/\0\1;2p
?2p
, achei que havia uma maneira de fazer isso, mas não consegui encontrá-lo. Obrigado!\0
, pois eles começam em 1. O manual on-line do GNU sed não fala nada disso. No entanto, o uso&
é equivalente e mais curto.\0
então?CJam , 14 bytes
Semelhante à minha resposta MATL , mas repete a segunda e última linha em vez da segunda.
Experimente online!
Explicação
fonte
K, 15 bytes
Recebe entrada como uma matriz de caracteres:
Aplique uma função duas vezes (
2{…}/
) que forneça a transposição (+
) do argumento correto indexado (x@
) pela decodificação incremental do comprimento de execução (&
) de um mais (1+
) uma lista dos locais iguais a 1 (1=
) no intervalo de 0 a (!
) o tamanho da dimensão externa do argumento correto (#x
).Passo a passo,
Experimente aqui com oK.
fonte
APL,
1715 bytesTeste:
Explicação:
fonte
⌽⍉
ou⊖⍉
, mas, neste caso, não importa.ListSharp , 326 bytes
Eu definitivamente preciso adicionar o aninhamento de funções, mas isso funciona muito bem
comente se você quiser uma explicação
fonte
JavaScript,
160146141 bytesfonte
Dyalog APL , 14 bytes
Por exemplo, para
nós encontramos os índices; {1, 2, 3} para as linhas e {1, 2, 3, 4} para as colunas. Agora, eliminamos os elementos iniciais para obter {2, 3} e {2, 3, 4} e, em seguida, acrescentamos com {1, 2}, fornecendo {1, 2, 2, 3} e {1, 2, 2, 3, 4}. Por fim, usamos isso para selecionar linhas e colunas, duplicando simultaneamente as linhas 2 e 2.
TryAPL online!
fonte
Ruby, 46 bytes
Solução muito simples, tendo como entrada uma matriz de linhas. Eu não gosto de
insert
s duplicados , então vou tentar jogar golfe.fonte
C #,
127124 bytesCompila para um
Func<List<string>, List<string>>
.Versão formatada:
fonte