Учитывая непустой конечный список целых чисел, выведите истинное значение, если есть ровно две равные записи, а все остальные записи различны, а в противном случае - ложное значение.
Примеры
truthy:
[1,1]
[1,2,1]
[1,6,3,4,4,7,9]
falsey:
[0]
[1,1,1]
[1,1,1,2]
[1,1,2,2]
[2,1,2,1,2]
[1,2,3,4,5]
Ответы:
Python 3,
3028 байтПопробуйте онлайн!
{*m}
Приводит список кset
объекту, неупорядоченный список элементов без дубликатов. Это всегда уменьшает длину списка на количество дубликатов в нем. Вычислив, насколько изменилась длина, мы можем легко определить, был ли в списке один дубликат, и вернуть результат теста.-2 байта благодаря овс.
источник
{*m}
вместо тогоset
, чтобы хорошо играть в гольф!lambda m:~-len(m[len({*m}):])
Шелуха , 4 байта
Попробуйте онлайн!
объяснение
источник
MATL ,
7, 6 байтовПопробуйте онлайн!
Один байт сохранен благодаря @Guiseppe!
Объяснение:
источник
s
естьsum
иsum
суммы по первому не синглетонному измерению (столбцы), а матрица симметрична, разве это не может бытьs
вместоXs
?Haskell , 34 байта
Попробуйте онлайн! На основании ответа H.PWiz» .
источник
Желе ,
85 байтПопробуйте онлайн!
объяснение
Если выходные значения могут быть любыми непротиворечивыми значениями, тогда
QL_L
работает, который выводит-1
для правдивых и любых других неположительных чисел для фалси (спасибо @JonathanAllan)источник
QL_L
будет выводить-1
для truey и некоторого числа меньше-1
или0
для falsey (например[1,6,3,4,4,7,9,9,9]
, вернется-3
, а[1,6,3,4,7,9]
вернется0
).-2
.JavaScript (ES6), 30 байт
Попробуйте онлайн
источник
Напористый , 8 байт
Простая реализация проверки
len(set(list)) == len(list)-1
:Объяснение:
Это работает, так как длина будет уменьшаться только на 1, если в начальном списке было только ровно 1 неразличимое целое число.
Попробуйте онлайн!
источник
Октава , 25 байт
Это не использование
group
илиunique
подход, как многие другие ответы, а скорее "декартово произведение" всех возможных сравнений.объяснение
Попробуйте онлайн!
И потому что ни одна программа не была бы полной без свертки (спасибо @LuisMendo за исправление ошибки):
Октава , 40 байт
Попробуйте онлайн!
источник
J ,
76 байт=
проверяет каждый элемент на равенство с каждым уникальным элементом, создает матрицу с m строками для m уникальных элементов.0,
добавьте пустую строку сверху.=&#
количество строк равно длине ввода?Попробуйте онлайн!
источник
.~
на=
Сетчатка ,
151211 байтСпасибо Нейлу за сохранение 1 байта.
Попробуйте онлайн!
Ввод разделен переводом строки. (Набор тестов использует разделение запятыми для удобства.)
объяснение
Дублируйте строки во входных данных, что удаляет любое целое число, которое появилось ранее (но оставляет окружающие переводы строк).
Подсчитайте количество пустых строк, которое равно количеству удаленных нами дубликатов, но учитывайте только первые два совпадения. Таким образом, вывод будет только
0
(без дубликатов),1
(один дубликат),2
(два или более дубликатов).Убедитесь, что был удален ровно один дубликат.
источник
A`.
для подсчета новых строк, потому что он сбрасывает последний.)A`.
, но проблема скорее в том, что вы не можете отличить одну пустую строку от отсутствия строк вообще. Возможно я должен рассмотреть завершениеA
иG
вывод с переводом строки, если есть какие-либо строки. Хотя это, вероятно, должно быть вариантом, так как я могу представить, что перевод строки раздражает в других сценариях.^$¶
.A
идентичный независимо от того, сохраняет ли он одну пустую строку или отбрасывает все строки.05AB1E , 4 байта
Попробуйте онлайн!
Выводит
1
как правдивое, любое другое неотрицательное целое число как ложное. В 05AB1E1
- единственное правдивое число (спасибо @Emigna за понимание!).объяснение
источник
Рубин, 32 байта
источник
Array#size
?->s{s.uniq.size==s.size-1}
C # (.NET Core) , 35 + 18 байт
+18 за использование
System.Linq
.Попробуйте онлайн!
Альтернатива 67 байт без Linq:
Попробуйте онлайн!
источник
Excel, 42 байта
Версия на датском языке
Принимает каждое целое число из списка в отдельной ячейке в столбце
A
.Если бы нам разрешали несовместимые значения Falsey , мы могли бы сохранить 3 байта:
Английская версия (44 байта)
источник
R ,
3231 байт-1 байт благодаря @JarkoDubbeldam
Попробуйте онлайн!
Читает из стандартного ввода, пишет в стандартный вывод.
duplicated
итерацию по списку, заменяющие значенияl
с ,TRUE
если это значение встречается ранее в списке, и вFALSE
противном случае. Если есть уникальная пара родственных душ, то должно быть ровно одноTRUE
значение, поэтому сумма должна быть1
.источник
scan()
подходе.PowerShell ,
4037 байтПопробуйте онлайн!
Команда
Sort-Object
(псевдонимsort
) с-u
флагом nique извлекает только уникальные компоненты ввода. Например, для ввода@(1,3,3,2)
это приведет к@(1,2,3)
.Таким образом, нам просто нужно убедиться, что
.count
этот объект (т. Е. Сколько у него элементов) имеет-eq
значение.count
нашего входного массива.-1
(то есть, у нас есть ровно один дубликат записи).Сохранено 3 байта благодаря Sinusoid.
Исправлена ошибка благодаря TessellatingHeckler.
источник
1,2,1
-get-unique
работает только на предварительно отсортированном вводе. Как насчет того,($args|sort -u).count-eq$args.count-1
что также 37, но работает для всех тестовых случаев, если вы называете это какf 1 2 1
вместоf 1,2,1
?Perl 5 , 36 + 1 (
-a
) = 37 байтПопробуйте онлайн!
источник
@k{@F}++;say@F==1+keys%k
Haskell , 37 байт
Попробуйте онлайн!
источник
Octave / MATLAB (с пакетом статистики / набором инструментов), 21 байт
Анонимная функция. Ввод - это вектор-столбец. Выход
true
(отображается как1
) илиfalse
(отображается как0
).Попробуйте онлайн!
объяснение
pdist(x)
вычисляет вектор евклидовых расстояний между всеми парами строк изx
. Он рассматривает каждую пару только один раз (порядок двух строк не имеет значения) и не учитывает пары, образованные одной строкой дважды.В нашем случае
x
это вектор-столбец, поэтому евклидово расстояние между двумя строками - это просто абсолютная разница между двумя числами.~
логическое (логическое) отрицание,nnz
число ненулевых и==1
сравнивается с1
. Таким образом, результат будет,true
если и только если есть только одна пара, которая дает нулевое расстояние.источник
Jq 1,5 ,
5325 байтВдохновленный ответом Райли и намного короче моего первоначального решения.
Попробуйте онлайн!
источник
Юлия,
3926 байтовобъяснение
Код генерирует двумерную таблицу логических значений, которая затем собирается с использованием функции sum, считая количество пар одинаковых элементов в декартовом квадрате A. Затем это сравнивается с длиной строки плюс два, и количества равны только тогда, когда есть ровно один повторяющийся символ.
Этот код переопределяет оператор NOT.
источник
!a=sum(a.==a')==endof(a)+2
сохраняет несколько байтов. Попробуйте онлайн!Pyth , 6 байт
Проверьте все контрольные примеры.
l{
- Получает количество уникальных элементов.tlQ
- Получает длину списка ввода, уменьшенный.q
- Проверяет равенство.7 байт
Проверьте все контрольные примеры
источник
Октава ,
2326 байтПопробуйте онлайн!
x==x'
Часть была вдохновлена ответ flawr в . Это длиннее, чем ответ Луиса, но он не использует никаких наборов инструментов.Объяснение:
Это анонимная функция, которая принимает вектор в
x
качестве входных данных и сравнивает его с самим транспонированным. Это даст матрицу, в которой находятся все диагональные элементы1
, и любые недиагональные элементы сигнализируют о наличии дублирующих элементов.Сумма по любому столбцу показывает, сколько дубликатов этого числа. Мы хотим, чтобы два числа имели дубликат, поэтому у нас два значения равны двум, а остальные неравны двум.
Если мы возьмем произведение этой матрицы, мы получим,
4
если есть только два равных элемента (2*2*1*1*1*1*...
), и что-то иное, чем4
если нет дубликатов или более двух.источник
PHP, 46 байт
Подсчитывает количество записей в
$argv
и сравнивает его с количеством уникальных записей. Если первое выше последнего на 1, то правда, иначе ложь.Попробуйте это на eval.in!
источник
$argv
- список параметров командной строки. Итак: нет, он не может просто использовать$a
.05AB1E ,
65 байтПопробуйте онлайн!
1
будучи единственным истинным значением в 05AB1E, мы можем остановиться здесь. (Спасибо @Emigna за то, что указал на это.)Чтобы получить только два разных значения, мы можем добавить:
источник
Θ
, как1
единственное истинное значение в 05AB1E.¢
не сработает. Это будет считаться[19,4,4,9]
ложным и[19,9]
истинным, так как он находит0
в10
.{¥_O
должно быть в порядке.APL (Dyalog Unicode) , 7 байтов SBCS
Попробуйте онлайн!
Объяснение:
источник
Желе , 10 байт
Попробуйте онлайн!
более длинный, но другой подход
источник
Japt, 7 байт
Попытайся
объяснение
Удалите дубликаты (
â
), получите length (Ê
) и сравните равенство (¶
) с длиной (Ê
) ввода (U
) минус 1 (É
).источник
âÊɶ
многобайтовые символы?Haskell , 37 байт
Попробуйте онлайн!
источник
05AB1E , 5 байтов
Попробуйте онлайн!
В 05AB1E 1 - единственное истинное значение, поэтому для истинного результата должен быть ровно 1 повторяющийся элемент, удаленный uniquify.
источник