El reto
En este desafío, debe realizar dos tareas diferentes (pero relacionadas) dependiendo del orden de la entrada.
Su programa recibirá una cadena s
y un número entero n
como entrada y
- dividir
s
en pedazos de longitudn
sis
viene primero. El último elemento será más corto si es necesario. - dividir
s
enn
pedazos de igual longitud sin
viene primero. Silen(s)
no es un múltiplo den
los primeroslen(s) mod n
elementos será uno más largo.
Solo puede tomar esas 2 entradas. s
nunca contendrá solo dígitos.
Notas
- Puede usar el mapeo inverso. Tenga esto en cuenta en su respuesta si lo hace.
s
solo contendrá caracteres ASCII imprimibles (sin líneas nuevas).- No puede utilizar ningún componente incorporado que resuelva esas dos tareas directamente. Todas las demás construcciones están permitidas.
- Tienes que tomar ambos argumentos de la misma fuente.
- Puede tomar los argumentos en una lista ordenada o en cualquier otro formato que indique claramente su orden siempre que no sea ambiguo.
- Puede tomar la entrada como una cadena / secuencia y usar un carácter que no sea una entrada válida (como un nulobyte) para separarlos.
n
siempre será igual o menor que la longituds
y mayor que cero.- Puede generar la lista resultante en cualquier formato razonable siempre que indique claramente las piezas particulares y su orden.
Ejemplo
Entrada: programming, 3
el último elemento contiene solo 2 caracteres, porque 11 no es divisible por 3.
Salida: ["pro", "gra", "mmi", "ng"]
Entrada: 3, programming
11 no es múltiplo de 3, por lo que los 2 primeros elementos serán uno más largo:
Salida: ["prog", "ramm", "ing"]
Reglas
- Función o programa completo permitido.
- Reglas predeterminadas para entrada / salida.
- Se aplican lagunas estándar .
- Este es el código de golf , por lo que gana el conteo de bytes más bajo. Tiebreaker es una presentación anterior.
Casos de prueba
Los casos de prueba se generaron con este programa Pyth (usa incorporados, por lo que no hay una respuesta válida). ¡Gracias a @FryAmTheEggman por proporcionar la versión base de eso!
3, helloworld -> ['infierno', 'owo', 'rld'] helloworld, 3 -> ['hel', 'low', 'orl', 'd'] 1, programación -> ['programación'] programación, 1 -> ['p', 'r', 'o', 'g', 'r', 'a', 'm', 'm', 'i', 'n', 'g'] 8, programación -> ['pr', 'og', 'ra', 'm', 'm', 'i', 'n', 'g'] programación, 8 -> ['programm', 'ing'] 9, código golf -> ['c', 'o', 'd', 'e', '', 'g', 'o', 'l', 'f'] código golf, 9 -> ['código golf'] 4, 133tspeak -> ['133', 'ts', 'pe', 'ak'] 133tspeak, 4 -> ['133t', 'spea', 'k']
¡Feliz codificación!
Respuestas:
MATL,
462621272942 bytesPruébalo en línea! (Actualizado ligeramente para trabajar con la última versión del idioma)
Explicación
fuente
e
una construcción prohibida?XUZN?...
porU?...
e intercambiar las dosif
ramas. Además, no necesita el3$
e
no resuelve directamente el problema, por lo que no considero que esté prohibido, no.JavaScript (ES6), 132 bytes
Probablemente esto esté irremediablemente sobre-diseñado.
fuente
JavaScript (Firefox),
8887 bytesLlámalo como
(...)("programming")(3)
usando Firefox 30+.fuente
Ruby, 119 bytes
Y tomo el primer lugar por 2 bytes ...
fuente
x.scan(/.{,#{y}})
funciona igual de bien para dividir las cadenas en el primer caso. ¿O eso cuenta como una construcción?AWK,
121130128122 BytesEl único problema es si la primera entrada es una cadena que comienza con un valor numérico. Esto provocaría
AWK
ver la cadena como ese número y la segunda entrada como la cadena.OK ... solucionó el problema numérico, pero agregó 9 bytes :(.
Se modificó un poco para guardar un par de bytes.
Casi de vuelta a la longitud original. :)
fuente
Haskell, 131 bytes
Ejemplo de uso:
Cómo funciona: el trabajo principal lo realiza la función auxiliar
q
que toma un par de números(d,m)
y una cadenas
. Primero construye una lista dem
vecesd+1
seguida de infinitasd
(ej.(1,3)
->[2,2,2,1,1,1,1,1,...]
). Luego se usasplitPlaces
para dividirses
en trozos de longitudes dados por la lista.splitPlaces
se detiene si ses
quedan sin elementos, por lo que una lista infinita está bien.La función principal
#
verifica qué parámetro es el númeron
/ cadenastr
y llamaq
con uno(div (length str) n, mod (length str) n)
o(n, 0)
másstr
.fuente
C # (LINQPAD) - 335 bytes
La parte de lectura de entrada tomó un poco de espacio. Ganador de la respuesta más larga.
Uso # 1:
Uso # 2:
fuente
Pyth, 181 bytes
Supongamos que el código más largo en bytes gana \ o /
Pruébalo aquí! (El intérprete en línea parece tener un error, muestra la entrada mientras no debería)
Aquí está la salida del terminal:
En serio, estoy abierto a un nuevo enfoque. Soy nuevo en Python, así que probablemente me perdí algunas manos cortas.
Quiero decir, creo que mi respuesta es independiente desde el punto en que es más larga que la respuesta de JavaScript ...
fuente
testcases
. Los casos de prueba son generados por Pyth. La solución es.xcsJKcJsK
dóndeJ
y dóndeK
están los dos argumentos.PHP, 114 bytes
(Reemplace
+@$p
conis_numeric($p)
para arreglar).(Inserte
~
para ASCII imprimible,a&
para cualquier ASCII antes$t;
de arreglarlo).-nr
o probarlo en línea .fuente
PowerShell ,
122118 bytesPruébalo en línea!
Menos golfizado:
fuente