Modül Toplama


27

Ben bu diziye "İsa dizisi" diyorum, çünkü bu modun toplamıdır .

Bu sekans için, tüm pozitif tamsayılar almak m az girdi daha n ve toplamını almak n her modulo m . Diğer bir deyişle:

an=m=1n1nmodm

Örneğin, 14 terimini alın :

14 % 1 = 0
14 % 2 = 0
14 % 3 = 2
14 % 4 = 2
14 % 5 = 4
14 % 6 = 2
14 % 7 = 0
14 % 8 = 6
14 % 9 = 5
14 % 10 = 4
14 % 11 = 3
14 % 12 = 2
14 % 13 = 1
0+0+2+2+4+2+0+6+5+4+3+2+1=31

Buradaki amacınız bu sırayı uygulayan bir fonksiyon yazmaktır. Sıra terimini (bu 1 - 2 31 arasında pozitif bir tamsayı olacak ) tek girdi olarak almalı ve bu terimin değerini vermelisiniz . Bu OEIS A004125 .

Her zaman olduğu gibi standart boşluklar uygulanır ve bayt cinsinden en kısa cevap kazanır!

Yanıtlar:





6

Funky , 25 bayt

n=>fors=~-i=1i<n)s+=n%i++

Sadece Naif cevabı, iş gibi görünüyor.

Çevrimiçi deneyin!

Desmos , 25 bayt.

f(x)=\sum_{n=1}^xmod(x,n)

Desmos'a yapıştırın, sonra arayarak çalıştırın f.

Desmos'a yapıştırıldığında lateks buna benzer

Grafik ancak benziyor

Her yerde rastgele ve her yerde görünse de, bu yalnızca destekleyici tam sayıların sonucudur.

RProgN 2,9 bayt

x=x³x\%S+

Açıklaması

x=x³x\%S+
x=          # Store the input in "x"
  x         # Push the input to the stack.
   ³x\%     # Define a function which gets n%x
       S    # Create a stack from "x" with the previous function. Thus this gets the range from (1,x), and runs (i%x) on each element.
        +   # Get the sum of this stack.

Çevrimiçi deneyin!

ReRegex , 71 bayt

#import math
(_*)_a$/d<$1_>b$1a/(\d+)b/((?#input)%$1)+/\+a//u<#input
>a

Çevrimiçi deneyin!

ARBLE , 19 bayt

sum(range(1,a)|a%i)

Çevrimiçi deneyin!

Belki daha sonra , 56 bayt

whenf is*{n=0whenx is*{ifx>0{n=n+f%x x--}elseprintn}x=f}

Çevrimiçi deneyin!


Bu zorluğa yapılan gönderiler hiç bitecek mi? Şimdiye kadar her 40 dakikada bir yeni bir tane alıyorum: P
Nissa

@StephenLeppik Oh hala daha fazla geliyorum, endişelenme.
ATaco

@StephenLeppik Yapmamayı tercih ederim, çünkü çeşitli dillerde çeşitli kalitelere sahipler.
ATaco,

@StephenLeppik Onları senin için birleştirdim, yalvarmadan.
ATaco,

4
Lütfen bunu yapma. Ayrı diller - ayrı yaklaşımlar bile - ayrı cevaplara girmelidir.
Dennis,


5

Matl , 4 bayt

t:\s

Çevrimiçi deneyin!

Açıklama:

t      % Duplicate input. Stack: {n, n}
 :     % Range 1...n. Stack: {n, [1...n]}
  \    % Modulo. Stack: {[0,0,2,2,4,...]}
   s   % Sum. Implicitly display result.



4

Python 2,44 bayt

lambda n:sum(map(lambda x:x%(n-x),range(n)))

Çevrimiçi deneyin!

EDIT: Değişen aralık (0, n) ile aralık (n)


2
Merhaba, siteye hoş geldiniz! rangeörtük olarak ilk bir argüman alır 0, bu yüzden bunu yaparak bunu iki bayt kısaltabilirsiniz range(n).
DJMcMayhem

Vayy! Bunu bile düşünmedim. Teşekkürler
Max00355

1
PPCG'ye Hoşgeldiniz! map38 bayt yerine bir liste anlama kullanabilirsiniz : Çevrimiçi deneyin!
Bay Xcoder

Haklısınız, ancak Neil'in cevabında kullanıldı, bu yüzden kopyalamanın en iyi şey olup olmadığından emin değildim. Tabii burada bir şey kaçırmıyorsam. Alternatifini biraz daha uzun olsa bile göndermek istedim.
Max00355




3

Standart ML (MLton) , 53 51 bayt

fn& =>let fun f 1a=a|f%a=f(% -1)(a+ &mod%)in f&0end

Çevrimiçi deneyin!

Ungolfed:

fn n =>
   let fun f 1 a = a
         | f x a = f (x-1) (a + n mod x)
   in  
       f n 0
   end

Önceki 53 bayt sürümü:

fn n=>foldl op+0(List.tabulate(n-1,fn i=>n mod(i+1)))

Çevrimiçi deneyin!

Açıklama:

List.tabulatebir tamsayı xve işlev alır fve listeyi oluşturur [f 0, f 1, ..., f(x-1)]. Bazı sayı göz önüne alındığında n, biz diyoruz List.tabulateile n-1ve fonksiyon fn i=>n mod(i+1)sıfıra bölme önlemek için. Sonuçta ortaya çıkan liste ile toplanır foldl op+0.





3

Japt , 6 5 bayt

@Shaggy sayesinde 1 bayt kaydedildi

Æ%XÃx

Çevrimiçi test edin!

Nasıl çalışır

         Implicit: U = input number
Æ        Create the range [0, U),
 %XÃ       mapping each item X to U%X. U%0 gives NaN.
    x    Sum, ignoring non-numbers.
         Implicit: output result of last expression

2

05AB1E , 6 bayt

ÎGIN%+

Çevrimiçi deneyin!

İlk 05AB1E programım;)

Btw JS6 için 1 ve python için 1 iki 39 var, ancak çok geç kaldım

Açıklama:

ÎGIN%+
Î                      # Push 0, then input, stack = [(accumulator = 0), I]
 G                     # For N in range(1, I), stack = [(accumulator)]
  IN                   # Push input, then N, stack = [(accumulator), I, N]
    %                  # Calculate I % N, stack = [(accumulator), I % N]
     +                 # Add the result of modulus to accumulator



2

++ , 14 bayt ekle

L,RAdx$p@BcB%s

Çevrimiçi deneyin!

Nasıl çalışır

L,   - Create a lambda function.
     - Example argument:     [7]
  R  - Range;        STACK = [[1 2 3 4 5 6 7]]
  A  - Argument;     STACK = [[1 2 3 4 5 6 7] 7]
  d  - Duplicate;    STACK = [[1 2 3 4 5 6 7] 7 7]
  x  - Repeat;       STACK = [[1 2 3 4 5 6 7] 7 [7 7 7 7 7 7 7]]
  $p - Swap and pop; STACK = [[1 2 3 4 5 6 7] [7 7 7 7 7 7 7]]
  @  - Reverse;      STACK = [[7 7 7 7 7 7 7] [1 2 3 4 5 6 7]]
  Bc - Zip;          STACK = [[7 1] [7 2] [7 3] [7 4] [7 5] [7 6] [7 7]]
  B% - Modulo each;  STACK = [0, 1, 1, 3, 2, 1, 0]
  s  - Sum;          STACK = [8]


2

Windows Toplu İşi (CMD), 63 bayt

@set s=0
@for /l %%i in (1,1,%1)do @set/as+=%1%%%%i
@echo %s%

Önceki 64 bayt sürümü:

@set/ai=%2+1,s=%3+%1%%i
@if %i% neq %1 %0 %1 %i% %s%
@echo %s%

2

T-SQL, 80 79 bayt

@MickyT sayesinde -1 bayt

WITH c AS(SELECT @ i UNION ALL SELECT i-1FROM c WHERE i>1)SELECT SUM(@%i)FROM c

Buna benzer bir tamsayı parametresinden girdi alır @:

DECLARE @ int = 14;

Numaraları oluşturmak için bir ortak tablo Expression kullanır 1için n. Sonra modülleri özetlemek için bu cte kullanır.

Not: Bir cte ;önceki cümle ile cte arasında bir değere ihtiyaç duyar . Gördüğüm çoğu kod ;, bildirimin hemen önüne geçiyor, ancak bu durumda bir byte'ı giriş ifadesinde bulundurarak kaydedebilirim (çünkü teknik olarak benim kodum tek ifadedir).

Deneyin (SEDE)


Daha az "SQL-y" yolu sadece 76 bayttır. Bu kez giriş değişkeni @iyerine @(bir bayt kaydeder). Bu sadece bir whiledöngü yapar .

DECLARE @ int=2,@o int=0WHILE @<@i BEGIN SELECT @o+=@i%@,@+=1 END PRINT @o




1

Kabuğu , 5 bayt

ΣṠM%ḣ

Çevrimiçi deneyin!

açıklama

ΣṠM%ḣ  -- implicit input x, example: 5
 ṠM%   -- map (mod x) over the following..
    ḣ  -- ..the range [1..x]: [5%1,5%2,5%3,5%4,5%5] == [0,1,2,1,0]
Σ      -- sum: 0+1+2+1+0 == 4


1

Pyth , 5 bayt

s%LQS

s%LQS - Full program, inputs N from stdin and prints sum to stdout
s     - output the sum of
 %LQ  - the function (elem % N) mapped over 
    S - the inclusive range from 1..N

Çevrimiçi deneyin!


Aslında ben senden farklı bir 5 byter buldum, seninkileri doğru okumadım
Dave
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.