Sua tarefa é criar um programa que identifique a forma da entrada. As formas a serem identificadas podem ser uma das seguintes:
Quadrado
Para ser identificada como um quadrado, a fonte deve ter linhas de todos os comprimentos iguais e o mesmo número de linhas que os caracteres por linha (caracteres de nova linha excluídos). Uma nova linha opcional à direita é aceitável.
$_='
$_="
$_"'
;say
Retângulo
Para ser identificada como um retângulo, a origem deve ter linhas de todo o mesmo comprimento, mas o número de linhas não corresponde ao número de caracteres por linha (caracteres de nova linha excluídos). Uma nova linha opcional à direita é aceitável. Isso pode ser horizontal ou vertical.
$_=
"no
t a
squ
are
";#
$_="but it
is still a
consistent
shape!";##
Triângulo
Para ser identificada como um triângulo, a origem deve começar com um caractere e cada linha subseqüente deve ter um caractere adicional (incluindo o último) ou, após a primeira linha, cada linha subseqüente deve ter um caractere a menos até o último, o que tem apenas um.
$
_=
"So
this
"."".
shape;
$_="or
even,
this
way
!!
"
Bagunça
Tudo o que não segue um formato consistente, conforme descrito acima, deve ser identificado como uma bagunça.
Regras
- Você pode retornar quaisquer quatro valores imprimíveis consistentes para identificar cada forma.
- Seu código-fonte também deve aderir a uma das formas acima (não, não é uma bagunça).
- Uma única nova linha à direita na sua origem é aceitável.
- Você pode assumir que a entrada não contém linhas em branco (incluindo novas linhas à direita), não está vazia e não consiste apenas em novas linhas.
- Todas as formas devem ter altura e largura>> 2, caso contrário, isso é definido como uma bagunça.
- As brechas padrão são proibidas.
- A solução mais curta em bytes, em cada idioma, vence.
fonte
All shapes must have a height and width of >= 2.
['abc','cfd','fgh']
?Respostas:
Geléia , 35 bytes
Experimente online!
0
= Confusão1
= Retângulo2
= Quadrado3
= Triângulofonte
Braquilog , 45 bytes
Experimente online!
Código é um retângulo (apesar da maneira como é renderizado na minha tela). Saídas: 1 para quadrado, 2 para retângulo, 3 para triângulo e nada para bagunça
Explicação:
fonte
Java 10,
231221219217213211207 bytesA função é um retângulo em si.
1
Quadrados;2
= Retângulos;3
= Triângulos;0
= Bagunça.-14 bytes graças a @ OlivierGrégoire .
Explicação:
Experimente online.
fonte
s->{var a=s.split("\n");int S=a.length,l=a[0].length(),L,D,b=0,i=1;if(S<2)return 0;for(L=a[1].length(),D=L-l; b<1&++i<S;)if((L=a[i].length())-a[i-1].length()!=D)b=1;return b<1?D==0?S==l?1:2:D==-1|D==1?l==1|L==1?3:0:0:0;}
(espaço duplo depoisvar
, quebra de linha depoisD=L-l;
.D==-1|D==1
paraD>-2|D<2
. Essa e al==1|L==1
podem ser mais jogáveis com algumas operações bit a bit, mas essa não é minha especialidade.s->{var a=s.split("\n");int r=a.length,l=a[0].length(),L,D,b=0,i=1;if(r>1){for(L=a[1].length(),D=L-l;++ i<r;b=L-a[i-1].length()!=D?1:b)L=a[i].length();b=b<1?D==0?r==l?1:2:D>-2&D<2&(l<2|L<2)?3:0:0;}return b;}
(apósD=L-l;++
). Ainda jogável, mesclando o loop e a declaração posteriormente em um, mas não vejo como agora.Python 2 ,
129114109107113 bytesExperimente online!
Impressões
0
=Mess
1
=Triangle
2
=Square
3
=Rectangle
fonte
Geléia ,
3227 bytesExperimente online!
Agora, pegue a entrada em uma lista de linhas e alterne
>1×
com’a
e usandoSƲ
depois emL€
vez deFLƲƊ
. Isso me permitiu condensar em duas linhas e salvei 5 bytes no total. Os seguintes valores são os mesmos de antes.[0.0, 0.0]
= Confusão[0.0, 1.5707963267948966]
= Retângulo[0.0, 0.7853981633974483]
= Quadrado[1.5707963267948966, 0.0]
= TriânguloZL«L
obtém o mínimo de altura e largura e’
subtrai 1 dele.Ç
chama o segundo link e, no final, se a entrada for uma única linha, o resultadoÇ
será lógico ANDed com o número anterior, se houver apenas uma única linha que será a saída[0.0, 0.0]
.No segundo link:
,U
gera uma lista de comprimentos de linha emparelhados com o reverso.J
érange(number of lines)
e⁼€
verifica se cada um deles é igual ao resultado deJ
.Ẹ
(Qualquer) produz 1 se a entrada for um triângulo.E
verifica se todos os comprimentos de linha são iguais (retângulo / quadrado).SƲ
com a$
para agrupá-los em uma única mônada, verifica se o número total de caracteres é um número quadrado.Portanto, no final do segundo link, temos
[[a,b],c]
onde cada número está0
ou1
indicando se a entrada é um triângulo, retangular e possui um número quadrado de caracteres, respectivamente.No entanto, um número quadrado de elementos não implica que a entrada seja um quadrado, pois uma entrada bagunçada como
tem um número quadrado de elementos, mas não é um quadrado.
É aqui que
æA
entra (arctan2).0æA0
==0æA1
==0
. Em outras palavras, se a entrada tiver um número quadrado de elementos, mas não for um retângulo, não será um quadrado. Certamente, existem maneiras mais claras de fazer isso, mas o que isso importa quando temos bytes para pensar e nos é permitido uma saída arbitrária consistente.Observe que eu estava usando anteriormente em
æA/
vez deæAƝ
(e um em,
vez de a;
no segundo link), mas o método anterior distingue entre triângulos que possuem número quadrado de elementos e aqueles que não, mas que obviamente devem ser contados como a mesma coisa.fonte
arctan2
era exatamente o que eu precisava.Java 10,
274323298229 bytesSubmissão do primeiro triângulo.
0
Bagunça1
Retângulo3
Quadrado4
TriânguloExperimente online aqui .
Editado várias vezes para jogar um pouco mais.
É claro que eu poderia economizar muitos bytes transformando isso também em um retângulo (
281267259200 bytes, veja aqui ).O resultado da identificação é manipulado usando AND bit a bit, produzindo uma máscara de bit da seguinte maneira:
Versão não destruída:
fonte
Javascript 125 bytes
fonte
Perl 5
-p
, 83 bytesExperimente online!
fonte
PHP,
195205 bytesO triângulo invertido adiciona 56 bytes caros a isso!
As saídas são S, R, T, M
Economizou alguns bytes graças a Dom Hastings.
Experimente online!
Corrigidos alguns problemas agora ... Execuções de teste produzem isso.
fonte
?>
deve estar bemT
paracccc\na\naa\ncccc
Experimente online!Perl 6 , 81 bytes
Experimente online!
Retorna
True
para quadrado,False
retângulo,3
triângulo,Nil
confusão.fonte
$_ Z- .skip
?Stax , 39 bytes
Execute e depure online!
Resposta mais curta apenas ASCII até agora.
Explicação
A solução utiliza o seguinte fato: Se algo for explicitamente impresso na execução do programa, nenhuma saída implícita será gerada. Caso contrário, a parte superior da pilha no final da execução é emitida implicitamente.
fonte
Haskell ,
113107103101 bytesExperimente online!
Retorna 0, 1, 2 e 3 para bagunça, retângulo, quadrado e triângulo, respectivamente.
Edit: -2 bytes graças a Lynn !
fonte
05AB1E ,
352927 bytesEconomizou 8 bytes graças ao Magic Octopus Urn
Experimente online!
0
= Confusão4
= Triângulo1
= Retângulo3
= Quadradofonte
gs€g©QP®¥ ÄP®1å&®ËJC
pode adicionar um caractere de espaço e umC
para 21, no entanto.R , 101 bytes
O código não pode lidar com 'RECONHECIMENTO NEGATIVO' (U + 0015) ou o quadrado no código acima. Esse byte pode ser alterado para algo diferente se a entrada requerer contiver esse byte.
Experimente online!
fonte
readLines()
vez descan()
?file("stdin")
para fazer a leitura no console (em vez das próximas linhas de código). Isso significa que provavelmente será menos golfe. Ah bem.Caracóis, 29 bytes
Chave de saída:
Seriam 23 bytes sem layout de origem:
fonte
Wolfram Language (Mathematica) , 119 bytes
Uso
Replace
/.
e correspondência de padrões na contagem de caracteres por linha.Replace
expulsará o primeiro RHS de uma regra que corresponda, de modo que a ordem é testar a entrada de 1 caractere, depois quadrados, retângulos, triângulos e um resumo de falhas.quadrado = 0, retângulo = 1, triângulo = 2, confusão = 3
Experimente online!
fonte
Vermelho , 209 bytes
Experimente online!
0
Bagunça1
Quadrado2
Retângulo3
Triângulofonte
AWK , 119 bytes
Experimente online!
Saída:
0
= Quadrado1
= Retângulo2
= Triângulo3
= Confusãofonte
Ruby ,
115111 bytesExperimente online!
Lambda anônimo. Saídas:
fonte
C (gcc) ,
125123 bytesObrigado ao ceilingcat por -2 bytes.
Experimente online!
fonte