Sport Cards Task












0















The task:



You will receive several input lines in one of the following formats:




  • "{card} - {sport} - {price}"

  • "check {card}"


The card and sport are
strings. Price will be a floating point number. You need to keep track
of every card. When you receive a card, a sport and a price,
register the card in the database if it isn't present, otherwise add
the sport and the price. If the card already contains the sport, you
need to overwrite the price. If you receive "check {card}" you need to
check if the card is available or not and print it on the console in
the format:



"{card} is available!" if the card is present and



"{card} is not available!" if the card is not present



You should end your program when you receive the command "end". At that point you should print the cards, ordered by sports’ count in desecending order. Foreach card print their sport and price ordered by sports’ name.




Examples



My Solution



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

class Program
{
class Card
{
public Card(string n, string s, double p)
{
name = n;
addSport(s, p);
}
public void addSport(string sportName, double price)
{
if (sportPriceInfo.ContainsKey(sportName))
{
sportPriceInfo[sportName] = price;
}
else
{
sportCount++;
sportPriceInfo.Add(sportName, price);
}
}
public string name;
public int sportCount = 0;
Dictionary<string, double> sportPriceInfo = new Dictionary<string, double>();
public void showInfo()
{
Console.WriteLine(name + ':');
var sortedDictionary = from pair in sportPriceInfo
orderby pair.Key ascending
select pair;
foreach (var item in sortedDictionary)
{
Console.WriteLine(" -{0} - {1:0.00}", item.Key, item.Value);
}
}
}
class Database
{
List<Card> allCards = new List<Card>();
public void addCard(string n, string s, double p)
{
int cardIndex = isCardPresent(n);
if (cardIndex >= 0)
{
allCards[cardIndex].addSport(s, p);
}
else
{
allCards.Add(new Card(n, s, p));
}
}
public void checkCard(string n)
{
if (isCardPresent(n) >= 0)
{
Console.WriteLine(n + " is available!");
}
else
{
Console.WriteLine(n + " is not available!");
}
}
private int isCardPresent(string n)
{
//returns the index of the matched item, otherwise returns -1
int cardIndex = -1;
for (int i = 0; i < allCards.Count; i++)
{
if (allCards[i].name == n)
{
cardIndex = i;
break;
}
}
return cardIndex;
}
public void showDataBase()
{
List<Card> sortedCards = allCards.OrderByDescending(o => o.sportCount).ToList();
foreach (var card in sortedCards)
{
card.showInfo();
}
}
}
static void Main()
{
string line;
Database db = new Database();
Match lineSplit;
while ((line = Console.ReadLine()) != "end")
{
if (Regex.IsMatch(line, @"^(w+) - (w+) - (d+.d+)b$"))
{
lineSplit = Regex.Match(line, @"^(w+) - (w+) - (d+.d+)b$");
string inputName = lineSplit.Groups[1].Value;
string inputSport = lineSplit.Groups[2].Value;
double inputPrice = double.Parse(lineSplit.Groups[3].Value);
db.addCard(inputName, inputSport, inputPrice);
}
else
{
lineSplit = Regex.Match(line, @"^check (w+)b$");
db.checkCard(lineSplit.Groups[1].Value);
}
}
db.showDataBase();
}
}








share



























    0















    The task:



    You will receive several input lines in one of the following formats:




    • "{card} - {sport} - {price}"

    • "check {card}"


    The card and sport are
    strings. Price will be a floating point number. You need to keep track
    of every card. When you receive a card, a sport and a price,
    register the card in the database if it isn't present, otherwise add
    the sport and the price. If the card already contains the sport, you
    need to overwrite the price. If you receive "check {card}" you need to
    check if the card is available or not and print it on the console in
    the format:



    "{card} is available!" if the card is present and



    "{card} is not available!" if the card is not present



    You should end your program when you receive the command "end". At that point you should print the cards, ordered by sports’ count in desecending order. Foreach card print their sport and price ordered by sports’ name.




    Examples



    My Solution



    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text.RegularExpressions;

    class Program
    {
    class Card
    {
    public Card(string n, string s, double p)
    {
    name = n;
    addSport(s, p);
    }
    public void addSport(string sportName, double price)
    {
    if (sportPriceInfo.ContainsKey(sportName))
    {
    sportPriceInfo[sportName] = price;
    }
    else
    {
    sportCount++;
    sportPriceInfo.Add(sportName, price);
    }
    }
    public string name;
    public int sportCount = 0;
    Dictionary<string, double> sportPriceInfo = new Dictionary<string, double>();
    public void showInfo()
    {
    Console.WriteLine(name + ':');
    var sortedDictionary = from pair in sportPriceInfo
    orderby pair.Key ascending
    select pair;
    foreach (var item in sortedDictionary)
    {
    Console.WriteLine(" -{0} - {1:0.00}", item.Key, item.Value);
    }
    }
    }
    class Database
    {
    List<Card> allCards = new List<Card>();
    public void addCard(string n, string s, double p)
    {
    int cardIndex = isCardPresent(n);
    if (cardIndex >= 0)
    {
    allCards[cardIndex].addSport(s, p);
    }
    else
    {
    allCards.Add(new Card(n, s, p));
    }
    }
    public void checkCard(string n)
    {
    if (isCardPresent(n) >= 0)
    {
    Console.WriteLine(n + " is available!");
    }
    else
    {
    Console.WriteLine(n + " is not available!");
    }
    }
    private int isCardPresent(string n)
    {
    //returns the index of the matched item, otherwise returns -1
    int cardIndex = -1;
    for (int i = 0; i < allCards.Count; i++)
    {
    if (allCards[i].name == n)
    {
    cardIndex = i;
    break;
    }
    }
    return cardIndex;
    }
    public void showDataBase()
    {
    List<Card> sortedCards = allCards.OrderByDescending(o => o.sportCount).ToList();
    foreach (var card in sortedCards)
    {
    card.showInfo();
    }
    }
    }
    static void Main()
    {
    string line;
    Database db = new Database();
    Match lineSplit;
    while ((line = Console.ReadLine()) != "end")
    {
    if (Regex.IsMatch(line, @"^(w+) - (w+) - (d+.d+)b$"))
    {
    lineSplit = Regex.Match(line, @"^(w+) - (w+) - (d+.d+)b$");
    string inputName = lineSplit.Groups[1].Value;
    string inputSport = lineSplit.Groups[2].Value;
    double inputPrice = double.Parse(lineSplit.Groups[3].Value);
    db.addCard(inputName, inputSport, inputPrice);
    }
    else
    {
    lineSplit = Regex.Match(line, @"^check (w+)b$");
    db.checkCard(lineSplit.Groups[1].Value);
    }
    }
    db.showDataBase();
    }
    }








    share

























      0












      0








      0








      The task:



      You will receive several input lines in one of the following formats:




      • "{card} - {sport} - {price}"

      • "check {card}"


      The card and sport are
      strings. Price will be a floating point number. You need to keep track
      of every card. When you receive a card, a sport and a price,
      register the card in the database if it isn't present, otherwise add
      the sport and the price. If the card already contains the sport, you
      need to overwrite the price. If you receive "check {card}" you need to
      check if the card is available or not and print it on the console in
      the format:



      "{card} is available!" if the card is present and



      "{card} is not available!" if the card is not present



      You should end your program when you receive the command "end". At that point you should print the cards, ordered by sports’ count in desecending order. Foreach card print their sport and price ordered by sports’ name.




      Examples



      My Solution



      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text.RegularExpressions;

      class Program
      {
      class Card
      {
      public Card(string n, string s, double p)
      {
      name = n;
      addSport(s, p);
      }
      public void addSport(string sportName, double price)
      {
      if (sportPriceInfo.ContainsKey(sportName))
      {
      sportPriceInfo[sportName] = price;
      }
      else
      {
      sportCount++;
      sportPriceInfo.Add(sportName, price);
      }
      }
      public string name;
      public int sportCount = 0;
      Dictionary<string, double> sportPriceInfo = new Dictionary<string, double>();
      public void showInfo()
      {
      Console.WriteLine(name + ':');
      var sortedDictionary = from pair in sportPriceInfo
      orderby pair.Key ascending
      select pair;
      foreach (var item in sortedDictionary)
      {
      Console.WriteLine(" -{0} - {1:0.00}", item.Key, item.Value);
      }
      }
      }
      class Database
      {
      List<Card> allCards = new List<Card>();
      public void addCard(string n, string s, double p)
      {
      int cardIndex = isCardPresent(n);
      if (cardIndex >= 0)
      {
      allCards[cardIndex].addSport(s, p);
      }
      else
      {
      allCards.Add(new Card(n, s, p));
      }
      }
      public void checkCard(string n)
      {
      if (isCardPresent(n) >= 0)
      {
      Console.WriteLine(n + " is available!");
      }
      else
      {
      Console.WriteLine(n + " is not available!");
      }
      }
      private int isCardPresent(string n)
      {
      //returns the index of the matched item, otherwise returns -1
      int cardIndex = -1;
      for (int i = 0; i < allCards.Count; i++)
      {
      if (allCards[i].name == n)
      {
      cardIndex = i;
      break;
      }
      }
      return cardIndex;
      }
      public void showDataBase()
      {
      List<Card> sortedCards = allCards.OrderByDescending(o => o.sportCount).ToList();
      foreach (var card in sortedCards)
      {
      card.showInfo();
      }
      }
      }
      static void Main()
      {
      string line;
      Database db = new Database();
      Match lineSplit;
      while ((line = Console.ReadLine()) != "end")
      {
      if (Regex.IsMatch(line, @"^(w+) - (w+) - (d+.d+)b$"))
      {
      lineSplit = Regex.Match(line, @"^(w+) - (w+) - (d+.d+)b$");
      string inputName = lineSplit.Groups[1].Value;
      string inputSport = lineSplit.Groups[2].Value;
      double inputPrice = double.Parse(lineSplit.Groups[3].Value);
      db.addCard(inputName, inputSport, inputPrice);
      }
      else
      {
      lineSplit = Regex.Match(line, @"^check (w+)b$");
      db.checkCard(lineSplit.Groups[1].Value);
      }
      }
      db.showDataBase();
      }
      }








      share














      The task:



      You will receive several input lines in one of the following formats:




      • "{card} - {sport} - {price}"

      • "check {card}"


      The card and sport are
      strings. Price will be a floating point number. You need to keep track
      of every card. When you receive a card, a sport and a price,
      register the card in the database if it isn't present, otherwise add
      the sport and the price. If the card already contains the sport, you
      need to overwrite the price. If you receive "check {card}" you need to
      check if the card is available or not and print it on the console in
      the format:



      "{card} is available!" if the card is present and



      "{card} is not available!" if the card is not present



      You should end your program when you receive the command "end". At that point you should print the cards, ordered by sports’ count in desecending order. Foreach card print their sport and price ordered by sports’ name.




      Examples



      My Solution



      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text.RegularExpressions;

      class Program
      {
      class Card
      {
      public Card(string n, string s, double p)
      {
      name = n;
      addSport(s, p);
      }
      public void addSport(string sportName, double price)
      {
      if (sportPriceInfo.ContainsKey(sportName))
      {
      sportPriceInfo[sportName] = price;
      }
      else
      {
      sportCount++;
      sportPriceInfo.Add(sportName, price);
      }
      }
      public string name;
      public int sportCount = 0;
      Dictionary<string, double> sportPriceInfo = new Dictionary<string, double>();
      public void showInfo()
      {
      Console.WriteLine(name + ':');
      var sortedDictionary = from pair in sportPriceInfo
      orderby pair.Key ascending
      select pair;
      foreach (var item in sortedDictionary)
      {
      Console.WriteLine(" -{0} - {1:0.00}", item.Key, item.Value);
      }
      }
      }
      class Database
      {
      List<Card> allCards = new List<Card>();
      public void addCard(string n, string s, double p)
      {
      int cardIndex = isCardPresent(n);
      if (cardIndex >= 0)
      {
      allCards[cardIndex].addSport(s, p);
      }
      else
      {
      allCards.Add(new Card(n, s, p));
      }
      }
      public void checkCard(string n)
      {
      if (isCardPresent(n) >= 0)
      {
      Console.WriteLine(n + " is available!");
      }
      else
      {
      Console.WriteLine(n + " is not available!");
      }
      }
      private int isCardPresent(string n)
      {
      //returns the index of the matched item, otherwise returns -1
      int cardIndex = -1;
      for (int i = 0; i < allCards.Count; i++)
      {
      if (allCards[i].name == n)
      {
      cardIndex = i;
      break;
      }
      }
      return cardIndex;
      }
      public void showDataBase()
      {
      List<Card> sortedCards = allCards.OrderByDescending(o => o.sportCount).ToList();
      foreach (var card in sortedCards)
      {
      card.showInfo();
      }
      }
      }
      static void Main()
      {
      string line;
      Database db = new Database();
      Match lineSplit;
      while ((line = Console.ReadLine()) != "end")
      {
      if (Regex.IsMatch(line, @"^(w+) - (w+) - (d+.d+)b$"))
      {
      lineSplit = Regex.Match(line, @"^(w+) - (w+) - (d+.d+)b$");
      string inputName = lineSplit.Groups[1].Value;
      string inputSport = lineSplit.Groups[2].Value;
      double inputPrice = double.Parse(lineSplit.Groups[3].Value);
      db.addCard(inputName, inputSport, inputPrice);
      }
      else
      {
      lineSplit = Regex.Match(line, @"^check (w+)b$");
      db.checkCard(lineSplit.Groups[1].Value);
      }
      }
      db.showDataBase();
      }
      }






      c# performance programming-challenge





      share












      share










      share



      share










      asked 3 mins ago









      Cecobent

      134




      134



























          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f210295%2fsport-cards-task%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f210295%2fsport-cards-task%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          404 Error Contact Form 7 ajax form submitting

          How to know if a Active Directory user can login interactively

          TypeError: fit_transform() missing 1 required positional argument: 'X'