Die unheiligen Zahlen


11

Diese Frage gestellt wird sehr inspiriert von dem, was @Mego erstellt mit seinen Heiligen und Holier Zahlen, vielen Dank an ihn und seinen Wortspielen.

Heilige Zahlen sind Zahlen, die nur aus den Ziffern mit Löchern bestehen:

04689

Zahlen mit mindestens einer unheiligen Ziffer gelten als unheilig. Unheilige Ziffern sind per Definition böse, aber die Nähe zu heiligen Ziffern hilft ihnen, neutral zu werden. Je näher sie sind, desto weniger unheilig (1, wenn sie benachbart sind).

Die Unheiligkeit einer Zahl ist die Summe der Unheiligkeit ihrer Ziffern, eine Zahl, die nur aus einer unheiligen Zahl besteht, hat eine unendliche Unheiligkeit.

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

Deine Aufgabe

Sie müssen ein Programm oder eine Funktion schreiben, die eine positive Ganzzahl oder eine Zeichenfolge, die nur aus Ziffern besteht, als Eingabe verwendet und deren Unheiligkeit ausgibt. Wenn Sie eine Ganzzahl als Eingabe verwenden, können Sie davon ausgehen, dass sie niemals einen führenden Wert hat, 0da Ihre Sprache sie möglicherweise fallen lässt.

Bei unendlicher Unheiligkeit können Sie zwischen drei Ausgängen wählen

  • Das Zeichen (3 Bytes)
  • Unendliche Ausgabe mit mindestens einer Ziffer ungleich Null, aber nur Ziffern.
  • Ein eingebauter InfinityWert.

Dies ist Code-Golf, also gewinnt der kürzeste Code in Byte, viel Glück!


Ist die Rückgabe eines eingebauten InfinityWertes legal?
Neil

1
@Neil Ich werde es zulassen, da ich nicht einmal daran gedacht habe, guter Punkt dort.
Katenkyo

Einige Ihrer Beispieleingaben beginnen mit einer führenden Null. Ist es beabsichtigt, dass wir unsere Funktion mit der Eingabe "eine positive ganze Zahl" nur schreiben können, wenn unsere Sprache der Wahl nicht automatisch die führende Null fallen lässt? Viele Sprachen werden aus diesem Grund gezwungen sein, Zeichenfolgen einzugeben.
Ein Simmons

@ASimmons Deshalb habe ich (vor einiger Zeit) die Eingabe so geändert, dass sie auch eine "Zeichenfolge sein kann, die nur aus Ziffern besteht". Der wichtige Punkt ist auch nicht, dass es sich um eine 0heilige Ziffer handelt. Ich werde den Beitrag so ändern, dass eine Antwort auf der Grundlage nicht führender 0-Zahlen möglich ist.
Katenkyo

@katenkyo Ja, ich habe gesehen, dass Sie als Zeichenfolge eingeben können, aber es schien schwierig, sie als Ganzzahl zu verwenden. Ich bin mit Ihrer Bearbeitung des OP einverstanden.
Ein Simmons

Antworten:


2

MATL , 25 24 Bytes

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

Probieren Sie es online aus!

Eingabe ist eine Zeichenfolge. In der Ausgabe wird unendlich nativ als angezeigt Inf.

Erläuterung

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 Bytes

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

Ergebnisse

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

Ich zähle 131 Bytes . Fehlt mir etwas? Auch tolle Antwort :).
Katenkyo

@Katenkyo Ich habe immer vergessen, dass mein Editor am Ende der Datei eine leere Zeile hinzufügt
Erwan

2

Pyth, 31 29 27 25 Bytes

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

Probieren Sie es online aus: Demonstration oder Test Suite

Für jede Ziffer berechne ich die Abstände zu jeder Zahl. Eine Entfernung ist unendlich, wenn die zweite Ziffer nicht heilig ist. Aus diesen Listen nehme ich den minimalen Abstand und fasse ihn zusammen.

Erläuterung:

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

Wenn dies Infinitykeine legale Unendlichkeit ist, fügen Sie 13 Bytes für hinzu ==1/0?'∞':r.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.