Dada uma lista finita não vazio de inteiros, a saída de um truthy valor se não são exatamente duas entradas iguais e todas as outras entradas são distintas, e uma Falsey valor de outra forma.
Exemplos
truthy:
[1,1]
[1,2,1]
[1,6,3,4,4,7,9]
falsey:
[0]
[1,1,1]
[1,1,1,2]
[1,1,2,2]
[2,1,2,1,2]
[1,2,3,4,5]
Respostas:
Python 3,
3028 bytesExperimente online!
{*m}
lança a lista em umset
objeto, uma lista não ordenada de itens sem duplicatas. Fazer isso sempre diminuirá o comprimento da lista pelo número de duplicatas nela. Ao calcular quanto o comprimento mudou, podemos facilmente saber se a lista teve uma única duplicata e retornar o resultado do teste.-2 bytes graças a ovs.
fonte
{*m}
atalho em vez deset
, bem jogado!lambda m:~-len(m[len({*m}):])
Casca , 4 bytes
Experimente online!
Explicação
fonte
MATL ,
7, 6 bytesExperimente online!
Um byte salvo graças a @Guiseppe!
Explicação:
fonte
s
issum
esum
somas ao longo da primeira dimensão não singleton (colunas) e a matriz são simétricas, isso não poderia ser apenas ems
vez deXs
?Haskell , 34 bytes
Experimente online! Baseado na resposta de H.PWiz .
fonte
Geléia ,
85 bytesExperimente online!
Explicação
Se os valores de saída puderem ser consistentes, então
QL_L
funciona, que gera-1
para verdade e qualquer outro número não positivo para falsey (obrigado @ JonathanAllan)fonte
QL_L
produziria-1
para verdade e algum número menor que-1
ou0
para falsey (por exemplo[1,6,3,4,4,7,9,9,9]
, retornaria-3
, enquanto[1,6,3,4,7,9]
retornaria0
).-2
.JavaScript (ES6), 30 bytes
Experimente online
fonte
Pushy , 8 bytes
Implementação simples de verificar se
len(set(list)) == len(list)-1
:Explicação:
Isso funciona, pois o comprimento só diminuirá em 1 se houver apenas exatamente 1 número inteiro não distinto na lista inicial.
Experimente online!
fonte
Oitava , 25 bytes
Isso não está usando uma abordagem
group
ouunique
como muitas das outras respostas, mas o "produto cartesiano" de todas as comparações possíveis.Explicação
Experimente online!
E porque nenhum programa estaria completo sem uma convolução (obrigado @LuisMendo por corrigir um erro):
Oitava , 40 bytes
Experimente online!
fonte
J ,
76 bytes=
verifique a igualdade de todos os elementos com cada elemento exclusivo, cria uma matriz com m linhas para m elementos únicos.0,
adicione uma linha vazia na parte superior.=&#
o número de linhas é igual ao comprimento da entrada?Experimente online!
fonte
.~
com=
Retina ,
151211 bytesAgradecemos a Neil por economizar 1 byte.
Experimente online!
A entrada é separada pela alimentação de linha. (O conjunto de testes usa separação por vírgula por conveniência.)
Explicação
Desduplicar as linhas na entrada, que remove qualquer número inteiro que apareceu antes (mas deixa os feeds de linha circundantes).
Conte o número de linhas vazias, que é igual ao número de duplicatas removidas, mas considere apenas as duas primeiras correspondências. Portanto, a saída será apenas
0
(sem duplicatas),1
(uma duplicata),2
(duas ou mais duplicatas).Verifique se exatamente uma duplicata foi removida.
fonte
A`.
para contar novas linhas, porque cai o último.)A`.
, mas o problema é que você não consegue distinguir uma única linha vazia de não ter nenhuma linha. Talvez eu deva considerar terminarA
eG
enviar com um avanço de linha, se houver alguma linha. Embora isso provavelmente deva ser uma opção, já que posso imaginar que o feed de linha seja irritante em outros cenários.^$¶
.A
é idêntica, independentemente de manter uma única linha vazia ou descartar todas as linhas.05AB1E , 4 bytes
Experimente online!
Saídas
1
como verdade, qualquer outro número inteiro não negativo como falso. Em 05AB1E,1
é o único número de verdade (obrigado @Emigna pelo insight!).Explicação
fonte
Ruby, 32 bytes
fonte
Array#size
?->s{s.uniq.size==s.size-1}
C # (.NET Core) , 35 + 18 bytes
+18 para usar
System.Linq
.Experimente online!
Alternativa de 67 bytes sem Linq:
Experimente online!
fonte
Excel, 42 bytes
Versão em língua dinamarquesa
Assume cada número inteiro da lista em célula separada na coluna
A
.Se nos permitissem valores inconsistentes de falsey , poderíamos salvar 3 bytes:
Versão em inglês (44 bytes)
fonte
R ,
3231 bytes-1 byte graças a @JarkoDubbeldam
Experimente online!
Lê de stdin, escreve para stdout.
duplicated
itera pela lista, substituindo os valores del
porTRUE
se esse valor ocorrer anteriormente na lista eFALSE
caso contrário. Se houver um único par de almas gêmeas, deve haver exatamente umTRUE
valor, portanto a soma deve ser1
.fonte
scan()
abordagem.PowerShell ,
4037 bytesExperimente online!
O
Sort-Object
comando (aliassort
) com o-u
sinalizador nique extrai apenas os componentes exclusivos da entrada. Por exemplo, para entrada@(1,3,3,2)
, isso resultará em@(1,2,3)
.Portanto, precisamos apenas garantir que o
.count
objeto desse objeto (ou seja, quantos elementos ele possui) seja-eq
igual ao.count
da nossa matriz de entrada-1
(ou seja, temos exatamente uma entrada duplicada).Economizou 3 bytes graças ao Sinusoid.
Corrigido o erro graças ao TessellatingHeckler.
fonte
1,2,1
-get-unique
apenas funciona na entrada pré-classificada. Que tal($args|sort -u).count-eq$args.count-1
também tem 37, mas funciona para todos os casos de teste, se você chamar assim como emf 1 2 1
vez def 1,2,1
?Perl 5 , 36 + 1 (
-a
) = 37 bytesExperimente online!
fonte
@k{@F}++;say@F==1+keys%k
Haskell , 37 bytes
Experimente online!
fonte
Octave / MATLAB (com pacote / caixa de ferramentas Statistics), 21 bytes
Função anônima. Entrada é um vetor de coluna. A saída é
true
(exibida como1
) oufalse
(exibida como0
).Experimente online!
Explicação
pdist(x)
calcula um vetor de distâncias euclidianas entre todos os pares de linhas dex
. Ele considera cada par apenas uma vez (a ordem das duas linhas não importa) e não considera os pares formados pela mesma linha duas vezes.No nosso caso,
x
é um vetor de coluna; portanto, a distância euclidiana entre duas linhas é apenas uma diferença absoluta entre os dois números.~
é uma negação lógica (booleana),nnz
é o número de nonzeros e se==1
compara a1
. Portanto, o resultado étrue
se e somente se houver apenas um par que dê distância zero.fonte
Jq 1.5 ,
5325 bytesInspirado pela resposta de Riley e muito mais curto que minha solução original.
Experimente online!
fonte
Julia,
3926 bytesExplicação
O código gera uma tabela bidimensional de booleanos, que é então coletada usando a função sum, contando o número de pares do mesmo elemento no quadrado cartesiano de A. Então, isso é comparado ao comprimento da string mais dois, e o quantidades são iguais apenas quando há exatamente um caractere de repetição.
Este código redefine o operador NOT.
fonte
!a=sum(a.==a')==endof(a)+2
salva alguns bytes. Experimente online!Pitão , 6 bytes
Verifique todos os casos de teste.
l{
- Obtém o número de elementos exclusivos.tlQ
- Obtém o comprimento da lista de entrada, decrementado.q
- Verifica a igualdade.7 bytes
Verifique todos os casos de teste
fonte
Oitava ,
2326 bytesExperimente online!
A
x==x'
parte foi inspirada na resposta de flawr . Isso é mais longo que a resposta de Luis, mas não usa nenhuma caixa de ferramentas.Explicação:
Esta é uma função anônima que pega um vetor
x
como entrada e o compara a si próprio transposto. Isso fornecerá uma matriz onde estão todos os elementos diagonais1
e quaisquer elementos fora da diagonal sinalizam que há elementos duplicados.A soma ao longo de qualquer coluna mostra quantas duplicatas existem desse número. Queremos que dois dos números tenham uma duplicata; portanto, dois valores são iguais a dois e o restante é desigual a dois.
Se pegarmos o produto dessa matriz, descobriremos
4
se existem apenas dois elementos iguais (2*2*1*1*1*1*...
) e algo diferente de4
se não houver duplicatas ou mais de dois.fonte
PHP, 46 bytes
Conta o número de entradas
$argv
e o compara com o número de entradas exclusivas. Se o primeiro é mais alto que o último em 1, então é verdade, senão falsey.Experimente no eval.in!
fonte
$argv
é a lista de parâmetros da linha de comando. Então: não, ele não pode simplesmente usar$a
.05AB1E ,
65 bytesExperimente online!
1
sendo o único valor verdadeiro em 05AB1E, podemos parar por aqui. (Obrigado @ Emigna por apontar isso.)Para obter apenas dois valores distintos, podemos adicionar opcionalmente:
fonte
Θ
, como1
é o único valor verdadeiro em 05AB1E.¢
não funcionará. Contaria[19,4,4,9]
como falso e[19,9]
verdadeiro, uma vez que encontra o0
in10
.{¥_O
deve ficar bem também.APL (Dyalog Unicode) , SBCS de 7 bytes
Experimente online!
Explicação:
fonte
Gelatina , 10 bytes
Experimente online!
uma abordagem mais longa, mas diferente
fonte
Japonês, 7 bytes
Tente
Explicação
Remova duplicatas (
â
), obtenha comprimento (Ê
) e compare a igualdade (¶
) com o comprimento (Ê
) da entrada (U
) menos 1 (É
).fonte
âÊɶ
caracteres multibyte?Haskell , 37 bytes
Experimente online!
fonte
05AB1E , 5 bytes
Experimente online!
Em 05AB1E 1 é o único valor de verdade, portanto, para um resultado de verdade, deve haver exatamente 1 elemento duplicado removido pela unificação.
fonte