Desafio:
Dado um número inteiro positivo, produza a subsequência de um dígito mais longa que ocorre pelo menos duas vezes, AND tem limites de outro dígito (ou o início / fim do número inteiro).
Um exemplo:
Entrada: 7888885466662716666
a subsequência mais longa de um único dígito seria 88888
( 7[88888]5466662716666
) com um comprimento de 5. No entanto, essa subsequência ocorre apenas uma vez no número inteiro.
Em vez disso, o resultado da entrada 7888885466662716666
deve ser 6666
( 78888854[6666]271[6666]
), pois ocorre (pelo menos) duas vezes.
Regras do desafio:
- O comprimento das subsequências tem prioridade sobre a quantidade de vezes que ocorre. (Ou seja, com entrada
8888858888866656665666
, produzimos88888
([88888]5[88888]66656665666
; comprimento 5, ocorre duas vezes), e não666
(88888588888[666]5[666]5[666]
; comprimento 3, ocorre três vezes). - Se o comprimento de várias subsequências for igual, produziremos a que tiver o maior número de ocorrências. Ou seja, com a entrada
3331113331119111
, produzimos111
(333[111]333[111]9[111]
; comprimento 3, ocorre três vezes), e não333
([333]111[333]1119111
; comprimento 3 também, mas ocorre duas vezes) - Se a contagem de ocorrências e o comprimento de várias subsequências forem iguais, você poderá gerar uma delas ou todas (em qualquer ordem). Ou seja, com a entrada
777333777333
, os eventuais resultados são os seguintes:777
;333
;[777, 333]
; ou[333, 777]
. - A subsequência deve ter limites de outros dígitos (ou o início / fim do número inteiro). Ou seja, com a entrada,
122222233433
o resultado é33
(1222222[33]4[33]
; comprimento 2, ocorre duas vezes) e não222
(1[222][222]33433
comprimento 3, ocorre duas vezes com ambos inválidos).- Isso se aplica a todos os números contados no contador de ocorrências. Ou seja, com a entrada,
811774177781382
o resultado é8
([8]117741777[8]13[8]2
; comprimento 1, ocorre três vezes) e não77
(811[77]41[77]781382
/811[77]417[77]81382
; comprimento 2, ocorre duas vezes com um inválido) nem1
(8[1][1]774[1]7778[1]382
;; comprimento 1, ocorre quatro vezes com dois inválidos).
- Isso se aplica a todos os números contados no contador de ocorrências. Ou seja, com a entrada,
- Você pode assumir que a entrada não conterá nenhum dígito
0
(ela corresponderá[1-9]+
). (Isso evita que seja necessário lidar com casos de teste como10002000
esse000
, onde a maioria dos idiomas seria impressa0
por padrão.) - Você pode assumir que a entrada sempre conterá pelo menos uma saída válida.
- As E / S são flexíveis. Pode ser uma lista / matriz / fluxo de dígitos / bytes / caracteres ou como sequência em vez de um único número inteiro.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Input: 7888885466662716666 / [7,8,8,8,8,8,5,4,6,6,6,6,2,7,1,6,6,6,6]
Output: 6666 / [6,6,6,6]
Input: 3331113331119111 / [3,3,3,1,1,1,3,3,3,1,1,1,9,1,1,1]
Output: 111 / [1,1,1]
Input: 777333777333 / [7,7,7,3,3,3,7,7,7,3,3,3]
Possible outputs: 777; 333; [777,333]; [333;777] / [7,7,7]; [3,3,3]; [[7,7,7],[3,3,3]]; [[3,3,3],[7,7,7]]
Input: 122222233433 / [1,2,2,2,2,2,2,3,3,4,3,3]
Output: 33 / [3,3]
Input: 811774177781382 / [8,1,1,7,7,4,1,7,7,7,8,1,3,8,2]
Output: 8 / [8]
Input: 555153333551 / [5,5,5,1,5,3,3,3,3,5,5,1]
Output: 1 / [1]
Input: 12321 / [1,2,3,2,1]
Possible outputs: 1; 2; [1,2]; [2,1] / [1]; [2]; [[1],[2]]; [[2],[1]]
Input: 944949949494999494 / [9,4,4,9,4,9,9,4,9,4,9,4,9,9,9,4,9,4]
Output: 4 / [4]
Input: 8888858888866656665666 / [8,8,8,8,8,5,8,8,8,8,8,6,6,6,5,6,6,6,5,6,6,6]
Output: 88888 / [8,8,8,8,8]
Input: 1112221112221111 / [1,1,1,2,2,2,1,1,1,2,2,2,1,1,1,1]
Output: 111; 222; [111,222]; [222,111] / [1,1,1]; [2,2,2]; [[1,1,1],[2,2,2]]; [[2,2,2],[1,1,1]]
Input: 911133111339339339339339 / [9,1,1,1,3,3,1,1,1,3,3,9,3,3,9,3,3,9,3,3,9,3,3,9]
Output: 111 / [1,1,1]
8888858888866656665666
. Se eu interpretei o desafio corretamente, as soluções Brachylog e 05AB1E falharam.222
quando limitado por outros números inteiros. Acho que não devemos contar a ocorrência que é uma substring de1111
. É melhor esperar pelo OP, de fato.1112221112221111
estes são os subsequ�ncias e suas contagens:1111 (1)
,111 (2)
,222 (2)
. Uma vez que só produz sequências que ocorrem pelo menos duas vezes, a saída pode ser um de:111
,222
,[111,222]
,[222,111]
. (Veja a quarta regra para obter mais informações.) Basicamente1111
, apenas contará como1111
, e não como1
e111
ou11
e11
. Vou adicionar seu caso de teste, mas a saída é um ou ambos111
e222
.Respostas:
05AB1E , 14 bytes
Experimente online!
Explicação
fonte
Gelatina , 12 bytes
Experimente online!
Versão anterior - 14 bytes
Experimente online!
Como funciona?
fonte
JavaScript (ES6),
797368 bytesRecebe a entrada como uma sequência. Retorna um número inteiro.
Experimente online!
Comentado
fonte
...s
converte a entrada em uma lista de caracteres de dígito, não é mais curto usar a entrada como uma lista de caracteres de dígito para começar, em vez de uma string? Eu permiti E / S flexível. (Mas eu estou supondo que ela interfere com outra parte do seu código?)[...s,0]
mesmo ses
já houver uma lista.Retina , 56 bytes
Experimente online! O link inclui casos de teste. Explicação:
Listar todas as subsequências de dígitos repetidas no máximo.
Classifique a lista em ordem.
Liste todas as subsequências múltiplas com sua "contagem".
Classifique em ordem crescente de contagem.
Exclua as contagens.
Classifique em ordem crescente de comprimento. (Onde os comprimentos são iguais, a ordem anterior devido à contagem é preservada.)
Mantenha o último valor, ou seja, o maior.
fonte
R , 102 bytes
Experimente online!
Como ainda não havia uma resposta R, decidi tentar e bem ... não foi fácil. Realmente não sei se é uma boa abordagem, mas aqui vai.
Entradas e saídas vetores de caracteres.
fonte
Perl 6 ,
5856 bytesExperimente online!
fonte
Python 2 ,
123120 bytesExperimente online!
fonte
Powershell, 101 bytes
Script de teste explicado:
Resultado:
fonte
Python 2 ,
114113 bytes-1 byte graças ao TFeld .
Experimente online!
fonte
Haskell, 72 bytes
Como funciona
fonte
Gloss
para saída gráfica ouMatrix
). Eu uso "Haskell + something" se não quiser incluir a contagem de bytes para as importações. Acho que tivemos esse tópico na meta, mas não consigo mais encontrá-lo. Se bem me lembro, não tínhamos definição geral de "biblioteca padrão". Qual deve ser a referência para Haskell? O Relatório Haskell, a base do GHC, Haskell Plattform, outra coisa?Data.Lists
biblioteca não está disponível no TIO ou em outro compilador Haskell online?Data.Lists
está faltando no TIO. Você pode testá-lo com esta versão .R , 85 bytes
Experimente online!
Entrada: um vetor de dígitos inteiros separados, por exemplo
c(1,8,8...)
Saída: um vetor de dígitos inteiros separados
Código desenrolado com explicação:
Versão alternativa que aceita vetor de dígitos inteiros ou de caracteres:
R , 88 bytes
Experimente online!
Entrada: um vetor de caracteres ou dígitos separados, por exemplo,
c("1","8","8"...)
ouc(1,8,8...)
Saída: um vetor de caracteres separados se a entrada for um vetor de caracteres, um vetor de dígitos se a entrada for um vetor de dígitos
fonte
Vermelho ,
256250 bytesExperimente online!
Realmente, solução realmente longa desta vez ... (suspiro)
Toma a entrada como uma sequência.
Explicação:
fonte
Java (JDK 10) , 213 bytes
Experimente online!
Explicação (desatualizada)
Créditos
fonte
j*o>M
cheque. Se bem entendi, é preciso o máximolength * occurrence-count
. Mas para um caso de teste como1113311133933933933933
por exemplo,111
seria (3 * 2 = 6) e33
seria (2 * 6 = 12). Portanto, ele gera33
a ocorrência mais alta, em vez de111
ser a mais longa, pelo menos duas vezes. Além disso,var r="";for(;O-->0;)r+=D;return r;
pode ser golfed parafor(;O-->0;)System.out.print(D);
em Java 10, ou até mesmo mais curto em Java 11:return(D+"").repeat(O);
.int X[][]=new int[10][99],d,l=99,
paraint l=99,X[][]=new int[10][l],d,
.d++<9
vez de++d<10
. Desculpe pelo resto: estou um pouco cansado hoje = _ =Ruby ,
6867 bytesExperimente online!
Matrizes de entradas e saídas de caracteres.
A abordagem é bastante direta: identificamos as execuções de dígitos consecutivos (
chunk
usando unário+
como função de identidade) e obtemos o máximo - primeiro pelo tamanho da execução (redefina para zero se sua contagem de ocorrências for <2) e depois pela própria contagem .fonte
PCRE, 152 bytes
Veja em ação em: https://regex101.com/r/0U0dEp/1 (basta ver a primeira correspondência em cada caso de teste)
Isso é apenas diversão, já que o regex não é uma linguagem de programação real por si só, e a solução é limitada: P
Como um grupo de largura zero, como
(?:)+
apenas corresponde uma vez e não se repete indefinidamente, e porque o PCRE faz internamente cópias de grupos quantificadas com limites, tive que usar um número mágico ("{1.592}"), que significa que podemos procurar até 592 conjuntos de dígitos contíguos à frente para encontrar um conjunto concorrente que pode ser maior que o atualmente sob inspeção. Mais informações sobre esse conceito aqui .fonte
Perl 5 , 88 bytes
Experimente online!
Ligeiramente não-destruído, com testes:
fonte
Wolfram Language (Mathematica) , 67 bytes
Função pura. Pega uma lista de dígitos como entrada e retorna uma lista de subsequências (em nenhuma ordem específica) como saída. Não tenho certeza se a cláusula "deve aparecer pelo menos duas vezes" pode ser tratada de maneira mais limpa. Experimente online!
fonte
Japt
-h
, 12 bytesEntrada e saída são strings.
Tente
fonte