Surpreendentemente, ainda não tivemos um desafio simples de "encontrar o dígito mais alto", mas acho que isso é um pouco trivial demais.
Dada a entrada de um número inteiro não negativo, retorne o dígito único mais alto (isto é, não repetido) encontrado no número inteiro. Se não houver dígitos únicos, seu programa poderá fazer qualquer coisa (comportamento indefinido).
A entrada pode ser tomada como um único número inteiro, uma sequência ou uma lista de dígitos.
Casos de teste
12 -> 2
0 -> 0
485902 -> 9
495902 -> 5
999999 -> Anything
999099 -> 0
1948710498 -> 7
Isso é código-golfe, e o menor número de bytes em cada idioma vence!
Respostas:
05AB1E ,
43 bytesEconomizou 1 byte graças ao Sr. Xcoder notificando que uma lista de dígitos é uma entrada válida.
Experimente online!
Explicação
fonte
2
não é verdade; somente1
? : oPython 3 , 40 bytes
Economizou 2 bytes graças à movatica .
Experimente online!
42 bytes
Funciona para os tipos de parâmetros String e lista de dígitos. Lança um erro sem dígitos únicos, tipo de abuso dessa especificação:
Experimente online!
Explicação
lambda i:
- Declara uma função lambda com uma sequência de caracteres ou lista de dígitos i.max(...)
- Encontra o valor máximo do gerador.x for x in i
- Repete os caracteres / dígitos dei
.if i.count(x)<2
- Verifica se o dígito é único.fonte
lambda i:max(x*(i.count(x)<2)for x in i)
Alice , 15 bytes
Experimente online!
Explicação
Essa é uma estrutura simples para código linear que opera inteiramente no modo Ordinal (o que significa que este programa funciona completamente através do processamento de cadeias). O código linear desdobrado é então apenas:
O que faz:
fonte
Retina , 16 bytes
Experimente online!
Explicação
Classifique os dígitos.
Remova os dígitos repetidos.
Busque o último dígito (máximo).
fonte
Carvão ,
1812 bytesExperimente online! (Link para a versão detalhada)
Não imprime nada se nenhuma solução for encontrada. O truque é que o
for
loop imprime todos os números únicos na string de entrada, mas sem mover o cursor, o valor continua sendo impresso novamente até que a solução final seja encontrada.A versão anterior imprimiu os caracteres de A a Z quando nenhuma solução foi encontrada, daí os comentários:
Experimente online! (Link para a versão detalhada)
fonte
Casca , 7 bytes
Experimente online! (Conjunto de testes, falha no último caso de teste, pois não possui dígitos únicos)
Essa é uma composição de funções no estilo sem ponto (os argumentos não são mencionados explicitamente em nenhum lugar). Recebe e retorna a saída como uma string, que em Husk é equivalente a uma lista de caracteres.
Explicação
* A verificação do comprimento 1 é feita pegando o cabeçalho da lista (todos os elementos, exceto o último) e negando-o (listas vazias são falsas, listas não vazias são verdadeiras).
fonte
Haskell, 37 bytes
Experimente online!
Como funciona:
fonte
R , 41 bytes
Uma função anônima que recebe uma lista de dígitos, como números inteiros ou seqüências de caracteres únicas. Ele precomputa
y
como argumento opcional para evitar o uso de chaves para o corpo da função. Retorna o dígito como uma sequência. Isso leva uma abordagem um pouco diferente da outra resposta R e acaba sendo um pouquinho menor! parece que meu comentário estava errado, afinal ...table
calcula as ocorrências de cada elemento na lista, comnames(table(x))
os valores exclusivos emx
(como seqüências de caracteres). Felizmente, como os dígitos são ordenados da mesma forma lexicograficamente e numericamente, ainda podemos usá-lomax
.Experimente online!
fonte
table
fosse mais curto (e nunca me lembro de como começarnames
a trabalhar).<2
por outro byte. Nunca deve haver um zero nas contagens.y=table(scan());max(names(y[y<2]))
é alguns bytes mais curto.JavaScript (ES6),
464140 bytesRecebe a entrada como uma sequência. Retorna RangeError se não houver dígitos únicos.
-7 bytes graças a Rick Hitchcock
-1 byte graças a Shaggy
Casos de teste
Mostrar snippet de código
fonte
(s,i=9)=>s.split(i).length-2?f(s,--i):i
. Você pode evitar o estouro de pilha para 42 bytes:(s,i=9)=>s.split(i).length-2?i&&f(s,--i):i
.s=>g=(i=9)=>s.split(i).length-2?g(--i):i
e, em seguida, chamá-lo comf("12")()
Python 3, 40 bytes
Funciona apenas para listas de dígitos. O case '990' da borda funciona bem :)
Experimente online!
fonte
Braquilog , 8 bytes
Experimente online!
Explicação
fonte
Casca ,
98 bytesAgradecemos a Leo por sugerir uma solução um pouco mais limpa na mesma contagem de bytes.
Experimente online!
Explicação
fonte
¬←
poderia ser mais simples=1
, o mesmo bytecount embora :) #Mathematica, 41 bytes
obrigado @Martin Ender
aqui está a abordagem de Martin na minha resposta
Mathematica, 35 bytes
fonte
R,
4543 bytesfunction(x)max(setdiff(x,x[duplicated(x)]))
Experimente online!
Recebe entrada como um vetor de números inteiros. Localiza os elementos duplicados, remove-os e utiliza o máximo. (Retorna
-Inf
com um aviso se não houver um máximo exclusivo.)Editado em uma função anônima por comentário
fonte
max(x[!duplicated(x)])
é um pouco mais curto, mas esta é uma ótima resposta. Eu sabia que o jeito que eu ia fazer não era tão bom. Além disso, você pode remover o arquivof=
desde o início, pois funções anônimas são respostas perfeitamente válidas. Além disso, você pode usar o TIO para testar suas funções se usar este formato: Experimente online!duplicated
mas na verdade pensei em outra resposta mais curta!Ruby , 42 bytes
Experimente online!
fonte
->x{x.chars.select{|r|x.count(r)<2}.max}
APL (Dyalog Unicode) , 10 caracteres = 19 bytes
Método: multiplique elementos que ocorrem várias vezes por zero e depois ajuste o elemento mais alto.
⌸
para cada elemento exclusivo e seus índices no argumento:×
multiplique o elemento único∘(
…)
Com:1=
o booleano para saber se um é igual a≢
a contagem de índices (quantas vezes o elemento único ocorre)⌈/
o máximo dissoExperimente online!
APL (Dyalog Classic) , 15 bytes
Experimente online!
Idêntico ao anterior, mas usa em
⎕U2338
vez de⌸
.fonte
Bash + coreutils,
3028 bytes-2 bytes graças ao Digital Trauma
Experimente online!
Bash + coreutils, 20 bytes
Experimente online!
Se a entrada for dada como uma lista de dígitos, um por linha, podemos pular o estágio de dobra. Isso parece trapaça.
fonte
grep -o .
porfold -1
para salvar 2 bytes. Concordo que um número inteiro de entrada fornecido como uma lista de dígitos está estendendo muito as regras.Python 2 , 39 bytes
Experimente online!
fonte
C # (.NET Core) ,
279786585775 bytesExperimente online!
Obrigado @CarlosAlejo
fonte
using System.Linq;
à contagem de bytes.OrderBy(...).Last()
vez de.OrderByDescending(...).First()
, por exemplo. Ou melhor ainda, altere sua última parte.Max(i=>i.Key)
após aWhere
cláusula.JavaScript (ES6),
5250 bytesRecebe a entrada como uma lista de dígitos. Retorna
0
se não houver dígitos únicos.Casos de teste
Mostrar snippet de código
fonte
Japonês ,
121110 bytesRecebe a entrada como uma matriz de dígitos.
Teste-o
Explicação
fonte
Java (OpenJDK 8) ,
898579 bytesExperimente online!
-6 bytes graças à visão de @ KevinCruijssen!
fonte
return i>0?i:0;
porreturn i;
. A saída será -1 para o caso de teste[9,9,9,9,9,9]
, mas está bem com o desafio: " Se não houver dígitos únicos, seu programa poderá fazer qualquer coisa (comportamento indefinido). ".0
. É algo que eu supervisionei no golfe anterior! :)APL (Dyalog) , 14 bytes
-2 graças aTwiNight.
⌈/
o maior de⊢
os argumentos×
multiplicado por1=(
…)
O booleano para cada um onde é igual+/
a linha soma de∘.=⍨
sua tabela de igualdadeExperimente online!
fonte
0
nunca é o maior dígito único, exceto para0
si mesmo, você pode economizar 1 byte usando×
em vez de/⍨
, em seguida, salvar outro byte converter isso em um tremPHP , 40 bytes
Experimente online!
PHP , 42 bytes
Experimente online!
fonte
<?=array_flip(count_chars($argn))[1]-48;
Java (JDK) , 67 bytes
Experimente online!
fonte
Mathematica, 42 bytes
fonte
F # , 88 bytes
Experimente online!
Uma abordagem aprimorada do meu primeiro esforço resulta em menos bytes.
Pontos de interesse:
fst
esnd
retorne o primeiro e o segundo elementos de uma tupla, respectivamente.fonte
Geléia , 9 bytes
Experimente online!
fonte
Pitão, 6 bytes
Suíte de teste
Explicação:
fonte
Perl 5 , 59 bytes
Experimente online!
fonte
-F
bandeira no perlrun se necessário)