Su desafío hoy es tomar una cadena multilínea y generar el cuadrado más grande contenido dentro de la cadena que incluye la esquina superior izquierda.
Una cadena cuadrada es aquella donde:
- 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.
Considere la siguiente cadena de entrada posible:
abcde
fgh
asdf
foobar
El cuadrado más grande que puede tomar de él que incluye el primer carácter ( a
en la esquina superior izquierda) es este:
abc
fgh
asd
No puede haber un cuadrado de longitud lateral 4, porque la segunda línea no es lo suficientemente larga. Ahora considere esta entrada potencial:
a
bcd
edf
ghi
La plaza más grande aquí es justa a
. El cuadrado de 3x3 formado en la parte inferior no contiene el primer carácter, y no cuenta.
Aquí hay algunos casos de prueba más:
a
a
abc
def
gh
ab
de
ab
cd
ab
cd
abcde
fghij
klm
no
abc
fgh
klm
a
b
a
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 que todas las líneas no están vacías, y que solo contiene ASCII imprimible, incluidos espacios y líneas nuevas (para el delimitador de línea) pero no pestañas.
Este es el código de golf , ¡la menor cantidad de bytes gana!
.split('\n')
así que no veo por qué algunas deberían obtenerla de forma gratuita.Respuestas:
Brachylog , 11 bytes
Pruébalo en línea!
Explicación
fuente
ṁ
incorporado es bastante útil!Cáscara , 13 bytes
Pruébalo en línea!
Explicación
fuente
GNU sed ,
106 + 194 + 2 = 96 bytes+2 bytes para
-rz
banderas. Utiliza caracteres no imprimibles NUL y BEL, mostrados como@
y#
aquí. Vea a continuación un volcado xxd.Gracias a @seshoumara por enviarme por el camino
-z
.Pruébalo en línea!
Explicación
Esto funciona insertando dos cursores en el texto: uno para pasar sobre líneas y otro para pasar sobre columnas. Los cursores están representados por NUL (0x00) y BEL (0x07), respectivamente, pero en los siguientes ejemplos usaré
@
y#
. Supongamos que tenemos esta entrada:El cursor BEL se inserta antes de la columna 0 y el cursor BEL antes de la línea 0 (aquí he mantenido las columnas alineadas para la legibilidad; pero en realidad no hay relleno izquierdo):
En un bucle, los cursores se mueven un carácter hacia la derecha y una línea hacia abajo, respectivamente:
Después de cada iteración, verifica dos condiciones:
Si cualquiera de las condiciones es falsa, el ciclo termina. El script finaliza eliminando todo lo que sigue
@
en cada línea y todo lo que sigue#
en el espacio del patrón.volcado xxd
fuente
line1\nline2\nline3
dónde\n
está\x5C\x6E
? ¿Cual?\n
se interpreta como un carácter de nueva línea (\x0A
, no\x5C\x6E
) y no puedo encontrar una manera de hacer que sed ingrese los caracteres de nueva línea como una sola línea.-z
bandera. ¡Gracias!Python 2 , 81 bytes
Pruébalo en línea!
Un método interesante, pero 2 bytes más largo.
Python 2 , 83 bytes
Pruébalo en línea!
fuente
input
solo lee una línea?raw_input()
agregaría más bytes.JavaScript (ES6), 77 bytes
Utiliza recursivamente una expresión regular para buscar un cuadrado cada vez más grande hasta que no se encuentre ninguno.
La expresión regular sería esta para un cuadrado de 3x3:
Se espera que la entrada termine con una nueva línea, y la salida es una lista.
Explicación:
Retazo:
Mostrar fragmento de código
fuente
Brachylog , 16 bytes
Pruébalo en línea!
fuente
Perl 5 , 84 bytes
Pruébalo en línea!
Cumple el
"abcde\nfghij\nklm\nno"
caso de prueba.fuente
chop
lugar dechomp
y en++$i<@a
lugar de$i++<$#a
R ,
84838176 bytes-5 bytes portando el enfoque de Dennis con
sum
Pruébalo en línea!
lee desde stdin, imprime en stdout sin una nueva línea final.
Ligeramente incólume:
fuente
C (gcc) ,
162159151147144142137 bytesDebe haber algunos golpes para jugar golf aquí ...
Pruébalo en línea!
fuente
!=-1
ser>-1
ogetchar()
los valores de salida son menores que menos uno? ¿Podría ser+1
?~
para detectar menos uno.Jalea , 15 bytes
Pruébalo en línea!
Cómo funciona
fuente
Java 8, 150 bytes
Explicación:
Pruébalo aquí
fuente
MATL , 33 bytes
Pruébalo en línea!
Mi sentido arácnido me dice que probablemente haya un camino más corto (estoy pensando en algo
Ybo
desde el principio) ... Requiere una nueva línea al final. (Nota: diseñé un poco más, ya que esto también manejará líneas vacías, lo cual no es necesario. Veré si puedo reducir el bytecount, porque en el código de golf, no es una característica, sino un error)fuente
Python 2 , 132 bytes
Pruébalo en línea!
fuente
Python 2 , 103 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 95 bytes
Requiere una nueva línea final en la entrada.
fuente
Wolfram Language (Mathematica) , 81 bytes
Pruébalo en línea!
fuente
APL (Dyalog) , 25 bytes *
Función de prefijo tácito. Devuelve una matriz.
Pruébalo en línea!
Es realmente una cima de dos funciones independientes, a saber,
⎕AV[3]∘≠⊆⊢
que se ocupa del formato de entrada incómodo y↑↑⍨2⍴(⌊/≢,≢¨)
que hace el trabajo interesante real.⎕AV[3]∘≠
diferencia de LF (el tercer elemento de la A tomic V ector - el conjunto de caracteres)⊆
particiones (subcadenas que comienzan en valores mayores que su predecesor y caen en 0)⊢
el argumento(
...)
aplique la siguiente función tácita:2⍴(
...)
remodelar lo siguiente a la longitud 2:⌊/
el mínimo de≢
la cantidad de cuerdas,
seguido por≢¨
la cantidad de caracteres en cada cadena↑⍨
tomar tantas filas y columnas de↑
Las cadenas se mezclan para formar una matriz (relleno con espacios)* En el clásico con
⎕ML
( M igraci L evel)3
(por defecto en muchos sistemas) y sustituyendo⊂
por⊆
y⊃
para el extremo izquierdo↑
. Tio!fuente
⎕ML←3
están en desuso, por lo que prefiero mostrar el idioma como normalmente aparecería. De hecho, casi todas mis soluciones Dyalog APL asumen Classic solo porque contamos bytes en lugar de caracteres, aunque incluso la versión Unicode asigna significado a menos de 256 caracteres.PHP, 123 bytes
requiere PHP 5.4, 5.5 o 5.6. Reemplazar
split
conexplode
para PHP más tarde.Ejecutar
php -nr '<code> '<string>'
o probarlo en línea . (¡Asegúrese de seleccionar una versión PHP adecuada!)
fuente
Haskell ,
9288 bytesPruébalo en línea!
fuente
Perl 5, 60 +5 (-0777p) bytes
Pruébalo en línea
fuente
-0777
. Qué hacer-00
y-0777
qué hacer, de todos modos.-0
es especificar el separador de registros en formato octal777
es un valor especial para indicar que no hay separador para que se lea todo el archivo,0
es otro valor especial para indicar el "modo de párrafo", el separador es más de 1 nueva línea consecutivaPerl 6 ,
158140 bytesPruébalo en línea!
¡Hurra por mi primera respuesta de Perl 6! Jugaré con algunas opciones de línea de comandos para ver si puedo jugar un poco más. ¡Toda la ayuda para guardar bytes es bienvenida!
fuente
Scala , 201 bytes
Pruébalo en línea!
Golf por primera vez en este idioma, así que quizás no sea el mejor.
fuente