iBug recientemente recibió una barra larga hecha de materiales compuestos pero valiosos. La barra es tan larga que iBug no puede venderla fácilmente por créditos, por lo que quiere cortarla. La barra está hecha de materiales tan frágiles y mágicos que, si una parte se rompe, todas las partes de la barra hechas del mismo material también se romperán, lo que dificultará el corte arbitrario.
iBug quiere cortar la barra en tantas piezas como sea posible. También le encantan los programas muy cortos y el golf de código, por lo que hizo un análisis abstracto de su problema.
La barra mágica de iBug se representa como una cadena (o una matriz o una secuencia de caracteres si lo prefiere), así:
aaabbccccccbbbaaacccccaabbbaaaaa
Cada letra en la cadena representa un material mágico. La barra siempre coincide con el RegEx ^\w*$
, por lo que puede haber hasta 63 materiales en la barra. Una "parte" es una secuencia consecutiva de cualquier carácter que no esté separado por espacios.
iBug quiere que escribas un programa que calcule las partes máximas que podría obtener, si cero o más juegos de caracteres se eliminan por completo (reemplazados por espacios), y le dices a iBug ese número.
Ejemplo 1:
In: aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4
Descripción: si b
se elimina completamente de la barra, iBug podría obtener 4 partes. También puede obtener 4 partes quitando b
y c
, como se muestra a continuación
aaabbccccccbbbaaacccccaabbbaaaaa # Original string
aaa cccccc aaacccccaa aaaaa # Remove 'b'
aaa aaa aa aaaaa # Remove 'b' and 'c'
Y esa es la cantidad máxima de partes que iBug puede obtener de esta barra
Ejemplo 2
In: 111aa___9999____aaa99111__11_a_aa999
Result: 111aa 9999 aaa99111 11 a aa999
Out: 6
Descripción: Al eliminar solo el guión bajo, iBug puede obtener 6 partes de la barra y eso es lo máximo.
Ejemplo 3
In: __________
Out: 1
Descripción: ¿Qué? ¿Quieres cortar esto? Solo es posible obtener 1 parte si no la corta en absoluto.
Ejemplo 4
In:
Out: 0
Descripción: no hay nada que cortar, así que cero.
También hay algunas reglas que iBug quiere que los programas obedezcan:
A iBug no le gustan las lagunas estándar y están prohibidas.
Mientras funcione, no necesita ser un programa completo. También se acepta una función que toma la entrada de un parámetro y da salida a través del valor de retorno.
Se permiten entradas y salidas flexibles. Su programa o función puede tomar una cadena, o una serie de caracteres, o lo que sea más fácil de manejar. Puede dar el resultado imprimiendo el número o devolviéndolo.
Ejemplos de casos de prueba (pero no limitados a estos)
aaabbbaaa = 2
123456789 = 5
AaAaAaAa = 4
aaabcccdedaaabefda = 6
________ = 1
(empty) = 0
Como se trata de un código de golf , ¡el programa más corto (en bytes) en cada idioma gana!
Extra
iBug aprecia mucho si puede proporcionar una explicación para su programa, a pesar de que no afecta su puntuación (todavía es la longitud en bytes).
123456789
rinde 5? ¿Y cómoaaabcccdedaaabefda
rinde 6? Obtengo 2 y 4 respectivamente para estos dos casos de prueba.2468
, para el segundo, eliminarbd
.2,4,6,8
del primero yb,d,f
del segundo.Respuestas:
Haskell ,
73 7170 bytes¡Gracias a Laikoni por guardar 1 byte!
Pruébalo en línea!
fuente
maximum$(length$words x):
se puede acortar amaximum$length(words x):
.JavaScript (ES6),
10990 bytesAlgo lento en el
123456789
caso de prueba. La respuesta anterior de 109 bytes no se limitó a!/\s/
:fuente
Python 2 ,
1119372 bytes-21 bytes gracias Kirill L.
Pruébalo en línea!
fuente
Jalea ,
1311 bytesDemasiadas instrucciones de2
bytes-2 gracias a Zgarb (use el producto externo rápidoþ
>. <)Un enlace monádico que acepta una lista de caracteres y devuelve un entero no negativo.
Pruébalo en línea!
¿Cómo?
Para cada subsecuencia de la entrada (los conjuntos que podemos eliminar, más los equivalentes redundantes), se obtiene una lista de existencia para identificar cuáles se eliminan, luego encuentra efectivamente cuántas ejecuciones de ceros quedan y produce el máximo. La última parte funciona de una manera un tanto extraña, ya que me pareció más golfista que las alternativas más ingenuas: encuentra las carreras como
[element, count]
pares, niega identificar los ceros como unos, las sumas encuentran el máximo y luego toma la cabeza (la suma de elementos en lugar de contar) )fuente
€Đ€
puede serþ
.Ruby ,
98 89 75 6461 bytesPruébalo en línea!
más pequeño y más lento que antes!
Básicamente un puerto de la respuesta Javascript de @ Neil
Sin golf y anotado
Pruébalo en línea!
fuente
Casco ,
1211 bytesPruébalo en línea! Esto funciona por fuerza bruta y es bastante lento. Agregue
u
al extremo derecho para que funcione más rápido, sin cambiar la semántica.Explicación
fuente
Perl 5 , (versiones anteriores)
-p -I.
,524943 bytesConteo de estilo antiguo:
+3
para-p
:46
bytes (porque debe estar en un programa, no se puede ejecutar usando-e
)barsplit.pl
:Ejecutar con la cadena en STDIN:
Pruébalo en línea!
La
-I.
opción está ahí para hacer que esto también funcione en perls recientes en los que, de forma predeterminada,.
ya no hay más@INC
. En versiones anteriores de perl esa opción no es necesaria. Probé eso en una máquina más antigua que todavía teníaperl 5.20
, por lo que la puntuación se basa en eso (de lo contrario, también debería contar el.
argumento para-I
)Versión rápida (
49
bytes):fuente
Wolfram Language (Mathematica) , 77 bytes
Pruébalo en línea!
fuente