Kutsal olmayan sayılar


11

Bu meydan okuma @Mego'nun Kutsal ve Holier sayıları ile yarattığı şeyden , ona ve punklarına çok teşekkürler.

Kutsal sayılar, yalnızca delikli basamaklardan oluşan sayılardır :

04689

En az bir kutsal basamak olmayan sayılar kutsal sayılmaz. Kutsal basamaklar tanım gereği kötüdür, fakat kutsal basamaklara yakın olmak onların tarafsız olmalarına yardımcı olur. Bu nedenle, ne kadar yakınlarsa, daha az kutsal olmayanlar (bitişik olduğunda 1).

Bir sayının uygunsuzluğu, basamaklarının kutsallıklarının toplamıdır, sadece kutsal olmayan sayıdan oluşan bir sayı sonsuz bir huzursuzluğa sahiptir.

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

Senin görevin

Pozitif bir tam sayı veya yalnızca rakamlardan oluşan bir dize alan ve programın çıktısızlığını çıkaran bir program veya işlev yazmanız gerekir. Giriş olarak bir tamsayıyı kullanmayı seçtiyseniz 0, dilinizin düşebileceği için hiçbir zaman bir satır aralığının olmayacağını varsayabilirsiniz .

Sonsuz tedirginlik durumunda, üç çıkış arasında seçim yapabilirsiniz

  • Karakter (3 bayt)
  • En az 1 sıfır olmayan rakam içeren, ancak yalnızca rakam içeren sonsuz çıktı.
  • Yerleşik bir Infinitydeğer.

Bu kod golf, yani bayt kısa kod kazanır, iyi şanslar!


Yerleşik bir Infinitydeğeri döndürmek yasal mı?
Neil

1
@ Neil izin vereceğim, düşünmediğim gibi, orada iyi bir nokta.
Katenkyo

Örnek girişlerinizden bazıları baştaki sıfır ile başlar; "tercih ettiğimiz dil otomatik olarak baştaki sıfırı düşürmezse" fonksiyonumuzu "pozitif bir tamsayı" ile yazabilmemiz amaçlanıyor mu? Birçok dil bu nedenle dize girdisi almaya zorlanacaktır.
Simmons

@ASimmons Bu yüzden girdiyi (bir süre önce) değiştirdim, böylece "yalnızca rakamlardan oluşan bir dize" de olabilir. Ayrıca, önemli olan bu 0bir kutsal bir rakam değil, önde olmayan 0 sayılarına göre cevaba izin vermek için yazıyı değiştireceğim.
Katenkyo

@katenkyo Evet, bir dize olarak girebileceğinizi gördüm ama bir tamsayı olarak almak zor görünüyordu. OP'de düzenlemenizi onaylıyorum.
Simmons

Yanıtlar:


2

MATL , 25 24 bayt

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

Çevrimiçi deneyin!

Girdi bir dizedir. Çıktıda, sonsuzluk yerel olarak olarak görüntülenir Inf.

açıklama

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), 137131 bayt

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

Sonuçlar

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

131 Bayt sayım var, eksik olduğum bir şey var mı? Ayrıca, büyük cevap :).
Katenkyo

@Katenkyo Dosyanın sonuna her zaman editörümü boş satır eklemeyi unuttum
Erwan

2

Pyth, 31 29 27 25 bayt

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

Çevrimiçi deneyin: Gösteri veya Test Paketi

Her basamak için her sayıya olan mesafeleri hesaplarım. İkinci basamak kutsal değilse, bir mesafe sonsuzdur. Bu listelerden asgari mesafeyi alıp özetliyorum.

Açıklama:

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 bayt

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

Eğer Infinityyasal bir sonsuzluk değil, daha sonra da 13 bayt ekleyin ==1/0?'∞':r.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.