邪恶的数字


11

@Mego用他的神圣数字和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是的,我看到您可以将其输入为字符串,但是很难将其作为整数输入。我同意您对OP所做的修改。
西蒙斯

Answers:


2

MATL25 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

Python(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我总是忘记编辑器在文件末尾添加空白行
Erwan

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.