Зустрічі цифр


12

Вхід:

Список цілих чисел (які ніколи не містять нуля)

Вихід:

Список однакового розміру з підрахунками на основі наступного:

  • Якщо поточний елемент негативний: Перегляньте всі предмети перед цим елементом і підрахуйте, скільки разів цифр сталося в цих інших числах
  • Якщо поточний елемент натомість позитивний: Перегляньте всі елементи після цього елемента та порахуйте, скільки разів цифра сталася в цих інших числах

Є один поворот: Якщо розмір списку є рівним, ми підраховуємо кожне число лише один раз (навіть якщо воно відповідає декільком цифрам), і якщо розмір непарний, ми підраховуємо кожну цифру чисел для кожної цифри поточного елемента (дублюється цифри підраховуються кілька разів).

Наведемо кілька прикладів, щоб це трохи уточнити:

Приклад з парним списком:

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, функції / метод із відповідними параметрами та повним програмами типу return. Твій дзвінок.
  • Лазівки за замовчуванням заборонені.
  • Якщо можливо, додайте посилання з тестом для вашого коду.
  • Також, будь ласка, додайте пояснення, якщо це необхідно.

Тестові приклади:

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 ]

Відповіді:




4

Java (JDK 10) , 204 байти

a->{int l=a.length,r[]=new int[l],i=0,j,x,y,b,s,t=10;for(;i<l;i++)for(j=i+(s=a[i]>0?1:-1);0<=j&j<l;j+=s)for(b=0,x=a[i];x!=0;x/=t)for(y=a[j];b<1&y!=0;y/=t)if(x%t==-y%t|x%t==y%t){r[i]++;b+=1-l%2;}return r;}

Спробуйте в Інтернеті!

Кредити


[1,11,-1]повинен повернутися [3,2,3]. Це непарний список, тому всі цифри рахуються. По- перше 1: Подивіться вперед, три 1s в цілому: 11,-1. Друга 11: з нетерпінням чекайте кожної цифри: одна 1+ одна 1. В- третіх -1: погляд назад, три 1s в цілому: -1,11. (З непарними списками ви повинні дивитися на кожну цифру, навіть однакову. Я уточню це у виклику, але непарний приклад з цифрою 228це трохи уточнює.)
Кевін Круїйсен

@KevinCruijssen Слід виправити зараз.
Олів’є Грегоар

Це дійсно так. Я вже побоювався, що початкове пояснення могло бути занадто незрозумілим, коли я розмістив його. Тепер я побачу, чи зможу я взяти на себе щось із вашої відповіді. ;)
Кевін Круїссен

1
У мене немає багато часу , або, але одна річ , яку ви можете гольф додати нову змінну ,tі зміни i+(a[i]>0?1:-1)в i+(t=a[i]>0?1:-1), а потім просто використовувати j+=tзамість j+=a[i]>0?1:-1.
Кевін Кройссен

1
Ви можете зберегти 2, якщо ви оголосите, наприклад, t = 10 і заміните всі ці 10 на t, хоча це буде менш зрозуміло
Java Gonzar



1

JavaScript (Node.js) , 164,158,140 139 байт

a=>a.map((x,i)=>a.slice(x<0?0:i+1,x<0?i:l).map(b=>c+=[...b+""].map(X=>s+=X>=0&&(x+"").split(X).length-1,s=0)&&l%2?s:+!!s,c=0)|c,l=a.length)

Спробуйте в Інтернеті!


Це схоже на JS6, а не на щось Node-y.
Не те, що Чарльз

це тріогенерована рядок. він має або Node Babel, або SpiderMonkey JS. він все ще працює на вузлі, тому його чудово
DanielIndie


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.