Una cadena se considera cuadrada si se cumplen las siguientes condiciones:
- Cada línea tiene el mismo número de caracteres.
- El número de caracteres en cada línea es igual al número de líneas.
Su tarea es escribir un programa o función que determine si una cadena de entrada dada es o no un cuadrado.
Puede requerir que la entrada esté delimitada por su elección de LF, CR o CRLF.
Los caracteres de nueva línea no se consideran parte de la longitud de la línea.
Puede requerir que haya o no una nueva línea final en la entrada, que no cuenta como una línea adicional.
La entrada es una cadena o matriz de caracteres 1D; No es una lista de cadenas.
Puede suponer que la entrada no está vacía y solo contiene ASCII imprimible, incluidos los espacios.
Debe generar un valor verdadero para cadenas cuadradas y uno falso para otras cadenas.
Casos de prueba de verdad:
foo bar baz
.
.s. .ss .s. (s representa espacio)
ss ss (s representa espacio)
aaaaa aaaaa aaaaa aaaaa aaaaa
Casos de prueba de falsa:
.. .
.
.
.... ....
4444 333 22
333 333
abc.def.ghi
Tenga en cuenta líneas en blanco adicionales en algunos de los casos falsos.
Este es el código de golf : ¡la menor cantidad de bytes gana!
Respuestas:
Brachylog (2), 3 bytes
Pruébalo en línea!
Programa completo Salidas
true.
para la verdad,false.
para falsey.Explicación
Estaba un poco escéptico sobre la utilidad de la
ṁ
construcción cuando se agregó, pero realmente no puedo negar que es útil aquí ...Brachylog (2), 7 bytes
Pruébalo en línea!
Solución no incorporada.
Aún supera todas las demás entradas, en el momento de la escritura.EDITAR: No del todo, la entrada de Jelly de igual longitud entró mientras escribía esto, y la superó a través del desempate de la marca de tiempo.Explicación
fuente
ṁ
= "Afirma que el resultado es cuadrado" :(.\l~l
en ese momento, excepto que el comando de barra diagonal inversa, que entre otras cosas afirma que su entrada es un rectángulo , estaba roto; Tenga en cuenta que incluso si reemplazamosṁ
con.\l~l
, este sigue siendo el programa más corto aquí; ahora que lo pienso, lo agregaré a la publicación). El comando de barra diagonal inversa se solucionó, pero el autor del idioma decidió agregar un cuadrado de aserción al mismo tiempo. Estaba pensando "seguramente eso nunca volverá a aparecer". Aparentemente me equivoqué.Python 2 , 52 bytes
Pruébalo en línea! o Pruebe todos los casos de prueba
fuente
'\n'
, simplemente déjelo vacío (ya que no hay espacios ni pestañas en la entrada).JavaScript (ES6),
4645 bytesExplicación
true
cuadrado yfalse
no.Intentalo
fuente
s=>!(s=s.split`\n`).some(x=>x.length-s.length)
!some
de las manos, simplemente porque tiene la misma longitud queevery
.05AB1E ,
108 bytesPruébalo en línea!
-2 gracias a Riley, esta es básicamente su respuesta ._.
fuente
s
. Me gusta esto¶¡€gDgQP
Jalea ,
75 bytesPruébalo en línea!
Gracias a FryAmTheEggman por -2
fuente
Haskell,
3834 bytesPruébalo en línea!
Versión sin puntos de
f s = all ((==length (lines s)).length) (lines s)
, es decir, dividir la entrada en líneas y verificar si la longitud de cada línea es igual al número de líneas.Editar: Gracias a @xnor por 4 bytes.
fuente
all
paramap
cortar eland.
.Jalea , 7 bytes
Pruébalo en línea!
Explicación
fuente
Japt , 9 bytes
¡Pruébelo en línea!
Explicación
Usando algunas características implementadas poco después de que se publicó este desafío, esto puede ser de 6 bytes:
¡Pruébelo en línea!
Explicación
fuente
y
era la solución, pero la mía estaba llegando a unos pocos bytes más.Retina ,
3331 bytesPruébalo en línea! Explicación: La primera etapa simplemente cambia todos los ASCII imprimibles en el mismo carácter para facilitar la coincidencia. (Se podría hacer sin él, pero esto es código golf, no código desafío). La segunda etapa coincide con al menos un personaje en la primera línea. Sin embargo, para cada carácter adicional en la primera línea, opcionalmente coincide con una nueva línea seguida de una copia de la primera línea. La parte final de la expresión hace que la coincidencia falle si hay más columnas que filas.
fuente
\S\n;
lugar de la primera línea ahorra un byte.
con.
salva dos, pero gracias.Casco , 6 bytes
Toma una cadena e imprime
1
o0
. Pruébalo en línea! La primera línea itera sobre los casos de prueba; elimínelo si desea probar con un solo valor.Explicación
Husk es un nuevo lenguaje de golf funcional creado por mí y Leo . Le faltan muchas características y el desarrollo está en curso. Su característica principal es un sistema de tipo rígido que nos permite sobrecargar funciones de orden superior.
En un nivel alto, el programa funciona así:
La función
≡
realmente comprueba si dos matrices tienen la misma forma y la misma distribución de elementos verdaderos. En Husk, todos los caracteres excepto el byte nulo son verdaderos, y eso no ocurrirá en nuestras entradas. Además,S
es el S-Combinator , una función que toma como entradas dos funciones, en este caso≡
yT'a
, y devuelve una nueva función que los mapasx
a≡(x)(T'a x)
. El resultado deS
se compone de¶
, y esa función se aplica a la entrada implícitamente.¿Cómo sabe Husk que debería aplicarse
S
a la siguiente función, pero¶
debería estar compuesta con la función a su izquierda? Simple: solo intenta cada interpretación y elige aquella en la que los tipos tienen sentido. Esto se explica con más detalle en la documentación de Husk .fuente
Pure bash (sin utilidades), 55
mapfile
lee la entrada en la matriza
El sentido opuesto de esto se devuelve como un código de retorno de shell (examinar con
echo $?
): el cuadrado perfecto es 1, cualquier otra cosa es 0.Pruébelo en línea (sinceramente) .
Pruébelo en línea (falso) .
Respuesta anterior con eval-escape-expansion hell, 78:
Pruébelo en línea (sinceramente) .
Pruébelo en línea (falso) .
fuente
Perl 6 , 27 bytes
Comprueba si el número de líneas en la cadena de entrada es igual al número de caracteres en cada línea.
fuente
.lines
.Pyth, 7 bytes
Pruébalo aquí
No requiere nueva línea final. Reemplaza la entrada con una matriz 2D de 1s donde un 1 representa cualquier carácter en la entrada original. Luego verificamos si esa matriz no ha cambiado después de su transposición (reemplazando columnas con filas). Solo un cuadrado volverá verdadero en tal situación.
fuente
Java (OpenJDK 8) ,
9691 919087 bytes-5 bytes gracias a @KevinCruijssen
-1 byte gracias a @TheLethalCoder
-2 bytes gracias a @ OlivierGrégoire
Pruébalo en línea!
fuente
String[]s
y puede eliminar el,0
en.split("\\n");
-3 bytes. Y el punto y coma /;
al final no tendrá que contar, por lo que otro -1. Ah, y tienes que incluir eljava.util.
frente delArrays
Me temo. Las importaciones / usos también son parte del recuento de bytes.java.util.
, solo un ciclo for como estefor(String x:s)if(x.length()!=s.length)return 0>1;return 1>0;
parece ser más corto quereturn java.util.Arrays.stream(s).anyMatch(l->l.length()!=s.length);
.\n
?a.split("\n")
es en realidad más corta!a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)
leng
yth()
. Aparentemente, aparecen primero después del 60º personaje y luego cada 20 caracteres.05AB1E , 7 bytes
Pruébalo en línea!
fuente
n
entradas en lugar de 1 y por qué mi respuesta original no funcionó.|
significa "tomar el resto de la entrada y dividir por nuevas líneas", que de ninguna manera toma múltiples entradas. Solo tiene que tratar STDIN como una sola entrada.R , 57 bytes
Una función anónima; Se divide en líneas nuevas, calcula la longitud de cada línea y comprueba si todas son iguales al número de líneas.
Pruébalo en línea!
fuente
MATL ,
1412 bytesLa cadena de entrada se define usando la concatenación de cadenas (
[...]
) y con el punto de código10
para representar LF. Por ejemplo,['aaa' 10 'bb']
se interpreta en MATL como una cadena'aaa'
concatenada con el carácter con un punto de código10
concatenado con una cadena'bb'
.La salida es un vector numérico no vacío, que es verdadero si y solo si todas sus entradas son distintas de cero.
Pruébalo en línea!
Explicación
Considere la entrada
['4444' 10 '333' 10 '22']
.fuente
R, 35 bytes
Toma información de stdin. Comprueba que el número de caracteres en cada línea es igual al número total de líneas. Devoluciones
TRUE
oFALSE
según corresponda.fuente
JavaScript (ES6), 48 bytes
fuente
CJam, 11 bytes
Pruébalo en línea!
fuente
OCaml , 56 bytes
Pruébalo en línea!
fuente
Pyth,
1210 bytesGuardado 2 bytes gracias a @FryAmTheEggman.
Pruébalo en línea
Explicación
fuente
QBIC , 43 bytes
Yo, estoy contento con lo corto que un derivado QBasic llegó a este desafío.
Explicación:
fuente
Pyth, 7 bytes
Demostración
Transponga la entrada con truncamiento dos veces, luego verifique si el resultado es el mismo que el original.
fuente
Ruby, 50 bytes.
Pruébalo en línea!
Explicación
fuente
.split($/,-1);
->.split $/,-1;
lines
lugar deread
y luegosplit
(pero luego debe agregar 1size
porque las líneas incluyen la nueva línea final)Cheddar , 39 bytes
Pruébalo en línea!
fuente
Clojure, 58 bytes
Requiere una nueva línea final, esperando ver algo más mágico.
fuente
APL (Dyalog) , 17 bytes
Requiere
⎕ML←3
cuál es el predeterminado en muchos sistemas. Utiliza CR.Pruébalo en línea!
↓∘⎕FMT
[es el] split-en-líneas F o m un t ted-en-a-cuadrado argumento≡
idéntico a⎕TC[2]∘≠
los caracteres into-groups-of-non-newline *⊂
dividido⊢
¿argumento?* El segundo elemento de la lista de T ERMINAL C personajes ontrol.
En la versión 16.0, se puede escribir
↓∘⎕FMT≡⎕TC[3]∘≠⊆⊢
con⎕ML←1
.fuente
⎕ML
?⎕ML
, mientras que las personas que comenzaron con las otras APL tienden a correr con un nivel bajo⎕ML
.PowerShell, 64 bytes
El mismo enfoque (división, longitud de línea, número de líneas) que otras respuestas de idiomas que no son de golf, pero no hay un buen equivalente de map (), por lo que es una matriz de longitudes de línea con la cantidad de líneas etiquetadas en el extremo, luego esa matriz está agrupado Los cuadrados salen como
3,3,3,3 -> 1 group, all line lengths and line count were equal
y los no cuadrados salen como3,2,1 -> 3 groups
, algo era desigual en el cuadrado:Requiere terminaciones de estilo Linux de nueva línea, sin línea nueva. p.ej
(Y puedes hacer algo similar para las pruebas falsas, pero no lo pondré aquí ya que hay más de ellas). Se
@
requieren un par de símbolos para cuando la entrada es la única; de lo'.'
contrario, dividirla no forma una matriz de una cadena, solo forma una cadena, y luego la concatenación de matriz no1,1
genera la salida2
.Esperaba que pudiera ser más corto reemplazar todos los caracteres con 'a', y luego la fuerza bruta de 1 a Longitud de entrada todos los cuadrados 'a' y ver si alguno coincidía con la entrada. Una vez que pasé param () y .Length y -join and -replace, termina mucho más tiempo en 81 bytes:
fuente
Grime , 11 bytes
Imprime
1
para cuadrados y0
para no cuadrados. Pruébalo en línea!Explicación
Se puede encontrar una explicación detallada en la página del tutorial de Grime , que contiene este programa exacto como ejemplo.
fuente