Dada una cadena de texto ASCII imprimible (que incluye líneas nuevas y espacios) que contiene al menos un carácter que no es una línea nueva ni un espacio, genera un valor verdadero si la cadena es rectangular, y un valor falso de lo contrario. Además, el código fuente de su solución debe ser rectangular .
Una cadena es rectangular si cumple con todas las siguientes condiciones:
- La primera línea y la última línea no contienen espacios.
- El primer y último carácter de cada línea no es un espacio.
- Todas las líneas tienen el mismo número de caracteres.
Por ejemplo, el siguiente texto es rectangular:
abcd
e fg
hijk
Este texto, sin embargo, no es rectangular (requisito # 3):
1234
567
8900
Casos de prueba
Verdad:
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
Este es el código de golf , por lo que gana la solución más corta en bytes.
Respuestas:
C (gcc) ,
127125124118 bytesr*=!e&(!t|t==c);
al golf enr>>=e||t&&t-c;
. (Este golf fue la inspiración para mi reciente actualización de consejos de respuesta C ).*(_-2)
al golf_[~1]
.*_++-10||(...)
al golf*_++<11?...:0
y utilizando el marcador de posición cero...:0
(que no se usa de manera constructiva) para jugar elc++
incremento. Esos campos de golf permitieron una nueva reorganización del circuito.Pruébalo en línea!
Diseño de origen logrando un rectángulo más alto.
Explicación
A continuación se explica la versión larga de 124 bytes.
Pruébalo en línea!
fuente
r,e,c,t
Java 10,
214176169152144139 bytes-5 bytes gracias a @Neil .
Usos en
String[]a
lugar devar a
;return-r<0;
en lugar dereturn r>0;
; y agregó un comentario//
al final, para que no haya espacios en la primera y última fila.Tenga en cuenta que este rectángulo es más corto que una entrada de una sola línea, ya que
int r=1,...;
debería reemplazarse porint[]v{1,...};
, y todos los usos de los enteros se convertirían env[n]
(donde n es el índice de la variable en la matrizv
).Pruébalo en línea.
Explicación:
Aquí está el mismo programa base con espacios (
128126 bytes ):-2 bytes gracias a @Neil .
Pruébalo en línea.
fuente
T-SQL,
237207 bytesSalidas 1 para rectangular, 0 de lo contrario. Tuve que usar toneladas de parens y brackets adicionales para eliminar espacios, estoy seguro de que hay mucho espacio para mejorar.
Explicacion :
Según nuestras opciones de E / S permitidas y la aclaración en los comentarios de las preguntas, la entrada se toma como filas separadas en una tabla preexistente t . Debido a que los datos en SQL están inherentemente desordenados, esa tabla incluye un campo de identidad "número de fila" i :
Básicamente, mi SQL realiza 3 subconsultas, cada una de las cuales devuelve
0
o se1
basa en los 3 criterios del código "rectangular". Esos 3 valores se multiplican juntos, solo devuelven1
un código que satisface los 3.EDITAR : criterios combinados 2 y 3 en el mismo SELECCIONAR para ahorrar espacio
La
TRIM(v)
función solo es compatible con SQL 2017 y versiones posteriores. Se necesitarían versiones anterioresLTRIM(RTRIM(v))
, lo que requeriría reequilibrar las filas.Una nota al azar: la
LEN()
función en SQL ignora los espacios finales, entoncesLEN('foo ') = 3
. Para obtener una longitud "verdadera", debe agregar un carácter al final y luego restar uno: Pfuente
C ++,
199183181175 bytesEsta función de plantilla acepta líneas como una colección de cadenas (que pueden ser cadenas anchas), pasadas como un par de iteradores.
Gracias al usuario Erroneous por recordarme al
back()
miembro destd::string
y por señalar quenpos+1
es cero.Equivalente sin golf
El único juego de golf real es concatenar la primera y la última línea para que podamos realizar un solo
find
espacio en ellas.Programa de prueba
fuente
.find(' ')+1==0
y ens.back()
lugar de*s.rbegin()
.JavaScript (Node.js) , 85 bytes
Pruébalo en línea!
fuente
NOR
operador!Python 2 , 82 bytes
Pruébalo en línea!
Invocar como
f("abcd", "e fg", "hijk")
.fuente
Haskell ,
10610298110109102 bytes¡Gracias a @nimi y @Laikoni por un byte cada uno!
Pruébalo en línea!
fuente
Haskell , 79 bytes
Pruébalo en línea! Toma la entrada como una lista de líneas.
El patrón
g(x:r)= ...
une la primera líneax
y la lista (posiblemente vacía) de líneas restantes ar
. Luegoall((==(0<$x)).(0<$))r
verifica si todas las líneasr
tienen la misma longitud quex
(Uso de este consejo ).Si no, entonces la conjunción
&&
cortocircuita y regresaFalse
, de lo contrario se evalúa el lado derecho. Allí se crea una cadena que consistex
en la primera línea,last(x:r)
la última línea der
(o la primera línea nuevamente en caso de quer
esté vacía) y(head<$>r)
el primer y(last<$>r)
el último carácter de cada línea. Para esta cadena,all(>='!')
verifica que no contenga espacios (no podemos usarla(>' ')
debido a la restricción del código fuente).fuente
contains at least one character that is neither a newline nor a space
, que también permite descartar el caso de la lista vacía.MATL , 13 bytes
La entrada es una matriz de cadenas, en el formato
{'abc' 'de'}
.La salida es una matriz que contiene solo unos, que es verdadera , o una matriz que contiene al menos un cero, que es falsey .
Pruébalo en línea! O verifique todos los casos de prueba , incluida la prueba de veracidad / falsedad.
Explicación
fuente
cO6Lt&(32=~
Pruébelo en línea! Simplemente anula las partes no fronterizas, luego verifica si hay espacios.cF6Lt&(32=~
. Siéntase libre de editarlo, o si no podemos dejarlo en los comentarios.JavaScript (ES6), 88 bytes
Pruébalo en línea!
fuente
Lienzo ,
1715 bytesPruébalo aquí!
Explicación (ASCII-fied para monoespacio):
fuente
Perl 5 , 70 bytes
Pruébalo en línea!
Salidas
0
para la verdad, cualquier otro número para falsey.fuente
Rojo ,
216191bytesPruébalo en línea!
Puse muchos paréntesis que de otra manera no serían necesarios en la primera y última fila.
fuente
Jalea , 17 bytes
Pruébalo en línea!
fuente
Does not seem to enforce equal line length
eso es todo lo que estaba diciendo." \n "
Pruébelo en línea!Jalea , 15 bytes
Utiliza un método desarrollado por Mnemonic en un envío Pyth eliminado (actualmente, debido a un fallo de caso límite). (si ahora está arreglado, ¡ ve a dar algo de crédito !)
Un enlace monádico que acepta una lista de caracteres que devuelve 1 o 0.
Pruébalo en línea!
¿Cómo?
fuente
Japt , 22 bytes
Respuesta no competitiva: hay un error conocido en Japt , donde las rotaciones de matriz bidimensionales truncan los resultados. Debido a ese error, el siguiente código solo funciona en entradas que son cuadradas. Sin embargo, si el error no estaba presente, el código a continuación debería funcionar completamente correctamente.
Toma la entrada como una matriz de cadenas. El uso de paréntesis en lugar de espacios hace que el requisito del código rectangular sea bastante fácil.
Probar aquí .
fuente
Ruby 2.5+, 63 bytes
Toma la entrada como una matriz de cadenas. Sin enlace de prueba, ya que la versión en TIO (2.4) es demasiado antigua para esta. En cambio, aquí hay una versión un poco más larga (69 bytes) para probar:
Pruébalo en línea!
La diferencia es que desde 2.5 Ruby admite pasar directamente un patrón Regex a los
all?, any?, none?
métodos, lo que nos ahorra algunos bytes. El método en sí mismo se explica por sí mismo: probamos:fuente
C (gcc) , 119 bytes
Toma la entrada como una lista (s) de n cadenas.
Pruébalo en línea!
fuente
C # (.NET Core) ,
145167 bytesPruébalo en línea!
fuente
S[0].IndexOf(" ")
está buscando un espacio en la primera línea yS[S.Count()-1].IndexOf(" ")
está buscando en la última línea. Si no hay espacio en la primera y última línea, es -2, que es cierto en-2 < -1
.True
cuando se pasa a su programa. Es una restricción adicional en este desafío.