Входные данные:
Список целых чисел (который никогда не будет содержать ноль)
Выход:
Список того же размера с подсчетами на основе следующего:
- Если текущий элемент отрицательный: посмотрите на все элементы перед этим элементом и посчитайте, сколько раз цифры встречались в этих других числах
- Если текущий элемент положительный вместо этого: посмотрите на все элементы после этого элемента и посчитайте, сколько раз цифра встречалась в этих других числах
Есть один поворот: если размер списка четный, мы подсчитываем каждое число только один раз (даже если он совпадает с несколькими цифрами), а если размер нечетный, мы считаем каждую цифру чисел для каждой цифры текущего элемента (дублируется цифры считаются несколько раз).
Давайте приведем несколько примеров, чтобы прояснить это немного:
Пример с четным списком:
Input: [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2, 4, 1, 2, 1, 1, 5 ]
Размер списка четный , поэтому мы считаем каждый номер только один раз.
4
: Это позитивно, поэтому мы с нетерпением ждем. Есть три номера , содержащие цифру4
(42
,-942
,8374
). Итак, начнем с3
.10
: Это позитивно, поэтому мы с нетерпением ждем. Есть два числа, содержащие либо цифру,1
и / или0
(-10
,-200
). Итак, второй вывод есть2
.42
Снова позитив, так что вперед. Есть четыре номера , содержащие либо цифру4
и / или2
(-942
,8374
,728
,-200
). Итак, третий вывод4
.-10
На этот раз это отрицательно, поэтому мы смотрим назад. Существует только одно число, содержащее цифру1
и / или0
(мы игнорируем знак минус) (10
). Итак, четвертый вывод1
.- и т.п.
Пример с нечетным списком:
Input: [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13, 2, 2, 4, 8, 3, 0, 11, 6 ]
Размер списка нечетен , поэтому мы считаем каждую цифру.
382
: Это позитивно, поэтому мы с нетерпением ждем. Есть одно3
в других числах (381
), шесть8
в других числах (-82, -8, 381, 228, 28, -28
) и шесть2
в других числах (-82, 228, 28, -28, 2
). Итак, начнем с13
.-82
Это отрицательно, так что задом наперед. Один3
в другом номере (382
) и один8
в другом номере (382
). Итак, второй вывод есть2
.- ...
228
Это позитивно, так что вперед. Есть три2
'S в других числах (28
,-28
,-2
), а еще три2
-х, и два8
«S в других числах (28
,-28
). Так что этот вывод есть8
.- и т.п.
Правила вызова:
- Вы можете предположить, что вход никогда не будет содержать
0
как элемент, так как он не является ни положительным, ни отрицательным. - Можно предположить, что входной список всегда будет содержать как минимум два элемента.
- Ввод / вывод является гибким. Ввод / вывод может быть массивом / списком целых чисел, строкой с разделителями, цифрой / символьной матрицей и т. Д.
- Если первое число в списке является отрицательным числом или последнее число в списке является положительным числом, оно будет 0 в результирующем списке.
- В нечетных списках числа, содержащие одну и ту же цифру несколько раз, подсчитываются несколько раз, как
228
в приведенном выше нечетном примере, в результате8
(3 + 3 + 2) вместо5
(3 + 2).
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
Input: [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2, 4, 1, 2, 1, 1, 5 ]
Input: [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13, 2, 2, 4, 8, 3, 0, 11, 6 ]
Input: [10, -11, 12, -13, 14, -15, 16, -17, 18, -19]
Output: [9, 1, 7, 3, 5, 5, 3, 7, 1, 9 ]
Input: [10, -11, 12, -13, 14, -15, 16, -17, 18, -19, 20]
Output: [11, 2, 8, 4, 5, 6, 3, 8, 1, 10, 0 ]
Input: [88, 492, -938, 2747, 828, 84710, -29, -90, -37791]
Output: [8, 9, 3, 9, 3, 4, 5, 4, 12 ]
Input: [-1, 11, 11, 1]
Output: [0, 2, 1, 0]
Input: [1, 11, 11, -1]
Output: [3, 2, 1, 3 ]
Input: [-1, 11, 1]
Output: [0, 2, 0]
Input: [1, 11, -1]
Output: [3, 2, 3 ]
δ¢
, никогда не видел, чтобы двойной вектор использовался хорошо, хороший.Python 2 ,
149148121116111107 байтПопробуйте онлайн!
источник
Java (JDK 10) , 204 байта
Попробуйте онлайн!
кредиты
источник
[1,11,-1]
должен вернуться[3,2,3]
. Это странный список, поэтому все цифры считаются. Первое1
: смотри вперед, всего три1
секунды11,-1
. Второе11
: ждите каждой цифры: один1
+ один1
. В- третьих-1
: взгляд назад, три1
s в общей сложности:-1,11
. (С нечетными списками вы должны смотреть на каждую цифру, даже на одну и ту же. Я228
,t
и изменитьi+(a[i]>0?1:-1)
ееi+(t=a[i]>0?1:-1)
, а затем просто использоватьj+=t
вместоj+=a[i]>0?1:-1
.Perl 6 ,
10085 байтПопробуйте онлайн!
Использует мешковатый оператор умножения ⊍.
источник
Perl 5
-n
, 92 байтаПопробуйте онлайн!
источник
JavaScript (Node.js) ,
164 158 140139 байтПопробуйте онлайн!
источник
Рубин , 126 байт
Попробуйте онлайн!
источник
Желе ,
4342 байтаПопробуйте онлайн!
источник