À l'aide d'une liste de (key, value)
paires, déterminez si elle représente une fonction, ce qui signifie que chaque clé correspond à une valeur cohérente. En d'autres termes, chaque fois que deux entrées ont des clés égales, elles doivent également avoir des valeurs égales. Les entrées répétées sont OK.
Par exemple:
# Not a function: 3 maps to both 1 and 6
[(3,1), (2,5), (3,6)]
# Function: It's OK that (3,5) is listed twice, and that both 6 and 4 both map to 4
[(3,5), (3,5), (6,4), (4,4)]
Entrée: une séquence ordonnée de (key, value)
paires utilisant les chiffres 1 à 9. Vous pouvez ne pas avoir besoin d'un ordre particulier. Vous pouvez également utiliser la liste de clés et la liste de valeurs comme entrées séparées.
Sortie: Une valeur cohérente pour les fonctions et une valeur cohérente différente pour les non-fonctions.
Cas de test: Les 5 premières entrées sont des fonctions, les 5 dernières ne le sont pas.
[(3, 5), (3, 5), (6, 4), (4, 4)]
[(9, 4), (1, 4), (2, 4)]
[]
[(1, 1)]
[(1, 2), (2, 1)]
[(3, 1), (2, 5), (3, 6)]
[(1, 2), (2, 1), (5, 2), (1, 2), (2, 5)]
[(8, 8), (8, 8), (8, 9), (8, 9)]
[(1, 2), (1, 3), (1, 4)]
[(1, 2), (1, 3), (2, 3), (2, 4)]
Les voici sous forme de deux listes d’entrées:
[[(3, 5), (3, 5), (6, 4), (4, 4)], [(9, 4), (1, 4), (2, 4)], [], [(1, 1)], [(1, 2), (2, 1)]]
[[(3, 1), (2, 5), (3, 6)], [(1, 2), (2, 1), (5, 2), (1, 2), (2, 5)], [(8, 8), (8, 8), (8, 9), (8, 9)], [(1, 2), (1, 3), (1, 4)], [(1, 2), (1, 3), (2, 3), (2, 4)]]
Classement:
var QUESTION_ID=118960,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/118960/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
(key,value)
paires soient inversées, comme dans(value,key)
? Je peux raser quelques octets de ma réponse si oui.Réponses:
Python 2 , 34 octets
Essayez-le en ligne!
Crée un dictionnaire et un ensemble à partir de l'entrée et compare leurs longueurs.
Les dictionnaires ne peuvent pas avoir de clés dupliquées, ainsi toutes les valeurs illégales (et répétées) sont supprimées.
la source
lambda x:not dict(x).items()^x
Haskell, 36 octets
Essayez-le en ligne!
Boucle extérieure (->
(k,v)
) et intérieure (->(m,n)
) sur les paires et à chaque fois que vousk==m
collectez la valeur de vérité dev==n
. Vérifiez si tout est vrai.la source
Brachylog ,
54 octetsEssayez-le en ligne!
Programme complet. Autant que je sache, la raison pour laquelle cela bat la plupart des autres langues de golf est qu’il
≠
est intégré à Brachylog, alors que la plupart des autres langues de golf ont besoin de la synthétiser.Explication
En tant que programme complet, nous obtenons
true
si l'assertion réussit oufalse
échoue.la source
Pyth , 5 octets
Je suis assez content de celui-ci.
Essayez-le en ligne!
la source
Rétine , 25 octets
Essayez-le en ligne!
Le format d'entrée est
{k,v},{k,v},...
. Imprime0
pour les fonctions et1
pour les non-fonctions. Je pourrais économiser deux octets en utilisant des sauts de ligne au lieu des virgules dans le format d'entrée, mais c'est foiré.la source
Brachylog , 13 octets
Essayez-le en ligne!
Explication
la source
Ċhᵐ=
etĊtᵐ≠
travailler?Ċ
est une variable spéciale appelée Couple qui est toujours préconfigurée pour être une liste de deux éléments.ᵐ
est un métaprédicat qui applique le prédicat immédiatement précédent (h - head
out - tail
ici) à chaque élément de l'entrée (ici,Ċ
).=
et≠
simple vérifie que leur entrée contient tous les éléments égaux / tous différents.MATL , 8 octets
Les entrées sont: un tableau avec le
value
s, suivi d'un tableau avec lekey
s.La sortie est
1
pour la fonction,0
sinon.Essayez-le en ligne! . Ou vérifiez tous les cas de test .
Explication
1Z?
Construit une matrice clairsemée. Initialement toutes les entrées contiennent
0
; et1
est ajouté à chaque entrée(i, j)
oùj
eti
sont l’entréekey
, lesvalue
paires.g
La matrice est convertie en logique; c'est-à-dire que les entrées dépassant
1
(correspondant aux doublonskey
,value
paires) sont définies sur1
.s
La somme de chaque colonne est calculée. C'est le nombre de
value
s différents pour chacunkey
.2<A
Une fonction aura toutes ces sommes inférieures à
2
.la source
R, 33 octets
Ceci est ma version pour R. Cela tire parti de la
ave
fonction. J'ai autorisé les entrées vides en définissant des valeurs par défaut pour les paramètres key et value.ave
produit une moyenne des valeurs pour chacune des clés. Heureusement, les moyennes sont renvoyées dans le même ordre que les valeurs d'entrée. Une comparaison avec l'entrée indique par conséquent s'il existe des valeurs différentes. RenvoieTRUE
s'il s'agit d'une fonction.Essayez-le en ligne!
la source
05AB1E ,
1197 octets2 octets sauvés grâce à kalsowerus .
Essayez-le en ligne!
Explication
la source
`\)^
par head (¬
): TIO[]
:(,
à la fin. Ajoutez cela et cela fonctionne d'une manière ou d'une autre avec[]
.JavaScript (ES6),
4538 octetsEnregistré 6 octets grâce à @Neil
Retourne
false
outrue
pour les fonctions et les non-fonctions, respectivement.Cela fonctionne en soustrayant constamment l'ancienne valeur de chaque fonction (
m[k]
) et la nouvelle (m[k]=v
qui stocke également la nouvelle valeur). À chaque fois, il y a trois cas:m[k]
retourneundefined
. Soustraire quoi que ce soit desundefined
résultatsNaN
, ce qui est de la fausseté.m[k]-v
résultat0
est fausseté.m[k]-v
résultat est un entier non nul, ce qui est la vérité.Par conséquent, nous devons simplement nous assurer que ce
m[k]-(m[k]=v)
n’est jamais la vérité.la source
a=>!a.some(([x,y])=>m[x]-(m[x]=y),m=[])
.m[k]
être indéfini ... Merci!Mathematica, 24 octets
Explication:
Union
supprime les paires dupliquées, puis#&@@@
récupère le premier élément de chaque paire (commeFirst/@
avec moins d'octets). S'il y a une répétition dans ces premiers éléments, les paires ne font pas une fonction, nous vérifions avecUnsameQ
.(Cela pourrait avoir la plus grande densité de
@
caractères dans n'importe quel programme que j'ai écrit…)la source
@
densité = 1/4R,
3633 octetsEssayez-le en ligne!
fonction anonyme; retourne
FALSE
pour les fonctions etTRUE
pour pas.Ceci
est en train d'être battu parest finalement lié à la réponse de MickyT! !la source
Bash + coreutils, 17
L'entrée est donnée via STDIN.
key
etvalue
sont Tabséparés et chaque paire est délimitée par des lignes.sort
supprime les paires clé-valeur en double.uniq -d
ne génère que des doublons, ainsi la chaîne vide dans le cas d'une fonction et une chaîne non vide dans le cas contraire - lorsqu'il existe des clés en double mappées sur des valeurs différentes.Essayez-le en ligne .
la source
05AB1E , 9 octets
Code:
Explication:
Utilise le codage 05AB1E . Essayez-le en ligne!
la source
ʒ
Je commence à me montrer tout de suite :)}}
place de}
.Gelée , 6 octets
Essayez-le en ligne!
Explication
Voici une autre méthode, également 6 octets:
Essayez-le en ligne!
Au lieu de tester en supprimant les clés en double, cela trie (
Ṣ
) et vérifie si la différence entre terms (I
) est tout à fait vraie (Ạ
)la source
R ,
9566 octetsEnregistrement de 29 octets grâce à Jarko Dubbeldam.
Fonction anonyme. Sorties
FALSE
si une fonction etTRUE
sinon (désolé). Prend comme arguments une liste de clés et une liste de valeurs, comme ceci.Parcourt toutes les clés et saisit la longueur de l'ensemble de valeurs uniques pour cette clé. Si
any
elles sont> 1, renvoyerTRUE
.Ceci est battu par la réponse de MickyT , ainsi que par celle de Giuseppe . upvote un de ceux.
la source
function(k=0,v=0)any(sapply(k,function(x){length(unique(v[k==x]))-1}))
devrait accomplir la même chose.J-uby ,
48332521 octets-3 octets grâce à Jordan!
Explication
Première approche, 33 octets
Celui-ci est plus long que la solution équivalente Ruby, mais c'était amusant à faire.
Tentative d'explication en se transformant en Ruby:
Je pourrais économiser 2 octets avec une version plus récente en remplaçant
:uniq
par~:|
la source
V , 30 octets
Essayez-le en ligne!
Sorties
1
pour les fonctions et rien pour les non-fonctions.la source
Mathematica, 35 octets
Fonction pure prenant une liste de paires ordonnées comme entrée et retournant
True
ouFalse
. Exploite le fait queUnion@#
supprime les paires ordonnées répétées, mais<|Rule@@@#|>
qu'une association supprime toutes les paires ordonnées sauf une avec un premier élément particulier. Nous pouvons donc simplement comparer lesLength
s des deux sorties pour vérifier si la liste des entrées est une fonction.la source
Gelée , 6 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
CJam ,
1917 octets2 octets sauvés grâce à Martin Ender
Sorties
0
pour les fonctions et1
pour les non-fonctions.Essayez-le en ligne!
Explication
la source
APL (Dyalog) ,
1612119 octetsEssayez-le en ligne!
Explication
Imprime
0
pour faux et1
pour vraila source
En fait , 4 octets
Essayez-le en ligne!
Explication:
la source
brainfuck , 71 octets
Essayez-le en ligne!
L'entrée est considérée comme une chaîne plate: par exemple, le premier cas de test serait
35356444
. Pour obtenir la représentation indiquée dans la question initiale, ajoutez simplement un total de six virgules au programme aux bons endroits.La sortie est
U
pour les fonctions etV
pour les non-fonctions.Explication
Pour tout code ASCII, le point n, f (n) est stocké dans la cellule 2n + 1. Les cellules 2n et 2n + 2 sont des espaces de travail et 0, 2, 4, 6, ... 2n-2 sont une piste de chapelure pour revenir à la cellule 0. Lorsqu'il est prouvé que l'entrée n'est pas une fonction, f ( 0) est réglé sur 1 (parmi divers effets secondaires).
la source
Perl 6 , 38 octets
L'essayer
la source
Pyth -
98 octetsL'essayer
Cela fonctionne en supprimant d’abord les paires répétées ({Q); puis il compare la longueur de la liste à la longueur d'un dictionnaire créé à partir de la liste (si la même valeur x apparaît plusieurs fois, le constructeur du dictionnaire n'utilise que le dernier, ce qui fait que le dictionnaire est plus court que la liste)
la source
MATL , 12 octets
L'entrée est une matrice à 2 colonnes, où la première colonne est la clé et la seconde est la valeur.
Essayez-le en ligne!
Explication
la source
PHP, 49 octets
N'imprime rien pour les fonctions et
n
pour les non-fonctions.la source
CJam ,
14119 octetsEssayez-le en ligne!
Prend l'entrée en tant que tableau de paires clé / valeur sur la pile, retourne
1
si l'entrée est une fonction et0
si ce n'est pas le cas.Cette solution est basée sur l'extrait de code
_&
, qui dédoublonne un tableau en prenant l'intersection définie de celui-ci avec lui-même. Je le fais deux fois, d'abord sur l'entrée complète (pour supprimer toute paire clé / valeur exactement dupliquée), puis sur les clés uniquement (pour voir s'il reste des clés en double après la première déduplication).Voici le code complet avec des commentaires:
la source
e#
voici la syntaxe de commentaire de ligne dédiée dans CJam.Ruby,
393029 octetsMerci à @ValueInk d' avoir économisé 9 octets!
Réponse du port de @ Rod's Python 2 .
la source
Hash[x]
fonctionne aussi bien tbh