Dada uma sequência de texto ASCII imprimível (incluindo novas linhas e espaços) que contém pelo menos um caractere que não é uma nova linha nem um espaço, produz um valor verdadeiro se a sequência for retangular e um valor falsey caso contrário. Além disso, o código fonte da sua solução deve ser retangular .
Uma cadeia de caracteres é retangular se atender a todas as seguintes condições:
- A primeira linha e a última linha não contêm espaços.
- O primeiro e o último caractere de cada linha não é um espaço.
- Todas as linhas têm o mesmo número de caracteres.
Por exemplo, o seguinte texto é retangular:
abcd
e fg
hijk
Este texto, no entanto, não é retangular (requisito nº 3):
1234
567
8900
Casos de teste
Verdade:
sdghajksfg
asdf
jkl;
qwerty
u i op
zxcvbn
1234
5 6
7890
abcd
e fg
hijk
Falsey:
a b c
123
456
7 9
12
345
qwerty
uiop
zxcvnm
1234
567
8900
Isso é código-golfe , então a solução mais curta em bytes vence.
Respostas:
C (gcc) ,
127125124118 bytesr*=!e&(!t|t==c);
emr>>=e||t&&t-c;
. (Este golfe foi a inspiração para minhas recentes dicas em C, resposta à atualização inversa da bandeira .)*(_-2)
em_[~1]
.*_++-10||(...)
para*_++<11?...:0
e utilizando o marcador de zero...:0
(o que não é utilizado de forma construtiva) para golfe oc++
incremento. Esses campos de golfe permitiram uma nova mudança de loop.Experimente online!
Layout de origem atingindo um retângulo mais alto.
Explicação
A seguir, é apresentada a versão longa de 124 bytes.
Experimente online!
fonte
r,e,c,t
Java 10,
214176169152144139 139 bytes-5 bytes graças a @Neil .
Usa em
String[]a
vez devar a
;return-r<0;
em vez dereturn r>0;
; e adicionou um comentário//
no final, para que não haja espaços na primeira e na última linha.Observe que esse retângulo é mais curto que uma entrada de linha única, porque
int r=1,...;
deve ser substituída porint[]v{1,...};
e todos os usos dos números inteiros se tornam entãov[n]
(em que n é o índice da variável na matrizv
).Experimente online.
Explicação:
Aqui está o mesmo programa base com espaços (
128126 bytes ):-2 bytes graças a @Neil .
Experimente online.
fonte
T-SQL,
237207 bytesSaídas 1 para retangular, 0 caso contrário. Eu tive que usar toneladas de parênteses extras e suportes para eliminar espaços, tenho certeza de que há um vasto espaço para melhorias.
Explicação :
De acordo com nossas opções de E / S permitidas e o esclarecimento nos comentários da pergunta, a entrada é tomada como linhas separadas em uma tabela preexistente t . Como os dados no SQL são inerentemente desordenados, essa tabela inclui um campo de identidade "número da linha" i :
Basicamente, meu SQL executa 3 subconsultas, cada uma das quais retorna
0
ou1
base nos 3 critérios do código "retangular". Esses 3 valores são multiplicados juntos, retornando apenas1
para um código que satisfaça todos os 3.EDIT : critérios combinados 2 e 3 no mesmo SELECT para economizar espaço
o
TRIM(v)
função é suportada apenas pelo SQL 2017 e acima. Seriam necessárias versões anterioresLTRIM(RTRIM(v))
, o que exigiria reequilibrar as linhas.Uma observação aleatória: a
LEN()
função no SQL ignora espaços à direita, entãoLEN('foo ') = 3
. Para obter um comprimento "verdadeiro", você precisa prender um personagem até o final e subtrair um: Pfonte
C ++,
199183181175 bytesEssa função de modelo aceita linhas como uma coleção de seqüências de caracteres (que podem ser amplas), passadas como um par de iteradores.
Agradecemos ao usuário Erroneous por me lembrar o
back()
membrostd::string
e por apontar quenpos+1
é zero.Equivalente não destruído
O único verdadeiro golfe é concatenar a primeira e a última linhas, para que possamos executar uma única
find
para espaços nessas.Programa de teste
fonte
.find(' ')+1==0
e ems.back()
vez de*s.rbegin()
.JavaScript (Node.js) , 85 bytes
Experimente online!
fonte
NOR
operador!Python 2 , 82 bytes
Experimente online!
Invocar como
f("abcd", "e fg", "hijk")
.fonte
Haskell ,
10610298110109102 bytesObrigado a @nimi e @Laikoni por um byte cada!
Experimente online!
fonte
Haskell , 79 bytes
Experimente online! Recebe a entrada como uma lista de linhas.
O padrão
g(x:r)= ...
vincula a primeira linhax
e a lista (possivelmente vazia) das linhas restantesr
. Em seguida,all((==(0<$x)).(0<$))r
verifica se todas as linhasr
têm o mesmo comprimento dex
(Usando esta dica ).Caso contrário, a combinação provoca
&&
curto-circuito e retornaFalse
, caso contrário, o lado direito é avaliado. Lá é criada uma string que consistex
na primeira linha,last(x:r)
na última linha der
(ou na primeira linha novamente, casor
esteja vazia) e(head<$>r)
no primeiro e(last<$>r)
no último caractere de cada linha. Para essa sequência,all(>='!')
verifica se ela não contém espaços (não podemos usar(>' ')
devido à restrição do código-fonte).fonte
contains at least one character that is neither a newline nor a space
, que também permite descartar a lista vazia.MATL , 13 bytes
Entrada é uma matriz de seqüências de caracteres, no formato
{'abc' 'de'}
.A saída é uma matriz que contém apenas as que são verdadeiras ou uma matriz que contém pelo menos um zero, que é falsey .
Experimente online! Ou verifique todos os casos de teste , incluindo teste de veracidade / falsidade.
Explicação
fonte
cO6Lt&(32=~
Experimente online! Apenas anula as partes que não são de borda e verifica se há espaços.cF6Lt&(32=~
. Sinta-se à vontade para editá-lo ou, caso contrário, podemos simplesmente deixá-lo nos comentários.JavaScript (ES6), 88 bytes
Experimente online!
fonte
Tela ,
1715 bytesExperimente aqui!
Explicação (ASCII-fied for monospace):
fonte
Perl 5 , 70 bytes
Experimente online!
Saídas
0
para verdade, qualquer outro número para falsey.fonte
Vermelho ,
216191 bytesExperimente online!
Coloquei muitos parênteses não necessários na primeira e na última linha.
fonte
Geléia , 17 bytes
Experimente online!
fonte
Does not seem to enforce equal line length
também é tudo o que eu estava dizendo." \n "
Experimente online!Gelatina , 15 bytes
Usa um método desenvolvido pela Mnemonic em um envio Pyth excluído (atualmente - devido a uma falha no caso de borda). (se já estiver consertado, dê algum crédito !)
Um link monádico que aceita uma lista de caracteres que retorna 1 ou 0.
Experimente online!
Quão?
fonte
Japt , 22 bytes
Resposta não-competitiva: há um bug conhecido no Japt , em que as rotações bidimensionais da matriz truncam os resultados. Devido a esse bug, o código abaixo funciona apenas em entradas quadradas. Se o bug não estava presente, o código abaixo deve funcionar completamente corretamente.
Recebe entrada como uma matriz de seqüências de caracteres. Usar parênteses em vez de espaços facilita bastante o requisito de código retangular.
Experimente aqui .
fonte
Ruby 2.5+, 63 bytes
Recebe entrada como uma matriz de seqüências de caracteres. Nenhum link de teste, pois a versão no TIO (2.4) é muito antiga para este. Em vez disso, aqui está uma versão um pouco mais longa (69 bytes) para teste:
Experimente online!
A diferença é que, já que o 2.5 Ruby suporta a passagem direta de um padrão Regex aos
all?, any?, none?
métodos, o que nos salva alguns bytes. O método em si é bastante auto-explicativo - testamos:fonte
C (gcc) , 119 bytes
Recebe a entrada como uma lista (s) de n strings.
Experimente online!
fonte
C # (.NET Core) ,
145167 bytesExperimente online!
fonte
S[0].IndexOf(" ")
está pesquisando um espaço na primeira linha eS[S.Count()-1].IndexOf(" ")
na última linha. Se não houver espaço na primeira e na última linha, é -2, o que é verdadeiro em-2 < -1
.True
quando passado para o seu programa. É uma restrição adicional neste desafio.