Diberikan daftar (key, value)
pasangan, tentukan apakah itu mewakili suatu fungsi, artinya setiap kunci memetakan ke nilai yang konsisten. Dengan kata lain, setiap kali dua entri memiliki kunci yang sama, mereka juga harus memiliki nilai yang sama. Entri yang diulang tidak apa-apa.
Sebagai contoh:
# 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)]
Input: Urutan urutan (key, value)
pasangan menggunakan digit 1 hingga 9. Anda mungkin tidak memerlukan pemesanan tertentu. Anda dapat mengambil daftar kunci dan daftar nilai sebagai input terpisah.
Output: Nilai konsisten untuk fungsi, dan nilai konsisten berbeda untuk non-fungsi.
Kasus uji: 5 input pertama adalah fungsi, 5 input terakhir tidak.
[(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)]
Inilah mereka sebagai dua daftar input:
[[(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)]]
Papan peringkat:
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)
pasangan untuk dibalik, seperti pada(value,key)
? Saya dapat mencukur beberapa byte dari jawaban saya jika demikian.Jawaban:
Python 2 , 34 byte
Cobalah online!
Membuat Kamus dan Set dari input dan membandingkan panjangnya.
Kamus tidak dapat memiliki kunci duplikat, sehingga semua nilai ilegal (dan berulang) dihapus.
sumber
lambda x:not dict(x).items()^x
Haskell, 36 byte
Cobalah online!
Lingkaran luar (->
(k,v)
) dan dalam (->(m,n)
) melewati pasangan dan kapan punk==m
, kumpulkan nilai kebenaran dariv==n
. Periksa apakah semuanya benar.sumber
Brachylog ,
54 byteCobalah online!
Program lengkap. Sejauh yang saya tahu, alasan bahwa ini mengalahkan sebagian besar bahasa golf lainnya adalah karena itu
≠
adalah bawaan di Brachylog, sedangkan sebagian besar bahasa golf lainnya perlu disintesis.Penjelasan
Sebagai program penuh, kita dapatkan
true
jika pernyataan berhasil, ataufalse
jika gagal.sumber
Pyth , 5 byte
Saya cukup senang dengan yang ini.
Cobalah online!
sumber
Retina , 25 byte
Cobalah online!
Format input adalah
{k,v},{k,v},...
. Mencetak0
untuk fungsi dan1
untuk non-fungsi. Saya bisa menyimpan dua byte dengan menggunakan umpan baris alih-alih koma dalam format input, tapi itu kacau.sumber
Brachylog , 13 byte
Cobalah online!
Penjelasan
sumber
Ċhᵐ=
danĊtᵐ≠
bekerja?Ċ
adalah variabel khusus yang disebut Pasangan yang selalu didahului untuk menjadi daftar dua elemen.ᵐ
adalah metapredicate yang menerapkan predikat sebelumnya yang segera (h - head
atau dit - tail
sini) untuk setiap elemen input (di sini,Ċ
).=
dan sederhananya≠
periksa bahwa input mereka mengandung semua elemen yang sama / semua berbeda.MATL , 8 byte
Input adalah: array dengan
value
s, diikuti oleh array dengankey
s.Output
1
untuk fungsi,0
selain itu.Cobalah online! . Atau verifikasi semua kasus uji .
Penjelasan
1Z?
Membangun matriks yang jarang. Awalnya semua entri berisi
0
; dan1
ditambahkan ke setiap entri di(i, j)
manaj
dani
merupakan inputkey
,value
pasang.g
Matriks dikonversi menjadi logis; yaitu, entri yang melebihi
1
(sesuai dengan duplikatkey
,value
pasangan) diatur ke1
.s
Jumlah setiap kolom dihitung. Ini adalah jumlah yang berbeda
value
untuk masing-masingkey
.2<A
Suatu fungsi akan memiliki semua jumlah tersebut kurang dari
2
.sumber
R, 33 byte
Ini adalah versi saya untuk R. Ini mengambil keuntungan dari
ave
fungsinya. Saya telah mengizinkan input kosong dengan menetapkan default pada parameter kunci dan nilai.ave
menghasilkan nilai rata-rata untuk masing-masing kunci. Untungnya ini mengembalikan rata-rata dalam urutan yang sama dengan nilai input, jadi perbandingan dengan input akan menunjukkan jika ada nilai yang berbeda. KembaliTRUE
jika itu adalah fungsi.Cobalah online!
sumber
05AB1E ,
1197 byteDisimpan 2 byte berkat kalsowerus .
Cobalah online!
Penjelasan
sumber
`\)^
dengan head (¬
): TIO[]
:(,
di akhir. Tambahkan itu dan kemudian entah bagaimana berhasil[]
.JavaScript (ES6),
4538 byteDisimpan 6 byte berkat @Neil
Mengembalikan
false
atautrue
untuk fungsi dan non-fungsi, masing-masing.Ini bekerja dengan terus-menerus mengurangi nilai lama setiap fungsi (
m[k]
) dan yang baru (m[k]=v
, yang juga menyimpan nilai baru). Setiap kali, ada tiga kasus:m[k]
kembalikanundefined
. Mengurangkan apa pun dariundefined
hasil diNaN
, yang palsu.m[k]-v
menghasilkan0
, yang salah.m[k]-v
menghasilkan bilangan bulat bukan nol, yang benar.Karena itu, kita hanya perlu memastikan bahwa
m[k]-(m[k]=v)
itu tidak pernah benar.sumber
a=>!a.some(([x,y])=>m[x]-(m[x]=y),m=[])
.m[k]
menjadi terdefinisi ... Terima kasih!Mathematica, 24 byte
Penjelasan:
Union
menghapus pasangan yang terduplikasi, kemudian#&@@@
mendapatkan elemen pertama dari setiap pasangan (sepertiFirst/@
tetapi dengan lebih sedikit byte). Jika ada pengulangan dalam elemen pertama ini, pasangan tidak membuat fungsi, yang kami periksaUnsameQ
.(Ini mungkin memiliki kepadatan
@
karakter tertinggi dalam setiap program yang saya tulis ...)sumber
@
density =R,
3633 byteCobalah online!
fungsi anonim; kembali
FALSE
untuk fungsi danTRUE
untuk tidak.Ini
dipukuliakhirnya diikat dengan jawaban MickyT! !sumber
Bash + coreutils, 17
Input diberikan melalui STDIN.
key
danvalue
yang Tabdipisahkan dan masing-masing pasangan adalah baris baru-delimited.sort
menghapus pasangan nilai kunci duplikat.uniq -d
hanya menghasilkan duplikat, dan dengan demikian menampilkan string kosong dalam kasus fungsi, dan string non-kosong sebaliknya - ketika ada kunci duplikat yang memetakan ke nilai yang berbeda.Cobalah online .
sumber
05AB1E , 9 byte
Kode:
Penjelasan:
Menggunakan penyandian 05AB1E . Cobalah online!
sumber
ʒ
segera saya melihat :)}}
bukan}
.Jelly , 6 byte
Cobalah online!
Penjelasan
Berikut adalah metode alternatif, juga 6 byte:
Cobalah online!
Alih-alih menguji dengan menghapus kunci duplikat, ini semacam (
Ṣ
) dan memeriksa apakah perbedaan antara istilah (I
) semua benar (Ạ
)sumber
R ,
9566 byteDisimpan 29 byte berkat Jarko Dubbeldam.
Fungsi anonim. Keluaran
FALSE
jika suatu fungsi danTRUE
jika tidak (maaf). Membawa argumen sebagai kunci dan daftar nilai, seperti itu.Putar melalui semua kunci dan ambil panjang himpunan nilai unik untuk kunci itu. Jika
any
dari mereka> 1, kembaliTRUE
.Ini dikalahkan oleh jawaban MickyT , dan juga Giuseppe . salah satu dari mereka.
sumber
function(k=0,v=0)any(sapply(k,function(x){length(unique(v[k==x]))-1}))
harus mencapai hal yang sama.J-uby ,
48332521 byte-3 byte terima kasih ke Jordan!
Penjelasan
Pendekatan Pertama, 33 byte
Yang ini lebih panjang dari solusi Ruby yang setara, tapi itu menyenangkan untuk dibuat.
Mencoba penjelasan dengan mengubah ke Ruby:
Saya dapat menyimpan 2 byte dengan versi yang lebih baru dengan mengganti
:uniq
dengan~:|
sumber
V , 30 byte
Cobalah online!
Output
1
untuk fungsi dan tidak ada untuk non-fungsi.sumber
Mathematica, 35 byte
Fungsi murni mengambil daftar pasangan yang dipesan sebagai masukan dan pengembalian
True
atauFalse
. Mengeksploitasi fakta bahwaUnion@#
menghapus pasangan berurutan berulang, tetapi<|Rule@@@#|>
(sebuah asosiasi) menghapus semua kecuali satu pasangan berurutan dengan elemen pertama tertentu. Jadi kita bisa membandingkanLength
s dari dua output untuk memeriksa apakah daftar input adalah fungsi.sumber
Jelly , 6 byte
Cobalah online!
Bagaimana itu bekerja
sumber
CJam ,
1917 byteDisimpan 2 byte berkat Martin Ender
Output
0
untuk fungsi dan1
untuk non-fungsi.Cobalah online!
Penjelasan
sumber
APL (Dyalog) ,
1612119 byteCobalah online!
Penjelasan
Cetakan
0
untuk false dan1
truesumber
Sebenarnya , 4 byte
Cobalah online!
Penjelasan:
sumber
brainfuck , 71 byte
Cobalah online!
Input diambil sebagai string datar: misalnya, kasus uji pertama adalah
35356444
. Untuk mendapatkan representasi yang ditunjukkan dalam pertanyaan asli, cukup tambahkan total enam koma ke program pada titik yang tepat.Output
U
untuk fungsi danV
untuk non-fungsi.Penjelasan
Untuk setiap kode ASCII titik n, f (n) disimpan di sel 2n + 1. Sel 2n dan 2n + 2 adalah ruang kerja, dan 0, 2, 4, 6, ... 2n-2 adalah jejak remah roti untuk mengarah kembali ke sel 0. Ketika input terbukti tidak berfungsi, f ( 0) diatur ke 1 (di antara berbagai efek samping).
sumber
Perl 6 , 38 byte
Cobalah
sumber
Pyth -
98 byteCobalah
Ini bekerja dengan menghapus setiap pasangan yang diulang terlebih dahulu ({Q); kemudian membandingkan panjang daftar dengan panjang kamus yang dibuat dari daftar (jika nilai x yang sama terjadi lebih dari sekali, konstruktor kamus hanya menggunakan yang terakhir, sehingga kamus lebih pendek dari daftar)
sumber
MATL , 12 byte
Inputnya adalah matriks 2-kolom, di mana kolom pertama adalah kunci dan yang kedua adalah nilai.
Cobalah online!
Penjelasan
sumber
PHP, 49 byte
Mencetak apa pun untuk fungsi dan
n
untuk non-fungsi.sumber
CJam ,
14119 byteCobalah online!
Mengambil input sebagai array pasangan kunci / nilai pada stack, mengembalikan
1
jika input adalah fungsi, dan0
jika bukan.Solusi ini didasarkan pada snippet
_&
, yang menduplikat array dengan mengambil persimpangan set dengan itu sendiri. Saya melakukan ini dua kali, pertama pada input penuh (untuk menyingkirkan pasangan kunci / nilai yang persis sama) dan kemudian hanya pada kunci (untuk melihat apakah ada kunci duplikat yang tersisa setelah de-duplikasi pertama).Berikut kode lengkap dengan komentar:
sumber
e#
adalah sintaks komentar baris khusus di CJam.Ruby,
393029 BytesTerima kasih kepada @ ValueInk karena telah menghemat 9 byte!
Port of @ Rod's Python 2 menjawab .
sumber
Hash[x]
berfungsi dengan baik tbh