Com base nesta pergunta da Code Review
Dada uma sequência não vazia de caracteres ASCII imprimíveis, imprima o segundo caractere não repetitivo. Por exemplo, para entrada DEFD
, saída F
.
Entrada
- Uma única sequência, em qualquer formato adequado .
Resultado
- O segundo caractere que não se repete, ao ler da esquerda para a direita, novamente em um formato adequado.
- O caractere de saída não diferencia maiúsculas de minúsculas.
- Se esse caractere não existir (por exemplo, todos os caracteres se repetem), produza uma string vazia.
Regras
- O algoritmo deve ignorar maiúsculas e minúsculas. Ou seja,
D
ed
conte como o mesmo personagem. - Um programa completo ou uma função são aceitáveis.
- A sequência de entrada será garantida como não vazia (ou seja, pelo menos um caractere de comprimento).
- A sequência de entrada é ASCII. Qualquer caractere válido pode se repetir, não apenas alfanumérico (isso inclui espaços).
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Exemplos
A entrada está na primeira linha, a saída está na segunda linha.
DEFD
F
FEED
D
This is an example input sentence.
x
...,,,..,,!@
@
ABCDefgHijklMNOPqrsTuVWxyz
B
AAAAAABBBBB
Thisxthis
This this.
.
Respostas:
MATL , 11 bytes
Isso sai com um erro (permitido por padrão) se não houver um segundo caractere não repetido.
Experimente online!
Explicação
fonte
Retina , 25 bytes
Experimente online! (A primeira linha permite executar o código em um conjunto de testes de várias entradas.)
Explicação
Esta é apenas uma única correspondência de regex, sendo a regex:
Ou seja, combine um caractere e verifique se ele não aparece em nenhum outro lugar da entrada. O resto é configuração:
i
ativa a distinção entre maiúsculas e minúsculas.!
diz à Retina para imprimir as correspondências, em vez de contá-las.2=
diz à Retina para imprimir apenas a segunda correspondência, em oposição a todas elas.fonte
2=
.05AB1E,
1512 bytesExplicado
Experimente online
Guardado 3 bytes graças a @Adnan
fonte
l©v®y¢iy}}1@
:).Python 2,
5958 bytesRetorna uma lista de um único caractere ou uma lista vazia, se não houver saída. (Insensibilidade estúpida a maiúsculas ...)
Experimente online
fonte
Gelatina , 11 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Lote, 171 bytes
Formulação alternativa, também 171 bytes:
fonte
Pitão,
1615 bytes1 byte graças a @ mbomb007
Suíte de teste.
fonte
[1:2]
truque.t<…2
vez de:…1 2
. Você pode salvar outro byte movendo o=rz1
para a sua primeira utilização, se você também alterar1
aZ
(para letras minúsculas em vez de saídas com letras maiúsculas):t<fq1/zT=rzZ2
.Na verdade, 19 bytes
Experimente online!
Explicação:
fonte
C #,
129128 bytesfunciona bem. Eu gostaria de não precisar minúsculas tudo
fonte
C # lambda com Linq, 63 bytes
fonte
.Skip(1).First()
por.ElementAt(1)
.ToList()[1]
C #, 141 bytes
Sem interrupção (menor), 135 bytes
Com para (;;), 150 bytes
Ungolfed com comentários
12 bytes salvos pelo TuukkaX (altere a contagem para c).
3 bytes salvos pelo TuukkaX (altere a string para var).
4 bytes salvos pelo TuukkaX em "Com para (;;)" (alterado enquanto (verdadeiro) para para (;;)).
2 bytes salvos pelo TuukkaX (alterado c ++; if (c == 2) para if (++ c == 2)).
14 bytes salvos por Bryce Wagner (alterado x.ToCharArray () para x).
fonte
var
vez destring
e tendo algo como emc
vez decount
.código de máquina x86, 43 bytes
Em hexadecimal:
A função pega um ponteiro para a sequência de entrada em (E) SI e um número inteiro em (E) DX e retorna o (E) DX-ésimo caractere não repetitivo ou zero se não houver esse caractere. Como efeito colateral, converte a string em maiúsculas.
Desmontagem:
fonte
APL, 32 bytes
Experimente || Todos os casos de teste
Explicação:
Eu estava prestes a publicá-lo com 16 bytes, mas percebi que tinha que fazer distinção entre maiúsculas e minúsculas ...
fonte
(⎕UCS ⍵)+32×⍵∊⎕A
→819⌶⍵
⌶
em geral, e para o serviço 819 ("819" ≈ "BIg"). Experimente online!Retina,
4336 bytesExperimente online!
fonte
Mathematica, 49 bytes
Função anônima. Leva uma lista de caracteres como entrada. Ignore os erros gerados.
fonte
JavaScript (Firefox 48 ou anterior), 60 bytes
Retorna
undefined
se houver apenas zero ou um caractere não repetitivo. Funciona excluindo sem distinção entre maiúsculas e minúsculas todas as ocorrências de caracteres que aparecem mais de uma vez na cadeia. Baseia-se em uma extensão do Firefox não padrão que foi removida no Firefox 49. Versão do ES6 de11991 bytes:Procura recursivamente todos os caracteres que aparecem pelo menos duas vezes na cadeia. Se o caractere aparecer exatamente duas vezes, as duas ocorrências serão excluídas, caso contrário, somente a primeira ocorrência será excluída (as outras ocorrências serão excluídas posteriormente). Isso permite que as ocorrências tenham um caso de diferença.
fonte
m[1]
pornew RegExp(`${m[1]}`,"gi")
J, 25 bytes
Uso
Explicação
fonte
Bash, 58 bytes
Cuidado: Isso cria um arquivo temporário chamado t . Se já existir, será substituído.
fonte
C, 174 bytes
Esta não é a implementação mais curta, mas bastante eficiente. Em essência, ele usa a lista com vínculo duplo para manter o conjunto ordenado de caracteres candidatos e verifica a sequência de entrada apenas uma vez. Retorna o código de caractere ou zero se nenhum foi encontrado.
Uma versão pouco destruída:
fonte
C #, 143 bytes
fonte
TSQL, 128 bytes
Golfe:
Ungolfed:
Violino
fonte
Ruby, 53 bytes
A entrada é STDIN, a saída é STDOUT. No Ruby, as posições fora do índice em uma matriz ou string retornam
nil
, que não são impressas.String#count
é uma função estranha no Ruby porque, em vez de contar o número de ocorrências para a sequência que foi passada, conta o número de ocorrências para cada letra dessa sequência. Geralmente é chato, mas podemos usá-lo para nossa vantagem neste momento.String#swapcase
troca letras maiúsculas e minúsculas.Versão antiga que não era segura contra caracteres especiais como
.
- 46 bytesfonte
Java 8,
172157 bytes-15 bytes. Porra, eu era ruim em jogar golfe naquela época. ;)
Explicação:
Experimente aqui.
fonte
R , 79 bytes
Experimente online!
Eu definitivamente sinto que algo pode ser jogado aqui. Mas gostei muito desse desafio.
Essa resposta divide a string em um vetor de caracteres, altera todas para minúsculas e as apresenta (conta). Os caracteres que ocorrem uma vez são selecionados e comparados aos caracteres do vetor mencionado acima; o segundo valor verdadeiro é retornado como saída. Uma sequência vazia ou sem caracteres repetidos gera NA.
fonte
Perl 6 ,
3832 bytes-6 bytes graças ao nwellnhof mudando
.comb
para um regex que não diferencia maiúsculas de minúsculasExperimente online!
fonte
m:g:i/$^a/
para 32 bytes .K (oK) / K4 , 11 bytes
Solução:
Experimente online!
Explicação:
fonte
Gelatina, 15 bytes
Experimente online!
Verifique todos os casos de teste. (Ligeiramente modificado para atender a todos os casos de teste)
fonte
Perl, 75 bytes
fonte
Javascript (usando a Biblioteca externa) (107 bytes)
Esmagou isso usando uma biblioteca que escrevi. Não tenho certeza se tenho que contar a declaração da variável "s", que é a string em questão.
Isso manipulará uma entrada de sequência vazia, uma entrada com apenas um caractere não repetitivo e uma entrada com mais de 2 caracteres não repetitivos
fonte
s=> ...
)Clojure, 109 bytes
Espero que exista uma maneira mais sucinta.
fonte