По заданному списку (key, value)
пар определите, представляет ли он функцию, что означает, что каждый ключ отображается в согласованное значение. Другими словами, когда две записи имеют одинаковые ключи, они также должны иметь одинаковые значения. Повторные записи в порядке.
Например:
# 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)]
Ввод: упорядоченная последовательность (key, value)
пар, состоящая из цифр от 1 до 9. Вам может не потребоваться определенный порядок. В качестве альтернативы вы можете взять список ключей и список значений в качестве отдельных входов.
Вывод: непротиворечивое значение для функций и другое непротиворечивое значение для не-функций.
Тестовые случаи: первые 5 входов являются функциями, последние 5 - нет.
[(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)]
Вот они как два списка входов:
[[(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)]]
Leaderboard:
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)
местами пары, как в(value,key)
? Я могу сбрить несколько байтов своего ответа, если это так.Ответы:
Python 2 , 34 байта
Попробуйте онлайн!
Создает словарь и набор из входных данных и сравнивает их длины.
Словари не могут иметь дублированные ключи, поэтому все недопустимые (и повторяющиеся) значения удаляются.
источник
lambda x:not dict(x).items()^x
Haskell, 36 байт
Попробуйте онлайн!
Внешний (->
(k,v)
) и внутренний (->(m,n)
) цикл по парам и всякий разk==m
, когда собираем значение истинностиv==n
. Проверьте, все ли верно.источник
Брахилог ,
54 байтаПопробуйте онлайн!
Полная программа. Насколько я могу судить, причина, по которой он опережает большинство других языков игры в гольф, заключается в том, что
≠
он встроен в брахилог, тогда как большинству других языков игры в гольф необходимо его синтезировать.объяснение
Как полная программа, мы получаем,
true
если утверждение успешно, илиfalse
если это не удается.источник
Pyth , 5 байт
Я очень доволен этим.
Попробуйте онлайн!
источник
Сетчатка , 25 байт
Попробуйте онлайн!
Формат ввода есть
{k,v},{k,v},...
. Печать0
для функций и1
не-функций. Я мог бы сохранить два байта, используя перевод строки вместо запятых в формате ввода, но это не так.источник
Брахилог , 13 байт
Попробуйте онлайн!
объяснение
источник
Ċhᵐ=
и какĊtᵐ≠
работает?Ċ
это специальная переменная с именем Couple, которая всегда должна быть списком из двух элементов.ᵐ
является метапредикатом, который применяет непосредственно предшествующий предикат (h - head
илиt - tail
здесь) к каждому элементу ввода (здесь,Ċ
).=
и просто≠
проверить, что их вход содержит все равные / все различные элементы.MATL , 8 байт
Входные данные: массив с
value
s, за которым следует массив сkey
s.Выход
1
для функции, в0
остальном.Попробуйте онлайн! , Или проверьте все тестовые случаи .
объяснение
1Z?
Строит разреженную матрицу. Первоначально все записи содержат
0
; и1
добавляются к каждой записи(i, j)
гдеj
иi
являются входнымиkey
,value
паром.g
Матрица преобразуется в логическую; то есть превышающие записи
1
(соответствующие дубликатамkey
,value
парам) устанавливаются в1
.s
Сумма каждого столбца вычисляется. Это количество разных
value
s для каждогоkey
.2<A
Функция будет иметь все такие суммы меньше, чем
2
.источник
R, 33 байта
Это моя версия для R. Это использует
ave
функцию. Я допустил пустой ввод, установив значения по умолчанию для параметров ключа и значения.ave
производит среднее значение для каждого из ключей. К счастью, это возвращает средние значения в том же порядке, что и входные значения, поэтому сравнение с входными данными покажет, есть ли другие значения. Возвращает,TRUE
если это функция.Попробуйте онлайн!
источник
05AB1E ,
1197 байтСохранено 2 байта благодаря kalsowerus .
Попробуйте онлайн!
объяснение
источник
`\)^
с головой (¬
): TiO[]
:(,
в конце. Добавьте это, и тогда это так или иначе работает с[]
.JavaScript (ES6),
4538 байтСохранено 6 байтов благодаря @Neil
Возвращает
false
илиtrue
для функций и не-функций соответственно.Это работает путем постоянного вычитания старого значения каждой функции (
m[k]
) и нового (m[k]=v
которое также хранит новое значение). Каждый раз, есть три случая:m[k]
возвращаетсяundefined
. Вычитание чего-либо изundefined
результатов приводит кNaN
ошибочности.m[k]-v
приводит к0
ошибочности.m[k]-v
результате получается ненулевое целое число, что является правдой.Поэтому нам просто нужно убедиться, что
m[k]-(m[k]=v)
это никогда не правда.источник
a=>!a.some(([x,y])=>m[x]-(m[x]=y),m=[])
.m[k]
быть неопределенным ... Спасибо!Mathematica, 24 байта
Объяснение:
Union
удаляет дублированные пары, затем#&@@@
получает первый элемент из каждой пары (как,First/@
но с меньшим количеством байтов). Если есть повторение в этих первых элементах, пары не создают функцию, с которой мы проверяемUnsameQ
.(Это может иметь самую высокую плотность
@
символов в любой программе, которую я написал ...)источник
@
плотность =R,
3633 байтаПопробуйте онлайн!
анонимная функция; возвращает
FALSE
для функций иTRUE
нет.Это
побеждено,наконец, связано с ответом MickyT! !источник
Bash + coreutils, 17
Ввод осуществляется через STDIN.
key
иvalue
которые Tabразделены и каждая пара является новой строкой с разделителями.sort
удаляет дубликаты пар ключ-значение.uniq -d
выводит только дубликаты, поэтому выводит пустую строку в случае функции и непустую строку в противном случае - при наличии дублирующихся ключей, которые отображаются на разные значения.Попробуйте онлайн .
источник
05AB1E , 9 байтов
Код:
Объяснение:
Использует кодировку 05AB1E . Попробуйте онлайн!
источник
ʒ
}}
вместо}
.Желе , 6 байт
Попробуйте онлайн!
объяснение
Вот альтернативный метод, также 6 байтов:
Попробуйте онлайн!
Вместо того, чтобы тестировать с удалением дубликатов ключей, эта функция сортирует (
Ṣ
) и проверяет, является ли разница между условиями (I
) истинной (Ạ
)источник
R ,
9566 байтСохранено 29 байтов благодаря Jarko Dubbeldam.
Анонимная функция. Выводит,
FALSE
если функция, аTRUE
если нет (извините). Принимает в качестве аргументов список ключей и список значений, вот так.Перебирает все ключи и получает длину набора уникальных значений для этого ключа. Если
any
из них> 1, вернутьTRUE
.Это побито ответом MickyT , а также Джузеппе . upvote один из тех.
источник
function(k=0,v=0)any(sapply(k,function(x){length(unique(v[k==x]))-1}))
должен выполнить то же самое.J-uby ,
48332521 байт-3 байта благодаря Джордану!
объяснение
Первый подход, 33 байта
Это длиннее, чем эквивалентное решение Ruby, но было весело сделать.
Попытка объяснения путем преобразования в Ruby:
Я мог бы сохранить 2 байта с более новой версией, заменив
:uniq
на~:|
источник
V , 30 байтов
Попробуйте онлайн!
Выходы
1
для функций и ничего для не-функций.источник
Mathematica, 35 байт
Чистая функция, принимающая список упорядоченных пар в качестве входных данных и возвращающих
True
илиFalse
. Использует тот факт, чтоUnion@#
удаляет повторяющиеся упорядоченные пары, но<|Rule@@@#|>
(ассоциация) удаляет все, кроме одной упорядоченной пары с конкретным первым элементом. Таким образом, мы можем просто сравнитьLength
s двух выходов, чтобы проверить, является ли список ввода функцией.источник
Желе , 6 байт
Попробуйте онлайн!
Как это устроено
источник
CJam ,
1917 байтСохранено 2 байта благодаря Мартину Эндеру
Выходы
0
для функций и1
не-функций.Попробуйте онлайн!
объяснение
источник
APL (Dyalog) ,
1612119 байтовПопробуйте онлайн!
объяснение
Отпечатки
0
за ложь и1
за правдуисточник
На самом деле , 4 байта
Попробуйте онлайн!
Объяснение:
источник
брейкфук , 71 байт
Попробуйте онлайн!
Ввод принимается как плоская строка: например, первый тестовый пример будет
35356444
. Чтобы получить представление, показанное в исходном вопросе, просто добавьте в программу шесть запятых в нужных точках.Вывод
U
для функций иV
не-функций.объяснение
Для любой кодовой точки ASCII n, f (n) сохраняется в ячейке 2n + 1. Ячейки 2n и 2n + 2 являются рабочим пространством, а 0, 2, 4, 6, ... 2n-2 являются цепью хлебных крошек, ведущей обратно к ячейке 0. Когда доказано, что ввод не является функцией, f ( 0) установлен в 1 (среди различных побочных эффектов).
источник
Perl 6 , 38 байт
Попробуй
источник
Pyth -
98 байтПопробуй
Он работает, удаляя все повторяющиеся пары первым ({Q); затем он сравнивает длину списка с длиной словаря, созданного из списка (если одно и то же значение x встречается более одного раза, конструктор словаря использует только последнее значение, в результате чего словарь короче списка)
источник
MATL , 12 байт
Входные данные представляют собой матрицу из 2 столбцов, где первый столбец является ключевым, а второй - значением.
Попробуйте онлайн!
объяснение
источник
PHP, 49 байт
Ничего не печатает для функций и
n
не-функций.источник
CJam ,
14119 байтовПопробуйте онлайн!
Принимает ввод как массив пар ключ / значение в стеке, возвращает,
1
если ввод является функцией, и0
если это не так.Это решение основано на фрагменте
_&
, который дедуплицирует массив, беря его пересечение с самим собой. Я делаю это дважды, сначала на полном вводе (чтобы избавиться от любых точно дублированных пар ключ / значение), а затем только на ключах (чтобы увидеть, остались ли какие-либо дубликаты ключей после первой дедупликации).Вот полный код с комментариями:
источник
e#
это синтаксис выделенных комментариев в CJam.Рубин,
393029 байтСпасибо @ValueInk за сохранение 9 байтов!
Порт @ Род Пита 2 ответ .
источник
Hash[x]
работает так же хорошо, т. ч.