Montez les morceaux!


26

Étant donné un entier N, procédez comme suit: (en utilisant 9 comme exemple).

  1. Recevoir l'entrée N. ( 9)
  2. Convertissez N de base10 en base2. ( 1001)
  3. Augmentez chaque bit de 1. ( 2112)
  4. Traitez le résultat comme base3 et reconvertissez-le en base10. ( 68)
  5. Retour / Sortie du résultat.

Contribution

Peut être reçu dans n'importe quel format de nombre raisonnable.
Il vous suffit de gérer les cas où N> 0.


Sortie

Soit retourner sous forme de nombre ou de chaîne, soit imprimer sur stdout.


Règles

  • C'est le , le code le plus court en octets gagne.
  • Les failles par défaut sont interdites.

Cas de test

1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161

Réponses:


15

Python 2 , 31 octets

f=lambda n:n and 3*f(n/2)+n%2+1

Essayez-le en ligne!


3
Pourriez-vous expliquer comment cela fonctionne?

+n%2+1ajoute le bit binaire le plus à droite plus 1 à la valeur de retour, n/2décale vers la droite nde 1 bit binaire, 3*f(n/2)ajoute récursivement 3 fois ce calcul sur ces bits décalés vers la droite et n andtermine la récursion quand nest 0
Noodle9

11

JavaScript (Node.js) , 23 octets

f=x=>x&&x%2+1+3*f(x>>1)

Essayez-le en ligne!


x>>1est le même que x/2non?
mbomb007

@ mbomb007 J'ai pensé et suggéré la même chose pour l'instant, mais apparemment, cela devient Infinitydans JS .. Essayez-le en ligne. (Vous voudrez peut-être ajouter un lien TIO à votre réponse, I4m2 )
Kevin Cruijssen

2
@ mbomb007 No. 1>>1=0while1/2=0.5
l4m2

4
@ mbomb007 ... Python?
user202729

2
Ouais. Regardez la réponse Python. C'est la raison pour laquelle cela n/2fonctionne, et la raison pour laquelle je l'ai suggéré ici.
mbomb007




6

R , 55 43 octets

function(n)(n%/%2^(x=0:log2(n))%%2+1)%*%3^x

Essayez-le en ligne!

Utilise l'astuce de conversion de base standard dans R, par incréments, puis utilise un produit scalaire avec les pouvoirs de 3pour se reconvertir en entier.

Merci à @ user2390246 d'avoir perdu 12 octets!


Parce que la conversion en binaire n'est pas la sortie finale, l'ordre des chiffres n'a pas d'importance. Donc, au lieu de l'étage (log (n)): 0, vous pouvez faire 0: log (n) et enregistrer quelques octets: 43 octets
user2390246

@ user2390246 bien sûr, merci.
Giuseppe


6

Java 10, 81 52 octets (conversion de base)

n->n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)

Essayez-le en ligne.

-29 octets grâce à @Holger .

Explication:

n->{                         // Method with Long as both parameter and return-type
  n.toString(n,2)            //  Convert the input to a Base-2 String
  .chars().reduce(0,(r,c)->  //  Loop over its digits as bytes
    r*3+c-47)                //  Multiply the current result by 3, and add the digit + 1
                             //  (which is equal to increasing each digit by 1,
                             //  and then converting from Base-3 to Base-10)

Java 10, 171 167 151 151 150 149 octets (séquence)

n->{int t=31-n.numberOfLeadingZeros(n);return a(t+1)+b(n-(1<<t));};int a(int n){return--n<1?n+2:3*a(n)+1;}int b(int n){return n<1?0:n+3*b(n/=2)+n*2;}

-16 octets grâce à @ musicman523 , passant (int)Math.pow(2,t)à (1<<t).
-1 octet grâce à @Holger , en changeant (int)(Math.log(n)/Math.log(2))en 31-n.numberOfLeadingZeros(n).

Essayez-le en ligne.

Explication:

n->{                         // Method with Integer as both parameter and return-type
  int t=31-n.numberOfLeadingZeros(n);
                             //  2_log(n)
  return a(t+1)              //  Return A060816(2_log(n)+1)
         +b(n-(1<<t));}      //   + A005836(n-2^2_log(n))

// A060816: a(n) = 3*a(n-1) + 1; a(0)=1, a(1)=2
int a(int n){return--n<1?n+2:3*a(n)+1;}

// A005836: a(n+1) = 3*a(floor(n/2)) + n - 2*floor(n/2).
int b(int n){return n<1?0:n+3*b(n/=2)+n*2;}

Quand on regarde la séquence:

2,  7,8,  22,23,25,26,  67,68,70,71,76,77,79,80,  202,203,205,206,211,212,214,215,229,230,232,233,238,239,241,242, ...

Nous pouvons voir plusieurs sous-séquences:

A053645(n):
0,  0,1,  0,1,2,3,  0,1,2,3,4,5,6,7,  0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,  ...

A060816(A053645(n)):
2,  7,7,  22,22,22,22,  67,67,67,67,67,67,67,67,  202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,  ...

A005836(A053645(n)+1)
0,  0,1,  0,1,3,4,  0,1,3,4,9,10,12,13,  0,1,3,4,9,10,12,13,27,28,30,31,36,37,39,40,  ...

La séquence demandée est donc:

A060816(A053645(n)) + A005836(A053645(n)+1)

Je crains de trouver des modèles, donc je suis fier de ce que j'ai trouvé ci-dessus .. Cela dit, @ user202729 a trouvé une approche meilleure et plus courte en Java en quelques minutes ..: '(


Re n.toString(n,2).getBytes()... Je pense que la conversion manuelle peut être plus courte.
user202729

1
BTW pourquoi longet non int?
user202729

1
Je pense que dans la version séquence, vous pouvez changer (int)Math.pow(2,t)pour 1<<t... puis insérez cette expression et supprimez la variable i ( 152 octets )
musicman523

1
Dans la vraie vie, j'utiliserais 31-Integer.numberOfLeadingZeros(n)plutôt (int)(Math.log(n)/Math.log(2)), mais ce n'est pas plus court. Sauf si vous utilisez import staticdans l'en-tête, ce qui pourrait étirer les règles trop loin.
Holger

1
Je viens d'essayer de convertir la boucle de votre première variante en une solution de flux, avec succès:n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
Holger





3

Attaché , 19 octets

FromBase&3@1&`+@Bin

Essayez-le en ligne!

Il s'agit d'une composition de trois fonctions:

  • FromBase&3
  • 1&`+
  • Bin

Cela convertit d'abord en binaire ( Bin), l'incrémente ( 1&`+), puis convertit en ternaire (FromBase&3 ).

Alternatives

Non-pointfree, 21 octets: {FromBase[Bin!_+1,3]}

Sans builtins, 57 octets: Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}


3

Retina 0.8.2 , 36 octets

.+
$*
+`^(1+)\1
$1;1
^
1
+`1;
;111
1

Essayez-le en ligne! Explication:

.+
$*

Convertissez de décimal en unaire.

+`^(1+)\1
$1;1

Divmod à plusieurs reprises par 2, et ajoutez 1 au résultat du modulo.

^
1

Ajoutez également 1 au premier chiffre.

+`1;
;111

Conversion de la base codée unaire 3 en base unaire.

1

Convertissez en décimal.


3

Japt , 6 octets

¤cÄ n3
¤      // Convert the input to a base-2 string,
 c     // then map over it as charcodes.
  Ä    // For each item, add one to its charcode
       // and when that's done,
    n3 // parse the string as a base 3 number.

Prend l'entrée comme un nombre, sort un nombre.

Essayez-le en ligne!


Bon sang! Pourquoi n'y ai-je pas pensé? Bien fait.
Shaggy

3

MATL , 12 7 6 octets

BQ3_ZA

Essayez-le en ligne!

5 octets enregistrés grâce à Giuseppe et un autre grâce à Luis Mendo.

Ancienne réponse de 7 octets:

YBQc3ZA

Essayez-le en ligne!

Explication:

YB        % Convert to binary string
  Q       % Increment each element
   c      % Convert ASCII values to characters
    3     % Push 3
     ZA   % Convert from base 3 to decimal.

Ancien pour 12 octets:

BQtz:q3w^!Y*

Essayez-le en ligne!

Oh mon Dieu, c'était désordonné ... Voici donc: `BQ3GBn: q ^! Y *.

Explication:

               % Implicit input
B              % Convert to binary vector
 Q             % Increment all numbers
  t            % Duplicate
   z           % Number of element in vector
    :          % Range from 1 to that number
     q         % Decrement to get the range from 0 instead of 1
      3        % Push 3
       w       % Swap order of stack
        ^      % Raise 3 to the power of 0, 1, ...
         !     % Transpose
          Y*   % Matrix multiplication
               % Implicit output

3

C # (Visual C # Compiler) , 128 octets

using System;using System.Linq;i=>{int z=0;return Convert.ToString(i,2).Reverse().Select(a=>(a-47)*(int)Math.Pow(3,z++)).Sum();}

Essayez-le en ligne!

Je compte Systemcar j'utilise Convertet Math.


Select vous donne l'index comme paramètre facultatif. Vous pouvez donc vous débarrasser de votre zvariable. De plus dans le corps d'expression , vous pouvez vous débarrasser des {, }et des returndéclarations. Donc quelque chose comme çan=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
NtFreX


2

C, 32 27 octets

n(x){x=x?x%2+1+3*n(x/2):0;}

Basé sur la réponse Java de user202729 . Essayez-le en ligne ici . Merci à Kevin Cruijssen d' avoir joué au golf 5 octets.

Version non golfée:

n(x) { // recursive function; both argument and return type are implicitly int
    x = // implicit return
    x ? x % 2 + 1 + 3*n(x/2) // if x != 0 return x % 2 + 1 + 3*n(x/2) (recursive call)
    : 0; // else return 0
}

Vous pouvez économiser 5 octets en remplaçant le returnavec x=et en inversant le ternaire afin que ce !ne soit plus nécessaire:n(x){x=x?x%2+1+3*n(x/2):0;}
Kevin Cruijssen

@KevinCruijssen Nice. Merci!
OOBalance le


2

Octave avec la boîte à outils de communication, 33 32 octets

@(x)(de2bi(x)+1)*3.^(0:log2(x))'

Essayez-le en ligne!

Convertit l'entrée en un vecteur binaire en utilisant de2biet en incrémentant tous les nombres. Est-ce que la multiplication matricielle avec un vecteur vertical de 3 élevé aux puissances appropriées:, 1, 3, 9, ...obtenant ainsi la somme sans appel explicite à sum.


Bien que cela soit extrêmement intelligent, vous pouvez également le faire pour 32 octets: Essayez-le en ligne!
Sanchises

Et avec MATLAB, vous pouvez même le faire @(x)base2dec(de2bi(x)+49,3)pour 27 (une rare occasion où MATLAB est plus indulgent qu'Octave)
Sanchises

2

PHP, 84 64 octets

Essayez-le en ligne !!

Code ORIGINAL

function f($n){$b=decbin($n);echo base_convert($b+str_repeat('1',strlen($b)),3,10);}

Essayez-le en ligne !!

Merci à Cristoph , moins d'octets s'il est exécuté avec php -R

function f($n){echo base_convert(strtr(decbin($n),10,21),3,10);}

Explication

function f($n){
$b=decbin($n);                    #Convert the iteger to base 2
echo base_convert(                  #base conversion PHP function
    $b+str_repeat('1',strlen($b)),  #It adds to our base 2 number
    3,                              #a number of the same digits length
    10);                            #with purely '1's
}

Voici quand je vois que j'ai un chemin loooogn pour aller à la programmation .... n'avait aucune idée de l'existence destrtr
Francisco Hahn

1
Fera !!, désolé<?="Will do!!"
Francisco Hahn

2

CJam , 8 octets

ri2b:)3b

Essayez-le en ligne!

Explication

ri   e# Read input as an integer
2b   e# Convert to base 2. Gives a list containing 0 and 1
:)   e# Add 1 to each number in that list
3b   e# Convert list from base 3 to decimal. Implicitly display

J'aime un peu :)..
Ian H.

2

Espace , 117 octets

[S S S N
_Push_0][S N
S _Duplicate_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_number][T    T   T   _Retrieve][N
S S S N
_Create_Label_OUTER_LOOP][S N
S _Duplicate][S S S T   S N
_Push_2][T  S T T   _Modulo][S S S T    N
_Push_1][T  S S S _Add][S N
T   _Swap][S S S T  S N
_Push_2][T  S T S _Integer_division][S N
S _Duplicate][N
T   S N
_If_0_jump_to_Label_INNER_LOOP][N
S N
S N
_Jump_to_Label_OUTER_LOOP][N
S S N
_Create_Label_INNER_LOOP][S S S T   T   N
_Push_3][T  S S N
_Multiply][T    S S S _Add][S N
T   _Swap][S N
S _Duplicate][N
T   S T N
_If_0_jump_to_Label_PRINT_AND_EXIT][S N
T   _Swap][N
S N
N
_Jump_to_Label_INNER_LOOP][N
S S T   N
_Create_Label_PRINT_AND_EXIT][S N
T   _Swap][T    N
S T _Output_integer_to_STDOUT]

Lettres S(espace), T(tabulation) et N(nouvelle ligne) ajoutées uniquement en surbrillance.
[..._some_action]ajouté à titre d'explication uniquement.

Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).

Explication en pseudo-code:

J'ai d'abord converti la fonction récursive int f(int n){return n<1?0:n%2+1+3*f(n/2);}en sa forme itérative (en pseudo-code):

Integer n = STDIN as integer
Add starting_value 0 to the stack
function OUTER_LOOP:
  while(true){
    Add n%2+1 to the stack
    n = n/2
    if(n == 0):
      Jump to INNER_LOOP
    Else:
      Jump to next iteration OUTER_LOOP

function INNER_LOOP:
  while(true){
    n = 3*n
    n = n + Value at the top of the stack (the ones we calculated with n%2+1)
    Swap top two items
    Check if the top is now 0 (starting value):
      Jump to PRINT_AND_EXIT
    Else:
      Swap top two items back
      Jump to next iteration INNER_LOOP

function PRINT_AND_EXIT:
  Swap top two items back
  Print top to STDOUT as integer
  Exit program with error: Exit not defined

Et j'ai ensuite implémenté cette approche itérative dans l'espace de langage basé sur la pile, en utilisant sa pile par défaut.

L'exemple s'exécute:

Contribution: 1

Command    Explanation                   Stack           Heap    STDIN   STDOUT   STDERR

SSSN       Push 0                        [0]
SNS        Duplicate top (0)             [0,0]
SNS        Duplicate top (0)             [0,0,0]
TNTT       Read STDIN as integer         [0,0]           {0:1}   1
TTT        Retrieve                      [0,1]           {0:1}
NSSSN      Create Label OUTER_LOOP       [0,1]           {0:1}
 SNS       Duplicate top (1)             [0,1,1]         {0:1}
 SSSTSN    Push 2                        [0,1,1,2]       {0:1}
 TSTT      Modulo top two (1%2)          [0,1,1]         {0:1}
 SSSTN     Push 1                        [0,1,1,1]       {0:1}
 TSSS      Add top two (1+1)             [0,1,2]         {0:1}
 SNT       Swap top two                  [0,2,1]         {0:1}
 SSSTSN    Push 2                        [0,2,1,2]       {0:1}
 TSTS      Int-divide top two (1/2)      [0,2,0]         {0:1}
 SNS       Duplicate top (0)             [0,2,0,0]       {0:1}
 NTSN      If 0: Go to Label INNER_LOOP  [0,2,0]         {0:1}
 NSSN      Create Label INNER_LOOP       [0,2,0]         {0:1}
  SSSTTN   Push 3                        [0,2,0,3]       {0:1}
  TSSN     Multiply top two (0*3)        [0,2,0]         {0:1}
  TSSS     Add top two (2+0)             [0,2]           {0:1}
  SNT      Swap top two                  [2,0]           {0:1}
  SNS      Duplicate top (0)             [2,0,0]         {0:1}
  NTSTN    If 0: Jump to Label PRINT     [2,0]           {0:1}
  NSSTN    Create Label PRINT            [2,0]           {0:1}
   SNT     Swap top two                  [0,2]           {0:1}
   TNST    Print top to STDOUT           [0]             {0:1}           2
                                                                                  error

Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Arrête avec erreur: sortie non définie.

Contribution: 4

Command    Explanation                   Stack           Heap    STDIN   STDOUT   STDERR

SSSN       Push 0                        [0]
SNS        Duplicate top (0)             [0,0]
SNS        Duplicate top (0)             [0,0,0]
TNTT       Read STDIN as integer         [0,0]           {0:4}   4
TTT        Retrieve                      [0,4]           {0:4}
NSSSN      Create Label OUTER_LOOP       [0,4]           {0:4}
 SNS       Duplicate top (4)             [0,4,4]         {0:4}
 SSSTSN    Push 2                        [0,4,4,2]       {0:4}
 TSTT      Modulo top two (4%2)          [0,4,0]         {0:4}
 SSSTN     Push 1                        [0,4,0,1]       {0:4}
 TSSS      Add top two (0+1)             [0,4,1]         {0:4}
 SNT       Swap top two                  [0,1,4]         {0:4}
 SSSTSN    Push 2                        [0,1,4,2]       {0:4}
 TSTS      Int-divide top two (4/2)      [0,1,2]         {0:4}
 SNS       Duplicate top (2)             [0,1,2,2]       {0:4}
 NTSN      If 0: Go to Label INNER_LOOP  [0,1,2]         {0:4}
 NSNSN     Jump to Label OUTER_LOOP      [0,1,2]         {0:4}
 SNS       Duplicate top (2)             [0,1,2,2]       {0:4}
 SSSTSN    Push 2                        [0,1,2,2,2]     {0:4}
 TSTT      Modulo top two (2%2)          [0,1,2,0]       {0:4}
 SSSTN     Push 1                        [0,1,2,0,1]     {0:4}
 TSSS      Add top two (0+1)             [0,1,2,1]       {0:4}
 SNT       Swap top two                  [0,1,1,2]       {0:4}
 SSSTSN    Push 2                        [0,1,1,2,2]     {0:4}
 TSTS      Int-divide top two (2/2)      [0,1,1,1]       {0:4}
 SNS       Duplicate top (1)             [0,1,1,1,1]     {0:4}
 NTSN      If 0: Go to Label INNER_LOOP  [0,1,1,1]       {0:4}
 NSNSN     Jump to Label OUTER_LOOP      [0,1,1,1]       {0:4}
 SNS       Duplicate top (1)             [0,1,1,1,1]     {0:4}
 SSSTSN    Push 2                        [0,1,1,1,1,2]   {0:4}
 TSTT      Modulo top two (1%2)          [0,1,1,1,1]     {0:4}
 SSSTN     Push 1                        [0,1,1,1,1,1]   {0:4}
 TSSS      Add top two (1+1)             [0,1,1,1,2]     {0:4}
 SNT       Swap top two                  [0,1,1,2,1]     {0:4}
 SSSTSN    Push 2                        [0,1,1,2,1,2]   {0:4}
 TSTS      Int-divide top two (1/2)      [0,1,1,2,0]     {0:4}
 SNS       Duplicate top (0)             [0,1,1,2,0,0]   {0:4}
 NTSN      If 0: Go to Label INNER_LOOP  [0,1,1,2,0]     {0:4}
 NSSN      Create Label INNER_LOOP       [0,1,1,2,0]     {0:4}
  SSSTTN   Push 3                        [0,1,1,2,0,3]   {0:4}
  TSSN     Multiply top two (0*3)        [0,1,1,2,0]     {0:4}
  TSSS     Add top two (2+0)             [0,1,1,2]       {0:4}
  SNT      Swap top two                  [0,1,2,1]       {0:4}
  SNS      Duplicate top (1)             [0,1,2,1,1]     {0:4}
  NTSTN    If 0: Jump to Label PRINT     [0,1,2,1]       {0:4}
  SNT      Swap top two                  [0,1,1,2]       {0:4}
  NSNN     Jump to Label INNER_LOOP      [0,1,1,2]       {0:4}
  SSSTTN   Push 3                        [0,1,1,2,3]     {0:4}
  TSSN     Multiply top two (2*3)        [0,1,1,6]       {0:4}
  TSSS     Add top two (1+6)             [0,1,7]         {0:4}
  SNT      Swap top two                  [0,7,1]         {0:4}
  SNS      Duplicate top (1)             [0,7,1,1]       {0:4}
  NTSTN    If 0: Jump to Label PRINT     [0,7,1]         {0:4}
  SNT      Swap top two                  [0,1,7]         {0:4}
  NSNN     Jump to Label INNER_LOOP      [0,1,7]         {0:4}
  SSSTTN   Push 3                        [0,1,7,3]       {0:4}
  TSSN     Multiply top two (7*3)        [0,1,21]        {0:4}
  TSSS     Add top two (1+21)            [0,22]          {0:4}
  SNT      Swap top two                  [22,0]          {0:4}
  SNS      Duplicate top (0)             [22,0,0]        {0:4}
  NTSTN    If 0: Jump to Label PRINT     [22,0]          {0:4}
  NSSTN    Create Label PRINT            [22,0]          {0:4}
   SNT     Swap top two                  [0,22]          {0:4}
   TNST    Print top to STDOUT           [0]             {0:4}           22
                                                                                  error

Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Arrête avec erreur: sortie non définie.


À ce stade, pourquoi ne pas écrire l'assemblage? J'ai également une méthode itérative légèrement plus simple dans ma réponse codegolf.stackexchange.com/a/161833/17360
qwr

J'ai encore simplifié mon pseudocode python.
qwr

1
@qwr Votre code Python est presque le même que le code Java affiché. Java est juste plus verbeux et sujet aux erreurs. La seule différence est que mon code Java est une boucle while imbriquée et que le vôtre est séparé. Je pourrais le faire aussi en Java, mais comme il est imbriqué dans Whitespace, j'ai choisi de l'écrire comme tel dans le pseudo-code Java. De plus, Whitespace n'a aucun moyen de connaître le nombre d'éléments restants sur la pile, c'est pourquoi j'appuie sur le 0 au début, et dans la partie INNER_LOOP du code, faites: swap, vérifiez si 0, swap back. Belle réponse de l'Assemblée, cependant. Je l'ai donc +1. :)
Kevin Cruijssen

Je pense toujours que vous pouvez vous débarrasser de la n < 1vérification en poussant les valeurs jusqu'à ce que n soit 0, puis en les sautant jusqu'à ce que vous atteigniez votre valeur limite (0). La profondeur de la pile n'a pas besoin d'être stockée explicitement et il ne devrait même pas avoir besoin d'être échangé (si vous voulez échanger les deux premières valeurs comme dans lisp)
qwr

@qwr " Je pense toujours que vous pouvez vous débarrasser du contrôle n <1 en poussant les valeurs jusqu'à ce que n soit 0 " Umm .. vérifier si n < 1(ou n == 0) IS pousser les valeurs jusqu'à ce que nsoit 0 .. Ou suis-je en train de mal interpréter quelque chose ici ..: S " La profondeur de la pile n'a pas besoin d'être stockée explicitement " En Java, c'est le cas, sinon je ne peux pas créer le tableau. J'aurais pu utiliser un à la java.util.Stackplace, mais j'ai juste utilisé un tableau pour le rendre moins verbeux. Dans les espaces blancs, la pile est de taille indéfinie.
Kevin Cruijssen

2

Brain-Flak , 74 octets

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

Essayez-le en ligne!

Version "lisible"

({<>(())<>
  ({
    <({}[()])>
    <>
    ([{}]())
    <>
  })
}
# At this point we have a inverted binary string on the stack
(<>)
)
{
  {}
  (
    (({})()){}{}[{}]
  )
  ([][()])
}{}






En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.