Uma cadeia de caracteres é considerada quadrada se as seguintes condições forem atendidas:
- Cada linha tem o mesmo número de caracteres
- O número de caracteres em cada linha é igual ao número de linhas.
Sua tarefa é escrever um programa ou função que determine se uma determinada sequência de entrada é ou não um quadrado.
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 contém apenas ASCII imprimível, incluindo espaços.
Você deve gerar um valor de verdade para cadeias de caracteres quadradas e um valor falso para outras cadeias de caracteres.
Casos de teste de verdade:
foo Barra baz
.
.s. .ss .s. (s representa espaço)
ss ss (s representa espaço)
aaaaa aaaaa aaaaa aaaaa aaaaa
Casos de teste de falsidade:
.. .
.
.
.... ....
4444 333 22
333 333
abc.def.ghi
Observe linhas em branco extras em alguns casos de falsificação.
Isso é código-golfe - o menor número de bytes vence!
Respostas:
Braquilog (2), 3 bytes
Experimente online!
Programa completo. Saídas
true.
para verdade,false.
para falsey.Explicação
Fiquei um pouco cético sobre a utilidade do
ṁ
built-in quando foi adicionado, mas não posso negar que é útil aqui ...Braquilog (2), 7 bytes
Experimente online!
Solução não embutida.
Ainda supera todas as outras entradas, até o momento da redação.EDIT: Não é bem assim, a entrada Jelly de mesmo tamanho entrou enquanto eu escrevia isso e a superava através do tiebreak de timestamp.Explicação
fonte
ṁ
= "Afirme que o resultado é quadrado" :(.\l~l
na época, exceto que o comando de barra invertida, que entre outras coisas afirma que sua entrada é um retângulo , foi quebrado; note que, mesmo se substituirmosṁ
por.\l~l
, este ainda é o programa mais curto aqui; pense nisso, acrescentarei isso ao post). O comando barra invertida foi corrigido, mas o autor do idioma decidiu adicionar um quadrado de afirmação ao mesmo tempo. Eu estava pensando "certamente isso nunca vai aparecer novamente". Aparentemente eu estava errado.Python 2 , 52 bytes
Experimente online! ou Experimente todos os casos de teste
fonte
'\n'
, apenas deixe em branco (já que não há espaços e tabulações na entrada).JavaScript (ES6),
4645 bytesExplicação
true
quadrado e ofalse
não.Tente
fonte
s=>!(s=s.split`\n`).some(x=>x.length-s.length)
!some
imediatamente, simplesmente porque é do mesmo tamanho queevery
.05AB1E ,
108 bytesExperimente online!
-2 Graças a Riley, esta é basicamente a resposta dele.
fonte
s
. Assim¶¡€gDgQP
Geléia ,
75 bytesExperimente online!
Agradecimentos a FryAmTheEggman por -2
fonte
Haskell,
3834 bytesExperimente online!
Versão sem pontos
f s = all ((==length (lines s)).length) (lines s)
, ou seja, divida a entrada em linhas e verifique se o comprimento de cada linha é igual ao número de linhas.Edit: Obrigado a @xnor por 4 bytes.
fonte
all
paramap
cortar oand.
.Geléia , 7 bytes
Experimente online!
Explicação
fonte
Japonês , 9 bytes
Teste online!
Explicação
Usando alguns recursos implementados logo após o lançamento deste desafio, isso pode ter 6 bytes:
Teste online!
Explicação
fonte
y
era a solução, mas a minha estava chegando em mais alguns bytes.Retina ,
3331 bytesExperimente online! Explicação: O primeiro estágio simplesmente altera todo o ASCII imprimível no mesmo caractere para facilitar a correspondência. (Isso pode ser feito sem, mas isso é código de golfe, não código de desafio.) O segundo estágio corresponde a pelo menos um caractere na primeira linha. No entanto, para cada caractere adicional na primeira linha, ele corresponde opcionalmente a uma nova linha seguida por uma cópia da primeira linha. A parte final da expressão causa falha na correspondência se houver mais colunas do que linhas.
fonte
\S\n;
em vez da primeira linha salva um byte.
por.
salva dois, mas obrigado.Casca , 6 bytes
Pega uma corda e imprime um
1
ou0
. Experimente online! A primeira linha itera sobre os casos de teste; remova-o se desejar testar um único valor.Explicação
Husk é uma nova linguagem funcional de golfe criada por mim e por Leo . Faltam muitos recursos e o desenvolvimento está em andamento. Sua principal característica é um sistema de tipo rígido que nos permite sobrecarregar funções de ordem superior.
Em um nível alto, o programa funciona assim:
A função
≡
realmente verifica se duas matrizes têm a mesma forma e a mesma distribuição de elementos de verdade. No Husk, todos os caracteres, exceto o byte nulo, são verdadeiros e isso não ocorrerá em nossas entradas. Além disso,S
é o S-combinator , uma função que recebe como entrada duas funções, aqui≡
eT'a
, e retorna uma nova função que é mapeadax
para≡(x)(T'a x)
. O resultado deS
é composto por¶
e essa função é aplicada à entrada implicitamente.Como Husk sabe que deve se aplicar
S
à próxima função, mas¶
deve ser composto com a função à esquerda? Simples: apenas tenta todas as interpretações e escolhe aquela em que os tipos fazem sentido. Isso é explicado em mais detalhes na documentação da Husk .fonte
Pure bash (sem utilitários), 55
mapfile
lê a entrada na matriza
O sentido oposto disso é retornado como um código de retorno do shell (examine com
echo $?
) - o quadrado perfeito é 1, qualquer outra coisa é 0.Experimente online (na verdade) .
Experimente online (falsy) .
Resposta anterior usando eval-escape-expansion hell, 78:
Experimente online (na verdade) .
Experimente online (falsy) .
fonte
Perl 6 , 27 bytes
Testa se o número de linhas na sequência de entrada é igual ao número de caracteres em cada linha.
fonte
.lines
métodoPitão, 7 bytes
Experimente aqui
Não requer nova linha final. Substitui a entrada por uma matriz 2D de 1s, em que 1 representa qualquer caractere na entrada original. Em seguida, verificamos se esse array permanece inalterado após a transposição (substituindo colunas por linhas). Somente um quadrado retornará verdadeiro em tal situação.
fonte
Java (OpenJDK 8) ,
96919087 bytes-5 bytes graças a @KevinCruijssen
-1 byte graças a @TheLethalCoder
-2 bytes graças a @ OlivierGrégoire
Experimente online!
fonte
String[]s
e,0
em.split("\\n");
-3 bytes. E o ponto-e-vírgula /;
no final você não terá que contar, para que outro -1. Ah, e você tem que incluir ojava.util.
na frente doArrays
medo. As importações / utilizações também fazem parte da contagem de bytes.java.util.
, apenas um loop for normal como essefor(String x:s)if(x.length()!=s.length)return 0>1;return 1>0;
parece ser menor quereturn java.util.Arrays.stream(s).anyMatch(l->l.length()!=s.length);
.\n
?a.split("\n")
é realmente mais curto!a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)
leng
eth()
. Aparentemente, eles aparecem primeiro após o 60º caractere e a cada 20 caracteres.05AB1E , 7 bytes
Experimente online!
fonte
n
entradas em vez de 1 e por que minha resposta original não funcionou.|
significa "pegue o restante da entrada e divida por novas linhas", o que não aceita, de maneira alguma, várias entradas. Você apenas precisa tratar o STDIN como uma única entrada.R , 57 bytes
Uma função anônima; Divide em novas linhas, calcula o comprimento de cada linha e verifica se todas são iguais ao número de linhas.
Experimente online!
fonte
MATL ,
1412 bytesA cadeia de entrada é definida usando concatenação (
[...]
) e com o ponto de código10
para representar LF. Por exemplo,['aaa' 10 'bb']
é interpretado em MATL como sequência'aaa'
concatenada com o caractere com ponto de código10
concatenado com sequência'bb'
.A saída é um vetor numérico não vazio, que é verdadeiro se e somente se todas as suas entradas forem diferentes de zero.
Experimente online!
Explicação
Considere entrada
['4444' 10 '333' 10 '22']
.fonte
R, 35 bytes
Recebe entrada de stdin. Verifica se o número de caracteres em cada linha é igual ao número total de linhas. Retorna
TRUE
ouFALSE
conforme apropriado.fonte
JavaScript (ES6), 48 bytes
fonte
CJam, 11 bytes
Experimente online!
fonte
OCaml , 56 bytes
Experimente online!
fonte
Pitão,
1210 bytesEconomizou 2 bytes graças a @FryAmTheEggman.
Experimente online
Explicação
fonte
QBIC , 43 bytes
Eu estou feliz com o quão curto um derivado QBasic chegou a esse desafio.
Explicação:
fonte
Pitão, 7 bytes
Demonstração
Transponha a entrada com truncamento duas vezes e verifique se o resultado é igual ao original.
fonte
Ruby, 50 bytes
Experimente online!
Explicação
fonte
.split($/,-1);
->.split $/,-1;
lines
, em vez deread
e depoissplit
(mas então você tem que adicionar 1 asize
porque as linhas incluem a nova linha de fuga)Cheddar , 39 bytes
Experimente online!
fonte
Clojure, 58 bytes
Requer uma nova linha à direita, ansiosa para ver algo mais mágico.
fonte
APL (Dyalog) , 17 bytes
Requer
⎕ML←3
qual é o padrão em muitos sistemas. Usa CR.Experimente online!
↓∘⎕FMT
[é a] dividida em linhas- F ou m uma t ted-em-um-quadrado argumento≡
idêntico a⎕TC[2]∘≠
os caracteres em grupos de não-nova linha *⊂
particionado⊢
argumento?* O segundo elemento da lista de t erminal C caracteres ontrolo.
Na versão 16.0, pode-se escrever
↓∘⎕FMT≡⎕TC[3]∘≠⊆⊢
com⎕ML←1
.fonte
⎕ML
?⎕ML
, enquanto as pessoas que começaram com as outras APLs tendem a executar com baixa⎕ML
.PowerShell, 64 bytes
As mesmas abordagens (divisão, comprimento das linhas, número de linhas) que outras respostas em idiomas que não são de golfe, mas não há um bom mapa () equivalente; portanto, é uma matriz de comprimentos de linha com o número de linhas marcadas no final, então essa matriz está agrupado. Quadrados saem como
3,3,3,3 -> 1 group, all line lengths and line count were equal
e não quadrados saem como3,2,1 -> 3 groups
, algo era desigual na praça:Requer nova linha no estilo Linux, sem nova linha final. por exemplo
(E você pode fazer o mesmo para os testes falsos, mas não vou colocá-lo aqui, pois há mais deles). O par de
@
símbolos é necessário para que, quando a entrada for a única'.'
dividida, ela não forme uma matriz de uma sequência, apenas crie uma sequência e, em seguida, a concatenação da matriz não1,1
gera a saída2
.Eu esperava que pudesse ser mais curto substituir todos os caracteres por 'a' e, em seguida, força bruta de 1 ao comprimento da entrada todos os quadrados 'a' e ver se algum deles correspondia à entrada. Depois de passar por param () e .Length e -join e -replace, ele termina muito mais em 81 bytes:
fonte
Grime , 11 bytes
Imprime
1
para quadrados e0
para não quadrados. Experimente online!Explicação
Uma explicação detalhada pode ser encontrada na página de tutorial do Grime , que contém este programa exato como exemplo.
fonte