fundo
Comemorando o lançamento do Dyalog APL 16.0 , onde a solução para esse problema é {⊢⌺(≢⍵)⊢⍵}
Explicação
Tarefa
Dada uma cadeia ASCII imprimível de comprimento estranho n , fazer um n x n quadrado com a cadeia centrado horizontalmente, duplicado para ser centrado verticalmente, e com acrostics da mesma cadeia em cada linha e coluna. Observe que todas as cordas, exceto as centradas, serão cortadas para manter o tamanho do quadrado n × n .
A explicação do seu código será muito apreciada.
Regras
- Você pode ter espaços em branco e novas linhas à direita (isso inclui o triângulo inferior direito)
- Você pode retornar uma lista de strings
Exemplo usando a sequência ABXCD
:
n é 5. Primeiro, desenhamos as duas cordas centralizadas, uma horizontal e outra vertical:
┌─────┐ │ A │ │ B │ │ABXCD│ │ C │ │ D │ └─────┘
(Caixa delimitadora 5 × 5 adicionada para maior clareza)
Em seguida, colocamos todos os acrósticos possíveis, horizontal e verticalmente:
UMA AB ┌─────┐ │ ABX│CD │ ABXC│D │ABXCD│ A│BXCD │ AB│XCD │ └─────┘ CD D
Finalmente, retornamos apenas o que está dentro da caixa delimitadora:
ABX ABXC ABXCD BXCD XCD
Casos de teste
World
:
Wor
Worl
World
orld
rld
mississippi
:
missis
mississ
mississi
mississip
mississipp
mississippi
ississippi
ssissippi
sissippi
issippi
ssippi
Pneumonoultramicroscopicsilicovolcanoconiosis
:
Pneumonoultramicroscopi
Pneumonoultramicroscopic
Pneumonoultramicroscopics
Pneumonoultramicroscopicsi
Pneumonoultramicroscopicsil
Pneumonoultramicroscopicsili
Pneumonoultramicroscopicsilic
Pneumonoultramicroscopicsilico
Pneumonoultramicroscopicsilicov
Pneumonoultramicroscopicsilicovo
Pneumonoultramicroscopicsilicovol
Pneumonoultramicroscopicsilicovolc
Pneumonoultramicroscopicsilicovolca
Pneumonoultramicroscopicsilicovolcan
Pneumonoultramicroscopicsilicovolcano
Pneumonoultramicroscopicsilicovolcanoc
Pneumonoultramicroscopicsilicovolcanoco
Pneumonoultramicroscopicsilicovolcanocon
Pneumonoultramicroscopicsilicovolcanoconi
Pneumonoultramicroscopicsilicovolcanoconio
Pneumonoultramicroscopicsilicovolcanoconios
Pneumonoultramicroscopicsilicovolcanoconiosi
Pneumonoultramicroscopicsilicovolcanoconiosis
neumonoultramicroscopicsilicovolcanoconiosis
eumonoultramicroscopicsilicovolcanoconiosis
umonoultramicroscopicsilicovolcanoconiosis
monoultramicroscopicsilicovolcanoconiosis
onoultramicroscopicsilicovolcanoconiosis
noultramicroscopicsilicovolcanoconiosis
oultramicroscopicsilicovolcanoconiosis
ultramicroscopicsilicovolcanoconiosis
ltramicroscopicsilicovolcanoconiosis
tramicroscopicsilicovolcanoconiosis
ramicroscopicsilicovolcanoconiosis
amicroscopicsilicovolcanoconiosis
microscopicsilicovolcanoconiosis
icroscopicsilicovolcanoconiosis
croscopicsilicovolcanoconiosis
roscopicsilicovolcanoconiosis
oscopicsilicovolcanoconiosis
scopicsilicovolcanoconiosis
copicsilicovolcanoconiosis
opicsilicovolcanoconiosis
picsilicovolcanoconiosis
icsilicovolcanoconiosis
Agradecimentos
Obrigado a dzaima , Leaky Nun , Sr. Xcoder por tudo, menos pela própria idéia desse desafio.
Respostas:
Python 2 , 60 bytes
Experimente online!
fonte
MATL , 8 bytes
Experimente online!
Explicação
fonte
Retina ,
7059 bytesExperimente online! Editar: salvou 11 bytes com alguma ajuda de @MartinEnder. Explicação: O primeiro estágio repete a entrada uma vez para cada caractere, preenchendo-a adequadamente em cada linha para obter o cisalhamento. O último estágio remove 25% de cada lado para produzir o resultado desejado.
fonte
n/2
espaços à esquerda e à direita (usando algo como(..)+.
->$#1$* $&$#1$*
com um espaço à direita) e, em seguida, apenas fiz um!&`...
onde...
corresponden
exatamente aosn
caracteres.$*sp
?Java 8,
120103 bytes-17 bytes graças a @ OlivierGrégoire .
Explicação:
Experimente aqui.
fonte
i=l/2+1
ei-->1
efor(;i<l
salvar um byte.s->{int l=s.length(),i=l/2;while(i-->0)s=" "+s+" ";while(++i<l)System.out.println(s.substring(i,l+i));}
(103 bytes). A única mudança significativa é que a string com espaços é gerada de uma vez por todas em vez de "on the fly" (e, claro, a impressão em vez de retornar).Haskell,
6462 bytesExperimente online! Como funciona:
fonte
Prolog SWI, 234 bytes
Talvez tente online aqui: http://swish.swi-prolog.org/p/hEKigfEl.pl
NB.
_
aqui, pois demonstra que está funcionando e não afeta a contagem de bytes.Exemplos em execução no Swish:
Abordagem, basicamente a primeira coisa que eu poderia fazer funcionar, e sem dúvida um usuário qualificado do Prolog poderia reduzi-lo bastante:
Código explicado e comentado (pode não ser executado), lido
superacrostic()
abaixo,helper()
corpo principal ehelper()
caso base:fonte
05AB1E , 11 bytes
Experimente online!
Explicação
fonte
JavaScript (ES6), 75 bytes
fonte
APL (Dyalog Unicode) , 10 caracteres = 22 bytes
Experimente online!
{
…}
Função anônima em que o argumento é representado por ⍵⊢
fornecer a área coberta quando⌺(
...)
deslizando um estêncil de tamanho≢
Comprimento de⍵
o argumento⊢
em⍵
o argumentoA maneira como isso funciona é permitir que cada caractere forme o meio de uma string com o mesmo comprimento da entrada, preenchendo a esquerda ou a direita conforme necessário. Tome, por exemplo
ABXCD
:A sequência tem cinco caracteres, portanto, o estêncil terá uma "abertura" com cinco caracteres de largura.
┌──↓──┐
abertura do estêncil com marcador do meio,│ ABX│CD
deixeA
no meio│ ABXC│D
,B
│ABXCD|
etc.A|BXCD |
AB|XCD |
└──↑──┘
posição final do estêncilfonte
PHP , 98 bytes
Experimente online!
fonte
JavaScript (ES8),
666362 bytesRetorna uma matriz.
Tente
Explicação
Função anônima tomando a string como argumento via parâmetro
s
.Divida a sequência em uma matriz de caracteres individuais.
Obtenha o comprimento da cadeia e atribua-a à variável
l
.Mapeie a matriz, passando cada elemento por uma função, onde
x
está o índice do elemento atual.Para cada elemento, retorne a sequência original com espaços anexados até que o comprimento seja 1,5 vezes o comprimento original.
Obtenha a substring de comprimento
l
começando no índice do elemento atual.fonte
V ,
14, 11 bytesExperimente online!
3 bytes salvos graças a @nmjmcman!
Hexdump:
Abordagem original (18 bytes):
Explicação:
fonte
ê
. Obrigado :)Núcleo do PowerShell , 68 bytes
Experimente online!
Explicação ungolfed
fonte
[($_..($_+$L))]
?(
não acompanha a junção, ele-join ($Padding + $Text)[0,1,2,3,4]
seleciona vários caracteres de uma string acolchoada para uma linha de saída e une-os a uma string para ser uma maneira mais curta de fazer.SubString()
. e está gerando o preenchimento no local e o intervalo de caracteres no local. Uma explicação completa do ungolf foi adicionada à minha resposta.Japonês ,
191714 bytesEconomizou 5 bytes graças a @ETHproductions e @Shaggy
Teste online!
-R
sinalizador adicionado para ingressar em novas linhas (fins de visibilidade)Explicação
fonte
Sp½*Ul
, mas não acho que exista um atm ... BTW, você geralmente pode mudarsXX+Y
paratXY
(s == .slice
,t == .substr
)Carvão , 26 bytes
Experimente online! Link é a versão detalhada do código.
fonte
Gelatina , 11 bytes
Experimente online!
Como funciona
fonte
QBIC , 32 bytes
Cara, é hora de eu adicionar
space$
ao QBIC ...Explicação
Amostra de execução
fonte
Mathematica, 88 bytes
fonte
Haskell ,
8670 bytesIsso ainda é muito longo, mas obrigado @bartavelle por me lembrar que a saída de uma lista de strings também é aceitável!
Experimente online!
fonte
Python 3 , 68 bytes
Experimente online!
fonte
PowerShell ,
133119 bytesExperimente online!
Ungolfed
fonte
Python 2 ,
76 7473 bytes-1 graças a @FelipeNardiBatista
Obviamente, não é tão curto quanto a outra resposta do Python, mas vale a pena tentar um método completamente diferente:
Experimente online!(com a versão de 74 bytes)
Isso primeiro gera a seqüência completa e, em seguida, a divide para caber no quadrado.
Explicação
fonte
(2*x+~i)
salvar um byteJ , 19 bytes
Experimente online!
Explicação
fonte
''
como substituto.C # (.NET Core) , 101 bytes
Basicamente, a resposta de @ KevinCruijssen. Salva 2 bytes porque
string.Length
não precisa () e outros 2 bytes porque o segundo argumentostring.Substring()
é comprimento, em vez de finalizar Índice, mas perde 2 bytes porqueConsole.WriteLine()
é mais longo. Eu tive uma implementação mais ingênua, mas tinha o dobro do tempo, então ...fonte
Excel VBA, 68 bytes
Golfe
Função de janela imediata VBE anônima que recebe entrada da célula
[A1]
e sai para a janela imediata VBEUngolfed
fonte
Perl 5 , 53 + 1 (
-n
) = 54 bytesExperimente online!
fonte