2010-10-24 5 views
1
function mystery($y, $m, $d) { 

    $a = 0; 
    $b = 0; 
    $c = 0; 

    if($m < 3) { 
    $a = $m + 10; 
    $b = ($y-1) % 100; 
    $c = ($y-1)/100; 
    } 
    else { 
    $a = $m - 2; 
    $b = $y % 100; 
    $c = $y/100; 
    } 

    $w = (700 + (((26*$a)-2)/10)+$d+$b+$b/4+$c/4-(2*$c))%7; 
    echo $w; 

} 

Une de mes questions de tutoriel demande ce que la fonction calcule. Je peux passer en revue et expliquer chaque calcul, mais je suis sûr que ce n'est pas ce que nous sommes censés faire. Y a-t-il un usage évident que je ne vois pas?Que fait ce code?

Il me semble que cela pourrait être un algorithme de contrôle, car il semble toujours générer un chiffre entre 0 et 6.

ps, ​​il a été écrit en Java, mais je porté à PHP pour simplifier quand Je l'ai tapé dans mon ordinateur pour tester. Je peux retaper la version Java si quelqu'un le préfère. Pensez aux dates et à ce que Marcelo a publié.

+2

Avez-vous testé certaines entrées? La date d'aujourd'hui, par exemple? –

+1

Ooh, je le pense, oui. La valeur de 0 -> 6 est le jour de la semaine! Merci! – Matt

+0

@Marcelo - Les variables Y M D auraient dû être un don. Je n'ai même pas remarqué. grr – mellowsoon

Répondre

1

Voici java compilable. Essayez d'exécuter le programme avec diverses entrées et voir ce que vous venez avec.

class mys { 
    public static void main(String[] args) { 
      int y= Integer.parseInt(args[0]); 
      int m= Integer.parseInt(args[1]); 
      int d = Integer.parseInt(args[2]); 
      int a = 0; 
      int b = 0; 
      int c = 0; 

      if(m < 3) { 
      a = m + 10; 
      b = (y-1) % 100; 
      c = (y-1)/100; 
      } 
      else { 
      a = m - 2; 
      b = y % 100; 
      c = y/100; 
      } 

      int w = (700 + (((26*a)-2)/10)+d+b+b/4+c/4-(2*c))%7; 
      System.out.println(w); 
    } 
}