Séquence de chaîne de somme

16

Séquence:

  1. Nous commençons à 1.
  2. Nous ajoutons d'abord la valeur indexée 1 actuelle au nombre précédent de la séquence.
  3. Ensuite, nous appliquons les opérations mathématiques suivantes dans l'ordre si elles s'appliquent à cette valeur actuelle:
    • Divisible par 2? => Addition
    • Divisible par 3? => Soustraction
    • Divisible par 4? => (Addition ET) Multiplier
    • Pas divisible par ni 2, 3ni 4? -> Continuer avec le résultat actuel

Production:

Sortez les 100 premiers nombres de cette séquence:

1, 1, 21, 25, 30, 216, 223, 223, 2169, 2179, 2190, 2202, 2215, 2215, 2245, 2261, 2295, 2295, 2333, 2353, 2395, 2417, 56649, 56649, 56699, 56725, 1533033, 1533061, 1533090, 45993600, 45993631, 45993631, 1517792001, 1517792035, 1517792070, 1517792106, 1517792143, 1517792143, 1517792221, 1517792261, 1517792343, 1517792343, 1517792429, 1517792473, 1517792563, 1517792609, 71336257041, 71336257041, 71336257139, 71336257189, 3638149121841, 3638149121893, 3638149121946, 196460052588000, 196460052588055, 196460052588055, 11198222997525633, 11198222997525691, 11198222997525750, 11198222997525810, 11198222997525871, 11198222997525871, 11198222997525997, 11198222997526061, 11198222997526191, 11198222997526191, 11198222997526325, 11198222997526393, 11198222997526531, 11198222997526601, 795073832824398753, 795073832824398753, 795073832824398899, 795073832824398973, 59630537461829934225, 59630537461829934301, 59630537461829934378, 4651181922022734887568, 4651181922022734887647, 4651181922022734887647, 376745735683841525912529, 376745735683841525912611, 376745735683841525912694, 376745735683841525912778, 376745735683841525912863, 376745735683841525912863, 376745735683841525913037, 376745735683841525913125, 376745735683841525913303, 376745735683841525913303, 376745735683841525913485, 376745735683841525913577, 376745735683841525913763, 376745735683841525913857, 35790844889964944961834465, 35790844889964944961834465, 35790844889964944961834659, 35790844889964944961834757, 3543293644106529551221660545, 3543293644106529551221660645

Voici les 10 premiers chiffres de la séquence avec explication:

// Starting number of the sequence:
1

// 1 (previous number in the sequence)
// + 2 (current index in 1-indexed sequence)
// = 3 -> 3 - 2 (3 is divisible by 3, so we subtract the current index 2)
// = 1
1

// 1 (previous number in the sequence)
// + 3 (current index in 1-indexed sequence)
// = 4 -> 4 + 3 (4 is divisible by 2, so we first add the current index 3)
// = 7 -> 7 * 3 (and 4 is also divisible by 4, so we then also multiply the current index 3)
// = 21
21

// 21 (previous number in the sequence)
// + 4 (current index in 1-indexed sequence)
// = 25 (25 is not divisible by 2, 3 nor 4)
25

// 25 (previous number in the sequence)
// + 5 (current index in 1-indexed sequence)
// = 30 -> 30 + 5 (30 is divisible by 2, so we first add the current index 5)
// = 35 -> 35 - 5 (and 30 is also divisible by 3, so we then also subtract the current index 5)
// = 30
30

// 30 (previous number in the sequence)
// + 6 (current index in 1-indexed sequence)
// = 36 -> 36 + 6 (36 is divisible by 2, so we first add the current index 6)
// = 42 -> 42 - 6 (and 36 is also divisible by 3, so we then also subtract the current index 6)
// = 36 -> 36 * 6 (and 36 is also divisible by 4, so we then also multiply the current index 6)
// = 216
216

// 216 (previous number in the sequence)
// + 7 (current index in 1-indexed sequence)
// = 223 (223 is not divisible by 2, 3 nor 4)
223

// 223 (previous number in the sequence)
// + 8 (current index in 1-indexed sequence)
// = 231 -> 231 - 8 (231 is divisible by 3, so we subtract the current index 8)
// = 223
223

// 223 (previous number in the sequence)
// + 9 (current index in 1-indexed sequence)
// = 232 -> 232 + 9 (232 is divisible by 2, so we first add the current index 9)
// = 241 -> 241 * 9 (and 232 is also divisible by 4, so we then also multiply the current index 9)
// = 2169
2169

// 2169 (previous number in the sequence)
// + 10 (current index in 1-indexed sequence)
// 2179 (2179 is not divisible by 2, 3 nor 4)
2179

Règles du défi:

  • Si votre langue ne prend en charge rien de plus grand que 2 31 -1, vous pouvez continuer la séquence jusqu'à ce maximum (donc les 46 premiers chiffres, jusqu'à - et y compris - 1,517,792,609).
  • Le format de sortie est flexible. Vous pouvez renvoyer un tableau ou une liste, une chaîne séparée par des espaces, des virgules, etc. Votre appel.

Règles générales:

  • C'est le , donc la réponse la plus courte en octets l'emporte.
    Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation.
  • Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés, des programmes complets. Ton appel.
  • Les failles par défaut sont interdites.
  • Si possible, veuillez ajouter un lien avec un test pour votre code.
  • Veuillez également ajouter une explication si nécessaire.
Kevin Cruijssen
la source
Sortons-nous la nième valeur, les n premières valeurs, ou juste jusqu'à notre taille entière maximale?
Gabriel Benamy
@GabrielBenamy Les 100 premiers de la séquence.
Kevin Cruijssen
1
Je suis sûr que vous n'avez que 99 numéros dans ce bloc.
Kade
2
Ma réponse est en désaccord avec votre sortie sur les 13 derniers chiffres uniquement.
Gabriel Benamy
1
@Shebang Fixed .. Désolé pour le début bâclé .. Il est dans le bac à sable depuis 5 jours, mais je suppose que ni moi ni les autres ne l'avons remarqué ..: S Ça devrait être correct maintenant.
Kevin Cruijssen

Réponses:

1

05AB1E , 24 23 octets

-1 octet grâce à Kevin Crujissen

¼¾тF=¼¾+©…+-*v®NÌÖi¾y.V

Essayez-le en ligne!

Explication:

¼¾                        # set the counter to 1, then push 1
  тF                      # repeat the following 100 times
    =                     # print the current number in the sequence
     ¼¾                   # increment the counter
       +                  # add it to the current number
        ©                 # save the result in the register
         …+-*v            # for each of '+', '-', and '*'...
              ®   i       # if the register...
                 Ö        # is divisible by...
               NÌ         # the loop index + 2...
                   ¾y.V   # then apply the current operation
Grimmy
la source
1
J'ai essayé de trouver quelque chose de plus court avec la variable de compteur afin de UXpouvoir le supprimer, mais je ne peux pas. Je me retrouve également à 24 octets car il commence à la 0place de 1. Je l'ai maintenant augmenté avant le moment, mais ensuite nous devons boucler les 101temps au lieu de 100.. Ah bien.
Kevin Cruijssen
@KevinCruijssen oui, c'est UXune horreur. J'ai essayé de se débarrasser de celui - ci pendant un certain temps et a fini avec un groupe de 24 et 25 variations: 1тF=NÌ©+DÑ3L>Ãv®…-*+yè.V, 1тL>v=y+©3F®NÌÖiy…+-*Nè.V... Je ne l' ai pas envisager d' utiliser la variable compteur, ce qui est intéressant.
Grimmy
1
@KevinCruijssen votre 24 a inspiré un 23: utilisez simplement тFau lieu de Ƶ0µ. J'ai édité ça dans, merci! (PS: il devrait vraiment y avoir un seul octet ¼¾...)
Grimmy
Ah bien. Je pensais que tu trouverais quelque chose, haha. ;) Et oui, un seul byter ¼¾serait bien, bien que pour être honnête, je ne l'utilise presque jamais comme ça. L'intégré à un octet que je préfère le plus en ce moment est une deuxième ©®variable qui ne saute pas. Peut-être à partir d'une chaîne vide ""comme vous l'avez mentionné dans un autre défi auparavant.
Kevin Cruijssen
8

R, 85 82 79 76 72 70 octets

for(i in 2:56)T[i]=((z=i+T[i-1])+i*(!z%%2)-i*(!z%%3))*`if`(z%%4,1,i);T

non golfé:

s=1 ## formerly s=1:56, formerly s=1:100
for(i in 2:56){
    z=i+s[i-1]
    s[i]=(z+i*(z%%2<1)-i*(z%%3<1))*(1+(i-1)*(z%%4<1))
}
s

Merci à @rturnbull d'avoir souligné que je peux utiliser (!z%%3)au lieu de (z%%3<1)vérifier les modules, et que la définition d' zun se produit lors de sa première utilisation.

Détourné 3-4 caractères en abusant de l'extension vectorielle: la réponse a commencé à l'origine s=1:56...mais nous n'avons pas besoin de le faire, la longueur de ssera allongée au besoin.

Sauvegardé 3 octets de plus en remplaçant la dernière condition par un appel à la "if"fonction (oui, c'est une fonction appropriée dans R!)

Enregistré 4 octets de plus en remplaçant spar T, qui est une valeur intrinsèque égale à TRUEqui est également égale à 1. Je l'ai réalisé en même temps que @rturnbull (honnête!)

Cela souffre de quelques problèmes numériques une fois que nous dépassons 2 ^ 52, mais je ne peux rien y faire --- R ne peut utiliser que des doubletypes pour des nombres supérieurs à 2^31-1, mais ils stockent des entiers jusqu'à 2 ^ 52 exactement. Ainsi, je ne suis autorisé à sortir que les 56 premiers termes (le dernier terme qui est «droit»), ce qui économise un octet sur le cas de 100 longueurs.

Voici la sortie de la version 56:

    > for(i in 2:56){z=i+T[i-1];T[i]=(z+i*(!z%%2)-i*(!z%%3))*`if`(z%%4,1,i)};T
 [1]               1               1              21              25              30             216
 [7]             223             223            2169            2179            2190            2202
[13]            2215            2215            2245            2261            2295            2295
[19]            2333            2353            2395            2417           56649           56649
[25]           56699           56725         1533033         1533061         1533090        45993600
[31]        45993631        45993631      1517792001      1517792035      1517792070      1517792106
[37]      1517792143      1517792143      1517792221      1517792261      1517792343      1517792343
[43]      1517792429      1517792473      1517792563      1517792609     71336257041     71336257041
[49]     71336257139     71336257189   3638149121841   3638149121893   3638149121946 196460052588000
[55] 196460052588055 196460052588055
JDL
la source
1
Je dirais que boucler seulement jusqu'à 56 est un jeu équitable étant donné la description du défi.
Billywob
@Billywob a en effet raison. Dans la description, je déclare " Si votre langue ne prend pas en charge quelque chose de plus grand que 2 ^ 31-1, vous pouvez continuer la séquence jusqu'à ce maximum (donc les 46 premiers chiffres, jusqu'à - et y compris - 1,517,792,609). ", Mais ceci de s'applique également pour des nombres différents de 32 bits. Si R ne peut pas gérer quelque chose de plus grand, alors les 56 premiers chiffres sont tout à fait corrects. Et oui, si vous le savez ne peut jamais aller au- dessus de 56, vous pouvez changer le 100pour 56enregistrer un octet.
Kevin Cruijssen du
1
Vous pouvez enregistrer trois octets en modifiant z%%2<1(et ainsi de suite) en !z%%2abusant de la conversion de type implicite.
rturnbull
Merci @rturnbull, pour une raison que je pensais !ne pas battre %%, mais apparemment c'est le cas!
JDL
2
Vous pouvez également en abuser Tet l'utiliser à la place de s, ce qui vous permet de supprimer le s=1;, d'économiser quatre autres octets. Il est possible de replier la définition de zdans la définition de s[i](enfin, T[i]maintenant), comme ceci:, ce T[i]=((z=i+T[i-1])+ ...qui signifie que vous pouvez perdre les accolades, économisant ainsi plus d'octets. EDIT: Oh, je vois que vous avez fait l' Taffaire pendant que j'écrivais mon commentaire! Les grands esprits pensent de la même façon, disent-ils.
rturnbull
5

Python 3, 82 78 76 74 72 octets

i=s=1
exec('print(s);i+=1;s+=i;s=(s+i-i*(s%2+(s%3<1)))*i**(s%4<1);'*100)

Production:

1
1
21
25
30
216
223
223
2169
2179
2190
2202
2215
2215
2245
2261
2295
2295
2333
2353
2395
2417
56649
56649
56699
56725
1533033
1533061
1533090
45993600
45993631
45993631
1517792001
1517792035
1517792070
1517792106
1517792143
1517792143
1517792221
1517792261
1517792343
1517792343
1517792429
1517792473
1517792563
1517792609
71336257041
71336257041
71336257139
71336257189
3638149121841
3638149121893
3638149121946
196460052588000
196460052588055
196460052588055
11198222997525633
11198222997525691
11198222997525750
11198222997525810
11198222997525871
11198222997525871
11198222997525997
11198222997526061
11198222997526191
11198222997526191
11198222997526325
11198222997526393
11198222997526531
11198222997526601
795073832824398753
795073832824398753
795073832824398899
795073832824398973
59630537461829934225
59630537461829934301
59630537461829934378
4651181922022734887568
4651181922022734887647
4651181922022734887647
376745735683841525912529
376745735683841525912611
376745735683841525912694
376745735683841525912778
376745735683841525912863
376745735683841525912863
376745735683841525913037
376745735683841525913125
376745735683841525913303
376745735683841525913303
376745735683841525913485
376745735683841525913577
376745735683841525913763
376745735683841525913857
35790844889964944961834465
35790844889964944961834465
35790844889964944961834659
35790844889964944961834757
3543293644106529551221660545
3543293644106529551221660645

Les suggestions sont les bienvenues!

Le numéro un
la source
4

05AB1E , 34 31 30 octets

XTnFD,NÌ©+D3L>%_`X®‚sèrŠs-®*+*

Essayez-le en ligne!

Explication

X                               # initialize stack with 1
 TnF                            # for N in [0 ... 99]
    D,                          # print a copy of top of stack
      NÌ©                       # increase index N by 2 and store in register
         +                      # add this to current value
          D                     # make a copy of the current value
           3L>                  # push the list [2,3,4]
              %                 # take current value mod elements in list
               _                # invert this
                `               # push the elements from the list to stack
                 X®‚sè          # index into list [1,N+2] with the result of mod 4
                      rŠs-      # subtract result of mod 3 from result of mod 2
                          ®*    # multiply by N+2
                            +   # add this to current value
                             *  # multiply current value with the result from index operation
Emigna
la source
3

Python 2, 76 octets

Implémentation assez standard, je pense qu'en utilisant une instruction exec plutôt qu'une boucle while, vous avez économisé environ 2 octets. Une méthode récursive peut être plus courte, j'imagine que xnor apparaîtra bientôt;)

n=1
f=1
exec'print f;n+=1;d=f+n;f=(d+n*(d%2<1)-n*(d%3<1))*[1,n][d%4<1];'*100

Si j'utilisais les mises à jour que TheNumberOne a découvert, je serais à 69 octets (mais alors je copierais)

n=f=1;exec'print f;n+=1;d=f+n;f=(d+n-n*(d%2+(d%3<1))*n**(d%4<1);'*100

Production:

1
1
21
25
30
216
223
223
2169
2179
2190
2202
2215
2215
2245
2261
2295
2295
2333
2353
2395
2417
56649
56649
56699
56725
1533033
1533061
1533090
45993600
45993631
45993631
1517792001
1517792035
1517792070
1517792106
1517792143
1517792143
1517792221
1517792261
1517792343
1517792343
1517792429
1517792473
1517792563
1517792609
71336257041
71336257041
71336257139
71336257189
3638149121841
3638149121893
3638149121946
196460052588000
196460052588055
196460052588055
11198222997525633
11198222997525691
11198222997525750
11198222997525810
11198222997525871
11198222997525871
11198222997525997
11198222997526061
11198222997526191
11198222997526191
11198222997526325
11198222997526393
11198222997526531
11198222997526601
795073832824398753
795073832824398753
795073832824398899
795073832824398973
59630537461829934225
59630537461829934301
59630537461829934378
4651181922022734887568
4651181922022734887647
4651181922022734887647
376745735683841525912529
376745735683841525912611
376745735683841525912694
376745735683841525912778
376745735683841525912863
376745735683841525912863
376745735683841525913037
376745735683841525913125
376745735683841525913303
376745735683841525913303
376745735683841525913485
376745735683841525913577
376745735683841525913763
376745735683841525913857
35790844889964944961834465
35790844889964944961834465
35790844889964944961834659
35790844889964944961834757
3543293644106529551221660545
3543293644106529551221660645
Kade
la source
3

JavaScript, 75 63 octets

for(n=p=0;n++<57;alert(p=p%4?q:q*n))q=(p+=n)%2?p:p+n,q-=p%3?0:n

Une autre version:

for(n=p=0;n++<57;)alert(p=((p+=n)+(!(p%2)-!(p%3))*n)*(p%4?1:n))

Les deux s'arrêtent à l'index 57 (indexé 0) car c'est à ce moment-là que la sortie dépasse la taille de numéro sécurisée de JavaScript (2 53 - 1). Il s'avère qu'une boucle est bien plus courte qu'une fonction récursive, même avec ES6:

f=(n=0,p=0)=>n++>56?[]:(q=(p+=n)%2?p:p+n,q-=p%3?0:n,[q*=p%4?1:n,...f(n,q)])

Celui-ci renvoie un tableau des 57 premiers éléments.

ETHproductions
la source
Je pense que vous devriez éviter d'aller au-dessus de ~ 50-60 car vous dépassez alors Number.MAX_SAFE_INTEGER et vos divisions deviendront incorrectes. J'ai également essayé la mapversion pour être complète et elle a également cadencé à 75 octets.
Neil
@Neil Ah, merci. Pour être précis, il dépasse Number.MAX_SAFE_INTEGER après 57 entrées.
ETHproductions
3

Brain-Flak 476 466 462 456 446 octets

Enregistré 6 octets grâce à Wheat Wizard

(((((((())<>()(())()){}){}){}())){}{}){({}[()]<(((({})<>({}())<>))<({}(()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}{(<{}({}<>({})<>)>)}{}>)(({})<({}(()()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}{(<{}({}<>[({})]<>)>)}{}>)({}(()()()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}{(<{}(<>({}))({<({}[()])><>({})<>}{}<><{}>)>)}{}>)}{}

Essayez-le en ligne!

C'est vraiment lent. TIO ne peut pas gérer les 100 nombres entiers (la limite semble être 22 ou 23). Ainsi, cet exemple ne génère que les 20 premiers, mais le code fonctionnerait également pour 100.

Brève explication:

      (())<>                           # push a 1 (the index) and switch stacks 
            (())                       # then push a 1 (the starting number)
((((((          ()()){}){}){}())){}{}) # and a 99 (a counter so that we only print the 
                                       # first 100 numbers)

# repeat until the counter is 0
{
  # pop the counter and push it minus 1 after:
  ({}[()]<
    # hold onto the current number plus the index (leave a copy on the stack to be printed)
    # and increment the index
    (((({})<>({}())<>))<
      # push logical not of (current mod 2)
      ({}(()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}
      # if !(current mod 2) is 1, add the index
      {(<{}({}<>({})<>)>)}{}
    # push the current number back on
    >)
    # hold onto the current number
    (({})<
     # push logical not of (current mod 3)
     ({}(()()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}
     # if !(current mod 3) is 1, then subtract the index
     {(<{}({}<>[({})]<>)>)}{}
    # push the current number back on
    >)
    # push logical not of (current mod 4)
    ({}(()()()())(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}(())>){((<{}{}>))}{}
    # if !(current mod 4) is 1, multiply by the index
    {(<{}(<>({}))({<({}[()])><>({})<>}{}<><{}>)>)}{}
  # put the counter back on
  >)
# loop until done
}
# pop the counter
{}
Riley
la source
({}<>[({})]<>)(<()>)peut être remplacé par(<({}<>[({})]<>)>)
Post Rock Garf Hunter
@WheatWizard mis à jour. Merci!
Riley
1

Java 7, 316 octets

import java.math.*;String c(){String r="";BigInteger t=BigInteger.ONE,x,p;for(int i=2;i<102;){r+=t+" ";p=(t=t.add(x=new BigInteger(i+++"")));t=x(p,2)?t.add(x):t;t=x(p,3)?t.subtract(x):t;t=x(p,4)?t.multiply(x):t;}return r;}boolean x(BigInteger p,int i){return p.mod(new BigInteger(i+"")).compareTo(BigInteger.ONE)<0;}

Code non testé et testé:

Essayez-le ici.

import java.math.*;
class M{
  static String c(){
    String r = "";
    BigInteger t = BigInteger.ONE,
               x,
               p;
    for(int i = 2; i < 102;){
      r += t+" ";
      p = (t = t.add(x = new BigInteger(i++ + "")));
      t = x(p, 2)
           ? t.add(x)
           : t;
      t = x(p, 3)
           ? t.subtract(x)
           : t;
      t = x(p, 4)
           ? t.multiply(x)
           : t;
    }
    return r;
  }

  public static void main(String[] a){
    System.out.println(c());
  }

  static boolean x(BigInteger p, int i){
    return p.mod(new BigInteger(i+"")).compareTo(BigInteger.ONE) < 0;
  }
}

Production:

1 1 21 25 30 216 223 223 2169 2179 2190 2202 2215 2215 2245 2261 2295 2295 2333 2353 2395 2417 56649 56649 56699 56725 1533033 1533061 1533090 45993600 45993631 45993631 1517792001 1517792035 1517792070 1517792106 1517792143 1517792143 1517792221 1517792261 1517792343 1517792343 1517792429 1517792473 1517792563 1517792609 71336257041 3424140340272 3424140340321 3424140340371 3424140340473 3424140340525 3424140340631 3424140340631 3424140340741 3424140340797 3424140340911 3424140340969 202024280124133 202024280124193 202024280124315 202024280124377 12727529647843689 814561897462000192 52946523335030016705 52946523335030016771 52946523335030016905 52946523335030016973 52946523335030017111 52946523335030017111 52946523335030017253 52946523335030017253 52946523335030017399 52946523335030017473 3970989250127251321725 301795183009671100456876 301795183009671100456953 301795183009671100457031 301795183009671100457110 301795183009671100457270 301795183009671100457351 301795183009671100457433 25049000189802701337980717 25049000189802701337980801 25049000189802701337980971 25049000189802701337981057 2179263016512835016404367097 191775145453129481443584312280 17067987945328523848479003800841 1536118915079567146363110342083790 1536118915079567146363110342083790 1536118915079567146363110342083974 1536118915079567146363110342083974 144395178017479311758132372155911228 13717541911660534617022575354811575685 13717541911660534617022575354811575781 13717541911660534617022575354811575975 13717541911660534617022575354811576073 1358036649254392927085234960126346050829 
Kevin Cruijssen
la source
1

C #, 120 octets

Tout comme aucune personne sensée ne jouerait au golf à Java, aucune personne sensée ne devrait jouer au golf en C #! Mais vissez ça, je voulais voir ce que je peux faire. La 1Mconversion fest une décimale qui a suffisamment de précision pour cette réponse sans que j'aie à écrire decimal. De plus, l'incrémentation sur place économise quelques octets sur ma réponse Python. au bout du compte, il reste encore 50 octets de plus.

void k(){int n=1;var f=1M;while(n<101){Console.WriteLine(f);var d=++n+f;f=(d+n*((d%2<1?1:0)-(d%3<1?1:0)))*(d%4<1?n:1);}}

Voici la version la plus lisible (et exécutable):

using System;
class P
{
    static void Main(string[]a) 
    {
        int n = 1;
        var f = 1M;
        while (n < 101) 
        {
            Console.WriteLine(f);
            var d = ++n + f;
            f = (d + n * ((d % 2 < 1 ? 1 : 0) - (d % 3 < 1 ? 1 : 0))) * (d % 4 < 1 ? n : 1);
        }
        Console.Read();
    }
}
Kade
la source
Vous pouvez whileforfor(int n=1;n<101;)
jouer au
Vous pouvez même void k(){for(decimal f=1,d,n=1;n<101;)Console.WriteLine(f=((d=++n+f)+n*((d%2<1?1:0)-(d%3<1?1:0)))*(d%4<1?n:1));}
jouer au
1

Lot, 110 octets

@set n=0
@for /l %%i in (1,1,46)do @set/an=((n+=%%i)+(!(n%%2)-!(n%%3))*%%i)*(~-%%i*!(n%%4)+1)&call echo %%n%%

Utilise la formule @ETHproductions, mais a été légèrement modifiée car Batch n'en a pas ?:. Le lot utilise des entiers signés 32 bits, de sorte que les boucles s'arrêtent à 46.

Neil
la source
1

Perl, 75 octets

use bigint;$a+=$_,say$a=($a+($a%2?0:$_)-($a%3?0:$_))*($a%4?1:$_)for(1..100)

Le code génère chaque valeur sur une nouvelle ligne et calcule les 100 valeurs.

Gabriel Benamy
la source
-Mbigint, aucune parenthèse autour du 1..100, et !($a%2)*$_au lieu de ($a%2?0:$_)(même pour a%3..) devrait économiser quelques octets;)
Dada
Obtient jusqu'à 60 octets avec ces suggestions et quelques autres massages.
Xcali
1

Haskell, 70 64 octets

a%b=0^mod a b
n#i|s<-n+i=(s+s%2*i-s%3*i)*i^s%4
scanl1(#)[1..100]

scanl1(#)[1..100]renvoie la liste avec les 100 premiers éléments. Un octet de moins si je peux rester dans la plage 2 ^ 31 (-> [1..46]).

scanl1est comme foldl1mais recueille les résultats intermédiaires dans une liste. Les tests de divisibilité se font via la fonction d'aide %qui renvoie 0^0 = 1si divisible et 0^x = 0sinon.

nimi
la source
1

J, 46 octets

(,{:((]^0=4|+)*(]*0=2|+)++-]*0=3|+)1+#)^:99]1x

Applique la méthode décrite dans le défi.

Usage

La commande supplémentaire (,.~#\)est utilisée pour ajouter des indices à chaque valeur.

   (,.~#\) (,{:((]^0=4|+)*(]*0=2|+)++-]*0=3|+)1+#)^:99]1x
  1                            1
  2                            1
  3                           21
  4                           25
  5                           30
  6                          216
  7                          223
  8                          223
  9                         2169
 10                         2179
 11                         2190
 12                         2202
 13                         2215
 14                         2215
 15                         2245
 16                         2261
 17                         2295
 18                         2295
 19                         2333
 20                         2353
 21                         2395
 22                         2417
 23                        56649
 24                        56649
 25                        56699
 26                        56725
 27                      1533033
 28                      1533061
 29                      1533090
 30                     45993600
 31                     45993631
 32                     45993631
 33                   1517792001
 34                   1517792035
 35                   1517792070
 36                   1517792106
 37                   1517792143
 38                   1517792143
 39                   1517792221
 40                   1517792261
 41                   1517792343
 42                   1517792343
 43                   1517792429
 44                   1517792473
 45                   1517792563
 46                   1517792609
 47                  71336257041
 48                  71336257041
 49                  71336257139
 50                  71336257189
 51                3638149121841
 52                3638149121893
 53                3638149121946
 54              196460052588000
 55              196460052588055
 56              196460052588055
 57            11198222997525633
 58            11198222997525691
 59            11198222997525750
 60            11198222997525810
 61            11198222997525871
 62            11198222997525871
 63            11198222997525997
 64            11198222997526061
 65            11198222997526191
 66            11198222997526191
 67            11198222997526325
 68            11198222997526393
 69            11198222997526531
 70            11198222997526601
 71           795073832824398753
 72           795073832824398753
 73           795073832824398899
 74           795073832824398973
 75         59630537461829934225
 76         59630537461829934301
 77         59630537461829934378
 78       4651181922022734887568
 79       4651181922022734887647
 80       4651181922022734887647
 81     376745735683841525912529
 82     376745735683841525912611
 83     376745735683841525912694
 84     376745735683841525912778
 85     376745735683841525912863
 86     376745735683841525912863
 87     376745735683841525913037
 88     376745735683841525913125
 89     376745735683841525913303
 90     376745735683841525913303
 91     376745735683841525913485
 92     376745735683841525913577
 93     376745735683841525913763
 94     376745735683841525913857
 95   35790844889964944961834465
 96   35790844889964944961834465
 97   35790844889964944961834659
 98   35790844889964944961834757
 99 3543293644106529551221660545
100 3543293644106529551221660645
miles
la source
1

Perl 6 , 62 octets

1,{((my \v=$_+my \n=++$+1)+n*(v%%2-v%%3))*(v%%4*n||1)}.../645/

Essayez-le en ligne!

VRAIMENT dû travailler pour que mon nombre d'octets soit inférieur à celui des autres solutions autres que celles du golf.

Sean
la source