Учитывая массив чисел с length >=3
иlength % 3 == 0
[1, 2, 3, 4, ...]
Вы разделите его на подмассивы длины 3
[[1, 2, 3], [4, 5, ...], [...
И вернуть массив с
- [0] => Количество дел в подмассиве, где все числа равны
- [1] => Если все числа в подмассиве не равны, количество дел в подмассиве, где равны только 2 числа
Пример и тестовые случаи:
- Вход:
[2, 4, 2, 5, 5, 5, 4, 2, 1, 3, 3, 1]
выход[1, 2]
Это потому что
[[2, 4, 2], [5, 5, 5], [4, 2, 1], [3, 3, 1]]
^ ^ ^ ^ ^ ^ ^
equal all equal equal
так 2 equal
и 1all equal
[3,5,6,5,5,7,6,6,8,7,7,7,3,4,2,4,4,3] => [1, 3]
[3,3,3,4,4,4,5,5,5,6,6,6,5,4,3] => [4, 0]
[3,4,5,6,7,8,9,8,7,6,5,4,3,2,1] => [0, 0]
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
PD: Извинения за мой английский.
code-golf
array-manipulation
Луис Фелипе Де Иисус Муньос
источник
источник
Ответы:
Октава ,
605250 байтПопробуйте онлайн!
Сэкономили 8 байтов благодаря Луису!
Объяснение:
Преобразует входные данные в матрицу с 3 строками и соответствующим количеством столбцов. Затем он сортирует каждый из столбцов и вычисляет разницу между элементами в разных строках. Это дает матрицу с двумя строками, где одинаковые числа будут иметь ноль, а разные числа будут иметь положительное число. Это отрицается, так что все равные элементы равны
1
, а все неравны0
. Мы просуммировать каждый из этих столбцов, что дает нам один из трех вариантов:0 = All elements are unequal
,1 = Two elements are equal
и2 = All elements are equal
. Затем мы проверяем, сколько их>1
, а сколько точно==1
.источник
JavaScript (ES6), 70 байт
Попробуйте онлайн!
Как?
Мы рекурсивно извлекаем каждый триплет [a, b, c] из входного массива и обновляем два счетчика t («три в своем роде») и p (пара), используя следующую формулу:
Есть 5 возможных случаев, которые подробно описаны ниже, от «все равны» до «все различны».
источник
[0]
и[1]
индексы «Примечание: возвращает массив 3- х элементов с[0]
и[1]
возвращением й соответствующих значений и[2]
. Возвращает значение фиктивного (количество 3-листов без каких - либо общих элементов) Это совершенно допустимые в соответствии с текущие правила. " codegolf.stackexchange.com/a/166082/31257 62 байтаa=>a.map(_=>++r[--new Set(a.slice(i,i+=3)).size],r=[i=0,i])&&r
Pyth,
13141211 байтПопробуй здесь
объяснение
источник
05AB1E , 10 байтов
Попробуйте онлайн!
объяснение
источник
ОК ,
1716 байтПопробуйте онлайн!
Для к , версия 17 байт:
+/(1 2=#=:)'0N 3#
.источник
0N 3
->0N3
(благодаря странности разбора в ОК)R 70 байт
Попробуйте онлайн!
Предыдущие версии :
R , 82 байта
Попробуйте онлайн!
R , 93 байта
Попробуйте онлайн!
источник
a=!1:2
будет немного короче.seq(0,a=v)
вместо0:(length(v)-1)
;) К сожалению, я не знаю октаву, поэтому не могу легко прочитать этот ответ ...apply
Инг ,unique
но она не для третьего случая испытания. Вашby
подход безопаснееJava (JDK 10) , 116 байт
Попробуйте онлайн!
Примечание: возвращает массив 3- х элементов с
[0]
и[1]
возвращением й соответствующих значений, и[2]
возвращает фиктивное значение (количество 3-листов без каких - либо общих элементов). Это полностью действует в соответствии с действующими правилами.источник
PowerShell , 106 байт
Попробуйте онлайн!
Именно то, что написано на банке. Циклы по вводу
$a
. Каждая итерация снимается$x,$y,$z
как следующие три элемента. Проверяетif
, все ли они равны, и если да, то увеличиваются$i
.Else
, увеличивается,$j
если хотя бы одна пара равна. После завершения цикла выведите$i
и$j
виде целых чисел.Так что ... много ... долларов ...
источник
Сетчатка 0.8.2 , 68 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи с заголовком для преобразования в желаемый формат по одному значению в строке. Объяснение:
Соберите три значения в каждой строке с разделителями и продублируйте первое в конце.
Подсчитайте количество пар дубликатов.
Подсчитайте количество
3
s и1
s.источник
Желе ,
98 байт-1 спасибо Деннису (используйте новый псевдоним для
L€
,Ẉ
)Попробуйте онлайн!
источник
Stax , 8 байт
Запустите и отладьте его
источник
Common Lisp, 113 байт
Попробуйте онлайн!
Используется тот факт, что в Common Lisp
(= x y z)
дает значение true, если все три элемента равны, и(/= x y z)
дает значение true, если ни одна пара чисел не равна.источник
Japt,
1413 байтПопытайся
объяснение
источник
Python 2 ,
777265 байтПопробуйте онлайн!
7 байтов, сохраненных с помощью умного трюка от xnor
источник
zip(*[iter(a)]*3)
.Сетчатка , 23 байта
Попробуйте онлайн!
объяснение
Разделите входные данные в каждом третьем месте, начиная с 2-го (на основе 0), т.е. разделите входные данные на группы по три.
В каждой строке (
%
) подсчитайте количество (C
) значений unique (q
) (\S+
).Подсчитайте количество
1
s и напечатайте их с помощью завершающей строки (\
), но сделайте это в тестовом режиме (*
), чтобы мы не потеряли предыдущий результат.Подсчитайте количество
2
s (и напечатайте их автоматически).источник
J ,
1615 байт-1 байт благодаря Коулу!
Попробуйте онлайн!
Практически такой же подход, как и большинство решений.
Объяснение:
источник
#@~.
->#@=
Japt ,
2419 байтПопробуйте онлайн!
источник
Stax , 14 байт
Запустите и отладьте его
источник
[3,5,6,5,5,7,6,6,8,7,7,7,3,4,2,4,4,3]
[2,3]
вместо этого выводит[1,3]
[3,3,3,4,4,4,5,5,5,6,6,6,5,4,3]
[1,0]
вместо этого выводит[4,0]
[3,4,5,6,7,8,9,8,7,6,5,4,3,2,1]
выходы[5,0]
вместо[0,0]
[1,1,1]
. Если вы используете2(
вместо1T
него, то всегда будете обрезать / подкладывать точно до размера 2.Haskell , 90 байт
Попробуйте онлайн!
Выглядит немного неловко ...
источник
Wolfram Language (Mathematica) , 49 байтов
Сохранено два байта благодаря Мартину Эндеру.
Попробуйте онлайн!
источник
Эликсир , 92 байта
Во-первых, куски списка в размер длины 3
chunk(a,3)
Во-вторых, он преобразует, находит длину каждого элемента, неинициализированную;
map chunk(a,3),&(length uniq&1)
,Наконец, он возвращает массив, состоящий из того, сколько раз результирующий список равен единице,
count(c,&(&1==1))
и сколько раз результирующий список равен двумcount(c,&(&1==2))
.Попробуйте онлайн!
источник
Пролог (SWI) , 80 байт
Попробуйте онлайн!
источник
Tcl , 111 байт
Попробуйте онлайн!
Tcl , 112 байт
Попробуйте онлайн!
Tcl , 114 байт
Попробуйте онлайн!
источник
Рубин , 59 байт
Попробуйте онлайн!
источник
Tcl , 98 байт
Попробуйте онлайн!
используя
-unique
опциюlsort
команды. Я назвал1
и2
мои переменные для удобства, хотя это кажется довольно необычным для кодаset 1 0
:)источник
C # (интерактивный компилятор Visual C #) , 108 байт
Попробуйте онлайн!
Менее гольф ...
источник