(key, value)
Bestimmen Sie anhand einer Liste von Paaren, ob es sich um eine Funktion handelt. Dies bedeutet, dass jeder Schlüssel einem konsistenten Wert zugeordnet ist. Mit anderen Worten, wenn zwei Einträge gleiche Schlüssel haben, müssen sie auch gleiche Werte haben. Wiederholte Eingaben sind OK.
Zum Beispiel:
# 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)]
Eingabe: Eine geordnete Folge von (key, value)
Paaren mit den Ziffern 1 bis 9. Möglicherweise ist keine bestimmte Reihenfolge erforderlich. Alternativ können Sie die Tastenliste und die Werteliste als separate Eingänge verwenden.
Ausgabe: Ein konsistenter Wert für Funktionen und ein anderer konsistenter Wert für Nichtfunktionen.
Testfälle: Die ersten 5 Eingänge sind Funktionen, die letzten 5 nicht.
[(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)]
Hier sind sie als zwei Listen von Eingaben:
[[(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)]]
Bestenliste:
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)
Paare umgekehrt werden, wie in(value,key)
? Ich kann ein paar Bytes von meiner Antwort entfernen, wenn dies der Fall ist.Antworten:
Python 2 , 34 Bytes
Probieren Sie es online!
Erstellt aus der Eingabe ein Wörterbuch und ein Set und vergleicht deren Längen.
Wörterbücher dürfen keine doppelten Schlüssel haben, daher werden alle ungültigen (und wiederholten) Werte entfernt.
quelle
lambda x:not dict(x).items()^x
Haskell, 36 Bytes
Probieren Sie es online!
Äußere (->
(k,v)
) und innere (->(m,n)
) Schleife über die Paare und wann immerk==m
, sammeln Sie den Wahrheitswert vonv==n
. Überprüfen Sie, ob alle zutreffen.quelle
Brachylog ,
54 BytesProbieren Sie es online!
Volles Programm. Soweit ich das
≠
beurteilen kann, liegt der Grund dafür, dass dies die meisten anderen Golfsprachen schlägt, darin, dass es in Brachylog eingebaut ist, während die meisten anderen Golfsprachen dies synthetisieren müssen.Erläuterung
Als vollständiges Programm erhalten wir,
true
ob die Assertion erfolgreich ist oderfalse
fehlschlägt.quelle
Pyth , 5 Bytes
Ich bin ziemlich glücklich mit diesem.
Probieren Sie es online!
quelle
Retina , 25 Bytes
Probieren Sie es online!
Eingabeformat ist
{k,v},{k,v},...
. Druckt0
für Funktionen und1
für Nichtfunktionen. Ich könnte zwei Bytes sparen, indem ich Zeilenvorschübe anstelle der Kommas im Eingabeformat verwende, aber das ist durcheinander.quelle
Brachylog , 13 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ċhᵐ=
und wieĊtᵐ≠
?Ċ
ist eine spezielle Variable mit dem Namen Couple, die immer als Liste von zwei Elementen vorgespannt ist.ᵐ
ist ein Metapredikat, das das unmittelbar vorhergehende Prädikat (h - head
odert - tail
hier) auf jedes Element der Eingabe (hier,Ċ
) anwendet .=
und≠
einfach überprüfen, ob ihre Eingabe alle gleichen / alle verschiedenen Elemente enthält.MATL , 8 Bytes
Eingaben sind: ein Array mit dem
value
s, gefolgt von einem Array mit demkey
s.Der Ausgang ist
1
für die Funktion,0
ansonsten.Probieren Sie es online! . Oder überprüfen Sie alle Testfälle .
Erläuterung
1Z?
Erstellt eine dünne Matrix. Anfangs enthalten alle Einträge
0
; und1
wird zu jedem Eintrag hinzugefügt,(i, j)
woj
undi
sind die Eingabekey
,value
Paare.g
Die Matrix wird in logisch konvertiert. Das heißt, Einträge, die höher sind
1
(entsprechend Duplikatenkey
,value
Paaren), werden auf gesetzt1
.s
Die Summe jeder Spalte wird berechnet. Dies ist die Anzahl der verschiedenen
value
s für jedenkey
.2<A
Eine Funktion hat alle diese Summen kleiner als
2
.quelle
R, 33 Bytes
Dies ist meine Version für R. Dies nutzt die
ave
Funktion. Ich habe die Leereingabe zugelassen, indem ich die Standardeinstellungen für die Schlüssel- und Wertparameter festgelegt habe.ave
erzeugt einen Mittelwert der Werte für jeden der Schlüssel. Glücklicherweise gibt dies das Mittel in der gleichen Reihenfolge wie die Eingabewerte zurück, sodass ein Vergleich mit der Eingabe anzeigt, ob es unterschiedliche Werte gibt. Gibt zurück,TRUE
ob es sich um eine Funktion handelt.Probieren Sie es online!
quelle
05AB1E ,
1197 Bytes2 Bytes dank kalsowerus gespart .
Probieren Sie es online!
Erläuterung
quelle
`\)^
head (¬
) ersetzen : TIO[]
:(,
am Ende noch einen Rest hatte . Füge das hinzu und dann funktioniert es irgendwie mit[]
.JavaScript (ES6),
4538 Bytes6 Bytes dank @Neil gespart
Gibt
false
bzw.true
für Funktionen und Nichtfunktionen zurück.Dies funktioniert, indem ständig der alte Wert jeder Funktion (
m[k]
) undm[k]=v
der neue Wert ( der auch den neuen Wert speichert ) subtrahiert werden . Jedes Mal gibt es drei Fälle:m[k]
zurückgegebenundefined
. Subtrahieren Sie alles von denundefined
ErgebnissenNaN
, was falsch ist.m[k]-v
ergibt sich0
, was falsch ist.m[k]-v
abweicht , wird eine ganze Zahl ungleich Null ausgegeben, was der Wahrheit entspricht.Deshalb müssen wir nur sicherstellen, dass
m[k]-(m[k]=v)
das niemals wahr ist.quelle
a=>!a.some(([x,y])=>m[x]-(m[x]=y),m=[])
.m[k]
ist nicht definiert ... Danke!Mathematica, 24 Bytes
Erläuterung:
Union
Löscht doppelte Paare und ruft dann#&@@@
das erste Element von jedem Paar ab (wie,First/@
aber mit weniger Bytes). Wenn sich diese ersten Elemente wiederholen, bilden die Paare keine Funktion, die wir überprüfenUnsameQ
.(Dies könnte die höchste Dichte an
@
Zeichen in jedem Programm haben, das ich geschrieben habe ...)quelle
@
Dichte =R,
3633 BytesProbieren Sie es online!
anonyme Funktion; Gibt
FALSE
für Funktionen undTRUE
für nicht zurück.Dies
wird geschlagen vonist endlich mit MickyTs Antwort verbunden! !quelle
Bash + Coreutils, 17
Die Eingabe erfolgt über STDIN.
key
undvalue
sind Tabgetrennt und jedes Paar ist durch Zeilenumbrüche getrennt.sort
Entfernt die doppelten Schlüssel-Wert-Paare.uniq -d
Gibt nur Duplikate aus und gibt daher im Fall einer Funktion die leere Zeichenfolge und andernfalls eine nicht leere Zeichenfolge aus, wenn es doppelte Schlüssel gibt, die unterschiedlichen Werten zugeordnet sind.Probieren Sie es online aus .
quelle
05AB1E , 9 Bytes
Code:
Erläuterung:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
ʒ
sofort Ich sehe :)}}
statt zu verwenden}
.Gelee , 6 Bytes
Probieren Sie es online!
Erläuterung
Hier ist eine alternative Methode, ebenfalls 6 Bytes:
Probieren Sie es online!
Anstatt zu testen
Ṣ
, ob doppelte Schlüssel entfernt wurden,I
wird hiermit sortiert ( ) und geprüft, ob der Unterschied zwischen den Begriffen ( ) wahr ist (Ạ
).quelle
R ,
9566 Bytes29 Bytes dank Jarko Dubbeldam gespeichert.
Anonyme Funktion. Gibt aus,
FALSE
ob eine Funktion undTRUE
wenn nicht (sorry). Nimmt als Argumente eine Liste von Schlüsseln und eine Liste von Werten wie folgt.Durchläuft alle Schlüssel und ermittelt die Länge des Satzes eindeutiger Werte für diesen Schlüssel. Wenn einer
any
von ihnen> 1 ist, kehre zurückTRUE
.Dies wird von MickyTs Antwort und auch von Giuseppe 's geschlagen. stimme einem von denen zu.
quelle
function(k=0,v=0)any(sapply(k,function(x){length(unique(v[k==x]))-1}))
sollte das gleiche erreichen.J-uby ,
48332521 Bytes-3 Bytes dank Jordanien!
Erläuterung
Erster Ansatz, 33 Bytes
Diese ist länger als die entsprechende Ruby-Lösung, aber es hat Spaß gemacht, sie zu erstellen.
Erklärungsversuch durch Umwandlung in Ruby:
Ich kann 2 Bytes mit einer neueren Version speichert durch Ersetzen
:uniq
mit~:|
quelle
V , 30 Bytes
Probieren Sie es online!
Ausgänge
1
für Funktionen und nichts für Nichtfunktionen.quelle
Mathematica, 35 Bytes
Reine Funktion, die eine Liste geordneter Paare als Eingabe und Rückgabe von
True
oder verwendetFalse
. Nutzt die Tatsache aus, dassUnion@#
wiederholte geordnete Paare gelöscht werden, aber<|Rule@@@#|>
(eine Assoziation) alle bis auf ein geordnetes Paar mit einem bestimmten ersten Element löscht. Wir können also einfach dieLength
s der beiden Ausgänge vergleichen, um zu überprüfen, ob die Eingangsliste eine Funktion ist.quelle
Gelee , 6 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
CJam ,
1917 Bytes2 Bytes gespart dank Martin Ender
Ausgänge
0
für Funktionen und1
für Nichtfunktionen.Probieren Sie es online!
Erläuterung
quelle
APL (Dyalog) ,
1612119 BytesProbieren Sie es online!
Erläuterung
Druckt
0
für falsch und1
für wahrquelle
Eigentlich 4 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Brainfuck , 71 Bytes
Probieren Sie es online!
Die Eingabe erfolgt als flache Zeichenfolge. Dies ist beispielsweise der erste Testfall
35356444
. Um die in der ursprünglichen Frage gezeigte Darstellung zu erhalten, fügen Sie dem Programm an den richtigen Stellen einfach insgesamt sechs Kommas hinzu.Die Ausgabe erfolgt
U
für Funktionen undV
für Nichtfunktionen.Erläuterung
Für jeden ASCII-Codepunkt n wird f (n) in Zelle 2n + 1 gespeichert. Die Zellen 2n und 2n + 2 sind der Arbeitsbereich, und 0, 2, 4, 6, ... 2n-2 sind eine Spur von Semmelbröseln, die zur Zelle 0 zurückführen. Wenn sich herausstellt, dass die Eingabe keine Funktion ist, wird f ( 0) wird auf 1 gesetzt (unter verschiedenen Nebenwirkungen).
quelle
Perl 6 , 38 Bytes
Versuch es
quelle
Pyth -
98 BytesVersuch es
Es funktioniert, indem alle wiederholten Paare zuerst entfernt werden ({Q); dann vergleicht es die Länge der Liste mit der Länge eines aus der Liste erstellten Wörterbuchs (wenn der gleiche x-Wert mehrmals vorkommt, verwendet der Wörterbuchkonstruktor nur den letzten, was dazu führt, dass das Wörterbuch kürzer als die Liste ist)
quelle
MATL , 12 Bytes
Die Eingabe ist eine Matrix mit zwei Spalten, wobei die erste Spalte der Schlüssel und die zweite der Wert ist.
Probieren Sie es online!
Erläuterung
quelle
PHP, 49 Bytes
Druckt nichts für Funktionen und
n
für Nichtfunktionen.quelle
CJam ,
14119 BytesProbieren Sie es online!
Übernimmt die Eingabe als Array von Schlüssel / Wert-Paaren auf dem Stapel, gibt zurück,
1
ob die Eingabe eine Funktion ist, und0
wenn dies nicht der Fall ist .Diese Lösung basiert auf dem Snippet
_&
, das ein Array desupliziert, indem es den festgelegten Schnittpunkt mit sich selbst nimmt. Ich mache das zweimal, zuerst bei der vollständigen Eingabe (um alle genau duplizierten Schlüssel / Wert-Paare zu entfernen) und dann nur bei den Schlüsseln (um zu sehen, ob nach der ersten Deduplizierung noch doppelte Schlüssel übrig sind).Hier ist der vollständige Code mit Kommentaren:
quelle
e#
ist die Syntax für dedizierte Zeilenkommentare in CJam.Ruby,
393029 BytesVielen Dank an @ValueInk für die Einsparung von 9 Bytes!
Port von @ Rods Python 2 Antwort .
quelle
Hash[x]
funktioniert genauso gut tbh