Codingame - challenges en C++

Cet article commence à dater (2015). La plupart des informations à propos des algorithmes doivent être toujours correctes mais il y a sans doute eu des évolutions dans le mauvais sens du côté de Codingame. Par mauvais sens je veux dire : vous empêcher de développer chez vous à votre rythme puis coller votre solution quand VOUS le souhaitez. Vous obliger à ne coder que sur leur plateforme, ne plus vous permettre de récupérer les jeux d’entrainement et les solutions pour travailler en autonome… J’espère me tromper mais il sera intéressant d’y retrouner de temps à autre et de vérifier si ce que je dis se réalise (ou pas) 🤞

Introduction

Je ne connaissais pas Codingame. Suite discussion avec un pote j’ai eu l’occasion d’y faire un tour ce soir. C’est vraiment super. Que vous soyez développeur C, C++, Python, Java… vous y trouverez des problèmes à résoudre. Y a un tutorial qui explique l’environnement, ce que l’on peut faire, ce que l’on ne peut pas faire etc. Je suis bluffé par ce que j’ai vu. Faudra que je m’y intéresse vraiment.

Une fois que vous avez passé le problème du tutoriel il faut juste aller dans Games/Single Player par exemple.

Pour info, le code que j’ai envoyé pour “résoudre” le premier “challenge” en Janvier 2015

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

struct enemy{
    int     dist;
    string  name;

    enemy(int d, const std::string& n) : dist(d), name(n) {}
};

int main(){

    vector<enemy> MyEnemies;

    while (1) {
        int count;                          // The number of current enemy ships within range
        cin >> count;
        cin.ignore();

        for (int i = 0; i < count; i++) {
            string  name;                   // The name of this enemy
            int     dist;                   // The distance to your cannon of this enemy
            cin >> name >> dist;
            cin.ignore();

            MyEnemies.push_back(enemy(dist, name));
        }

        sort(MyEnemies.begin(), MyEnemies.end(),
            [](const enemy &a, const enemy &b) {
                return a.dist > b.dist;
            });

        // Write an action using cout. DON'T FORGET THE "<< endl"
        // To debug: cerr << "Debug messages..." << endl;
        enemy e = MyEnemies.back();
        cout << e.name << endl;
        MyEnemies.pop_back();
    }
}

Je viens de retourner faire un tour sur le code en question. Il semble que depuis Janvier 2015 ils aient décidé de nous faire débuter avec un challenge encore plus simple. Voilà ce que j’ai proposé ce soir :

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

struct enemy {
  int     dist;
  string  name;
  enemy(const int d, const std::string& n) : dist(d), name(n) {}
};

int main() {

  vector<enemy> MyEnemies;
  while (true) {
    for (auto i = 0; i != 2; ++i) {
      string  name;                                                             // The name of the enemy
      int     dist;                                                             // The distance to our cannon
      cin >> name >> dist; cin.ignore();

      MyEnemies.push_back({ dist, name });
    }

    sort(MyEnemies.begin(), MyEnemies.end(), [](const enemy &a, const enemy &b) {
      return a.dist > b.dist;
    });

    enemy e = MyEnemies.back();
    cout << e.name << endl;
    MyEnemies.pop_back();
  }
}

Back to top

Published on: Jan 14 2015 at 11:35 PM | Last updated: May 3 2020 at 10:24 PM

Copyright © 1964-2025 - 40tude