Reto
Dada una cadena y un número, divida la cadena en tantas partes del mismo tamaño. Por ejemplo, si el número es 3, debe dividir la cadena en 3 partes, independientemente de su longitud.
Si la longitud de la cadena no se divide de manera uniforme en el número proporcionado, debe redondear el tamaño de cada pieza y devolver una cadena "restante". Por ejemplo, si la longitud de la cadena de entrada es 13 y el número es 4, debe devolver cuatro cadenas cada una de tamaño 3, más una cadena restante de tamaño 1.
Si no hay resto, simplemente no puede devolver uno o devolver la cadena vacía.
Se garantiza que el número proporcionado será menor o igual que la longitud de la cadena. Por ejemplo, la entrada "PPCG", 7
no ocurrirá porque "PPCG"
no se puede dividir en 7 cadenas. (Supongo que el resultado correcto sería (["", "", "", "", "", "", ""], "PPCG")
. Es más fácil simplemente no permitir esto como entrada).
Como de costumbre, la E / S es flexible. Puede devolver un par de cadenas y la cadena restante, o una lista de cadenas con el resto al final.
Casos de prueba
"Hello, world!", 4 -> (["Hel", "lo,", " wo", "rld"], "!") ("!" is the remainder)
"Hello, world!", 5 -> (["He", "ll", "o,", " w", "or"], "ld!")
"ABCDEFGH", 2 -> (["ABCD", "EFGH"], "") (no remainder; optional "")
"123456789", 5 -> (["1", "2", "3", "4", "5"], "6789")
"ALABAMA", 3 -> (["AL", "AB", "AM"], "A")
"1234567", 4 -> (["1", "2", "3", "4"], "567")
Tanteo
Este es el código de golf , por lo que gana la respuesta más corta en cada idioma.
Los puntos de bonificación (no realmente 😛) para hacer que su solución realmente use el operador de división de su idioma.
;⁹/
PPCG
, agregue un caso de prueba ,7
por lo que el resto esPPCG
Respuestas:
Python 2 , 63 bytes
Pruébalo en línea!
fuente
PHP> = 7.1, 75 bytes
Casos de prueba
PHP> = 7.1, 52 bytes
imprime solo el resto
Casos de prueba
fuente
Pipa , 21 bytes
20 bytes de código, +1 para
-n
bandera.Toma entradas como argumentos de línea de comandos; produce cadenas y el resto separados por nueva línea. Pruébalo en línea!
Explicación
Diversión con operaciones de expresiones regulares!
Tomemos
abcdefg
como nuestra cadena y3
como nuestro número. Construimos la expresión regular(.{2})(.{2})(.{2})
, que coincide con tres corridas de dos caracteres y los almacena en tres grupos de captura. Luego, utilizando las variables de coincidencia de expresiones regulares de Pip, podemos imprimir 1) la lista de grupos de captura["ab";"cd";"ef"]
y 2) el resto de la cadena que no coincidió"g"
.fuente
Haskell , 62 bytes
#
es un operador que toma unString
y unInt
, y devuelve una lista deString
s.Usar como
"Hello, world!"#4
.Pruébalo en línea!
Cómo funciona
s
es la cadena de entrada yn
es el número de piezas no restantes.d
es la longitud de cada pieza "normal".div
es la división entera.n+1
piezas, siendo la última el resto.i
itera de0
an
, inclusive.i*d
) de caracteres iniciales sedrop
pedirá desde el principio des
, luego una subcadena inicial estake
n del resultado.d
, a excepción de la pieza restante.n
, de lo contrario, las piezas normales se alargarían en su lugar.take
devuelve la cadena completa si la longitud dada es demasiado grande, por lo que podemos usar cualquier número>=n-1
para la pieza restante.d+n*0^(n-i)
dad
sii<n
yd+n
sii==n
. Utiliza que0^x
es1
cuandox==0
, pero0
six>0
.fuente
Python 2 ,
68 6765 bytes[]
x[p*i:p+p*i]
comox[p*i][:p]
Pruébalo en línea!
fuente
x[p*i:p+p*i]
conx[p*i:][:p]
:p
😛 ¡Bien hecho superando a las otras respuestas de Python!C ++ 14,
209180 bytesEso es demasiado largo, pero usa el operador de división:
Uso:
Versión en línea: http://ideone.com/hbBW9u
fuente
Pyth, 9 bytes
Pruébalo en línea
Cómo funciona
Primero
Q
se autoinicializaeval(input())
yz
se autoinicializainput()
.fuente
Jalea , 11 bytes
Pruébalo en línea!
fuente
Óxido , 107 bytes
Pruébalo en línea!
Formateado:
Esto simplemente
map
envía índices a las porciones correctas de la fuentestr
(collect
ing en aVec
) y corta el resto.Desafortunadamente, no puedo hacer esto un cierre (74 bytes):
ya que el compilador falla con
y si proporciono el tipo de
s:&str
, las vidas son incorrectas:fuente
Retina , 92 bytes
Pruébalo en línea! Explicación: La primera etapa convierte el número de partes a unario y también toma la longitud de la cadena. La segunda etapa luego divide la longitud por el número de partes, dejando el resto. La tercera etapa multiplica el resultado por el número de partes nuevamente. Esto nos da el número correcto de cadenas de la longitud correcta, pero aún no tienen el contenido. El número de partes ahora se puede eliminar en la cuarta etapa. La quinta etapa invierte todos los personajes. Esto tiene el efecto de cambiar el contenido original con las cadenas de marcador de posición, pero aunque ahora está en el lugar correcto, está en orden inverso. Los marcadores de posición han cumplido su propósito y se eliminan en la sexta etapa. Finalmente, la séptima etapa invierte a los personajes a su orden original.
fuente
Perl 6 , 36 bytes
Pruébalo en línea!
Devuelve una lista de listas de cadenas, donde el último elemento es el resto (si hay uno).
Explicación:
fuente
JavaScript (ES6), 77 bytes
Devuelve una matriz de dos elementos: las partes de cadena divididas y la parte restante.
Fragmento de prueba
fuente
Japt , 18 bytes
¡Pruébelo en línea! (usos
-Q
bandera para visualizar la salida)Explicación
fuente
Python,
827674 bytesBueno, parece que esto califica para los puntos de bonificación. ¿Puedo recibir una cookie en su lugar? Oh espera, ¿no son reales? Maldito...
¡Pruébelo en línea!
fuente
len(h)
? :)Python,
95, 87, 7673 BytesPruébalo en línea!
fuente
05AB1E , 12 bytes
Pruébalo en línea!
Explicación
fuente
Brachylog , 16 bytes
Pruébalo en línea!
Toma la entrada como una lista
[string, number]
y las salidas como una lista[remainder, parts]
. (Las comas se reemplazaron con punto y coma en los casos de prueba "¡Hola, mundo!" Para mayor claridad, ya que los fragmentos de cadena no se imprimen con comillas).(También reemplacé una coma en el código con un punto y coma para un formato de salida consistente. Con la coma , los casos sin resto solo mostrarían las partes sin un resto vacío, y por muy bueno que sea para algunos propósitos, no realmente sé por qué funciona de esa manera ...)
Después de que esto resultó ser un total de 16 bytes, traté de hacer algo basado en el
+₁ᵗ⟨ġl⟩
trabajo, pero a medida que las correcciones se hicieron más y más largas, decidí que me quedaría con mi solución original por ahora.fuente
C (gcc), 72 bytes
Pruébalo en línea
fuente
Fórmula de Excel,
185173165161149 bytesLo siguiente debe ingresarse como una fórmula de matriz ( Ctrl+ Shift+ Enter):
Donde
A1
contiene su entrada (por ejemplo12345678
) yB1
contiene el divisor. Esto también utiliza el operador de división de Excel para obtener una bonificación.Después de ingresar la fórmula como una fórmula de matriz, resáltela en la barra de fórmulas y evalúela usando F9para devolver el resultado, por ejemplo:
-12 bytes: sustituirse unos
INDIRECT("1:"&B1+1)
conOFFSET(A1,,,B1+1)
al ahorro 2 bytes por ocurrencia, más un poco de poner en orden la eliminación de soportes redundantes.-8 bytes: eliminar la
INDEX
función redundante .-4 bytes: retrabajar el manejo del "resto".
-12 bytes: eliminar redundantes
INT(LEN(A1)/B1)
compensando la matriz generadaROW(OFFSET(A1,,,B1+1))
por -1.fuente
Python 2 ,
7776 bytes-1 byte gracias a musicman523.
Pruébalo en línea!
fuente
Ruby , 53 bytes
Pruébalo en línea!
fuente
Mathematica, 58 bytes
Función pura que toma una lista de caracteres y un entero positivo como entrada. Por ejemplo, el último caso de prueba es llamado por
y vuelve:
fuente
Haskell
12088 bytes (¡gracias a Ørjan Johansen!)¿
div
Cuenta como el operador de división?Tengo curiosidad por saber cómo podría reducir esto, todavía no he aprendido todos los trucos.
fuente
t=splitAt;x!s|n<-div(length s)x,let g""=[];g s|(f,r)<-t n s=f:g r,(a,b)<-t(n*x)s=(g a,b)
. Entonces, (1) Un identificador usado repetidamente puede abreviarse, especialmente si es largo. (2) Los guardias y los guardias de patrones son casi siempre más cortos quelet
...in
,where
yif
then
else
. (3) La coincidencia de patrones suele ser mejor que la prueba de igualdad. (OK,let
en un patrón de protección no es tan básico, recientemente lo aprendí de otra persona aquí). Y echa un vistazo a codegolf.stackexchange.com/questions/19255/… .let
en la guardia es bastante tortuoso. Pero el código más corto es más legible, ¿verdad?Ohm, 3 bytes (¿no compite?)
No compite porque el incorporado aún no está implementado en TIO y no tengo una PC a mano para probar si funciona en el último tirón en el repositorio.
¯ \\ _ (ツ) _ / ¯ incorporado. Utilicé el incorporado incorrecto ... Pero bueno, todavía hay otro por ahí.Ahora usé el incorporado incorrecto dos veces (o uno incorporado funciona mal con los restos).¿Obtengo puntos de bonificación porque
v
es la división (piso)?fuente
Hello, world!
5
prueba está mal. Pruébalo en línea!CJam , 16 bytes
Bloque anónimo que espera los argumentos en la pila y deja el resultado en la pila después.
Pruébalo en línea!
Explicación
Espera argumentos como
number "string"
.fuente
J 26 bytes
Aparte de la eliminación de espacios y pasos intermedios, esto no ha sido golfizado. Espero haber tomado el camino largo de alguna manera, con mis paréntesis y referencias de argumentos (
[
y]
).Consulte el cuaderno Jupyter para ver casos de prueba, como los siguientes:
fuente
R ,
7963 bytes-16 de Giuseppe arreglando la indexación
Pruébalo en línea!
Construido alrededor de dar entradas de vectores a
substring()
fuente
PHP , 152 bytes
Gracias @ JörgHülsermann (¡punta de paréntesis!)
Pruébalo en línea!
fuente
preg_replace
es una alternativa o se puede usar[,$s,$d]=$argv;print_r(array_slice(str_split($s,$l=strlen($s)/$d^0),0,$d)+[$d=>substr($s,$l*$d)]);
A
en la primera carreraPython 3 , 94 bytes
Pruébalo en línea!
fuente
PowerShell v3 + ,
72, 80 bytesAsume
$s
contiene la cadena de entrada;$n
contiene el número de caracteres por "pieza". Esto también supone que "StrictMode" está desactivado. De lo contrario, se devolvería un error debido a la indexación en una matriz más de lo que realmente existe (es decir, si la matriz tiene 4 elementos y yo llamo el 5to elemento inexistente). Con StrictMode desactivado, a PS no le importa e ignorará el error.Usando la notación
($s|% ToCharA*)
pude guardar 1 carácter en comparación con$s.ToCharArray()
:)Actualizar:
Código actualizado para satisfacer los requisitos de desafíos. De nuevo se supone que
$s
contiene la cadena de entrada; sin embargo, esta vez$n
contiene el número de "piezas". El resto se imprime al final. Y usé el operador de división de PowerShellPruébalo en línea!
fuente