Listes entières de Noé

25

Introduction:

Je pense que nous en avons tous entendu parler, mais voici un très bref résumé: Noé a rassemblé deux de chaque espèce animale sur la planète, mâle et femelle, pour sauver dans son arche lors d'une grande inondation. La citation réelle de la Bible est:

Genèse 7: 2-3
Vous devez emporter avec vous sept animaux de chaque espèce, le mâle et son compagnon, deux de chaque animal impur, le mâle et son compagnon, ainsi que sept oiseaux de toutes sortes dans le ciel. , mâles et femelles, pour conserver leur progéniture à la surface de la terre.
la source

Mais pour ce défi, nous ignorerons la partie propre / impure et la partie où il a pris sept de chaque animal. Ce défi concerne uniquement cette partie:

deux de chaque espèce d' animal impur , le mâle et son compagnon

Défi:

Contribution:

Vous obtenez une liste d'entiers positifs (dans un ordre aléatoire).

Sortie:

Deux valeurs distinctes indiquant s'il s'agit d'une «Liste de Noé» ou non. Cela ne doit pas nécessairement être une valeur truey / falsey , donc pourrait également être 0/ 1en Java / C #, ou'A' / 'B'dans n'importe quel langage, pour donner quelques exemples.

Quand une liste est-elle une «liste de Noé»? Lorsqu'il y a exactement deux de chaque entier dans la liste.

Règles du défi:

  • Les E / S sont flexibles. L'entrée peut être une liste / un tableau / un flux d'entiers / flottants / chaînes, ou être lus un par un depuis STDIN. La sortie peut être deux types distincts valeurs , renvoyées par une fonction ou sortie vers un fichier STDOUT /.
  • Les nombres entiers dans la liste d'entrée sont dans un ordre aléatoire et sont garantis positifs dans la plage 1n100000 .
  • La liste d'entrées est garantie d'être non vide.
  • La présence d'un entier multiple de deux fois au-dessus de 2 (c.-à-d. 4, 6, 8, etc.) sera une erreur. -À- dire [6,4,4,6,4,7,4,7]est Falsey, bien que vous pouvez toujours créer des paires égales comme ceci: [[4,4],[4,4],[6,6],[7,7]].

Règles générales:

  • C'est le , donc la réponse la plus courte en octets l'emporte.
    Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation.
  • Des règles standard s'appliquent à votre réponse avec des règles d'E / S par défaut , vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
  • Failles par défaut sont interdites.
  • Si possible, veuillez ajouter un lien avec un test pour votre code (par ex. TIO ).
  • De plus, l'ajout d'une explication à votre réponse est fortement recommandé.

Cas de test:

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]
Kevin Cruijssen
la source
12
Et dans le Coran aussi; Sourate Al-Mumenoon, verset 27: Nous lui avons donc inspiré (avec ce message): "Construisez l'arche sous nos yeux et sous notre direction: alors quand vient notre commandement et que les fontaines de la terre jaillissent, prenez-en à bord de toutes les espèces, hommes et femmes, et ta famille, sauf ceux contre qui la Parole a déjà été prononcée: Et ne m'adresse pas en faveur des malfaiteurs, car ils seront noyés (dans le déluge). (Yusuf Ali)
Ishaq Khan

Réponses:

13

05AB1E , 4 octets

¢<PΘ

Essayez-le en ligne! ou comme suite de tests

Explication

¢      # count all occurrences of each element in the input list
 <     # decrement each
  P    # product
   Θ   # is equal to 1
Emigna
la source
Ah, je l'avais préparé ¢2QP, mais l'utilisation Θest aussi une bonne alternative. :)
Kevin Cruijssen
Je pensais que j'avais un 3 avec {ιË, mais bien sûr cela échoue lorsque les nombres entiers se produisent 4 fois.
Grimmy
9

Brachylog , 4 octets

ọtᵛ2

Essayez-le en ligne!

Explication

ọ           Get the list of occurences of elements in the input: [[x,2], [y,2], …]
  ᵛ         Verify that for each of those pairs…
 t          …the tail (i.e. the number of occurences)
   2        …is 2
Fatalize
la source
8

R , 20 octets

-6 octets grâce à digEmAll en changeant la méthode d'entrée

any(table(scan())-2)

Essayez-le en ligne!

Affiche FALSEs'il s'agit d'une liste de Noah, etTRUE sinon. Fonctionne pour tout type d'entrée, pas seulement pour les entiers.

Calcule le nombre de chaque valeur dans la liste et vérifie si l'un des nombres est différent de 2.

Robin Ryder
la source
Vous pouvez prendre l'entrée de stdin en économisant 6 octets: essayez-le en ligne!
digEmAll
@digEmAll Merci; J'ai mal lu les règles du défi et j'ai pensé que cela n'était pas autorisé.
Robin Ryder
6

Haskell , 33 octets

f x=and[sum[1|b<-x,b==a]==2|a<-x]

Essayez-le en ligne!

Pour chaque élément de l'entrée, nous nous assurons qu'il apparaît deux fois dans la liste des entrées.

sum[1|b<-x,b==a]est juste une version golfeur de length(filter(==a)x).

Assistant de blé
la source
6

Perl 6 , 18 octets

{so.Bag{*}.all==2}

Essayez-le en ligne!

  • .Bagconvertit la liste d'entrée en un Bagensemble --a de multiplicité.
  • {*} extrait toutes les multiplicités.
  • .all crée une jonction des multiplicités.
  • == 2 résulte en une autre jonction de booléens, chacun vrai si la multiplicité est 2.
  • so réduit la jonction en un seul booléen.
Sean
la source
5

J , 10 octets

[:*/2=#/.~

Essayez-le en ligne!

Galen Ivanov
la source
3
également 10 octets: [:*/2=1#.=je veux vraiment supprimer ce plafond mais je ne sais pas comment.
cole
1
@cole quand j'ai essayé cela, j'ai eu votre solution. Si vous vouliez vraiment retirer le capuchon, vous pourriez aussi le faire 2*/@:=1#.=, également 10 octets
Conor O'Brien
@cole Belle alternative!
Galen Ivanov
@ ConorO'Brien Oui, c'est @:pratique ici aussi.
Galen Ivanov
1
@GalenIvanov doit aimer monadic =, donc étrangement utile dans des scénarios de golf de niche
Cole
4

MS SQL Server 2017 , 152 150 146 octets

CREATE FUNCTION f(@ NVARCHAR(MAX))RETURNS
TABLE RETURN SELECT IIF(2=ALL(SELECT
COUNT(*)FROM STRING_SPLIT(@,',')GROUP BY
PARSE(value AS INT)),1,0)r

La version lisible:

CREATE FUNCTION f(@ NVARCHAR(MAX)) RETURNS TABLE RETURN
  SELECT IIF(2 = ALL(SELECT COUNT(*)
                     FROM STRING_SPLIT(@, ',')
                     GROUP BY PARSE(value AS INT)), 1, 0) AS r

Essayez-le sur SQL Fiddle !

-2 octets grâce à Kevin Cruijssen

Andrei Odegov
la source
1
Puisque vous n'utilisez pas l'alias, ne peut-il pas cêtre supprimé après le COUNT(*)?
Kevin Cruijssen
@KevinCruijssen, vous avez raison, merci.
Andrei Odegov
4

Haskell , 61 45 octets

import Data.List
all((2==).length).group.sort

Essayez-le en ligne!

Merci à @KevinCruijssen pour 12 octets et à @nimi pour 4 autres.

Première réponse Haskell, mais c'était étonnamment facile à faire. Peut probablement être beaucoup joué au golf. Exemple concret ...

J. Sallé
la source
3
Je ne connais pas Haskell, mais je suis sûr que c'est all(True==).map(2==)possible all(2==). :)
Kevin Cruijssen
4
... et se déplacer lengthà all: all((2==).length).group.sort. Pas besoin de donner un nom à la fonction, c'est-à-dire de supprimer le f=.
nimi
En effet, j'ai all(2==)ignoré le moment où je testais dans GHCi. Merci Kevin et Nimi, je mettrai à jour la réponse.
J.Sallé
4
... oh et pour une utilisation future: all(True==)est and.
nimi
4

JavaScript (ES6), 37 octets

Renvoie false pour Noah ou true pour non-Noah.

a=>a.some(v=>a.map(x=>t-=v==x,t=2)|t)

Essayez-le en ligne!

Commenté

a =>               // a[] = input
  a.some(v =>      // for each value v in a[]:
    a.map(x =>     //   for each value x in a[]:
      t -= v == x, //     decrement t if v is equal to x
                   //     (i.e. if v appears exactly twice, t is decremented twice)
      t = 2        //     start with t = 2
    )              //   end of map()
    | t            //   yield t, which is supposed to be equal to 0
  )                // end of some()
Arnauld
la source
3

APL (Dyalog Unicode) , 8 octets SBCS

Fonction de préfixe tacite anonyme. Renvoie 0/ 1.

∧/2=⊢∘≢⌸

Essayez-le en ligne!

 Pour chaque valeur comme argument de gauche et les indices des occurrences de cette valeur comme argument de droite, appelez:

 comptabiliser l'argument de droite (les occurrences)
 puis le
 renvoyer, en ignorant l'argument de gauche

2= Liste booléenne indiquant les décomptes de 2

∧/ ET-réduction (c.-à-d. Sont-ils tous vrais?)

Adam
la source
3

PowerShell , 66 37 26 octets

-11 octets grâce à mazzy

!(($args|group|% c*t)-ne2)

Essayez-le en ligne!

Regroupe $let récupère tous les décomptes de valeurs correspondantes. Il filtre ensuite tous les comptes de 2 de cette liste. Si la liste est vide, c'est un numéro Noah; sinon, il sera toujours rempli avec un nombre différent de 2. Ne pas noter la liste donnera Truesi elle est vide et Falsesi elle est remplie

Veskah
la source
1
Échoue si les valeurs s'équilibrent. C'est-à-dire [1,2,1,1] donc le nombre est 4, le nombre d'unique est 2 et résoudra donc comme noah bien qu'il ne soit pas noah.
Données expirées le
@ExpiredData Heck
Veskah
J'ai essayé cette approche dans une autre langue avant de réaliser qu'elle ne fonctionnera tout simplement pas ...
Expired Data
1
¯ \ _ (ツ) _ / ¯ 26
mazzy
1
@mazzy Merci. J'ai tout oublié d' groupêtre une chose qui existe
Veskah
3

PHP , 60 octets

function($a){return!array_diff(array_count_values($a),[2]);}

Essayez-le en ligne!

PHP a d'excellentes fonctionnalités intégrées pour cela, bien qu'à 20 caractères, ce array_count_values()n'est pas très golfique.

640 Ko
la source
PHP a toujours d'excellentes fonctionnalités intégrées, avec des noms longs, soupir!
Night2
3

Mathematica, 25 24 octets

MatchQ[{{_,2}..}]@*Tally

Essayez-le en ligne!

La Tallyfonction renvoie une liste du formulaire , qui est ensuite comparée à un modèle qui vérifie si tous les nombres sont 2.{{element, count}, ...}

Poignée de porte
la source
3

Attaché , 16 octets

${All&x!{_~x=2}}

Essayez-le en ligne!

Explication

${All&x!{_~x=2}}
${             }    lambda with input x
  All&x!{     }     over each element _ of x:
         _~x            check that the number of occurrences of _ in x
            =2          is 2

Alternatives

17 octets: {All&_!`=&2@`~&_}

18 octets: {All[`=&2@`~&_,_]}

23 octets: Same@2&`'@Sum@Table[`=]

25 octets: Same«2'Sum@Table[`=,_]»

25 octets: Same<~2'Sum@Table[`=,_]~>

25 octets: {Same[2'Sum@Table[`=,_]]}

35 octets: {Commonest@_==Unique@_and _[0]~_=2}

Conor O'Brien
la source
3

TI-Basic, 47 octets

Input(L1
SortA(L1
not(remainder(dim(L1,2)) and prod(not(△List(L1))=seq(remainder(I,2),I,1,-1+dim(L1

Je suis un grand fan de TI-Basic. Ce n'est pas un bon langage pour vraiment n'importe quel but, mais j'aime la programmation (et le golf) dedans.

Comment fonctionne ce code?

Tout d'abord, il trie la liste.

Deuxièmement, il utilise la fonction △ Liste pour générer une autre liste, qui est la différence entre les éléments de la liste triée. (Par exemple, △ List ({1,3,7,8}) donnerait {2,4,1}). Ne s'applique pas à cette liste, qui convertit chaque élément non nul de la liste en zéro et chaque zéro en un.

Ensuite, le programme vérifie que la liste résultante correspond au modèle {1, 0, 1, 0, ...} , ce qui ne sera vrai que si la liste d'origine est une liste Noah.

Il existe également une vérification supplémentaire que la longueur de la liste est régulière, pour détecter certains cas marginaux.

Voici quelques captures d'écran des cas de test:

Some test cases Some more test cases

mprogrammer
la source
3

Julia 1.0 , 32 octets

l->sum(isone,l./l')/length(l)==2

Essayez-le en ligne!

Divise chaque élément du tableau d'entrée lpar la transposition l'donnant une matrice. La sommation sur cette matrice lors de l'application isoneà chaque élément donne deux fois la longueur de lsi chaque élément apparaît exactement deux fois.

TimD
la source
3

K (oK) , 9 octets

Solution:

&/2=#:'.=

Essayez-le en ligne!

Explication:

&/2=#:'.= / the solution
        = / group
       .  / value
    #:'   / count (length of) each
  2=      / equal to 2?
&/        / take minimum
streetster
la source
3

Julia , 30 caractères 26 octets

!a=all(x->2==sum(a.==x),a)

Merci, H.PWiz pour cette astuce!

Essayez-le en ligne!

user3263164
la source
1
Vous pouvez avoir !a=all(x->2==sum(a.==x),a)pour 26 octets. NB. que je recommande de compter en octets sur ce site
H.PWiz
Merci beaucoup! Je ne savais pas que vous pouviez (ab) utiliser !pour des fonctions anonymes
user3263164
2

VDM-SL , 64 octets

f(a)==forall y in set inds a&card{x|x in set inds a&a(x)=a(y)}=2

Explication

VDM fonctionne principalement comme des instructions logiques de second ordre.

forall y in set inds a                //Bind y to each of the indices of a

{x|x in set inds a&a(x)=a(y)}         //build a set of the indices of a who have the same
                                      //value as the value at y

card {...} = 2                        //and check the cardinality of that set is 2

Puisque vous ne pouvez pas TIO VDM, voici la sortie d'une session de débogage

Données expirées
la source
Je sais qu'il n'y a probablement pas de compilateur en ligne pour cela, mais pourriez-vous peut-être ajouter quelques captures d'écran de (certains) des cas de test comme vérification? :)
Kevin Cruijssen
@KevinCruijssen a enregistré quelques octets en corrigeant le bogue, ce qui a probablement rendu le code lui-même plus facile à comprendre. J'ajouterai aussi une explication :)
Expired Data
2

Excel, 45 octets

=SUM(IF(FREQUENCY(A:A,A:A)=2,1))=COUNT(A:A)/2

Suppose que les données de la colonne A sont entrées dans une cellule autre que celle de la colonne A. Renvoie VRAI s'il y a des paires et FAUX si elles ne correspondent pas à des paires

        FREQUENCY(A:A,A:A)                     Counts how many of each value there is
     IF(                  =2,1)                If this is 2, add value of 1 to array otherwise 0
=SUM(                          )               Sum the count in that array that have a exactly 2
                                 COUNT(A:A)/2  Count how many total values in column
                                =              If this is equal, return TRUE else FALSE

J'ai essayé de supprimer le / 2 et d'ajouter 0,5 pour la sommation, mais cela n'a pas fonctionné.
J'ai essayé de compter les fréquences <> 2 et cela n'a pas retourné le bon montant.

Keeta
la source
2

Octave / MATLAB, 22 21 octets

@(x)any(sum(x==x')-2)

Fonction anonyme qui entre un vecteur numérique et le produit 0si le vecteur satisfait à la condition ou 1non.

Essayez-le en ligne! Ou vérifiez tous les cas de test .

Explication

@(x)                   % define anonymous function with input x
            x          % x
               x'      % x transposed and conjugated
             ==        % equality comparison, element-wise with broadcast. Gives a
                       % square matrix
        sum(     )     % sum of each column
                  -2   % subtract 2, element-wise
    any(            )  % true if and only if any value is not zero
Luis Mendo
la source