değerini hesaplayın


16

Meydan okuma

S 1 girdisi olarak olarak bir tamsayı verildiğinde ζ ( s ) değerini verir (Where ζ ( x )ss1ζ(s)ζ(x) temsil Riemann Zeta Fonksiyonu ).

Daha fazla bilgi

ζ(s) şu şekilde tanımlanır:

ζ(s)=n=11ns

Cevabınızı 5 ondalık basamağa çıkarmalısınız (daha fazla, daha az değil). Cevabın sonsuz olduğu ortaya çıkarsa, kendi dilinizde veya eşdeğeri çıktı almalısınız .

Riemann Zeta yerleşiklerine izin verilir, ancak bu şekilde yapmak daha az eğlencelidir;)

Örnekler

Çıkışlar tam olarak aşağıda gösterildiği gibi olmalıdır

Input -> Output
1 -> ∞ or inf etc.
2 -> 1.64493
3 -> 1.20206
4 -> 1.08232
8 -> 1.00408
19 -> 1.00000

Ödül

Yerleşik ins izin verdiği için teselli olarak, en kısa cevaba 100 rep ödül sunacak yapmaz yerleşik kullanın zeta fonksiyonu. (Yeşil onay işareti yine de genel olarak en kısa çözüme geçecektir)

Kazanan

Bayt cinsinden en kısa kod kazanır.


7
Bu meydan okuma böyle bir potansiyele sahipti ...
Yapımcılara

@HyperNeutrino Evet, gönderdim çünkü yerleşik izin verilen meydan gördüm. FGITW
NoOneIs Here

2
"5 ondalık basamak hassasiyetinde" katı mıdır? (örn. daha hassas çıktı alabilir miyiz?) Test durumları gerçekten 6dp göstermemelidir.
Jonathan Allan

@JonathanAllen Yuvarlama özelliğini temizledim
Beta Çürümesi

3
@BetaDecay (iç çekiş yok ping) 19 gerçekten bir girdi metni çıktı gerekir 1.00000? Olmaz 1ya 1.0geçerli olması? Görünüşe göre bukalemun mücadelesine katıldın.
Jonathan Allan

Yanıtlar:


11

Mathematica, 9 7 11 bayt

Zeta@#~N~6&

Açıklama:

Zeta@#       (* Zeta performed on input *)
      ~N     (* Piped into the N function *)
        ~6   (* With 6 digits (5 decimals) *)
          &  (* Make into function *)

Mathematica result

Yerleşik olmadan:

Mathematica, 23 UTF-8 bayt

Sum[1/n^#,{n,∞}]~N~6&

Kelly Lowder'a teşekkürler


3
N@*Zetaiki bayt kaydeder.
Martin Ender

@*(sol) bileşim operatörü: f@*gdeğeri bağımsız değişkeni de bir fonksiyon anlamına gelir xolup f[g[x]].
Greg Martin

@BetaDecay 1Bunun için çıktı alır ComplexInfinityve 5yerlere yuvarlar . (ör. 1.64493)
NoOneIsBurada

@MartinEnder Nasıl *çalışır?
NoOneIsHere

1
Burada cevabınızı kullanır N~5ancak açıklamanızı kullanır 6.
numbermaniac

8

Javascript, 81 70 66 65 bayt

s=>s-1?new Int8Array(1e6).reduce((a,b,i)=>a+i**-s).toFixed(5):1/0

Çalıştırılabilir örnekler:

ζ=s=>s-1?new Int8Array(1e6).reduce((a,b,i)=>a+i**-s).toFixed(5):1/0

const values = [ 1, 2, 3, 4, 8, 19 ];
document.write('<pre>');
for(let s of values) {
  document.write('ζ(' + s + ') = ' + ζ(s) + '\n')
}


Neden Z? Zeta sembolü JS'de geçerli bir işlev adıdır ve golf oynamak için buna ihtiyacınız yoktur.
Monica'nın Davası

Değiştir Array(1e6).fill()ile [...Array(1e6)]ve ilk değiştirin (s)iles
Conor O'Brien

1
@QPaysTaxes İyi bir nokta! Unicode değişken adları ftw!
Frxstrem

@ ConorO'Brien Huh, Array hile olduğunu hiç fark etmedim (seyrek dizilerin yinelemediğini düşündüm ama sanırım yanılmışım). Teşekkürler!
Frxstrem

Ζ iki bayt alır @Frxstrem Not
CocoaBean

6

APL (Dyalog) , 22 21 bayt

Bak anne, yerleşik yok! -1 sayesinde ngn.

Dyalog APL'nin sonsuzluğu olmadığından Iverson'un önerdiği notasyonu kullanıyorum .

{1=⍵:'¯'5⍕+/÷⍵*⍨⍳!9}

Çevrimiçi deneyin!

{ anonim işlev:

1=⍵: eğer argüman bir ise, o zaman:

  '¯' bir makro döndür

 Başka

  !9 dokuz faktöriyel (362880)

   ilk önce birçok tamsayı i ntegers

  ⍵*⍨ onları tartışmanın gücüne yükseltmek

  ÷ karşılıklı değerler

  +/ toplam

  5⍕ beş ondalık basamaklı biçim

} [anonim işlevin sonu]


1
1E6-> !9
ngn

@ngn Teşekkür ederim.
Adam

5

C, 74 70 69 bayt

n;f(s){double z=n=0;for(;++n>0;)z+=pow(n,-s);printf("%.5f",z/=s!=1);}

Şununla derleyin: -fwrapv . Çıktı üretmek biraz zaman alacaktır.

Burada çalıştığını görün . Parça ++n>0ile değiştirilir ++n<999999, bu yüzden beklemek zorunda değilsiniz. Bu, aynı işlevselliği ve çıktıyı korur.


Mu floatiş?
l4m2

5

TI-Basic, 16 bayt (yerleşik değil)

Fix 5:Σ(X^~Ans,X,1,99

Ans = 2 için doğru cevabı almak için yaklaşık 150000'e çıkmanız gerekiyor, ki bu 84 Plus CE'de hesaplanması yarım saat kadar sürecek. Ayrıca, bir yerde (Ans-1) ^ 0 ile çarparak TI-Basic'in sonsuzluğu en yakın şekilde temsil ettiği Ans = 1 için bir hata alabilirsiniz!
1817

@ pizzapants184 2, 3, vs.'nin 99'dan fazla yineleme alabileceğinin tamamen farkındayım. Sen değiştirerek bu işlevselliği elde edebilirsiniz 99ile E9E yani ^ 9 10 temsil eden bilimsel E olduğu. (Veya açıkçası E5 gibi daha küçük bir şey). E99'un genellikle pozitif sonsuzluk için kullanıldığını anlamak, toplamın üst sınırı ise teorik olarak bu işlevselliğe izin verir E99. Emülatörler bunu fiziksel bir hesap makinesinden çok daha hızlı sağlayabilir. Düşünceleriniz için teşekkürler :)
Timtech

Bunun sonsuzluğu sergilediğini düşünmüyorum. Kayan nokta kesinsizliğinden dolayı sonsuz sayıda 1 eklerseniz hata bile atmaz.
lirtosiast

4

C (GCC) , 112 101 94 84 bayt

Ceilingcat golf ipuçları için teşekkürler.

n;f(s){float r;for(n=98;n;r+=pow(n--,-s));printf("%.5f",r+pow(99,-s)*(.5+99./--s));}

Çevrimiçi deneyin!


1
Soru düzenlendi. Dil yerel sonsuzluk sembolleri çıktısı alabilirsiniz.
2501

@ 2501 Çözümünüzden hala birkaç bayt uzak kalmama rağmen önceki cevaba geri döndüm.
cleblanc

@ ceilingcat f(1)doğru görünmüyor.
cleblanc



2

MATL , 21 bayt

q?'%.5f'2e5:G_^sYD}YY

Çevrimiçi deneyin!

açıklama

Giriş 1çıkış için özel kasalıdırinf kasalıdır, MATL sonsuzluğu böyle gösterir.

Bunun dışındaki girdiler için 1, ilk 2e5terimlerin toplanması 5 ondalık basamak hassasiyetine ulaşmak için yeterlidir. Nedeni, doğrudan hesaplamadan, bu terimlerin giriş için yeterli olması 2ve daha büyük üsler için serinin kuyruğunun daha küçük olmasıdır.

q         % Input (implicit) minus 1
?         % If non-zero
  '%.5f'  %   Push string: format specifier
  2e5:    %   Push [1 2 ... 2e5]
  G       %   Push input again
  _       %   Negate
  ^       %   Power. element-wise
  s       %   Sum of array
  YD      %   Format string with sprintf
}         % Else
YY        %   Push infinity
          % End (implicit)
          % Display (implicit)

2

R, 54 bayt

function(a){round(ifelse(a==1,Inf,sum((1:9^6)^-a)),5)}

Toplamı doğrudan bulur ve istendiği gibi biçimlendirir, Infa ise 1 9^6çıkar. Çıktı toplamanın hala test edilebilirken beş yer doğruluğu elde etmek için yeterli olduğu görülüyor; 9^9aynı kod uzunluğunda daha iyi doğruluk elde eder. R'nin üçlü üçlü bir operatörü olsaydı bunu kısaltabilirdim.


1
function(a)round("if"(a-1,sum((1:9^6)^-a)),5)birkaç bayt daha kısadır.
Giuseppe

Evet, ancak a = 1 function(a)round("if"(a-1,sum((1:9^6)^-a),Inf),5)çalışıyorsa ve orijinal çözümümden hala daha kısasa hata veriyor .
Michael Lugo

Evet, elbette! Eklemeyi unuttum Inf, doğrudan yorum kutusuna kod yazmak için aldığım şey budur ...
Giuseppe

2

C, 129130128 bayt

#include<math.h>
f(s,n){double r=0;for(n=1;n<999;++n)r+=(n&1?1:-1)*pow(n,-s);s-1?printf("%.5f\n",r/(1-pow(2,1-s))):puts("oo");}

aşağıdaki formülü kullanır

\zeta(s) = \frac{1}{1-2^{1-s}}\sum\limits_{n=1}^{\infty}{\frac{(-1)^{n+1}}{n^s}}

test ve sonuçlar

main(){f(2,0);f(1,0);f(3,0);f(4,0);f(8,0);f(19,0);}

1.64493
+oo
1.20206
1.08232
1.00408
1.00000

Neden bu denklem yerine Σ(1/(n^s))? Çok daha karmaşık görünüyor ...
Beta Çürümesi

@BetaDecay çünkü sonucu bulmakta bana daha hızlı geliyor; burada 1..999'da toplam s aralığı vardır, 'Σ (1 / (n ^ s))' de 1..10 ^ 6
RosLuP

1
Anlıyorum. FYI, oogayet iyi, pozitif olarak belirtmenize gerek yok
Beta Çürüme


@ceilingcat Bu soru için başka bir giriş yazabilirsiniz ... Görünüşe göre burada math.h başlığı olmadan hatırlamıyorum bağlantı değil
RosLuP

2

Python 3: 67 bayt (yerleşik yok)

f=lambda a:"∞"if a<2else"%.5f"%sum([m**-a for m in range(1,10**6)])

Hiçbir şey fantezi, örtülü utf-8 kodlaması nedeniyle sadece python 3'ü kullanır .

Test senaryoları ile çevrimiçi deneyin .




1

Jöle , 23 bayt

ȷ6Rİ*⁸S÷Ị¬$ær5;ḷỊ?”0ẋ4¤

Çevrimiçi deneyin!

Nasıl?

  • İlk milyon terimi toplar
  • 0Ne zaman abs(input)<=1verileceği inf(yerine 14.392726722864989) ne zaman bölündüğü1
  • 5 ondalık basamağa yuvarlar
  • abs(result)<=1Biçimlendirilecekse dört sıfır ekler1.0As1.00000
  • Sonucu yazdırır

ȷ6Rİ*⁸S÷Ị¬$ær5;ḷỊ?”0ẋ4¤ - Main link: s
ȷ6                      - literal one million
  R                     - range: [1,2,...,1000000]
   İ                    - inverse (vectorises)
     ⁸                  - link's left argument, s
    *                   - exponentiate
      S                 - sum
          $             - last two links as a monad:
        Ị               -   insignificant? (absolute value of s less than or equal to 1?)
         ¬              -   not (0 when s=1, 1 when s>1)
       ÷                - divide (yielding inf when s=1, no effect when s>1)
           ær5          - round to 10^-5
                      ¤ - nilad followed by link(s) as a nilad:
                  ”0    -   literal '0'
                    ẋ4  -   repeated four times
                Ị?      - if insignificant (absolute value less than or equal to 1?)
              ;         -       concatenate the "0000" (which displays as "1.00000")
               ḷ        - else: left argument
                        - implicit print


0

Jöle , 26 bayt

⁵*5İH+µŒṘḣ7
⁴!Rİ*³Sǵ’ݵ’?

Bu bağlantıyla çevrimiçi denemeyin ! (Bu 16! ~ 20 trilyon terim kullandığından TIO üzerinde çalışmak bir MemoryError üretir)

Bunun yerine bu bağlantıyla çevrimiçi deneyin . (Bunun yerine 1 milyon terim kullanır. Çok daha yönetilebilir ancak bir bayt daha alır)

İade infgirişi 1 için.

açıklama

⁵*5İH+µŒṘḣ7    - format the output number
⁵*5İH+         - add 0.000005
      µŒṘ      - get a string representation
         ḣ7    - trim after the fifth decimal.

⁴!Rİ*³Sǵ’ݵ’? - main link, input s
           µ’? - if input minus 1 is not 0...
⁴!R            -   [1,2,3,...,16!] provides enough terms.
   İ           -   take the inverse of each term
    *³         -   raise each term to the power of s
      S        -   sum all terms
       Ç       -   format with the above link
               - else:
        µ’İ    -   return the reciprocal of the input minus 1 (evaluates to inf)

26 bayttan 7'si hesaplama için, 12'si biçimlendirme ve 7'si infsıfır üretmek içindir . Bunun için daha iyi bir golf olmalı.


ȷ6faktöriyel çözümü ortadan kaldırarak bir milyonluk sayısal bir değişmez değerdir.
Jonathan Allan

0

MathGolf , 14 bayt (yerleşik yok)

┴¿Å'∞{◄╒▬∩Σ░7<

TIO bağlantıdaki, ben ikame ki Not için itti hangi106 onun yerine 107. Bunun nedeni, burada gönderilen sürümün tüm test senaryoları için zaman aşımına uğramasıdır. Bu, 3 ve 8'in cevaplarının 1 ondalık basamak kapalı olmasını sağlar. Bununla birlikte, MathGolf'ta keyfi ondalık hassasiyete izin veren çok daha büyük 1 baytlık sayısal değişmez değerler vardır.

Çevrimiçi deneyin!

açıklama

┴                check if equal to 1
 ¿               if/else (uses one of the next two characters/blocks in the code)
  Å              start block of length 2
   '∞            push single character "∞"
     {           start block or arbitrary length
      ◄          push 10000000
       ╒         range(1,n+1)
        ▬        pop a, b : push(b**a)
         ∩       pop a : push 1/a (implicit map)
          Σ      sum(list), digit sum(int)
           ░     convert to string (implicit map)
            7    push 7
             <   pop(a, b), push(a<b), slicing for lists/strings

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.