Числа Unholy


11

Цей виклик дуже натхненний тим, що @Mego створив зі своїми номерами Holy та Holier , великою подякою йому та його каламбурам.

Святі числа - це числа, що складаються лише з цифр з отворами , які є:

04689

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

Нечистість числа - це сума нечестивості його цифр, число, що складається лише з нечесного числа, має нескінченну нечесність.

Number            :8 5 5 8 7
Digital Unholiness:0+1+1+0+1
Total Unholiness  :3

Number            :0 1 7 5 5 2 8 5 7 
Digital Unholiness:0+1+2+3+2+1+0+1+2
Total Unholiness  :12

Number            :1 5 7 3 2 1
Digital Unholiness:∞+∞+∞+∞+∞+∞
Total Unholiness  :∞

Number            :0 4 6 8 9
Digital Unholiness:0+0+0+0+0
Total Unholiness  :0

Ваше завдання

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

У разі нескінченної неприємності можна вибрати між трьома виходами

  • Символ (3 байти)
  • Нескінченний вихід, що містить принаймні 1 ненульову цифру, але лише цифри.
  • Вбудована Infinityцінність.

Це код-гольф, тому найкоротший код у байті виграє, удачі!


Чи повернення вбудованої Infinityвартості законно?
Ніл

1
@Neil Я дозволю це, як я навіть не думав про це, хороший момент.
Katenkyo

Деякі ваші приклади введення починаються з початкового нуля; чи передбачається, що ми можемо записати свою функцію з введенням "додатного цілого числа" лише в тому випадку, якщо наша мова, що вибирається, не впаде автоматично до нуля? З цієї причини багато мов будуть змушені брати рядок.
Сіммонс

@ASimmons Тому я змінив (деякий час назад) вхід, щоб він також міг бути "рядком, що складається лише з цифр". Також важливим моментом є не те, що це - 0свята цифра, я зміню повідомлення відповідно до відповіді на основі непровідних 0 номерів.
Katenkyo

@katenkyo Так, я бачив, що ви можете вводити як рядок, але здавалося, що це важко сприймати як ціле число. Я схвалюю вашу редакцію в ОП.
Сіммонс

Відповіді:


2

MATL , 25 24 байти

7Zq1hVmt~f!wf-|X<st~?xYY

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

Введення - це рядок. У висновку нескінченність споконвічно відображається як Inf.

Пояснення

7         % number literal                                 
Zq        % prime numbers up to a 7: [2 3 5 7]
1         % number literal                        
h         % horizontal concatenation                       
V         % convert numbers to string: '2  3  5  7  1'
m         % take input implicitly. Determine which digits are 1,2,3,5,7
t         % duplicate
~         % element-wise negate: which digits are 4,6,8,9,0
f         % indices of occurrences of digits 4,6,8,9,0
!         % transpose into column array
w         % swap elements in stack           
f         % indices of occurrences of digits 1,2,3,5,7  
-         % element-wise subtraction with broadcast. Gives 2D array
|         % element-wise absolute value                          
X<        % minimum of each column
s         % sum of elements of array
t         % duplicate                       
~         % element-wise negate
?         % if all elements are true                            
  x       %   delete                                         
  YY      %   push infinity                                       
          % (implicit) end if
          % (implicit) convert to string and display  

4

Пітон (3), 137 131 байт

def f(s):
 l=range(len(s))
 r=[min(i)for i in zip(*[[abs(j-i)for j in l]for i in l if s[i]in'46890'])]
 return sum(r)if r else'∞'

Результати

>>> [f(i) for i in ['85587', '012321857', '157321', '04689']]
[3, 12, '∞', 0]

Я отримую підрахунок 131 байт. Щось мені не вистачає? Також чудова відповідь :).
Katenkyo

@Katenkyo Я завжди забував свого редактора додати порожній рядок в кінці файлу
Ерван

2

Pyth, 31 29 27 25 байт

smhS.e?}b"04689"akd.n4zUz

Спробуйте в Інтернеті: Демонстрація або Тестовий набір

Для кожної цифри я обчислюю відстані до кожного числа. Відстань нескінченна, якщо друга цифра не свята. З цих списків я беру мінімальну відстань і підсумовую її.

Пояснення:

smhS.e?}b"04689"akd.n4zUz  implicit: z = input string of numbers
 m                     Uz  map each d in [0, 1, ..., len(z)-1] to:
    .e                z      map each k (index), b (value) of b to:
                akd            absolute difference between k and d

      ?}b"04689"               if b in "04689" else
                   .n4         infinity
   S                           sort
  h                            take the first element (=minimum)
s                              print the sum

1

JavaScript (ES6), 93 байти

s=>[...s].map(n=>/[12357]/.test(n)?++u:u=0,u=1/0).reverse().map(n=>r+=n?n<++u?n:u:u=0,r=0)&&r

Якщо Infinityце не законна нескінченність, додайте 13 байт для ==1/0?'∞':r.

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