Biorąc pod uwagę listę (key, value)
par, określ, czy reprezentuje ona funkcję, co oznacza, że każdy klucz odwzorowuje na spójną wartość. Innymi słowy, ilekroć dwa wpisy mają takie same klucze, muszą również mieć takie same wartości. Powtarzające się wpisy są OK.
Na przykład:
# 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)]
Dane wejściowe: Uporządkowana sekwencja (key, value)
par za pomocą cyfr od 1 do 9. Może nie być wymagane żadne konkretne zamówienie. Alternatywnie możesz wziąć listę kluczy i listę wartości jako osobne dane wejściowe.
Dane wyjściowe: spójna wartość dla funkcji i inna spójna wartość dla niefunkcjonalnych.
Przypadki testowe: Pierwsze 5 wejść to funkcje, ostatnie 5 nie.
[(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)]
Oto dwie listy danych wejściowych:
[[(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)]]
Tabela liderów:
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)
można odwrócić pary, tak jak w przypadku(value,key)
? Jeśli tak, mogę ogolić kilka bajtów z mojej odpowiedzi.Odpowiedzi:
Python 2 , 34 bajty
Wypróbuj online!
Tworzy słownik i zestaw na podstawie danych wejściowych i porównuje ich długości.
Słowniki nie mogą mieć zduplikowanych kluczy, więc wszystkie niedozwolone (i powtarzane) wartości są usuwane.
źródło
lambda x:not dict(x).items()^x
Haskell, 36 bajtów
Wypróbuj online!
Zewnętrzna (->
(k,v)
) i wewnętrzna (->(m,n)
) pętla nad parami i za każdym razemk==m
zbierają wartość prawdyv==n
. Sprawdź, czy wszystkie są prawdziwe.źródło
Brachylog ,
54 bajtówWypróbuj online!
Pełny program O ile mi wiadomo, powodem, dla którego pokonuje większość innych języków golfowych,
≠
jest wbudowane narzędzie Brachylog, podczas gdy większość innych języków golfowych musi je zsyntetyzować.Wyjaśnienie
Jako pełny program otrzymujemy,
true
jeśli asercja się powiedzie, lubfalse
jeśli się nie powiedzie.źródło
Pyth , 5 bajtów
Jestem z tego całkiem zadowolony.
Wypróbuj online!
źródło
Siatkówka , 25 bajtów
Wypróbuj online!
Format wejściowy to
{k,v},{k,v},...
. Drukuje0
dla funkcji i1
dla niefunkcji. Mógłbym zaoszczędzić dwa bajty, używając kanałów wejściowych zamiast przecinków w formacie wejściowym, ale to popsute.źródło
Brachylog , 13 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Ċhᵐ=
i jakĊtᵐ≠
działa?Ċ
jest specjalną zmienną o nazwie Para, która zawsze jest wstępnie ograniczona do listy dwóch elementów.ᵐ
jest metapredykatem, który stosuje poprzedni predykat (h - head
lubt - tail
tutaj) do każdego elementu danych wejściowych (tutaj,Ċ
).=
i po≠
prostu sprawdź, czy ich dane wejściowe zawierają wszystkie równe / wszystkie różne elementy.MATL , 8 bajtów
Dane wejściowe to: tablica z literą
value
s, a następnie tablica z literąkey
s.Dane wyjściowe dotyczą
1
funkcji, w0
przeciwnym razie.Wypróbuj online! . Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
1Z?
Tworzy rzadką macierz. Początkowo wszystkie wpisy zawierają
0
; i1
jest dodawany do każdego wpisu,(i, j)
gdziej
ii
są danymi wejściowymikey
,value
parami.g
Macierz jest konwertowana na logiczną; czyli pozycje przekraczającej
1
(odpowiadające powielićkey
,value
par) są ustawione1
.s
Obliczana jest suma każdej kolumny. Jest to liczba różnych
value
s dla każdegokey
.2<A
Funkcja będzie miała wszystkie takie sumy mniej niż
2
.źródło
R, 33 bajty
To jest moja wersja dla R. Korzysta z tej
ave
funkcji. Zezwoliłem na puste dane wejściowe, ustawiając wartości domyślne parametrów klucza i wartości.ave
tworzy średnią wartości dla każdego z kluczy. Na szczęście to zwraca średnie w tej samej kolejności co wartości wejściowe, więc porównanie z danymi wejściowymi pokaże, czy istnieją inne wartości. Zwraca,TRUE
jeśli jest to funkcja.Wypróbuj online!
źródło
05AB1E ,
1197 bajtówZaoszczędzono 2 bajty dzięki kalsowerus .
Wypróbuj online!
Wyjaśnienie
źródło
`\)^
head (¬
): TIO[]
:(,
na końcu. Dodaj to, a potem jakoś będzie działać[]
.JavaScript (ES6),
4538 bajtówZaoszczędź 6 bajtów dzięki @Neil
Zwraca
false
lubtrue
dla funkcji i spoza funkcji, odpowiednio.Działa to poprzez ciągłe odejmowanie starej wartości każdej funkcji (
m[k]
) i nowej (m[k]=v
która również przechowuje nową wartość). Za każdym razem są trzy przypadki:m[k]
zwracaundefined
. Odejmowanie czegokolwiek odundefined
wynikówNaN
, co jest fałszem.m[k]-v
wynik0
jest fałszywy.m[k]-v
skutkuje niezerową liczbą całkowitą, co jest prawdą.Dlatego musimy tylko upewnić się, że
m[k]-(m[k]=v)
nigdy nie jest to prawdą.źródło
a=>!a.some(([x,y])=>m[x]-(m[x]=y),m=[])
.m[k]
niezdefiniowane ... Dzięki!Mathematica, 24 bajty
Objaśnienie:
Union
usuwa zduplikowane pary, a następnie#&@@@
pobiera pierwszy element z każdej pary (jak,First/@
ale z mniejszą liczbą bajtów). Jeśli w tych pierwszych elementach jest jakieś powtórzenie, pary nie tworzą funkcji, którą sprawdzamyUnsameQ
.(To może mieć najwyższą gęstość
@
znaków w każdym programie, który napisałem…)źródło
@
gęstość =R,
3633 bajtówWypróbuj online!
funkcja anonimowa; zwraca
FALSE
dla funkcji, aTRUE
nie dla.To
biciejest ostatecznie powiązane z odpowiedzią MickyT! !źródło
Bash + coreutils, 17
Dane wejściowe są podawane przez STDIN.
key
ivalue
są Tabrozdzielone, a każda para jest rozdzielana znakiem nowej linii.sort
usuwa zduplikowane pary klucz-wartość.uniq -d
wypisuje tylko duplikaty, a zatem wypisuje pusty ciąg w przypadku funkcji, a niepusty ciąg w przeciwnym razie - gdy są duplikaty kluczy, które są odwzorowane na różne wartości.Wypróbuj online .
źródło
05AB1E , 9 bajtów
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
ʒ
od razu widzę :)}}
zamiast}
.Galaretka , 6 bajtów
Wypróbuj online!
Wyjaśnienie
Oto alternatywna metoda, również 6 bajtów:
Wypróbuj online!
Zamiast testować z usuwaniem zduplikowanych kluczy, to sortuje (
Ṣ
) i sprawdza, czyI
cała różnica między terminami ( ) jest prawdziwa (Ạ
)źródło
R ,
9566 bajtówZaoszczędź 29 bajtów dzięki Jarko Dubbeldam.
Funkcja anonimowa. Wyprowadzane,
FALSE
jeśli funkcja, aTRUE
jeśli nie (przepraszam). Jako argumenty przyjmuje listę kluczy i listę wartości.Pętla przechodzi przez wszystkie klucze i pobiera długość zestawu unikalnych wartości dla tego klucza. Jeśli
any
z nich jest> 1, wróćTRUE
.Jest to pobijane przez odpowiedź MickyT , a także odpowiedź Giuseppe . przegłosuj jeden z nich.
źródło
function(k=0,v=0)any(sapply(k,function(x){length(unique(v[k==x]))-1}))
powinien osiągnąć to samo.J-uby ,
48332521 bajtów-3 bajty dzięki Jordanowi!
Wyjaśnienie
Pierwsze podejście, 33 bajty
Ten jest dłuższy niż równoważne rozwiązanie Ruby, ale jego tworzenie było fajne.
Próba wyjaśnienia, przechodząc na Ruby:
Mógłbym zapisać 2 bajty w nowszej wersji, zastępując
:uniq
je~:|
źródło
V , 30 bajtów
Wypróbuj online!
Wyjścia
1
dla funkcji i nic dla niefunkcji.źródło
Mathematica, 35 bajtów
Czysta funkcja przyjmująca listę uporządkowanych par jako dane wejściowe i zwracające
True
lubFalse
. Wykorzystuje fakt, żeUnion@#
usuwa powtarzające się uporządkowane pary, ale<|Rule@@@#|>
(powiązanie) usuwa wszystkie oprócz jednej uporządkowanej pary z określonym pierwszym elementem. Możemy więc po prostu porównaćLength
s dwóch wyjść, aby sprawdzić, czy lista wejść jest funkcją.źródło
Galaretka , 6 bajtów
Wypróbuj online!
Jak to działa
źródło
CJam ,
1917 bajtówZaoszczędzono 2 bajty dzięki Martinowi Enderowi
Wyjścia
0
dla funkcji i1
dla niefunkcji.Wypróbuj online!
Wyjaśnienie
źródło
APL (Dyalog) ,
1612119 bajtówWypróbuj online!
Wyjaśnienie
Drukuje
0
jako fałszywe i1
prawdziweźródło
Właściwie 4 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
pieprzenie mózgu , 71 bajtów
Wypróbuj online!
Dane wejściowe są traktowane jako ciągi płaskie: na przykład byłby to pierwszy przypadek testowy
35356444
. Aby uzyskać reprezentację pokazaną w pierwotnym pytaniu, po prostu dodaj w sumie sześć przecinków do programu w odpowiednich punktach.Dane wyjściowe dotyczą
U
funkcji iV
funkcji niefunkcjonalnych.Wyjaśnienie
Dla dowolnego kodu ASCII punkt n, f (n) jest przechowywany w komórce 2n + 1. Komórki 2n i 2n + 2 są przestrzenią roboczą, a 0, 2, 4, 6, ... 2n-2 są śladem bułki tartej prowadzącej z powrotem do komórki 0. Gdy okaże się, że dane wejściowe nie są funkcją, f ( 0) jest ustawiony na 1 (spośród różnych efektów ubocznych).
źródło
Perl 6 , 38 bajtów
Spróbuj
źródło
Pyth -
98 bajtówSpróbuj
Działa poprzez usunięcie najpierw dowolnych powtarzających się par ({Q); następnie porównuje długość listy z długością słownika utworzonego z listy (jeśli ta sama wartość x występuje więcej niż jeden raz, konstruktor słownika używa tylko ostatniego, co powoduje, że słownik jest krótszy niż lista)
źródło
MATL , 12 bajtów
Dane wejściowe to macierz 2-kolumnowa, gdzie pierwsza kolumna jest kluczem, a druga wartością.
Wypróbuj online!
Wyjaśnienie
źródło
PHP, 49 bajtów
Nie drukuje nic dla funkcji i
n
niefunkcji.źródło
CJam ,
14119 bajtówWypróbuj online!
Pobiera dane wejściowe jako tablicę par klucz / wartość na stosie, zwraca,
1
jeśli dane wejściowe są funkcją, a0
jeśli nie są.To rozwiązanie opiera się na fragmencie kodu
_&
, który duplikuje tablicę, biorąc zestaw jej przecięcia ze sobą. Robię to dwa razy, najpierw na pełnym wejściu (aby pozbyć się dokładnie zduplikowanych par klucz / wartość), a następnie tylko na kluczach (aby sprawdzić, czy po pierwszym usunięciu duplikatów pozostały jeszcze jakieś duplikaty).Oto pełny kod z komentarzami:
źródło
e#
jest dedykowana składnia komentarza do linii w CJam.Ruby,
393029 bajtówDzięki @ValueInk za oszczędność 9 bajtów!
Odpowiedź na Python 2 dla portu @ Rod .
źródło
Hash[x]
działa równie dobrze tbh