Skip to content

Instantly share code, notes, and snippets.

@Dyrits
Forked from codecademydev/Language.cs
Last active May 10, 2023 08:06
Show Gist options
  • Save Dyrits/59d6518f8857ba500792bfbc5fc1eccb to your computer and use it in GitHub Desktop.
Save Dyrits/59d6518f8857ba500792bfbc5fc1eccb to your computer and use it in GitHub Desktop.
Programming Languages

Programming Languages

Do you know when C# was invented? How about your other favorite programming languages, like JavaScript, Ruby, and R?

In this project you’ll be using lists and LINQ to search a database for answers!

The data is stored in a .tsv file, which stands for tab-separated values. It’s a common way to export data from a spreadsheet or database — you might see this file type when you try to download data from apps like Microsoft Excel and Google Sheets.

Here is what the data would look like as a table (just a few random rows included):

Year Name Chief Developer Predecessors
1990 AMOS BASIC François Lionet, Constantin Sotiropoulos STOS BASIC
1991 Visual Basic Alan Cooper (sold to Microsoft) QuickBASIC
1995 Ruby Yukihiro Matsumoto Smalltalk;Perl
2009 Go Google C;Oberon;Limbo;Smalltalk

In Program.cs, the data importing is already taken care of, so you can focus on the queries! The data is stored in languages which is a list of type List<Language>. You can find the definition for the Language class in Language.cs. Here are the class’s important members:

  • int Year — When the language was invented
  • string Name — The name of the language
  • string ChiefDeveloper — The head developer and/or company responsible for making the language
  • string Predecessors — The other programming languages that this language is based on
  • string Prettify() — Returns a nicely formatted string version of the object
using System;
using System.Collections.Generic;
namespace ProgrammingLanguages
{
public class Language
{
public static Language FromTsv(string tsvLine)
{
string[] values = tsvLine.Split('\t');
Language lang = new Language(
Convert.ToInt32(values[0]),
Convert.ToString(values[1]),
Convert.ToString(values[2]),
Convert.ToString(values[3]));
return lang;
}
public int Year
{ get; set; }
public string Name
{ get; set; }
public string ChiefDeveloper
{ get; set; }
public string Predecessors
{ get; set; }
public Language(int year, string name, string chiefDeveloper, string predecessors)
{
Year = year;
Name = name;
ChiefDeveloper = chiefDeveloper;
Predecessors = predecessors;
}
public string Prettify()
{
return $"{Year}, {Name}, {ChiefDeveloper}, {Predecessors}";
}
// #10
public static void PrettyPrintAll(IEnumerable<Language> languages)
{
foreach (var language in languages)
{
Console.WriteLine(language.Prettify());
}
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace ProgrammingLanguages
{
class Program
{
static void Main()
{
List<Language> languages = File.ReadAllLines("./languages.tsv")
.Skip(1)
.Select(line => Language.FromTsv(line))
.ToList();
// #1
foreach (var language in languages)
{
Console.WriteLine(language.Prettify());
}
// #2
var descriptions = languages.Select(language => $"{language.Name} was created in ${language.Year} by {language.ChiefDeveloper}.");
foreach (var description in descriptions)
{
Console.WriteLine(description);
}
// #3
Console.WriteLine(languages.Where(language => language.Name == "C#").First().Prettify());
// #4
var microsoftLanguages = languages.Where(language => language.ChiefDeveloper.Contains("Microsoft"));
foreach (var microsoftLanguage in microsoftLanguages)
{
Console.WriteLine(microsoftLanguage.Prettify());
}
// #5
var lispSuccessors = languages.Where(language => language.Predecessors.Contains("Lisp"));
foreach (var lispSuccessor in lispSuccessors)
{
Console.WriteLine(lispSuccessor.Prettify());
}
// #6
var scripts = languages.Where(language => language.Name.Contains("Script")).Select(language => language.Name);
foreach (var script in scripts)
{
Console.WriteLine(script);
}
// #7
Console.WriteLine(languages.Count());
// #8
var milleniums = languages.Where(language => language.Year > 1994 && language.Year < 2006);
Console.WriteLine(milleniums.Count());
// #9
var milleniumsDates = milleniums.Select(millenium => $"{millenium.Name} was invented in {millenium.Year}.");
foreach (var milleniumsDate in milleniumsDates)
{
Console.WriteLine(milleniumsDate);
}
// #10
Language.PrettyPrintAll(languages);
// #11
}
public static void PrintAll(IEnumerable<Object> elements)
{
foreach (var element in elements)
{
Console.WriteLine(element);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment