O desafio
Dada uma sequência de entrada e um número inteiro n - trunca quaisquer execuções de caracteres consecutivos até um máximo de n comprimento. Os caracteres podem ser qualquer coisa, incluindo caracteres especiais. A função deve fazer distinção entre maiúsculas e minúsculas e n pode variar de 0 a infinito.
Exemplos de entradas / saídas:
f("aaaaaaabbbccCCCcc", 2) //"aabbccCCcc"
f("aaabbbc", 1) //"abc"
f("abcdefg", 0) //""
f("aaaaaaabccccccccCCCCCC@", 4) //"aaaabccccCCCC@"
Pontuação
A pontuação é baseada no número de bytes usados. portanto
function f(s,n){return s.replace(new RegExp("(.)\\1{"+n+",}","g"),function(x){return x.substr(0, n);});}
seria 104 pontos.
Feliz golfe!
Edit: removeu a restrição de idioma, mas ainda assim gostaria de ver respostas em javascript
Respostas:
Python 2, 52 bytes
Escrito como um programa (54 bytes):
Repete a sequência de entrada
s
, acrescentando cada caractere à sequência de saída, ar
menos que os últimosn
caracteresr
sejam esse caractere.Eu acho que isso falharia
n==0
porquer[-0:]
não são os últimos 0 caracteres (sequência vazia), mas a sequência inteira. Mas, ele funciona porque a cadeia permanece vazia, mantendo a correspondência com a cadeia de 0 caracteres.Um recursivo
lambda
deu 56 por causa da repetiçãoUma estratégia alternativa para manter um contador
i
de repetições do último caractere também ficou mais tempo do que apenas verificar os últimosn
caracteres diretamente.fonte
C,
8178Modifica a sequência de entrada.
Programa de teste
Requer dois parâmetros, o primeiro é a sequência a ser truncada, o segundo é o limite de comprimento.
Explicação:
Isso funciona porque o ponteiro de origem sempre será igual ou maior que o ponteiro de destino, para que possamos escrever sobre a string enquanto a analisamos.
fonte
Haskell, 36 bytes
Versão sem pontos de
\n s -> concatMap (take n) (group s)
.fonte
Javascript ES6,
60545543 bytes-12 bytes graças a @ TestSubject06 e @Downgoat
Exemplo é executado:
fonte
RegExp("(.)\\1*","g")
para/(.)\1*/g
(s,n)
paras=>n
, e o uso se tornaf("aaaaaaabbbccCCCcc")(2)
MATL, 9 bytes
Experimente Online
Explicação
fonte
CJam, 12 bytes
Experimente online!
Explicação
fonte
Pitão,
1612 bytesExperimente online!
fonte
Python 2, 56 bytes
fonte
gs2, 6 bytes
Codificado no CP437 :
Esta é uma função anônima (bloco) que espera um número no topo da pilha e uma string abaixo dela.
Experimente online. (O código aqui é
lines, dump, read number, [the answer], run-block
.)fonte
Perl 6 ,
3836 bytesExplicação:
Teste:
fonte
Javascript ES5, 73
Reutiliza a expressão regular de Lynn em sua resposta em Python .
fonte
new
palavra - chave por -4 bytes.Perl 5, 50 bytes
Código de 46 bytes + 3 para
-i
e 1 para-p
Leva o número para truncar para via
-i
.Uso
fonte
-p
apenas um byte?-e
essas opções, consome apenas 1 byte. Se o script precisar ser executado a partir de um arquivo, ele custará 3 para o espaço e ele será sinalizado. Há uma meta post que vou tentar encontrar, mas estou no celular agora.Bash 46 bytes
Uso: Digite o número de caracteres a serem limitados, pressione enter e digite a string. Ctrl+ Dpara sair
sed
(envie EOF).fonte
Java 7,
107106 bytesLoop alternativo inline alternativo anterior para concatenação de String (que é 1 byte a mais do que
String s="";for(int i=-1;++i<j;)s+="$1";
infelizmente):Casos não testados e de teste:
Experimente aqui.
Resultado:
fonte
Javascript (usando biblioteca externa) (115 bytes)
Link para lib: https://github.com/mvegh1/Enumerable
Explicação do código: Carregue a string na biblioteca, que analisa internamente como matriz de caracteres. Aplique um acumulador na sequência, passando um objeto personalizado como um valor inicial. A propriedade a é o elemento atual, b é a cadeia acumulada e c é a contagem sequencial do elemento atual. O acumulador verifica se o valor atual da iteração, n, é igual ao valor do último elemento, ca. Caso contrário, redefinimos a contagem para 1 e configuramos o elemento atual. Se a contagem do elemento atual for menor ou igual ao comprimento desejado, acumulamos na string de retorno. Finalmente, retornamos a propriedade b, a string acumulada. Não é o código mais golfista, mas feliz por ter uma solução que funciona ...
fonte
J,
3130 bytesAgrupa a sequência de entrada em execuções (substrings) de caracteres idênticos e assume o mínimo do comprimento dessa execução e o comprimento máximo que foi inserido para truncar a sequência. Em seguida, copia o primeiro caractere de cada execução tantas vezes.
Uso
Explicação
fonte
Dyalog APL ,
2220 bytesSolicita ne aceita a string de entrada como argumento.
(
a função tácita ...∊
achatar⊢↑¨⍨
cada elemento do argumento (ou seja, cada partição) truncado para⎕⌊⍴¨
o mínimo da entrada numérica e o comprimento atual)
[final da função tácita] aplicado à⊢⊂⍨
entrada particionada nos ᴛʀᴜᴇ s de1,
ᴛʀᴜᴇ prefixados a (o primeiro caractere não é igual ao seu antecessor não existente)2≠/⊢
o par não é igual a caracteres na entradafonte
Ruby, 32 bytes
fonte
TCC,
75 bytesEntrada é uma sequência e um número, separados por espaço.
Experimente online!
fonte
tcc.lua
arquivo com carimbo de data / hora 16-07-25 16:57 UTC, que não tinha a capacidade de ler várias entradas de uma só vez. Se sua resposta exigir uma versão do idioma que pós-desafio, você deve rotulá-la como não concorrente no cabeçalho. Vou remover meu voto negativo quando você o fizer.