Tutoriel Swift : Extraire une racine numérique

robot-1923571_1280

Extraire la racine numérique d’un nombre consiste à réaliser la somme numérique de ses chiffres.

ex :

123 = 1 + 2 + 3 = 6

Cela à l’air simple comme cela, mais pour l’apprendre à un ordinateur, ce n’est pas évident. Voici donc une solution possible en Java et en Swift.

En Java ( code utilisé sur l’application thème de cristal version Android) :

————————————- code ———————————

package fr.vincent_barousse.crystaltheme;

import android.support.v7.app.AppCompatActivity;

/**
* Created by bwc on 16/12/2016.
*/

public class ReductionNum extends AppCompatActivity {

// Methodes pour la réduction numérique des nombres en base 33 ou base 10
// Méthodes traduites en java depuis swift

public int reductionNum(int nombreAReduire, int base) {
int sumPremiere = 0;

sumPremiere = sumDigits(nombreAReduire);

while (sumPremiere >= base) {
sumPremiere = sumDigits(nombreAReduire);
}

return sumPremiere;
}

private int sumDigits(int i) {
int sum = 0;
double nDigit = Math.floor(Math.log(10) * (double)(i))+1;
for (double r = nDigit; r >0; r -= 1) {
double p = Math.pow(10, r-1);
double d = Math.floor((double)(i)/p);
sum += (int)(d);
i -= (int) (d*p);
}
return sum;

} // end sumDigits

} // fin ReductionNum

—————————— / code ———————————–

et en Swift (code utilisé pour l’application IOS Theme de cristal) :

—————————— code ————————————

//

//  ReductionNumerique.swift

//  ThemeDeCristal

//

//  Created by Vincent Barousse on 31/01/2016.

//  Copyright © 2016 Vincent Barousse. All rights reserved.

//

import Foundation

import UIKit

func reductionNum(nombreAReduire: Int, base: Int) -> Int {

var sumPremiere = 0

func sumDigits(var i : Int) -> Int {

var sum = 0

let nDigits = floor(log10(Double(i))) + 1

for var r = nDigits; r > 0; r -= 1 {

let p = pow(10, r – 1)

let d = floor(Double(i) / p)

sum += Int(d)

i -= Int(d * p)

}

return sum

}

sumPremiere = sumDigits(nombreAReduire)

while sumPremiere >= base {

sumPremiere = sumDigits(sumPremiere)

}

return sumPremiere

}

——————————— /code ————————————

Un grand merci au site stackoverflow !

Mise à jour du 20/03/17 : le code en Swift 3 :

—————————— code ————————————

import Foundation
import UIKit

extension Decimal {
var doubleValue:Double {
return NSDecimalNumber(decimal:self).doubleValue
}
}

// implementation
//let d = Decimal(floatLiteral: 10.65)
//d.doubleValue

func reductionNum(_ nombreAReduire: Int, base: Int) -> Int {

var sumPremiere = 0

var sumPremiere11: Bool = false
var sumPremiere22: Bool = false

func sumDigits(_ i : Int) -> Int {
var i = i
var sum = 0
let nDigits = floor(log10(Double(i))) + 1
let nDigitsInt = Int(nDigits)

for r in ((0 + 1)…nDigitsInt).reversed() {

let p = (pow(10, r – 1))
let pDouble = p.doubleValue

let d = floor(Double(i) / pDouble)
sum += Int(d)
i -= Int(d * pDouble)
}
return sum
}

sumPremiere = sumDigits(nombreAReduire)

while sumPremiere >= base {
sumPremiere = sumDigits(sumPremiere)

// Modif for numbers 11 and 22 (master numbers)
if (sumPremiere == 11) {
sumPremiere11 = true
}
if (sumPremiere == 22) {
sumPremiere22 = true
}
// end modif for numbers 11 and 22
}

if (sumPremiere22 == true) {sumPremiere = 22}
if (sumPremiere11 == true) {sumPremiere = 11}

return sumPremiere

}

—————————— / code ————————————

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s