Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.21 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace T5
  7. {
  8.     public class Naapurit
  9.     {
  10.         public static void Main(string[] args)
  11.         {
  12.         }
  13.  
  14.         /// <summary>
  15.         /// Aliohjelma palauttaa kokonaislukuna 2D-totuusarvotaulukon annetun alkion
  16.         /// "naapureiden" määrän, eli niiden true-alkioiden määrän jotka
  17.         /// ovat enintään 1 rivin ja 1 sarakkeen päässä.
  18.         /// Esim matriisin
  19.         ///  [ 1 1 1 ]
  20.         ///  [ 0 1 0 ]
  21.         ///  [ 1 0 0 ]
  22.         /// alkiolla (0,0) on 2 naapuria,
  23.         ///          (1,1) on 4 naapuria,
  24.         ///          (2,0) on 1 naapuri,
  25.         ///          (2,2) on 1 naapuri.
  26.         /// (Tässä: 1 == true, 0 == false)
  27.         /// </summary>
  28.         /// <param name="taulukko">Tutkittava taulukko.</param>
  29.         /// <param name="r">Tutkittavan alkion rivi-indeksi.</param>
  30.         /// <param name="s">Tutkittavan alkion sarakeindeksi.</param>
  31.         /// <returns>Viereisten true-alkioiden määrä.</returns>
  32.         /// @example
  33.         /// <pre name="test">
  34.         /// bool[,] t = {{true,true,true}, {false,true,false}, {true,false,false}};
  35.         /// Naapurit.MontakoNaapuria(t, 0, 0) === 2;
  36.         /// Naapurit.MontakoNaapuria(t, 1, 1) === 4;
  37.         /// Naapurit.MontakoNaapuria(t, 2, 0) === 1;
  38.         /// Naapurit.MontakoNaapuria(t, 2, 2) === 1;
  39.         /// bool[,] t2 = {{true}};
  40.         /// Naapurit.MontakoNaapuria(t2, 0, 0) === 0;
  41.         /// </pre>
  42.         /// @endexample
  43.         public static int MontakoNaapuria(bool[,] taulukko, int r, int s)
  44.         {
  45.             int naapureita = 0;
  46.             int riviMin = Math.Max(0, r - 1);
  47.             int riviMax = Math.Min(taulukko.GetLength(0) - 1, r + 1);
  48.             int sarakeMin = Math.Max(0, s - 1);
  49.             int sarakeMax = Math.Min(taulukko.GetLength(1) - 1, s + 1);
  50.  
  51.             for (int iy = riviMin; iy <= riviMax; iy++)
  52.             {
  53.                 for (int ix = sarakeMin; ix <= sarakeMax; ix++)
  54.                 {
  55.                     if (taulukko[iy, ix]) naapureita++;
  56.                 }
  57.             }
  58.             if (taulukko[r, s]) naapureita--;
  59.  
  60.             return naapureita;
  61.         }
  62.         /// <summary>
  63.         /// Aliohjelma palauttaa kokonaislukuna 2D-totuusarvotaulukon annetun alkion
  64.         /// "naapureiden" määrän, eli niiden true-alkioiden määrän jotka
  65.         /// ovat enintään 1 rivin ja 1 sarakkeen päässä.
  66.         /// Esim matriisin
  67.         ///  [ 1 1 1 ]
  68.         ///  [ 0 1 0 ]
  69.         ///  [ 1 0 0 ]
  70.         /// alkiolla (0,0) on 2 naapuria,
  71.         ///          (1,1) on 4 naapuria,
  72.         ///          (2,0) on 1 naapuri,
  73.         ///          (2,2) on 1 naapuri.
  74.         /// (Tässä: 1 == true, 0 == false)
  75.         /// </summary>
  76.         /// <param name="taulukko">Tutkittava taulukko.</param>
  77.         /// <param name="r">Tutkittavan alkion rivi-indeksi.</param>
  78.         /// <param name="s">Tutkittavan alkion sarakeindeksi.</param>
  79.         /// <returns>Viereisten true-alkioiden määrä.</returns>
  80.         /// @example
  81.         /// <pre name="test">
  82.         /// bool[,] t = {{true,true,true}, {false,true,false}, {true,false,false}};
  83.         /// Naapurit.MontakoNaapurii(t, 0, 0) === 2;
  84.         /// Naapurit.MontakoNaapurii(t, 1, 1) === 4;
  85.         /// Naapurit.MontakoNaapurii(t, 2, 0) === 1;
  86.         /// Naapurit.MontakoNaapurii(t, 2, 2) === 1;
  87.         /// bool[,] t2 = {{true}};
  88.         /// Naapurit.MontakoNaapurii(t2, 0, 0) === 0;
  89.         /// </pre>
  90.         /// @endexample
  91.         public static int MontakoNaapurii(bool[,] taulukko, int r, int s)
  92.         {
  93.             int naapureita = 0;
  94.             for (int i = r - 1; i <= r + 1; i++)
  95.             {
  96.                 if (i < 0 || i >= taulukko.GetLength(0)) continue;
  97.                 for (int j = s - 1; j <= s + 1; j++)
  98.                 {
  99.                     if (j < 0 || j >= taulukko.GetLength(1) || (r == i & s == j)) continue;
  100.                     if (taulukko[i, j]) naapureita++;
  101.                 }
  102.             }
  103.  
  104.             return naapureita;
  105.         }
  106.  
  107.         /// <summary>
  108.         /// Aliohjelma palauttaa kokonaislukuna 2D-totuusarvotaulukon annetun alkion
  109.         /// "naapureiden" määrän, eli niiden true-alkioiden määrän jotka
  110.         /// ovat enintään 1 rivin ja 1 sarakkeen päässä.
  111.         /// Esim matriisin
  112.         ///  [ 1 1 1 ]
  113.         ///  [ 0 1 0 ]
  114.         ///  [ 1 0 0 ]
  115.         /// alkiolla (0,0) on 2 naapuria,
  116.         ///          (1,1) on 4 naapuria,
  117.         ///          (2,0) on 1 naapuri,
  118.         ///          (2,2) on 1 naapuri.
  119.         /// (Tässä: 1 == true, 0 == false)
  120.         /// </summary>
  121.         /// <param name="taulukko">Tutkittava taulukko.</param>
  122.         /// <param name="r">Tutkittavan alkion rivi-indeksi.</param>
  123.         /// <param name="s">Tutkittavan alkion sarakeindeksi.</param>
  124.         /// <returns>Viereisten true-alkioiden määrä.</returns>
  125.         /// @example
  126.         /// <pre name="test">
  127.         /// bool[,] t = {{true,true,true}, {false,true,false}, {true,false,false}};
  128.         /// Naapurit.MontakoNaapuriii(t, 0, 0) === 2;
  129.         /// Naapurit.MontakoNaapuriii(t, 1, 1) === 4;
  130.         /// Naapurit.MontakoNaapuriii(t, 2, 0) === 1;
  131.         /// Naapurit.MontakoNaapuriii(t, 2, 2) === 1;
  132.         /// bool[,] t2 = {{true}};
  133.         /// Naapurit.MontakoNaapuriii(t2, 0, 0) === 0;
  134.         /// </pre>
  135.         /// @endexample
  136.         public static int MontakoNaapuriii(bool[,] taulukko, int r, int s)
  137.         {
  138.             int naapureita = 0;
  139.  
  140.             // Mitkä rivit ovat olemassa
  141.             bool vasen = s > 0;
  142.             bool oikea = s < taulukko.GetLength(1) - 1;
  143.             bool yla = r > 0;
  144.             bool ala = r < taulukko.GetLength(0) - 1;
  145.             bool[] ehdot = new bool[] {
  146.                 yla && vasen && taulukko[r - 1, s - 1],
  147.                 yla && taulukko[r - 1, s],
  148.                 yla && oikea && taulukko[r - 1, s + 1],
  149.                 vasen && taulukko[r, s - 1],
  150.                 oikea && taulukko[r, s + 1],
  151.                 ala && vasen && taulukko[r + 1, s - 1],
  152.                 ala && taulukko[r + 1, s],
  153.                 ala && oikea && taulukko[r + 1, s + 1]
  154.             };
  155.  
  156.             foreach (bool ehto in ehdot)
  157.             {
  158.                 if (ehto) naapureita++;
  159.             }
  160.  
  161.             return naapureita;
  162.         }
  163.  
  164.     }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement