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==1
aD>-2|D<2
. Ese y ell==1|L==1
podrí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
=Mess
1
=Triangle
2
=Square
3
=Rectangle
fuente
Jalea ,
3227 bytesPruébalo en línea!
Ahora tomando entrada en una lista de líneas y cambiando
>1×
con’a
y 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«L
obtiene 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:
,U
produce una lista de longitudes de línea emparejadas con su reverso.J
esrange(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.E
comprueba 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úmero0
o1
indicando 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
æA
entra (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
arctan2
era exactamente lo que necesitaba.Java 10,
274323298229 bytesPrimera presentación del triángulo.
0
Lío1
Rectángulo3
Cuadrado4
Triá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 bienT
para ¡cccc\na\naa\ncccc
Pruébelo en línea!Perl 6 , 81 bytes
Pruébalo en línea!
Devuelve
True
para cuadrado,False
para rectángulo,3
para triángulo,Nil
para 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å&®ËJC
SinC
embargo, 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.Replace
eliminará 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!
0
Lío1
Cuadrado2
Rectángulo3
Triá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