Su tarea es construir un programa que identifique la forma de la entrada. Las formas a identificar pueden ser cualquiera de las siguientes:
Cuadrado
Para identificarse como un cuadrado, la fuente debe tener líneas de igual longitud y el mismo número de líneas que los caracteres por línea (se excluyen los caracteres de nueva línea). Una nueva línea final opcional es aceptable.
$_='
$_="
$_"'
;say
Rectángulo
Para identificarse como un rectángulo, la fuente debe tener líneas de igual longitud, pero el número de líneas no coincide con el número de caracteres por línea (se excluyen los caracteres de nueva línea). Una nueva línea final opcional es aceptable. Esto puede ser horizontal o vertical.
$_=
"no
t a
squ
are
";#
$_="but it
is still a
consistent
shape!";##
Triángulo
Para identificarse como un triángulo, la fuente debe comenzar con un carácter, y cada línea posterior debe tener un carácter adicional (incluido el último), o después de la primera línea, cada línea posterior debe tener un carácter menos hasta el último, que tiene solo uno.
$
_=
"So
this
"."".
shape;
$_="or
even,
this
way
!!
"
Lío
Cualquier cosa que no siga un formato consistente según lo anterior, debe identificarse como un desastre.
Reglas
- Puede devolver cuatro valores imprimibles consistentes para identificar cada forma.
- Su código fuente también debe cumplir con una de las formas anteriores (no, no es un desastre).
- Una nueva línea final en su fuente es aceptable.
- Puede suponer que la entrada no contiene ninguna línea en blanco (incluidas las nuevas líneas finales), no está vacía y no consta solo de nuevas líneas.
- Todas las formas deben tener una altura y un ancho de> = 2; de lo contrario, esto se define como un desastre.
- Las lagunas estándar están prohibidas.
- La solución más corta en bytes, en cada idioma, gana.
fuente

All shapes must have a height and width of >= 2.['abc','cfd','fgh']?Respuestas:
Jalea , 35 bytes
Pruébalo en línea!
0= Desorden1= Rectángulo2= Cuadrado3= Triángulofuente
Brachylog , 45 bytes
Pruébalo en línea!
El código es un rectángulo (a pesar de la forma en que se muestra en mi pantalla). Salidas: 1 para cuadrado, 2 para rectángulo, 3 para triángulo y nada para desorden
Explicación:
fuente
Java 10,
231221219217213211207 bytesLa función es un rectángulo en sí.
1= Cuadrados;2= Rectángulos;3= Triángulos;0= Mess.-14 bytes gracias a @ OlivierGrégoire .
Explicación:
Pruébalo en línea.
fuente
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;}(doble espacio despuésvar, salto de línea despuésD=L-l;.D==-1|D==1aD>-2|D<2. Ese y ell==1|L==1podría ser más golfable con algunas operaciones bit a bit, pero esa no es realmente mi experiencia.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;}(descanso despuésD=L-l;++). Todavía golfable al fusionar el bucle y la declaración después en uno, pero no veo cómo en este momento.Python 2 ,
129114109107113 bytesPruébalo en línea!
Huellas dactilares
0=Mess1=Triangle2=Square3=Rectanglefuente
Jalea ,
3227 bytesPruébalo en línea!
Ahora tomando entrada en una lista de líneas y cambiando
>1×con’ay usandoSƲafter enL€lugar deFLƲƊ. Esto me permitió condensarme en dos líneas y ahorré 5 bytes en total. Los siguientes valores son los mismos que antes.[0.0, 0.0]= Desorden[0.0, 1.5707963267948966]= Rectángulo[0.0, 0.7853981633974483]= Cuadrado[1.5707963267948966, 0.0]= TriánguloZL«Lobtiene el mínimo de altura y ancho y’resta 1 de él.Çllama al segundo enlace y al final si la entrada es una sola línea, el resultado deÇobtiene un AND lógico con el número anterior si solo hay una sola línea, la salida será[0.0, 0.0].En el segundo enlace:
,Uproduce una lista de longitudes de línea emparejadas con su reverso.Jesrange(number of lines)y⁼€comprueba si cada uno de ellos es igual al resultado deJ.Ẹ(Cualquiera) produce 1 si la entrada es un triángulo.Ecomprueba si todas las longitudes de línea son iguales (rectángulo / cuadrado).SƲcon un$grupo para agruparlos en una sola mónada, verifica si el número total de caracteres es un número cuadrado.Entonces, al final del segundo enlace tenemos
[[a,b],c]dónde está cada número0o1indicando si la entrada es un triángulo, rectangular y tiene un número cuadrado de caracteres respectivamente.Sin embargo, un número cuadrado de elementos no implica que la entrada sea un cuadrado ya que una entrada desordenada como
tiene un número cuadrado de elementos pero no es un cuadrado.
Aquí es donde
æAentra (arctan2).0æA0==0æA1==0. En otras palabras, si la entrada tiene un número cuadrado de elementos pero no es un rectángulo, entonces no es un cuadrado. Ciertamente hay formas más claras de hacer esto, pero qué importa eso cuando tenemos que pensar en bytes y se nos permite una salida arbitraria consistente.Tenga en cuenta que anteriormente estaba usando en
æA/lugar deæAƝ(y a en,lugar de a;en el segundo enlace) pero el método anterior distingue entre triángulos que tienen un número cuadrado de elementos y aquellos que no, pero obviamente deben contarse como la misma cosa.fuente
arctan2era exactamente lo que necesitaba.Java 10,
274323298229 bytesPrimera presentación del triángulo.
0Lío1Rectángulo3Cuadrado4TriánguloPruébelo en línea aquí .
Editado varias veces para jugar al golf un poco más.
Por supuesto, podría ahorrar muchos bytes convirtiéndolo también en un rectángulo (
281267259200 bytes, ver aquí ).El resultado de la identificación se manipula utilizando Y bit a bit, produciendo una máscara de bits de la siguiente manera:
Versión sin golf:
fuente
Javascript 125 bytes
fuente
Perl 5
-p, 83 bytesPruébalo en línea!
fuente
PHP
195205 bytes¡El triángulo invertido agrega 56 costosos bytes a esto!
Las salidas son S, R, T, M
Guardado algunos bytes gracias a Dom Hastings.
Pruébalo en línea!
Se corrigieron algunos problemas ahora ... Las ejecuciones de prueba producen esto.
fuente
?>debería estar bienTpara ¡cccc\na\naa\nccccPruébelo en línea!Perl 6 , 81 bytes
Pruébalo en línea!
Devuelve
Truepara cuadrado,Falsepara rectángulo,3para triángulo,Nilpara desorden.fuente
$_ Z- .skip?Stax , 39 bytes
¡Ejecute y depure en línea!
La respuesta más corta de ASCII hasta ahora.
Explicación
La solución utiliza el siguiente hecho: si algo se imprime explícitamente en la ejecución del programa, no se genera ningún resultado implícito. De lo contrario, la parte superior de la pila al final de la ejecución se genera implícitamente.
fuente
Haskell ,
113107103101 bytesPruébalo en línea!
Devuelve 0, 1, 2 y 3 para desorden, rectángulo, cuadrado y triángulo, respectivamente.
Editar: -2 bytes gracias a Lynn !
fuente
05AB1E ,
352927 bytesGuardado 8 bytes gracias a Magic Octopus Urn
Pruébalo en línea!
0= Desorden4= Triángulo1= Rectángulo3= Cuadradofuente
gs€g©QP®¥ ÄP®1å&®ËJCSinCembargo, puede agregar un espacio de caracteres y un para 21.R , 101 bytes
El código no puede tratar con 'RECONOCIMIENTO NEGATIVO' (U + 0015) o el cuadrado en el código anterior. Este byte se puede cambiar a algo diferente si la entrada requiere que contenga este byte.
Pruébalo en línea!
fuente
readLines()lugar descan()?file("stdin")para que se lea desde la consola (en lugar de las siguientes líneas de código). Eso significa que probablemente será menos golfoso. Ah bueno.Caracoles, 29 bytes
Clave de salida:
Sería 23 bytes sin diseño de origen:
fuente
Wolfram Language (Mathematica) , 119 bytes
Utilizando
Replace/.y coincidencia de patrones en el recuento de caracteres por línea.Replaceeliminará el primer RHS de una regla que coincida, por lo que el orden es probar la entrada de 1 carácter, luego cuadrados, rectángulos, triángulos y un error para desorden.cuadrado = 0, rectángulo = 1, triángulo = 2, desorden = 3
Pruébalo en línea!
fuente
Rojo , 209 bytes
Pruébalo en línea!
0Lío1Cuadrado2Rectángulo3Triángulofuente
AWK , 119 bytes
Pruébalo en línea!
Salida:
0= Cuadrado1= Rectángulo2= Triángulo3= Desordenfuente
Ruby ,
115111 bytesPruébalo en línea!
Lambda anónima. Salidas:
fuente
C (gcc) ,
125123 bytesGracias a ceilingcat por -2 bytes.
Pruébalo en línea!
fuente