Changeset 1094


Ignore:
Timestamp:
2015-03-17 15:51:25 (3 years ago)
Author:
anlakane
Message:
 
Location:
esimerkit/2015k/live/live19/LukujenEsiintymiskerrat
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • esimerkit/2015k/live/live19/LukujenEsiintymiskerrat/LukujenEsiintymiskerrat.cs

    r1093 r1094  
    55using System.Diagnostics; 
    66 
    7 /// @author anlakane 
    8 /// @version ..2015 
     7/// @author Antti-Jussi Lakanen 
     8/// @version 17.3.2015 
    99///  
    1010/// <summary> 
    11 ///  
     11/// Tutkitaan lukujen esiintymiskertoja. 
     12/// Tässä tehtiin kolme eri versiota: järjestetyllä 
     13/// aineistolla, järjestämättömällä aineistolla, 
     14/// sekä LINQ:n avulla. 
    1215/// </summary> 
    1316public class LukujenEsiintymiskerrat 
    1417{ 
    1518    /// <summary> 
    16     ///  
     19    /// Kutsut ja ajastukset. 
    1720    /// </summary> 
    1821    public static void Main() 
     
    3033        double ms = sw.Elapsed.TotalMilliseconds; 
    3134        Console.WriteLine("Sortatulla Dictionarylla hommaan meni " + ms + " millisekuntia."); 
    32          
     35 
    3336        sw = Stopwatch.StartNew(); 
    3437        esiintymat = LaskeEsiintymat2(luvut); 
     
    3639        ms = sw.Elapsed.TotalMilliseconds; 
    3740        Console.WriteLine("Ei-sortatulla Dictionarylla hommaan meni " + ms + " millisekuntia."); 
     41         
     42        sw = Stopwatch.StartNew(); 
     43        esiintymat = LaskeEsiintymat3(luvut); 
     44        sw.Stop(); 
     45        ms = sw.Elapsed.TotalMilliseconds; 
     46        Console.WriteLine("LINQ:lla hommaan meni " + ms + " millisekuntia."); 
    3847    } 
    3948 
     
    109118        // voitaisiiin tehdä uusi lista, johon silmukassa lisätään 
    110119        // avaimet alkiotJaMaarat-dictionarysta 
     120        // tässä vähän lyhyemmin koodirivien säästämiseksi :-) 
    111121 
    112122        int[] esiintymiskerrat = alkiotJaMaarat.OrderBy(x => x.Value).Select(x => x.Key).ToArray(); 
     
    115125 
    116126    /// <summary> 
    117     ///  
     127    /// Lisätään alkiot ja niiden esiintymismäärät key-value-pareina 
     128    /// Dictionary-tietorakenteeseen. Lopuksi järjestetään tietorakenne 
     129    /// esiintymismäärien perusteella, ja valitaan pelkät avaimet. 
     130    /// HUOM! Alkuperäistä aineistoa ei järjestetä. 
    118131    /// </summary> 
    119132    /// <param name="luvut"></param> 
     
    132145    public static int[] LaskeEsiintymat2(int[] luvut) 
    133146    { 
    134         List<int> lista = luvut.ToList<int>(); 
    135         // lista.Sort(); // järjestää nousevaan järjestykseen 
    136         if (lista.Count == 0) return new int[] { }; 
     147        if (luvut.Length == 0) return new int[] { }; 
    137148 
    138149        Dictionary<int, int> maarat = new Dictionary<int, int>(); 
    139150 
    140         int etsittava = lista[0]; 
     151        int etsittava = luvut[0]; 
    141152        int loydettyKpl = 0; 
    142153        int i = 0; 
     
    144155        // 2 2 3 4  
    145156 
    146         while (i < lista.Count) 
     157        while (i < luvut.Length) 
    147158        { 
    148             etsittava = lista[i]; 
     159            etsittava = luvut[i]; 
    149160            loydettyKpl = 0; 
    150161            j = 0; 
    151162            if (maarat.ContainsKey(etsittava)) { i++; continue; } 
    152163            maarat.Add(etsittava, loydettyKpl); 
    153             while (j < lista.Count) 
     164            while (j < luvut.Length) 
    154165            { 
    155                 if (lista[i] == lista[j]) 
     166                if (luvut[i] == luvut[j]) 
    156167                    maarat[etsittava]++; 
    157168                j++; 
     
    160171        } 
    161172 
    162         // alkiotJaMaarat.Add(lukuJotaEtsitaan, montakoLoydetty); 
    163  
    164173        // voitaisiiin tehdä uusi lista, johon silmukassa lisätään 
    165174        // avaimet alkiotJaMaarat-dictionarysta 
     175        // tässä vähän lyhyemmin koodirivien säästämiseksi :-) 
    166176 
    167177        int[] esiintymiskerrat = maarat.OrderBy(x => x.Value).Select(x => x.Key).ToArray(); 
     
    182192    /// <pre name="test"> 
    183193    ///   int[] luvut = {1,2,3,34,34,2,1,34,1,1,1}; 
    184     ///   int[] tulos = Esiintymiskerrat.LaskeEsiintymat3(luvut); 
     194    ///   int[] tulos = LukujenEsiintymiskerrat.LaskeEsiintymat3(luvut); 
    185195    ///   String.Join(" ",tulos) === "3 2 34 1"; 
    186     ///   String.Join(" ", Esiintymiskerrat.LaskeEsiintymat3(new int[]{})) === ""; 
    187     ///   String.Join(" ", Esiintymiskerrat.LaskeEsiintymat3(new int[]{1})) === "1"; 
    188     ///   String.Join(" ", Esiintymiskerrat.LaskeEsiintymat3(new int[]{1,2,2})) === "1 2"; 
     196    ///   String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat3(new int[]{})) === ""; 
     197    ///   String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat3(new int[]{1})) === "1"; 
     198    ///   String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat3(new int[]{1,2,2})) === "1 2"; 
    189199    /// </pre> 
    190200    /// </example> 
  • esimerkit/2015k/live/live19/LukujenEsiintymiskerrat/LukujenEsiintymiskerratTest/LukujenEsiintymiskerratTest.cs

    r1093 r1094  
    1010        { 
    1111                [TestMethod()] 
    12                 public  void testLaskeEsiintymat51() 
     12                public  void testLaskeEsiintymat77() 
    1313                { 
    1414                        int[] luvut = { 1, 2, 3, 34, 34, 2, 1, 34, 1, 1, 1 }; 
    1515                        int[] esiintymat = LukujenEsiintymiskerrat.LaskeEsiintymat(luvut); 
    16                         Assert.AreEqual( "3 2 34 1", String.Join(" ", esiintymat) , "in method LaskeEsiintymat, line 54"); 
    17                         Assert.AreEqual( "", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat(new int[]{})) , "in method LaskeEsiintymat, line 55"); 
    18                         Assert.AreEqual( "1", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat(new int[]{1})) , "in method LaskeEsiintymat, line 56"); 
    19                         Assert.AreEqual( "1 2", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat(new int[]{1,2,2})) , "in method LaskeEsiintymat, line 57"); 
    20                         Assert.AreEqual( "1 3 2", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat(new int[]{1,2,2,3})) , "in method LaskeEsiintymat, line 58"); 
     16                        Assert.AreEqual( "3 2 34 1", String.Join(" ", esiintymat) , "in method LaskeEsiintymat, line 80"); 
     17                        Assert.AreEqual( "", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat(new int[]{})) , "in method LaskeEsiintymat, line 81"); 
     18                        Assert.AreEqual( "1", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat(new int[]{1})) , "in method LaskeEsiintymat, line 82"); 
     19                        Assert.AreEqual( "1 2", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat(new int[]{1,2,2})) , "in method LaskeEsiintymat, line 83"); 
     20                        Assert.AreEqual( "1 3 2", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat(new int[]{1,2,2,3})) , "in method LaskeEsiintymat, line 84"); 
    2121                } 
    2222                [TestMethod()] 
    23                 public  void testLaskeEsiintymat2105() 
     23                public  void testLaskeEsiintymat2134() 
    2424                { 
    2525                        int[] luvut = { 1, 2, 3, 34, 34, 2, 1, 34, 1, 1, 1 }; 
    2626                        int[] esiintymat = LukujenEsiintymiskerrat.LaskeEsiintymat2(luvut); 
    27                         Assert.AreEqual( "3 2 34 1", String.Join(" ", esiintymat) , "in method LaskeEsiintymat2, line 108"); 
    28                         Assert.AreEqual( "", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat2(new int[]{})) , "in method LaskeEsiintymat2, line 109"); 
    29                         Assert.AreEqual( "1", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat2(new int[]{1})) , "in method LaskeEsiintymat2, line 110"); 
    30                         Assert.AreEqual( "1 2", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat2(new int[]{1,2,2})) , "in method LaskeEsiintymat2, line 111"); 
    31                         Assert.AreEqual( "1 3 2", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat2(new int[]{1,2,2,3})) , "in method LaskeEsiintymat2, line 112"); 
     27                        Assert.AreEqual( "3 2 34 1", String.Join(" ", esiintymat) , "in method LaskeEsiintymat2, line 137"); 
     28                        Assert.AreEqual( "", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat2(new int[]{})) , "in method LaskeEsiintymat2, line 138"); 
     29                        Assert.AreEqual( "1", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat2(new int[]{1})) , "in method LaskeEsiintymat2, line 139"); 
     30                        Assert.AreEqual( "1 2", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat2(new int[]{1,2,2})) , "in method LaskeEsiintymat2, line 140"); 
     31                        Assert.AreEqual( "1 3 2", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat2(new int[]{1,2,2,3})) , "in method LaskeEsiintymat2, line 141"); 
     32                } 
     33                [TestMethod()] 
     34                public  void testLaskeEsiintymat3192() 
     35                { 
     36                        int[] luvut = {1,2,3,34,34,2,1,34,1,1,1}; 
     37                        int[] tulos = LukujenEsiintymiskerrat.LaskeEsiintymat3(luvut); 
     38                        Assert.AreEqual( "3 2 34 1", String.Join(" ",tulos) , "in method LaskeEsiintymat3, line 195"); 
     39                        Assert.AreEqual( "", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat3(new int[]{})) , "in method LaskeEsiintymat3, line 196"); 
     40                        Assert.AreEqual( "1", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat3(new int[]{1})) , "in method LaskeEsiintymat3, line 197"); 
     41                        Assert.AreEqual( "1 2", String.Join(" ", LukujenEsiintymiskerrat.LaskeEsiintymat3(new int[]{1,2,2})) , "in method LaskeEsiintymat3, line 198"); 
    3242                } 
    3343        } 
Note: See TracChangeset for help on using the changeset viewer.