Introdução:
Acho que todos já ouvimos falar, mas aqui está um breve resumo: Noé reuniu duas espécies de animais do planeta, macho e fêmea, para salvar em sua arca durante uma grande enchente. A citação real da Bíblia é:
Gênesis 7: 2-3
Você deve levar consigo sete de todo tipo de animal limpo, o macho e seu companheiro, dois de todo tipo de animal impuro, o macho e seu companheiro, e também sete de todo tipo de pássaro no céu , homem e mulher, para preservar seus filhos na face da terra.
fonte
Mas, para o bem deste desafio, ignoraremos a parte limpa / imunda e a parte em que ele levou sete de cada animal. Este desafio é apenas sobre esta parte:
dois de todo tipo de animal
impuro, o macho e seu companheiro
Desafio:
Entrada:
Você recebe uma lista de números inteiros positivos (em ordem aleatória).
Saída:
Dois valores distintos indicando se é uma 'Lista de Noé' ou não. Isso não é necessário que seja um valor de verdade / falsey ; portanto, também pode ser 0
/ 1
em Java / C # ou 'A'
/ 'B'
em qualquer idioma, para dar alguns exemplos.
Quando uma lista é uma 'Lista de Noé'? Quando houver exatamente dois de cada número inteiro na lista.
Regras do desafio:
- A E / S é flexível. A entrada pode ser uma lista / matriz / fluxo de números inteiros / flutuantes / seqüências de caracteres ou pode ser lida uma a uma a partir de STDIN. A saída pode ter dois valores distintos , retornados de uma função ou saída para STDOUT / um arquivo.
- Os números inteiros na lista de entrada estão em ordem aleatória e são garantidos positivos dentro do intervalo .
- A lista de entrada é garantida como não vazia.
- Ter um número inteiro múltiplo de duas vezes presente acima de 2 (ou seja, 4, 6, 8, etc.) será falsey. Ou seja,
[6,4,4,6,4,7,4,7]
é Falsey, embora você ainda pode criar pares iguais como este:[[4,4],[4,4],[6,6],[7,7]]
.
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 com as regras de E / S padrão , 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 (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Truthy:
[7,13,9,2,10,2,4,10,7,13,4,9]
[1,2,3,1,2,3]
[10,100,1000,1,100,10,1000,1]
[123,123]
[8,22,57189,492,22,57188,8,492,57188,57189,1,1]
Falsey:
[6,4,4,6,4,7,4,7]
[2,2,2,2,2,2]
[5,1,4,5,1,1,4]
[77,31,5,31,80,77,5,8,8]
[1,2,3,2,1]
[44,4,4]
[500,30,1]
[1,2,1,1]
[2,4,6,4,4,4]
[2,23,34,4]
[2,23,3,3,34,4]
fonte
Respostas:
Python 3 , 31 bytes
Experimente online!
Python 2 , 33 bytes
Experimente online!
fonte
05AB1E , 4 bytes
Experimente online! ou como um conjunto de testes
Explicação
fonte
¢2QP
, mas usarΘ
também é uma boa alternativa. :){ιË
, mas é claro que falha quando números inteiros ocorrem 4 vezes.Braquilog , 4 bytes
Experimente online!
Explicação
fonte
R , 20 bytes
-6 bytes graças ao digEmAll alterando o método de entrada
Experimente online!
Saídas
FALSE
se for uma lista de Noah, eTRUE
caso contrário. Funciona para qualquer tipo de entrada, não apenas números inteiros.Calcula a contagem de cada valor na lista e verifica se alguma das contagens é diferente de 2.
fonte
APL (Dyalog Extended) , SBCS de 5 bytes
Experimente online!
É verdade que…
2¨
dois para cada elemento≡
é idêntico a⍧⍨
a selfie de contagem (contagem de elementos próprios em si)?
fonte
C # (compilador interativo do Visual C #) ,
39, 32 bytesObrigado a @Expired_Data
Experimente online!
fonte
Haskell , 33 bytes
Experimente online!
Para cada elemento da entrada, garantimos que ele apareça duas vezes na lista de entradas.
sum[1|b<-x,b==a]
é apenas uma versão golfista dolength(filter(==a)x)
.fonte
Perl 6 , 18 bytes
Experimente online!
.Bag
converte a lista de entrada em umBag
- um conjunto com multiplicidade.{*}
extrai todas as multiplicidades..all
cria uma junção e das multiplicidades.== 2
resulta em outra junção e booleanos, cada um verdadeiro se a multiplicidade for 2.so
reduz a junção para um único booleano.fonte
J , 10 bytes
Experimente online!
fonte
[:*/2=1#.=
eu realmente quero remover esse limite, mas não consigo descobrir como.2*/@:=1#.=
10 bytes@:
é útil aqui.=
, tão estranhamente útil em cenários de nicho de golfeMS SQL Server 2017 ,
152150146 bytesA versão legível:
Experimente no SQL Fiddle !
-2 bytes graças a Kevin Cruijssen
fonte
c
ser removido após oCOUNT(*)
?Haskell ,
6145 bytesExperimente online!
Obrigado a @KevinCruijssen por 12 bytes e a @nimi por mais 4.
Primeira resposta de Haskell, mas foi surpreendentemente fácil de fazer.
Provavelmentepode ser muito jogado. Caso em questão...fonte
all(True==).map(2==)
pode serall(2==)
. :)length
paraall
:all((2==).length).group.sort
. Não é necessário dar um nome à função, ou seja, largar of=
.all(2==)
quando estava testando no GHCi. Obrigado Kevin e Nimi, vou atualizar a resposta.all(True==)
éand
.JavaScript (ES6), 37 bytes
Retorna false para Noah ou true para não Noah.
Experimente online!
Comentado
fonte
APL (Dyalog Unicode) , 8 bytes SBCS
Função de prefixo tácito anônimo. Retorna
0
/1
.Experimente online!
…
⌸
Para cada valor como argumento à esquerda e índices de ocorrências desse valor como argumento à direita, chame:≢
conte o argumento certo (as ocorrências) e∘
depois⊢
retorne isso, ignorando o argumento esquerdo2=
Lista booleana indicando quais as notas são 2∧/
Redução de AND (ou seja, todas são verdadeiras?)fonte
PowerShell ,
663726 bytes-11 bytes graças ao mazzy
Experimente online!
Agrupa
$l
e obtém todas as contagens de valores correspondentes. Em seguida, filtra todas as contagens de 2 dessa lista. Se a lista estiver vazia, é um número de Noah; caso contrário, ainda será preenchido com contagens diferentes de 2. A não observação da lista será exibidaTrue
se estiver vazia eFalse
se for preenchidafonte
group
ser uma coisa que existeElixir , 52 bytes
Experimente online!
Complete Elixir noob aqui :-D.
fonte
PHP , 60 bytes
Experimente online!
O PHP tem ótimos recursos embutidos para isso, embora com 20 caracteres,
array_count_values()
não é muito bom.fonte
Mathematica,
2524 bytesExperimente online!
A
Tally
função retorna uma lista do formulário , que é comparada com um padrão que verifica se todas as contagens são 2.{{element, count}, ...}
fonte
Anexo , 16 bytes
Experimente online!
Explicação
Alternativas
17 bytes:
{All&_!`=&2@`~&_}
18 bytes:
{All[`=&2@`~&_,_]}
23 bytes:
Same@2&`'@Sum@Table[`=]
25 bytes:
Same«2'Sum@Table[`=,_]»
25 bytes:
Same<~2'Sum@Table[`=,_]~>
25 bytes:
{Same[2'Sum@Table[`=,_]]}
35 bytes:
{Commonest@_==Unique@_and _[0]~_=2}
fonte
TI-Basic, 47 bytes
Sou um grande fã do TI-Basic. Não é uma linguagem excelente para qualquer finalidade, mas eu gosto de programar (e jogar golfe) nela.
Como esse código funciona?
Primeiro, ele classifica a lista.
Segundo, ele usa a função △ Lista para gerar outra lista, que é a diferença entre os elementos da lista classificada. (Por exemplo, △ Lista ({1,3,7,8}) renderia {2,4,1}). Aplica-se não a esta lista, que converte todos os elementos diferentes de zero da lista em zero e todos os zero em um.
Em seguida, o programa verifica se a lista resultante se encaixa no padrão
{1, 0, 1, 0, ...}
, o que só será verdadeiro se a lista original for uma lista de Noé.Há também uma verificação adicional de que o comprimento da lista é uniforme, para capturar alguns casos extremos.
Aqui estão algumas capturas de tela dos casos de teste:
fonte
Julia 1.0 , 32 bytes
Experimente online!
Divide cada elemento da matriz de entrada
l
pela transposição,l'
fornecendo uma matriz. A soma dessa matriz ao aplicarisone
a cada elemento fornece o dobro do comprimento del
se cada elemento aparecer exatamente duas vezes.fonte
K (oK) , 9 bytes
Solução:
Experimente online!
Explicação:
fonte
Julia ,
30 caracteres26 bytesObrigado, H.PWiz por este truque!
Experimente online!
fonte
!a=all(x->2==sum(a.==x),a)
26 bytes. NB que eu recomendo contar em bytes neste site!
para funções anônimasGelatina , 5 bytes
Experimente online!
Um link monádico que pega uma lista de números inteiros e retorna 1 se uma lista de Noé e 0 se não.
fonte
VDM-SL , 64 bytes
Explicação
O VDM funciona predominantemente como instruções lógicas de segunda ordem.
Como você não pode TIO VDM, aqui está a saída de uma sessão de depuração
fonte
MATL , 6 bytes
Experimente online!
0 para verdade, 1 para falsidade. Portos Resposta de Robin Ryder .
MATL , 6 bytes
Experimente online!
1 para verdade, 0 para falsidade. Portos resposta de Luis Mendo .
fonte
Ruby , 29 bytes
Experimente online!
fonte
Kotlin ,
96776951 bytesExperimente online!
fonte
Excel, 45 bytes
Assume dados na coluna A, com isso inserido em qualquer célula que não seja uma na coluna A. Retorna VERDADEIRO se houver pares e FALSO se não forem pares correspondentes
Tentei remover o / 2 e adicionar 0,5 para a soma, mas isso não funcionou.
Tentei contar as frequências que são <> 2 e isso não retornou a quantidade certa.
fonte
Oitava / MATLAB,
2221 bytesFunção anônima que insere um vetor numérico e gera
0
se o vetor satisfaz a condição ou1
não.Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Bater , 26 bytes
O código de saída é diferente de zero se a lista for de Noah.
Experimente online!
fonte