Code initiative – Rabat 2011

Problème F : CashFlow

Fichier d’entrée : cash.in

Fichier de sortie : cash.out (IN+OUT)

Source : cash.c | cash.cpp | cash.java | cash.cs | cash.php

CashFlow est un jeu de société qui aide à développer la culture de la gestion de l’argent.

Ce jeu est divisé en deux phase, la course des rats ‘Rat Race’ et la piste rapide ‘Fast Track’.

Pour sortir de la course des rats et entrer dans la piste rapide il faut satisfaire l’inégalité suivante :

Le revenu passif ≥ les dépenses

La définition du revenu passif est : tout revenue qu’on obtient à partir de nos investissements et pas notre salaire, par exemple un ingénieur qui n’a que son salaire a un revenu passif égal à ZERO.

Dans la course des rats il y a plusieurs pistes : des pistes des investissements, des pistes de marché (pour vendre les investissement) , des pistes de dépenses , des pistes de versements de salaire , une piste pour la charité, une piste pour un nouveau bébé(plus de dépenses) et une piste de saisie (on perd notre boulot et on reste à la recherche d’un autre pendant deux mois !!)

Votre mission et de décider si un joueur peux sortir de la course des rats après son atterrissage sur la piste des investissements au milieu d’une partie.

Au début de chaque cas de test, il y a une description de l’état du joueur :

-          Salaire mensuel (Salary): S

-          Le revenu passif (Passive Incoming): P.I

-          La somme des dépenses (Expenses): E

-          L’argent qu’il a en main (cash on Hand): C.H

Après cette description, vous trouvez une description de l’investissement qu’il a trouvé:

-          Le coût (Cost) : C

-          Le revenu mensuel (CashFlow): CF

Le joueur peut prendre cette opportunité si l’argent qu’il a en main est supérieur ou égale au coût de cet investissement.

Si le joueur a pris cette opportunité il ajoute le revenu mensuel au revenu passif.

Format d’entrée

Votre programme va être testé par plusieurs cas de tests, chaque cas de test est décrit comme suit :

-          Une ligne contenant le nom du joueur : chaine de caractères (aucun espace)

-          Une ligne contenant le métier du joueur : chaine de caractères (aucun espace)

-          Une ligne qui contient 4 entiers : S  P.I  E et C.H, c’est entiers sont compris entre 0 et 1.000.000

-          Une ligne qui contient 2 entiers : C et CF , c’est entiers sont compris entre 1 et 1.000.000

La signification des entiers et la même cité dans l’explication.

NB : Les situations données dans le fichier d’entrés correspondent  tous à des joueur dans la course des rats (passive income < total expenses)

Format de sortie

Pour chaque cas de test afficher :

Name : <Nom du joueur> (12 espaces entre Name et ‘:’, un seul espace entre ‘ :’ et le nom de joueur)

Job   : <métier du joueur> (13 espaces entre Job et ‘:’, un seul espace entre ‘ :’ et le métier de joueur)

Passive income    : <le revenue passive après l’éventuel achat de l’opportunité> (2 espaces entre Passive income et ‘:’, un seul espace entre ‘ :’ et le montant calculé)

Total expenses: <la somme des dépenses> (2 espaces entre Total expenses et ‘:’, un seul espace entre ‘ :’ et la somme des dépenses)

Cash on Hand      :  <la somme d’argent en main après l’éventuel achat de l’opportunité> (4 espaces entre Cash on Hand et ‘:’, un seul espace entre ‘ :’ et le montant calculé)

Current Status    : <Position> (2 espaces entre Current Status et ‘:’, un seul espace entre ‘ :’ et la position, si le joueur sort de la course de rat Position prendre la valeur ‘FAST TRACK’ sinon ‘RAT RACE’)

Une ligne vide.

NB : les montants d’argent sont affichés avec un séparateur (point) entre chaque 3 chiffres, 10000 sera noté 10.000

Exemple de fichiers entrée/sortie :

cash.in cash.out
Jhon

Engineer

5000 700 3000 5000

5000 400

Sara

Janitor

1500 500 800 3500

3000 350

Name            : Jhon

Job              : Engineer

Passive income  : 1.100

Total expenses  : 3.000

Cash on Hand    : 0

Current Status  : RAT RACE


Name            : Sara

Job              : Janitor

Passive income  : 850

Total expenses  : 800

Cash on Hand    : 500

Current Status  : FAST TRACK

Une opportunité du jeu réel :)

Je partage avec :
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • email
  • Add to favorites
  • Google Buzz
  • LinkedIn
  • Live
  • MySpace
  • Netvibes
  • Orkut
  • Posterous
  • Reddit
Categories: Coding challenge

One Response so far.

  1. Driss Kahfy dit :

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    import java.util.Scanner;
    import java.util.regex.*;

    public class cash{
    private static String affiche(int nombre){
    String stnombre=new String(«  »);
    stnombre+=nombre;
    if(stnombre.indexOf(‘.’)==-1 && nombre >= 1000){
    stnombre=stnombre.substring(0,stnombre.length()-3)+ ». »+stnombre.substring(stnombre.length()-3,stnombre.length());
    while(stnombre.indexOf(‘.’)>3){
    stnombre=stnombre.substring(0,stnombre.indexOf(‘.’)-3)+ ». »+stnombre.substring(stnombre.indexOf(‘.’)-3,stnombre.length());
    }
    }
    return stnombre;
    }
    public static void main(String[] args) throws FileNotFoundException{
    Scanner in=new Scanner(new File(« cash.in »));
    PrintWriter out=new PrintWriter(« cash.out »);
    while(in.hasNextLine()){
    String nom=in.nextLine();
    String emploi=in.nextLine();
    Pattern p=Pattern.compile(« \\s+ »);
    String etat=in.nextLine();
    String[] st1=new String[4];
    st1=p.split(etat);
    int salaire=Integer.valueOf(st1[0]);
    int revenupassif=Integer.valueOf(st1[1]);
    int depenses=Integer.valueOf(st1[2]);
    int argentenmain=Integer.valueOf(st1[3]);
    String invest=in.nextLine();
    String[] st2=new String[2];
    st2=p.split(invest);
    int cout=Integer.valueOf(st2[0]);
    int revenumensuel=Integer.valueOf(st2[1]);
    String st=new String(«  »);
    st= »Name : « +nom;
    out.println(st);
    st= »Job : « +emploi;
    out.println(st);
    if(argentenmain >= cout){
    argentenmain-=cout;
    revenupassif+=revenumensuel;
    }
    st= »Passive income : « +affiche(revenupassif);
    out.println(st);
    st= »Total expenses : « +affiche(depenses);
    out.println(st);
    st= »Cash on hand : « +affiche(argentenmain);
    out.println(st);
    st= »Current Status : « ;
    String position=new String(«  »);
    if(revenupassif >= depenses)
    position= »FAST TRACK »;
    else position= »RAT RACE »;
    st+=position;
    out.println(st);
    out.println( » « );
    }
    in.close();
    out.close();
    }
    }