Desafio
Dada uma sequência e um número, divida a sequência em várias partes do mesmo tamanho. Por exemplo, se o número for 3, você deve dividir a sequência em 3 partes, independentemente do comprimento da sequência.
Se o comprimento da corda não se dividir igualmente no número fornecido, você deve arredondar para baixo o tamanho de cada peça e retornar uma corda "restante". Por exemplo, se o comprimento da string de entrada for 13 e o número for 4, você deverá retornar quatro strings cada uma do tamanho 3, mais uma string restante do tamanho 1.
Se não houver resto, você pode simplesmente não retornar um ou retornar a string vazia.
É garantido que o número fornecido seja menor ou igual ao comprimento da sequência. Por exemplo, a entrada "PPCG", 7
não ocorrerá porque "PPCG"
não pode ser dividida em sete cadeias. (Suponho que o resultado correto seria (["", "", "", "", "", "", ""], "PPCG")
. É mais fácil simplesmente não permitir isso como entrada.)
Como de costume, a E / S é flexível. Você pode retornar um par de strings e o restante, ou uma lista de strings com o restante no final.
Casos de teste
"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")
Pontuação
Isso é código-golfe , então a resposta mais curta em cada idioma vence.
Pontos de bônus (não realmente 😛) por tornar sua solução realmente usar o operador de divisão do seu idioma.
;⁹/
PPCG
,7
de modo que o restante éPPCG
Respostas:
Python 2 , 63 bytes
Experimente online!
fonte
PHP> = 7.1, 75 bytes
Casos de teste
PHP> = 7.1, 52 bytes
imprima apenas o restante
Casos de teste
fonte
Pip , 21 bytes
20 bytes de código, +1 para
-n
sinalizador.Recebe entradas como argumentos de linha de comando; produz strings e o restante é separado por nova linha. Experimente online!
Explicação
Diversão com operações regex!
Vamos tomar
abcdefg
como nossa string e3
como nosso número. Construímos a regex(.{2})(.{2})(.{2})
, que corresponde a três execuções de dois caracteres e as armazena em três grupos de captura. Em seguida, usando as variáveis de correspondência de regex do Pip, podemos imprimir 1) a lista de grupos de captura["ab";"cd";"ef"]
e 2) o restante da sequência que não foi correspondida"g"
.fonte
Haskell , 62 bytes
#
é um operador pegando aeString
anInt
e retornando uma lista deString
s.Use como
"Hello, world!"#4
.Experimente online!
Como funciona
s
é a sequência de entrada en
é o número de partes não restantes.d
é o comprimento de cada peça "normal".div
é divisão inteira.n+1
peças, sendo o último o restante.i
itera de0
paran
, inclusive.i*d
) de caracteres iniciais édrop
calculada desde o início des
, então uma substring inicial étake
n a partir do resultado.d
, exceto a peça restante.n
, caso contrário, as peças normais seriam alongadas.take
retorna a string inteira se o comprimento fornecido for muito grande, para que possamos usar qualquer número>=n-1
para a peça restante.d+n*0^(n-i)
forneced
sei<n
ed+n
sei==n
. Usa que0^x
é1
quandox==0
, mas0
sex>0
.fonte
Python 2 ,
68 6765 bytes[]
x[p*i:p+p*i]
comox[p*i][:p]
Experimente online!
fonte
x[p*i:p+p*i]
porx[p*i:][:p]
:p
😛 Bem feito, superando as outras respostas do Python!C ++ 14,
209180 bytesIsso é um pouco longo, mas usa o operador de divisão:
Uso:
Versão online: http://ideone.com/hbBW9u
fonte
Pitão, 9 bytes
Experimente online
Como funciona
Primeiro
Q
é autoinicializado paraeval(input())
ez
é autoinicializado parainput()
.fonte
Gelatina , 11 bytes
Experimente online!
fonte
Ferrugem , 107 bytes
Experimente online!
Formatado:
Isso simplesmente
map
s índices nas fatias corretas da fontestr
(collect
em umVec
) e corta o restante.Infelizmente, não posso fazer um fechamento (74 bytes):
como o compilador falha com
e se eu fornecer o tipo de
s:&str
, as vidas estão erradas:fonte
Retina , 92 bytes
Experimente online! Explicação: O primeiro estágio converte o número de partes em unário e também leva o comprimento da sequência. O segundo estágio divide o comprimento pelo número de partes, deixando o restante. O terceiro estágio multiplica o resultado pelo número de peças novamente. Isso nos dá o número correto de strings do comprimento correto, mas elas ainda não têm o conteúdo. O número de peças agora pode ser excluído no quarto estágio. O quinto estágio inverte todos os personagens. Isso tem o efeito de alternar o conteúdo original com as cadeias de espaço reservado, mas, embora agora esteja no lugar certo, está na ordem inversa. Os espaços reservados cumpriram seu objetivo e são excluídos pela sexta etapa. Finalmente, o sétimo estágio reverte os personagens de volta à sua ordem original.
fonte
Perl 6 , 36 bytes
Experimente online!
Retorna uma lista de listas de strings, onde o último elemento é o restante (se houver um).
Explicação:
fonte
JavaScript (ES6), 77 bytes
Retorna uma matriz de dois elementos: as partes da string dividida e a parte restante.
Snippet de teste
fonte
Japonês , 18 bytes
Teste online! (usa
-Q
sinalizador para visualizar a saída)Explicação
fonte
Python,
827674 bytesBem, parece que isso se qualifica para os pontos de bônus. Em vez disso, posso receber um cookie? Oh espera, eles não são reais? Caramba ...
Experimente Online!
fonte
len(h)
? :)Python,
95, 87, 7673 bytesExperimente online!
fonte
05AB1E , 12 bytes
Experimente online!
Explicação
fonte
Braquilog , 16 bytes
Experimente online!
Pega entrada como uma lista
[string, number]
e sai como uma lista[remainder, parts]
. (Vírgulas foram substituídas por ponto e vírgula nos casos de teste "Olá, mundo!" Para maior clareza, pois os fragmentos de sequência não são impressos com aspas.)(Também substituí uma vírgula no código por um ponto-e-vírgula para um formato de saída consistente. Com a vírgula , os casos sem resto apenas produziriam as partes sem um restante vazio e, por mais legal que seja para alguns propósitos, não realmente sei por que funciona dessa maneira ...)
Depois de 16 bytes, tentei criar algo com base no
+₁ᵗ⟨ġl⟩
trabalho, mas, conforme as correções aumentavam cada vez mais, decidi que continuaria usando minha solução original por enquanto.fonte
C (gcc), 72 bytes
Experimente Online
fonte
Fórmula do Excel,
185173165161149 bytesO seguinte deve ser inserido como uma fórmula de matriz ( Ctrl+ Shift+ Enter):
Onde
A1
contém sua entrada (por exemplo12345678
) eB1
contém o divisor. Isso também usa o operador de divisão do Excel para um bônus.Depois de inserir a fórmula como uma fórmula de matriz, destaque-a na barra de fórmulas e avalie-a usando F9para retornar o resultado, por exemplo:
-12 bytes: substitua cada um
INDIRECT("1:"&B1+1)
porOFFSET(A1,,,B1+1)
para salvar 2 bytes por ocorrência, além de alguns ajustes, removendo colchetes redundantes.-8 bytes: remove a
INDEX
função redundante .-4 bytes: retrabalho a manipulação "restante".
-12 bytes: remova redundante
INT(LEN(A1)/B1)
deslocando a matriz geradaROW(OFFSET(A1,,,B1+1))
por -1.fonte
Python 2 ,
7776 bytes-1 byte graças a musicman523.
Experimente online!
fonte
Ruby , 53 bytes
Experimente online!
fonte
Mathematica, 58 bytes
Função pura, tendo como entrada uma lista de caracteres e um número inteiro positivo. Por exemplo, o último caso de teste é chamado por
e retorna:
fonte
Haskell,
12088 bytes (graças a Ørjan Johansen!)Faz
div
como o operador da divisão?Estou curioso para saber como resolver isso, ainda não aprendi todos os truques.
fonte
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)
. Portanto, (1) Um identificador usado repetidamente pode ser abreviado, especialmente se for longo. (2) Protetores e protetores de padrões são quase sempre menores quelet
...in
,where
eif
then
else
. (3) A correspondência de padrões geralmente é melhor que o teste de igualdade. (OK, quelet
em um protetor de padrões não é tão básico, eu aprendi recentemente com outra pessoa aqui.) E confira codegolf.stackexchange.com/questions/19255/… .let
na guarda é bastante desonesto. Mas código mais curto é mais legível, certo?Ohm, 3 bytes (não concorrente?)
Não concorrente porque o built-in ainda não foi implementado no TIO e não tenho um PC à mão para testar se ele funciona na última versão do repositório.
Incorporado ¯ \\ _ (ツ) _ / ¯. Eu usei o built-in errado ... Mas ei, ainda há outro por aí.Agora eu usei o built-in errado duas vezes (ou um interno funciona errado com os restantes).Recebo pontos de bônus porque
v
é a divisão (do piso)?fonte
Hello, world!
5
testcase está errado. Experimente online!CJam , 16 bytes
Bloco anônimo esperando os argumentos na pilha e deixa o resultado na pilha depois.
Experimente online!
Explicação
Espera argumentos como
number "string"
.fonte
J , 26 bytes
Além de espaços elminantes e etapas intermediárias, isso ainda não foi jogado. Espero que tenha percorrido o longo caminho de alguma forma, com meus parênteses e referências a argumentos (
[
e]
).Consulte o notebook Jupyter para ver os casos de teste, como os seguintes:
fonte
R ,
7963 bytes-16 de Giuseppe corrigindo a indexação
Experimente online!
Construído para fornecer entradas vetoriais para
substring()
fonte
PHP , 152 bytes
Obrigado @ JörgHülsermann (dica de colchetes!)
Experimente online!
fonte
preg_replace
é uma alternativa ou você pode usar[,$s,$d]=$argv;print_r(array_slice(str_split($s,$l=strlen($s)/$d^0),0,$d)+[$d=>substr($s,$l*$d)]);
A
na primeira corridaPython 3 , 94 bytes
Experimente online!
fonte
PowerShell v3 + ,
72, 80 bytesSupõe que
$s
contém a sequência de entrada;$n
contém o número de caracteres por "peça". Isso também pressupõe que "StrictMode" está desativado. Caso contrário, um erro seria retornado devido à indexação adicional em uma matriz do que realmente existe (ou seja, se a matriz tiver 4 elementos e eu chamar o quinto elemento inexistente). Com o StrictMode desativado, o PS não se importa e ignora o erro.Usando a notação,
($s|% ToCharA*)
pude salvar 1 caractere em comparação com$s.ToCharArray()
:)Atualizar:
Código atualizado para realmente satisfazer os requisitos dos desafios. Novamente assume que
$s
contém a string de entrada; no entanto, esse tempo$n
contém o número de "peças". O restante é impresso por último. E eu usei o operador de divisão do PowerShellExperimente online!
fonte