Идея этого в основном из BIO 2017 1 кв . У меня появилась идея опубликовать этот вызов из моего задания «Бинарные последовательности» , так как многим людям это понравилось.
Кроме того, это первый вызов, который я разместил без публикации в песочнице. Я удалю это, если никому это не нравится.
правила
Взять в последовательности цифр в тройной (база 3); это может быть строка, массив или числовое значение вместе с числом предшествующих нулей.
Для каждой строки в треугольнике генерируется строка ниже, пока в последней строке не останется только одна цифра. Чтобы найти цифру ниже двух других цифр, цифра будет такой же, как две над ней, если эти две другие цифры выше равны. В противном случае это будет цифра, которая не равна ни одной из них. Вот пример:
0 0 1 2 0 1 2 2
0 2 0 1 2 0 2
1 1 2 0 1 1
1 0 1 2 1
2 2 0 0
2 1 0
0 2
1
От вас ожидается только возврат последней строки.
Сделайте ваш код коротким.
Тестовые случаи
0 -> 0
11 -> 1
10 -> 2
000 -> 0
012 -> 1
21102 -> 2
201021 -> 1
111111 -> 1
1020202020 -> 2
0212121210 -> 0
3&(|2+/\-)~<:@#
3|((2<.#)-@+/\])^:_
- твой действительно хорош.Пакет, 122 байта
Использует биномиальное расширение. Как указывает @MartinEnder, сумма должна быть сведена на нет (по модулю 3), если число значений (которые подсчитываются в первом цикле) является четным, поэтому
n
устанавливается либо на одно,1
либо на2
соответствующее значение. Затем второй цикл вычисляет сумму с помощью биномиальных коэффициентов.источник
APL (Dyalog) , 17 байт
Попробуйте онлайн!
Как?
2+/⍵
- суммируйте каждые два смежных элемента3-
- векторное вычитание из трех3|
- по вектору по модулю три⍣
- повторять до ...1=≢⍺
- остался только один предметисточник
APL + WIN,
3028 байт2 байта сохранены благодаря любезности Уриэля.
Объяснение:
Это один из способов написания циклического кода в APL в одной строке.
источник
3|
Javascript (ES6), 58 байт
источник