부정한 숫자


11

이 도전은 @Mego가 자신의 Holy and Holier 숫자로 만든 것 , 그와 그의 말장난 덕분에 많은 영향을 받았습니다 .

홀수는 구멍이 있는 숫자로만 구성된 숫자입니다 .

04689

부정한 숫자가 하나 이상인 숫자는 부정한 것으로 간주됩니다. 부정한 숫자는 정의상 악한 것이지만, 거룩한 숫자에 가까워지면 중립이됩니다. 그러므로 그들이 가까이있을수록 덜 거룩하다

숫자의 거룩함은 그 숫자의 거룩함의 합이며, 거룩하지 않은 숫자로만 구성된 숫자는 무한한 거룩함이 없습니다.

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 바이트)
  • 0이 아닌 숫자는 하나 이상이지만 숫자 만 포함하는 무한 출력.
  • 내장 된 Infinity값.

이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 승리합니다. 행운을 빕니다!


기본 제공 Infinity가치를 반환하는 것이 합법적입니까?
Neil

1
@Neil 나는 그것을 생각조차하지 않았으므로 그것을 허용 할 것입니다.
Katenkyo

일부 예제 입력은 선행 0으로 시작합니다. 선택한 언어가 자동으로 선행 0을 드롭하지 않는 경우에만 "양의 정수"를 입력하여 함수를 작성할 수 있습니까? 이러한 이유로 많은 언어에서 문자열 입력을 수행해야합니다.
시몬스

@ASimmons 그렇기 때문에 입력을 수정 한 후 (이전의 경우) "숫자로만 구성된 문자열"도 될 수 있습니다. 또한 중요한 점은 그것이 0거룩한 숫자 라는 것이 아니라, 0이 아닌 숫자를 기반으로 답변을 허용하도록 게시물을 수정합니다.
Katenkyo

@ katenkyo 그래, 나는 당신이 문자열로 입력 할 수있는 것을 보았지만 그것을 정수로 취하는 것은 어려워 보였다. 귀하의 수정 사항을 OP에 승인합니다.
시몬스

답변:


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), 137131 바이트

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

자바 스크립트 (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.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.