Hoje, seu desafio é pegar uma sequência de múltiplas linhas e gerar o quadrado maior contido na sequência que inclui o canto superior esquerdo.
Uma cadeia quadrada é aquela em que:
- Cada linha tem o mesmo número de caracteres
- O número de caracteres em cada linha é igual ao número de linhas.
Considere a seguinte sequência de entrada possível:
abcde
fgh
asdf
foobar
O maior quadrado que você pode extrair dele que inclui o primeiro caractere (o a
no canto do pé) é este:
abc
fgh
asd
Não pode haver um quadrado de comprimento lateral 4, porque a segunda linha não é longa o suficiente. Agora considere esta entrada em potencial:
a
bcd
edf
ghi
A maior praça aqui é justa a
. O quadrado 3x3 formado na parte inferior não contém o primeiro caractere e não conta.
Aqui estão mais alguns casos de teste:
a
a
abc
def
gh
ab
de
ab
cd
ab
cd
abcde
fghij
klm
no
abc
fgh
klm
a
b
a
Você pode exigir que a entrada seja delimitada por sua escolha de LF, CR ou CRLF.
Os caracteres da nova linha não são considerados parte do comprimento da linha.
Você pode exigir que exista ou não uma nova linha à direita na entrada, que não conta como uma linha adicional.
Input é uma string ou um array de caracteres 1D; não é uma lista de strings.
Você pode assumir que a entrada não está vazia e que todas as linhas não estão vazias, e que ela contém apenas ASCII imprimível, incluindo espaços e novas linhas (para o delimitador de linha), mas não as guias.
Isso é código-golfe , o menor número de bytes vence!
.split('\n')
então não vejo por que alguns deveriam obtê-la gratuitamente.Respostas:
Braquilog , 11 bytes
Experimente online!
Explicação
fonte
ṁ
built-in é realmente bastante útil!Casca , 13 bytes
Experimente online!
Explicação
fonte
GNU sed ,
106 + 194 + 2 = 96 bytes+2 bytes para
-rz
sinalizadores. Usa caracteres não imprimíveis NUL e BEL, mostrados como@
e#
aqui. Veja abaixo um despejo xxd.Obrigado a @seshoumara por me enviar o caminho para
-z
.Experimente online!
Explicação
Isso funciona inserindo dois cursores no texto - um para passar por cima de linhas e outro para passar por cima de colunas. Os cursores são representados por NUL (0x00) e BEL (0x07), respectivamente, mas nos exemplos abaixo vou usar
@
e#
. Suponha que tenhamos esta entrada:O cursor BEL é inserido antes da coluna 0 e o cursor BEL antes da linha 0 (aqui mantive as colunas alinhadas para facilitar a legibilidade; mas, na realidade, não há preenchimento esquerdo):
Em um loop, os cursores são movidos um caractere para a direita e uma linha para baixo, respectivamente:
Após cada iteração, ele verifica duas condições:
Se uma das condições for falsa, o loop termina. O script termina excluindo tudo depois
@
de cada linha e tudo depois#
no espaço do padrão.despejo xxd
fonte
line1\nline2\nline3
where\n
is\x5C\x6E
? Qual?\n
são interpretadas como um caractere de nova linha (\x0A
, não\x5C\x6E
) e não consigo encontrar uma maneira de fazer com que o sed receba a entrada com caracteres de nova linha como uma única linha.-z
bandeira. Obrigado!Python 2 , 81 bytes
Experimente online!
Um método interessante, mas com 2 bytes a mais.
Python 2 , 83 bytes
Experimente online!
fonte
input
lê apenas uma linha?raw_input()
adicionaria mais bytes.JavaScript (ES6), 77 bytes
Recursivamente usa uma expressão regular para procurar um quadrado cada vez maior até que nenhum seja encontrado.
A expressão regular seria esta para um quadrado 3x3:
A entrada deve terminar com uma nova linha e a saída é uma lista.
Explicação:
Snippet:
Mostrar snippet de código
fonte
Braquilog , 16 bytes
Experimente online!
fonte
Perl 5 , 84 bytes
Experimente online!
Cumpre o
"abcde\nfghij\nklm\nno"
caso de teste.fonte
chop
em vez dechomp
e++$i<@a
em vez de$i++<$#a
R ,
84838176 bytes-5 bytes, portando a abordagem de Dennis com
sum
Experimente online!
lê de stdin, imprime em stdout sem uma nova linha à direita.
Ligeiramente não destruído:
fonte
C (gcc) ,
162159151147144142137 bytesDeve haver alguns cursos para jogar golfe aqui ...
Experimente online!
fonte
!=-1
ser>-1
ou nãogetchar()
valores de saída menor do que um menos? Poderia mesmo ser+1
?~
para detectar menos um.Gelatina , 15 bytes
Experimente online!
Como funciona
fonte
Java 8, 150 bytes
Explicação:
Experimente aqui.
fonte
MATL , 33 bytes
Experimente online!
Meu senso de aranha me diz que provavelmente há uma maneira mais curta (estou pensando em algo
Ybo
certo desde o início) ... Requer uma nova linha no final. (Observação: eu projetei demais isso um pouco, pois isso também manipula linhas vazias, o que não é necessário. Vou ver se consigo reduzir o número de bytes, porque no código golf, não é um recurso, mas um bug)fonte
Python 2 , 132 bytes
Experimente online!
fonte
Python 2 , 103 bytes
Experimente online!
fonte
JavaScript (ES6), 95 bytes
Requer uma nova linha à direita na entrada.
fonte
Wolfram Language (Mathematica) , 81 bytes
Experimente online!
fonte
APL (Dyalog) , 25 bytes *
Função de prefixo tácito. Retorna uma matriz.
Experimente online!
É realmente o topo de duas funções independentes, a saber,
⎕AV[3]∘≠⊆⊢
que trata do formato de entrada estranho e↑↑⍨2⍴(⌊/≢,≢¨)
que faz o trabalho realmente interessante.⎕AV[3]∘≠
diferença de LF (o terceiro elemento da Um Tomic V ector - o conjunto de caracteres)⊆
partições (substrings começando com valores maiores que seu antecessor e caindo em 0s)⊢
o argumento(
…)
Aplique a seguinte função tácita:2⍴(
…)
Remodelar o seguinte para o comprimento 2:⌊/
o mínimo de≢
o número de strings,
Seguido por≢¨
o número de caracteres em cada sequência↑⍨
pegue tantas linhas e colunas de↑
as cordas misturadas para formar uma matriz (preenchimento com espaços)* No clássico com
⎕ML
( M igration L evel)3
(padrão em muitos sistemas) e substituindo⊂
por⊆
e⊃
para o mais à esquerda↑
. Tio!fonte
⎕ML←3
estão obsoletos, então eu prefiro mostrar o idioma como ele normalmente aparece. De fato, quase todas as minhas soluções Dyalog APL assumem o Classic apenas porque contamos bytes em vez de caracteres, embora até a versão Unicode atribua significado a menos de 256 caracteres.PHP, 123 bytes
requer PHP 5.4, 5.5 ou 5.6. Substituir
split
porexplode
para o PHP posterior.Corra com
php -nr '<code> '<string>'
ou experimente online . (Certifique-se de selecionar uma versão adequada do PHP!)
fonte
Haskell ,
9288 bytesExperimente online!
fonte
Perl 5, 60 +5 (-0777p) bytes
Experimente online
fonte
-0777
. O que fazer-00
e-0777
fazer, de qualquer maneira.-0
é especificar o separador de registro em formato octal777
é um valor especial para indicar nenhum separador assim todo o arquivo é lido,0
é outro valor especial para indicar "modo de parágrafo", separador é mais do que 1 novas linhas consecutivasPerl 6 ,
158140 bytesExperimente online!
Viva minha primeira resposta em Perl 6. Vou brincar com algumas opções de linha de comando para ver se consigo jogar um pouco mais. Toda ajuda para salvar bytes é bem-vinda!
fonte
Scala , 201 bytes
Experimente online!
Golfe pela primeira vez nesse idioma, talvez não seja o melhor.
fonte