Título com erros ortográficos de propósito. Leia mais para descobrir o porquê.
Sua tarefa: dada uma sequência ou lista delimitada, incluindo os caracteres A,B,C,D
, produza os índices de todos os caracteres iguais adjacentes. A saída pode ser várias cadeias / números inteiros em várias linhas, uma lista / matriz ou uma cadeia delimitada.
Toda saída deve estar em uma lista ou sequência, ou em várias linhas impressas. Cada linha impressa, se houver várias, deve conter apenas 1 sequência ou número. Trailing whatevers estão bem.
Métodos padrão de entrada / saída. Aplicam-se brechas padrão.
Por exemplo, a entrada 'ABCDDCBA'
deve gerar 3,4
ou 4,5
, dependendo de estar indexada de 0 a 1, porque esses números são os índices de D
e o D
próximo a ele.
Casos de teste:
Os casos de teste têm entrada fornecida como uma única sequência e saída como uma ,
sequência delimitada. As saídas são indexadas em 0, adicione 1 a cada item gerado para que seja indexado em 1.
Input: 'ABCDCABCD'
Output: ''
Input: 'AABBCCDD'
Output: '0,1,2,3,4,5,6,7'
Input: 'ABCDDDCBA'
Output: '3,4,5'
Input: 'ABBCDD'
Output: '1,2,4,5'
Isso é código-golfe , então o código mais curto vence!
3,4,4,5
válido?AABBCD
->
1,2,3,4
Respostas:
MATL ,
87 bytesA saída é baseada em 1.
Experimente online!
Explicação com exemplo
Considere entrada
'ABCDDDCBA'
.fonte
Retina ,
332923 bytesEconomizou 6 bytes graças a Martin Ender
Produz uma lista de índices separados por avanço de linha.
Experimente online!
Explicação
O transliterado é executado do mesmo caractere em dois pontos, para marcar as posições em que existem caracteres duplicados.
Em seguida, substitua cada dois pontos pelo comprimento do texto antes dele, seguido por um avanço de linha.
Por fim, exclua as letras restantes.
fonte
Geléia , 7 bytes
Baseado em 1; retorna uma lista de listas de execuções de índices, conforme permitido pelo OP.
Experimente online!
Quão?
fonte
ṁ
- Coisas que eu gostaria que o 05AB1E fizesse por 500, por favor.Brain-Flak ,
5746 bytesInclui +2 para
-ar
Usa indexação baseada em 0.
Experimente online!
fonte
Mathematica, 32 bytes
Função pura que retorna as posições indexadas em 1 de caracteres adjacentes a um caractere idêntico.
Explicação:
StringPosition["string","sub"]
fornece uma lista das posições de caracteres inicial e final nas quais"sub"
aparece como uma substring de"string"
.x_~~x_
é umStringExpression
que corresponde a dois caracteres idênticos adjacentes. Por exemplo,StringPosition["ABCDDDCBA",x_~~x_]
dá{{4, 5}, {5, 6}}
. A aplicaçãoUnion
junta as listas, classifica e exclui duplicatas.fonte
Flak cerebral ,
69, 59, 56 bytesExperimente online!
+2 bytes para os
-ar
sinalizadores que ativam a entrada ASCII e invertem a pilha.Usa indexação baseada em 0. Economizei 10 bytes, reduzindo minha redundância push-pop . Economizou outros 4 bytes alternando da indexação baseada em 1 para 0.
Este é praticamente o único desafio baseado em cordas em que o cérebro é bom. Isso ocorre porque o cérebro é ótimo na comparação de caracteres consecutivos, mesmo que seja horrível no processamento de strings em geral. Aqui está a versão legível do código com comentários para explicar como ele funciona:
fonte
-r
. Isso me traz para baixo a 46.Braquilog , 19 bytes
Experimente online!
Explicação
O Brachylog geralmente é terrível com índices, o que novamente mostra aqui.
Se
false.
for uma saída aceitável nos casos em que não houver caracteres adjacentes, isso seria 1 byte a menos substituindoᶠd
porᵘ
.fonte
Oitava , 35 bytes
Experimente online!
Semelhante à minha resposta MATL . Aqui
unique
classifica automaticamente. A entrada paradiff
deve ser convertida emdouble
, o que é feito pelo unário+
.fonte
Cubix,
37 32 31 2928 bytesAgradeço a ETHProductions por me apontar na direção de uma economia de três bytes
Experimente aqui ! Observe que os índices de saída são baseados em 1 e não em ordem crescente.
Expandido:
Explicação
Isso funciona lendo o caractere de entrada por caractere. Para comparar dois caracteres, simplesmente subtraímos seus códigos de caracteres e, se o resultado for 0, imprimimos o comprimento atual da pilha, um espaço, o comprimento atual da pilha - 1 e outro espaço. Depois limpamos um pouco a pilha e começamos novamente com o loop de leitura. Se o final da string de entrada for atingido, o programa será interrompido.
fonte
#
para obter o comprimento da pilha quando precisar. (Também, LOL'ed no;_;
no código;))!$w
em vez de!w
e mudou-se parte da quinta lógica linha para a quarta linha? (Não pode tentar agora porque eu estou indo para fora da porta)C, 75 bytes
Usa espaços como delimitadores. (Uma vírgula à direita não parece muito boa.)
Experimente online!
fonte
C # , 115 bytes
Golfe
Ungolfed
Ungolfed legible
Código completo
Lançamentos
115 bytes
- Solução inicial.Notas
Nada para adicionar
fonte
Gelatina , 8 bytes
Experimente online!
fonte
Ṗ=ḊTµ2Ḷ+€
k, 18 bytes
Exemplos:
A tradução para
q
é mais fácil de entender:fonte
JavaScript, 52 bytes
Obrigado @ Neil por jogar fora 1 byte
Recebe entrada como uma matriz indexada de 0 caracteres
Retorna a saída como uma matriz indexada 1
Explicação
Para cada caractere na sequência
Se for igual ao caractere anterior ou ao próximo caractere, retorne o índice + 1, caso contrário, não retorne (folhas indefinidas na matriz)
Remova todos os elementos indefinidos da matriz resultante
Experimente online!
fonte
&&i
salvaria um byte(...)*i
?0|0&&6
é 0,1|0&&6
é 6,0|1&&6
é 6,1|1&&6
é 6. Não é isso que você quer?Python 2,
5554 bytesExperimente Online!
Gera índices separados por espaços (observe que isso exibe alguns índices duas vezes o permitido pelo OP)
fonte
Perl 5 , 37 bytes
35 bytes de código +
pl
sinalizadores.Experimente online!
(?<=(.))\1|(.)(?=\2)
corresponderá entre dois caracteres repetidos ((?<=(.))\1
) ou antes de um caractere repetido ((.)(?=\2)
).Em seguida,
print pos
imprime a posição da partida. (pos
contém o índice da correspondência atual quando usado em uma regex com/g
modificador).fonte
Perl 6 ,
6657 bytesTente
Tente
fonte
PHP, 100 bytes
fonte
Ruby , 51 + 1 = 52 bytes
Usa a
-n
bandeira.Experimente online!
fonte
Lote, 139 bytes
Recebe entrada em STDIN. Funciona acompanhando quantos números imprimir na
c
variável, que é redefinida para 2 quando um par é detectado. Nota: A um custo de 6 bytes, pode ser reforçado para trabalhar com a maioria dos caracteres ASCII e não apenasABCD
.fonte
C #, 89 bytes
Se houver três ou mais caracteres seguidos, os índices serão repetidos. Que @Comrade SparklePony permitiu nos comentários.
Programa completo não destruído:
fonte
QBIC , 42 bytes
Saída de amostra:
Explicação:
EDIT: QBIC agora tem Substring! Este desafio agora pode ser resolvido em 32 bytes:
Onde:
fonte
k, 14 bytes
Esta é uma função, recebe uma sequência e retorna uma lista de índices.
Explicação:
Experimente online!
Como usar:
fonte
PHP, 70 bytes
recebe entrada do STDIN; corra com
-R
.fonte