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", 7no 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 ,7por lo que el resto esPPCGRespuestas:
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
-nbandera.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
abcdefgcomo nuestra cadena y3como 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 unStringy unInt, y devuelve una lista deStrings.Usar como
"Hello, world!"#4.Pruébalo en línea!
Cómo funciona
ses la cadena de entrada ynes el número de piezas no restantes.des la longitud de cada pieza "normal".dives la división entera.n+1piezas, siendo la última el resto.iitera de0an, inclusive.i*d) de caracteres iniciales sedroppedirá desde el principio des, luego una subcadena inicial estaken del resultado.d, a excepción de la pieza restante.n, de lo contrario, las piezas normales se alargarían en su lugar.takedevuelve la cadena completa si la longitud dada es demasiado grande, por lo que podemos usar cualquier número>=n-1para la pieza restante.d+n*0^(n-i)dadsii<nyd+nsii==n. Utiliza que0^xes1cuandox==0, pero0six>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
Qse autoinicializaeval(input())yzse autoinicializainput().fuente
Jalea , 11 bytes
Pruébalo en línea!
fuente
Óxido , 107 bytes
Pruébalo en línea!
Formateado:
Esto simplemente
mapenvía índices a las porciones correctas de la fuentestr(collecting 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
-Qbandera 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
A1contiene su entrada (por ejemplo12345678) yB1contiene 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
INDEXfunció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!)¿
divCuenta 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,whereyifthenelse. (3) La coincidencia de patrones suele ser mejor que la prueba de igualdad. (OK,leten 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/… .leten 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
ves la división (piso)?fuente
Hello, world!5prueba 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_replacees 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)]);Aen la primera carreraPython 3 , 94 bytes
Pruébalo en línea!
fuente
PowerShell v3 + ,
72, 80 bytesAsume
$scontiene la cadena de entrada;$ncontiene 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
$scontiene la cadena de entrada; sin embargo, esta vez$ncontiene 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