I numeri Unholy


11

Questa sfida è fortemente ispirata da ciò che @Mego ha creato con i suoi numeri di Holy e Holier , grazie mille a lui e ai suoi giochi di parole.

I numeri sacri sono numeri composti solo da cifre con fori , che sono:

04689

I numeri con almeno una cifra empia sono considerati empi. Le cifre empie sono malvagie per definizione, ma essere vicine alle cifre sacre li aiuta a diventare neutrali. Quindi, più sono vicini, meno empi (1 quando adiacenti).

La cattiveria di un numero è la somma della cattiveria delle sue cifre, un numero composto da un solo numero empio ha una cattiveria infinita.

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

Il tuo compito

Devi scrivere un programma o una funzione che accetta un numero intero positivo o una stringa composta solo da cifre come input e che genera il suo empio. Se hai scelto di utilizzare un numero intero come input, puoi presumere che non avrà mai un vantaggio 0poiché la tua lingua potrebbe rilasciarlo.

In caso di sciocchezza infinita, puoi scegliere tra tre uscite

  • Il carattere (3 byte)
  • Output infinito contenente almeno 1 cifra diversa da zero, ma solo cifre.
  • Un Infinityvalore incorporato .

Questo è code-golf, quindi vince il codice più corto in byte, buona fortuna!


La restituzione di un Infinityvalore predefinito è legale?
Neil

1
@Neil lo permetterò, visto che non ci avevo nemmeno pensato, buon punto lì.
Katenkyo,

Alcuni dei tuoi input di esempio iniziano con uno zero iniziale; è inteso che possiamo scrivere la nostra funzione con input "un numero intero positivo" solo se la nostra lingua preferita non lascerà cadere automaticamente lo zero iniziale? Molte lingue saranno costrette a prendere l'input di stringa per questo motivo.
A Simmons

@ASimmons Ecco perché ho modificato (qualche tempo fa) l'input in modo che possa essere anche una "stringa composta solo da cifre". Inoltre, il punto importante non è che si tratta di una 0cifra sacra, ma modificherò il post in modo da consentire la risposta in base a 0 numeri non iniziali.
Katenkyo,

@katenkyo Sì, ho visto che potresti inserire come stringa ma mi è sembrato difficile prenderlo come numero intero. Approvo la tua modifica al PO.
A Simmons

Risposte:


2

MATL , 25 24 byte

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

Provalo online!

L'input è una stringa. Nell'output, l'infinito viene visualizzato in modo nativo come Inf.

Spiegazione

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 byte

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'∞'

risultati

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

Ottengo un conteggio di 131 byte , c'è qualcosa che mi manca? Inoltre, un'ottima risposta :).
Katenkyo,

@Katenkyo Ho sempre dimenticato che il mio editor aggiunge una riga vuota alla fine del file
Erwan

2

Pyth, 31 29 27 25 byte

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

Provalo online: dimostrazione o Test Suite

Per ogni cifra computo le distanze per ciascun numero. Una distanza è infinita, se la seconda cifra non è santa. Da queste liste prendo la distanza minima e la riassumo.

Spiegazione:

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 byte

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

Se Infinitynon è un infinito legale, aggiungi 13 byte per ==1/0?'∞':r.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.