Sua tarefa é escrever um programa que, dado um número e uma string, divida a string em pedaços desse tamanho e os inverta.
Regras
Seu programa receberá um número inteiro positivo n
, bem como uma string s
com comprimento pelo menos um que consiste apenas em ASCII imprimível (não incluindo espaço em branco). A string deve então ser dividida em pedaços de comprimento n
, se o comprimento da string não for divisível por n
qualquer sobra no final deve ser considerado seu próprio pedaço. Em seguida, inverta a ordem dos pedaços e junte-os novamente.
Casos de teste
n s Output
2 abcdefgh ghefcdab
3 foobarbaz bazbarfoo
3 abcdefgh ghdefabc
2 a a
1 abcdefgh hgfedcba
2 aaaaaa aaaaaa
2 baaaab abaaba
50 abcdefgh abcdefgh
6 abcdefghi ghiabcdef
Isso é código-golfe , então você deve procurar o mínimo de bytes possível.
Respostas:
Geléia , 2 bytes
Um programa completo que imprime o resultado.
Experimente online!
Quão?
fonte
Python 3 , 35 bytes
Experimente online!
fonte
and
palavra - chave funciona aqui? @ Dennis05AB1E ,
5 43 bytes-1 graças a Dennis
-1 graças a carusocomputing
Experimente online!
fonte
¹
não é necessário.JavaScript (ES6), 37 bytes
Pega entrada currying: numere primeiro, depois string, como
f(2)("abcdefgh")
.Mostrar snippet de código
fonte
Perl 6 ,
2820 bytesTente
Tente
Expandido:
fonte
Bash + coreutils, 22
Experimente online .
fonte
Haskell , 32 bytes
Experimente online!
fonte
PHP, 53 bytes
fonte
Röda , 36 bytes
Experimente online!
É uma função que leva um argumento. Os caracteres da sequência devem estar no fluxo.
try
é usado para descartar erros caso ahead
função não possa lern-1
valores.Explicação:
Não tão ofuscado como normalmente. Eu acho muito bonito. :)
fonte
[[try head n]]
funciona em vez de[[_]..[try head n-1]]
?_
loop na expressão.[[try head n]]
levaria n valores uma vez , mas[[_]..[try head n-1]]
leva n valores desde que restem valores.CJam , 5 bytes
Entrada é um número e uma cadeia de caracteres entre aspas duplas, separadas por espaços em branco.
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Lote, 74 bytes
De maneira irritante, isso acaba sendo recursivo ao invés de recursivo da cauda.
fonte
V ,
1310 bytesExperimente online!
Em ação:
torna-se em
que se torna
antes que todas as novas linhas sejam removidas
fonte
brainfuck , 78 bytes
O primeiro byte da entrada é o tamanho do bloco, fornecido pelo valor do byte. O restante dos bytes é considerado a string.
Experimente online!
Expandido e comentado
fonte
PowerShell,
5649 bytes-7 bytes graças ao mazzy
Experimente online!
fonte
.ps1
e tente chamar esse script em vez de seu código. Se funcionar, o teste foi bem-sucedido.Mathematica, 46 bytes
Função anônima. Pega um número e uma sequência como entrada e retorna uma sequência como saída. Não há muito para ver aqui.
fonte
Javascript -
544746 bytesRemade:
Usado como
Obrigado a @ETHproductions por algumas atualizações da RegEx Obrigado a @Shaggy por um byte extra na avaliação!
Original:
fonte
eval('/.{1,'+n+'}/g')
s=>n=> ...
eval("/.{1,${n}}/g")
, usando backticks em vez de aspas.Pitão, 5 bytes
Experimente online .
Explicação
fonte
Retina , 38 bytes
1 byte salvo graças a @LeakyNun
(Observe o espaço na segunda linha e o espaço à direita)
Este programa considera a entrada como unária na primeira linha e a sequência na segunda.
Experimente online!
Suíte de teste! (ligeiramente modificado)
Explicação
O primeiro passo é acrescentar um espaço (será importante mais tarde).
Agora nós invertemos. Isso usa grupos de balanceamento do .NET. É importante notar que os grupos aqui atuam como stacks, portanto, cada partida é essencialmente empurrada para a pilha. Aqui capturamos todos os dígitos do número unário no grupo 2. Agora, sempre que um caractere na cadeia é encontrado, uma correspondência é exibida no grupo 2. Isso garante que o número de caracteres não exceda o número unário.
E, finalmente, remova o número unário e a nova linha.
fonte
\d
por.
para salvar um byte.^
também é redundante.\d
mais disso. E obrigado por jogar golfe afastado o acento circunflexo :)Java,
147138 bytesString r(String s,int n){String r="";int l=s.length();for(int i=l/n*n;i>=0;i-=n)if(!(i>=l))r+=(i+n)>=l?s.substring(i):s.substring(i,i+n);return r;}
Guardado 9 bytes graças a Kevin Cruijssen!
Em forma expandida:
Esta é realmente a minha primeira tentativa de codegolf, então qualquer comentário é bem-vindo!
fonte
int l=s.length();for(int i=l/n*n;
pode serint l=s.length(),i=l/n*n;for(;
assim que você só temint
uma vez. Eif(!(i>=l))
pode serif(l<i)
. Er+=(i+n)>=l?
pode ser feito sem o parêntese:r+=i+n>=l?
. Além disso, se você ainda não o viu, recomendo consultar Dicas de golfe em Java para obter algumas dicas bem legais de golfe. :) Mais uma vez, bem-vindo.Perl 5 , 25 bytes
Usa as
-lnM5.010
bandeiras.Experimente online!
Grite para Grinnz por me falar sobre
=~ m/.{1,$n}/g
-M5.010
permite o uso dasay
função, que para nossos propósitos é impressa com um nome mais curto.-n
coloca a primeira linha de entrada$_
e-l
mastiga a nova linha à direita.Em seguida, obtemos a segunda linha de entrada usando
<>
e a aplicamos ao regex.{1,$_}
: qualquer caractere, entre 1 e $ _ (a primeira entrada) vezes. Como isso é ganancioso por padrão, ele tenta sempre corresponder $ _ caracteres. A1,
é necessária para a possível pedaço de sobra no final.O
/g
modificador nos fornece todas as correspondências desse regex na cadeia de entrada como uma lista, que é então revertida e impressa. No Perl, passar uma lista parasay
se juntar a ela sem nenhum delimitador por padrão.fonte
Dyalog APL estendido ,
1615 bytesExperimente online!
fonte
f←
,/
→∊
∊∘⌽⊢⊂⍨≢⍤⊢⍴1↑⍨⊣
Python, 62 bytes
Experimente online!
fonte
f=lambda n,s:s and f(n,s[n:])+s[:n]
Empilhados , 9 bytes
Experimente online!
#<
pedaços,rev
inverte e''#`
junta - se por uma sequência vazia. Bem simples.fonte
QBIC , 24 bytes
Isso faz excelente uso da nova função de substring que adicionei recentemente ao QBIC:
fonte
Pitão, 4 bytes
Toma como entrada
"s",n
: Experimente você mesmo!fonte
Convexo , 2 bytes
Experimente online!
fonte
C, 69 bytes
O resultado é impresso na saída padrão.
fonte
Scala,
5755 bytesObrigado Jacob! Experimente aqui .
Nota: Usando a forma de símbolo foldLeft ("/:"), consegui extrair mais alguns bytes.
fonte
mkString
, em vez dereduceLeft
, e raspar 7 bytes:(n:Int,s:String)=>s.grouped(n).toSeq.reverse.mkString("")
Ohm , 5 bytes
Experimente online!
Explicação
fonte
R ,
6960 bytesExperimente online!
Obrigado a Kirill L. pela sugestão de remoção
seq
.fonte
:
e se alguma manipulação nos permitir livrar-nos do final-1
.