From 3a71df807c8ae55a3ea45e06ebeb7eb64b44ad40 Mon Sep 17 00:00:00 2001
From: vesal <vesal@jyu.fi>
Date: Sun, 19 Nov 2023 23:08:14 +0200
Subject: [PATCH] live22

---
 luennot/live21/Siirra/Siirra.cs               | 51 +++++++++++-
 luennot/live21/SiirraTest/SiirraTest.cs       | 77 +++++++++++++++++++
 luennot/live21/SiirraTest/SiirraTest.csproj   | 15 ++++
 luennot/live21/live21.sln                     | 27 ++++---
 luennot/live21/live21.sln.ctbackup            | 16 ++++
 .../.idea/.idea.luento22/.idea/.gitignore     | 13 ++++
 .../.idea/.idea.luento22/.idea/encodings.xml  |  4 +
 .../.idea.luento22/.idea/indexLayout.xml      |  8 ++
 .../.idea/.idea.luento22/.idea/vcs.xml        |  6 ++
 9 files changed, 204 insertions(+), 13 deletions(-)
 create mode 100644 luennot/live21/SiirraTest/SiirraTest.cs
 create mode 100644 luennot/live21/SiirraTest/SiirraTest.csproj
 create mode 100644 luennot/live21/live21.sln.ctbackup
 create mode 100644 luennot/luento22/.idea/.idea.luento22/.idea/.gitignore
 create mode 100644 luennot/luento22/.idea/.idea.luento22/.idea/encodings.xml
 create mode 100644 luennot/luento22/.idea/.idea.luento22/.idea/indexLayout.xml
 create mode 100644 luennot/luento22/.idea/.idea.luento22/.idea/vcs.xml

diff --git a/luennot/live21/Siirra/Siirra.cs b/luennot/live21/Siirra/Siirra.cs
index 8f784d8..27a9505 100644
--- a/luennot/live21/Siirra/Siirra.cs
+++ b/luennot/live21/Siirra/Siirra.cs
@@ -1,7 +1,7 @@
 using System;
 using System.Text;
 /// @author  Vesa Lappalainen
-/// @version 15.11.2021
+/// @version 15.11.2023
 /// <summary>
 ///  Lasketaan vokaaleja
 /// </summary>
@@ -13,14 +13,59 @@ public class Siirra
     /// </summary>
     public static void Main()
     {
-        string jono = "Mieleni minun tekevi, aivoni ajattelevi";
+        StringBuilder jono = new StringBuilder("Mieleni minun tekevi, aivoni ajattelevi");
         string vokaalit = "aeiouyåäö";
         int maara = 3;
 
-        string jonon3EnsimmaistaVokaalia = ""; // SiirraKirjaimet(jono,vokaalit,maara);
+        string jonon3EnsimmaistaVokaalia = SiirraKirjaimet(jono,vokaalit,maara);
 
         Console.WriteLine("Jono:  " + jono); // Mlni minun tekevi, aivoni ajattelevi
         Console.WriteLine("3 vok: " + jonon3EnsimmaistaVokaalia); // iee
     }
+    
+    /// <summary>
+    /// Poistetaan jonosta korkeintaan maxMaara kappaletta
+    /// joukon siirrettavat kirjaimia.
+    /// </summary>
+    /// <param name="jono">mistä poistetaan</param>         
+    /// <param name="siirrettavat">mitä kirjaimia poistetaan</param> 
+    /// <param name="maxMaara">montako korkeintaan poistetaan</param> 
+    /// <returns>siirretyt merkit</returns>
+    /// <example>
+    /// <pre name="test">
+    ///   StringBuilder jono = new StringBuilder("kissa istuu");
+    ///   SiirraKirjaimet(jono,"",1)    === "";    jono =S= "kissa istuu";
+    ///   SiirraKirjaimet(jono,"xyz",1) === "";    jono =S= "kissa istuu";
+    ///   SiirraKirjaimet(jono,"aus",0) === "";    jono =S= "kissa istuu";
+    ///   SiirraKirjaimet(jono,"i",1)   === "i";   jono =S= "kssa istuu";
+    ///   SiirraKirjaimet(jono,"s",2)   === "ss";  jono =S= "ka istuu";
+    ///   SiirraKirjaimet(jono,"aus",3) === "asu"; jono =S= "k itu";
+    ///   SiirraKirjaimet(jono,"iu",3)  === "iu";  jono =S= "k t";
+    ///   SiirraKirjaimet(jono," ",1)   === " ";   jono =S= "kt";
+    ///   SiirraKirjaimet(jono,"kt",5)  === "kt";  jono =S= "";
+    ///   SiirraKirjaimet(jono,"kt",5)  === "";    jono =S= "";
+    /// </pre>
+    /// </example>
+    public static string SiirraKirjaimet(StringBuilder jono ,string siirrettavat ,int maxMaara)
+    {
+        // otetaan seuraava jonon kirjain 
+        // ja jos se on siirrettavat joukossa, 
+        // niin poistetaan kirjain jonosta
+        StringBuilder tulos = new StringBuilder();
+
+        int i = 0;
+        while ( i < jono.Length && tulos.Length < maxMaara )
+        {
+            char merkki = jono[i];
+            if (siirrettavat.IndexOf(merkki) >= 0)
+            {
+                jono.Remove(i, 1);
+                tulos.Append(merkki);
+            }
+            else i++;
+        }
+        return tulos.ToString(); // 
+    }
+
 }
 // BYCODEEND
\ No newline at end of file
diff --git a/luennot/live21/SiirraTest/SiirraTest.cs b/luennot/live21/SiirraTest/SiirraTest.cs
new file mode 100644
index 0000000..7bda7ba
--- /dev/null
+++ b/luennot/live21/SiirraTest/SiirraTest.cs
@@ -0,0 +1,77 @@
+// ReSharper disable all
+using System;
+using System.Text;
+using NUnit.Framework;
+using static Siirra;
+
+	[TestFixture]
+	[DefaultFloatingPointTolerance(0.000001)]
+	public  class TestSiirra
+	{
+		[Test]
+		public  void TestSiirraKirjaimet35()
+		{
+			StringBuilder jono = new StringBuilder("kissa istuu");
+			Assert.AreEqual( "", SiirraKirjaimet(jono,"",1)    , "in method SiirraKirjaimet, line 37");;
+			;
+			;
+			;
+			;
+			Assert.AreEqual(( "kissa istuu").ToString(), (    jono ).ToString(), "in method SiirraKirjaimet, line 37");
+			Assert.AreEqual( "", SiirraKirjaimet(jono,"xyz",1) , "in method SiirraKirjaimet, line 38");;
+			;
+			;
+			;
+			;
+			Assert.AreEqual(( "kissa istuu").ToString(), (    jono ).ToString(), "in method SiirraKirjaimet, line 38");
+			Assert.AreEqual( "", SiirraKirjaimet(jono,"aus",0) , "in method SiirraKirjaimet, line 39");;
+			;
+			;
+			;
+			;
+			Assert.AreEqual(( "kissa istuu").ToString(), (    jono ).ToString(), "in method SiirraKirjaimet, line 39");
+			Assert.AreEqual( "i", SiirraKirjaimet(jono,"i",1)   , "in method SiirraKirjaimet, line 40");;
+			;
+			;
+			;
+			;
+			Assert.AreEqual(( "kssa istuu").ToString(), (   jono ).ToString(), "in method SiirraKirjaimet, line 40");
+			Assert.AreEqual( "ss", SiirraKirjaimet(jono,"s",2)   , "in method SiirraKirjaimet, line 41");;
+			;
+			;
+			;
+			;
+			Assert.AreEqual(( "ka istuu").ToString(), (  jono ).ToString(), "in method SiirraKirjaimet, line 41");
+			Assert.AreEqual( "asu", SiirraKirjaimet(jono,"aus",3) , "in method SiirraKirjaimet, line 42");;
+			;
+			;
+			;
+			;
+			Assert.AreEqual(( "k itu").ToString(), ( jono ).ToString(), "in method SiirraKirjaimet, line 42");
+			Assert.AreEqual( "iu", SiirraKirjaimet(jono,"iu",3)  , "in method SiirraKirjaimet, line 43");;
+			;
+			;
+			;
+			;
+			Assert.AreEqual(( "k t").ToString(), (  jono ).ToString(), "in method SiirraKirjaimet, line 43");
+			Assert.AreEqual( " ", SiirraKirjaimet(jono," ",1)   , "in method SiirraKirjaimet, line 44");;
+			;
+			;
+			;
+			;
+			Assert.AreEqual(( "kt").ToString(), (   jono ).ToString(), "in method SiirraKirjaimet, line 44");
+			Assert.AreEqual( "kt", SiirraKirjaimet(jono,"kt",5)  , "in method SiirraKirjaimet, line 45");;
+			;
+			;
+			;
+			;
+			Assert.AreEqual(( "").ToString(), (  jono ).ToString(), "in method SiirraKirjaimet, line 45");
+			Assert.AreEqual( "", SiirraKirjaimet(jono,"kt",5)  , "in method SiirraKirjaimet, line 46");;
+			;
+			;
+			;
+			;
+			Assert.AreEqual(( "").ToString(), (    jono ).ToString(), "in method SiirraKirjaimet, line 46");
+		}
+	}
+
diff --git a/luennot/live21/SiirraTest/SiirraTest.csproj b/luennot/live21/SiirraTest/SiirraTest.csproj
new file mode 100644
index 0000000..abd2b08
--- /dev/null
+++ b/luennot/live21/SiirraTest/SiirraTest.csproj
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Project Sdk="Microsoft.NET.Sdk">
+    <PropertyGroup>
+        <TargetFramework>net7.0</TargetFramework>
+        <IsPackable>false</IsPackable>
+    </PropertyGroup>
+    <ItemGroup>
+        <PackageReference Include="NUnit" Version="3.13.1"/>
+        <PackageReference Include="NUnit3TestAdapter" Version="3.17.0"/>
+        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3"/>
+    </ItemGroup>
+    <ItemGroup>
+        <ProjectReference Include="..\Siirra\Siirra.csproj"/>
+    </ItemGroup>
+</Project>
diff --git a/luennot/live21/live21.sln b/luennot/live21/live21.sln
index 7867a02..00f9cfc 100644
--- a/luennot/live21/live21.sln
+++ b/luennot/live21/live21.sln
@@ -1,16 +1,23 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
+
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Siirra", "Siirra\Siirra.csproj", "{D4C76668-83E0-4E3D-BA48-B3D4113B5430}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SiirraTest", "SiirraTest\SiirraTest.csproj", "{AE9841AA-2C4B-463F-8FB8-2D23211B663D}"
+EndProject
 Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Release|Any CPU.Build.0 = Release|Any CPU
-	EndGlobalSection
+  GlobalSection(SolutionConfigurationPlatforms) = preSolution
+    Debug|Any CPU = Debug|Any CPU
+    Release|Any CPU = Release|Any CPU
+  EndGlobalSection
+  GlobalSection(ProjectConfigurationPlatforms) = postSolution
+    {D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+    {D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Debug|Any CPU.Build.0 = Debug|Any CPU
+    {D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Release|Any CPU.ActiveCfg = Release|Any CPU
+    {D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Release|Any CPU.Build.0 = Release|Any CPU
+    {AE9841AA-2C4B-463F-8FB8-2D23211B663D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+    {AE9841AA-2C4B-463F-8FB8-2D23211B663D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+    {AE9841AA-2C4B-463F-8FB8-2D23211B663D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+    {AE9841AA-2C4B-463F-8FB8-2D23211B663D}.Release|Any CPU.Build.0 = Release|Any CPU
+  EndGlobalSection
 EndGlobal
diff --git a/luennot/live21/live21.sln.ctbackup b/luennot/live21/live21.sln.ctbackup
new file mode 100644
index 0000000..7867a02
--- /dev/null
+++ b/luennot/live21/live21.sln.ctbackup
@@ -0,0 +1,16 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Siirra", "Siirra\Siirra.csproj", "{D4C76668-83E0-4E3D-BA48-B3D4113B5430}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D4C76668-83E0-4E3D-BA48-B3D4113B5430}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+EndGlobal
diff --git a/luennot/luento22/.idea/.idea.luento22/.idea/.gitignore b/luennot/luento22/.idea/.idea.luento22/.idea/.gitignore
new file mode 100644
index 0000000..87c6490
--- /dev/null
+++ b/luennot/luento22/.idea/.idea.luento22/.idea/.gitignore
@@ -0,0 +1,13 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/contentModel.xml
+/projectSettingsUpdater.xml
+/.idea.luento22.iml
+/modules.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/luennot/luento22/.idea/.idea.luento22/.idea/encodings.xml b/luennot/luento22/.idea/.idea.luento22/.idea/encodings.xml
new file mode 100644
index 0000000..df87cf9
--- /dev/null
+++ b/luennot/luento22/.idea/.idea.luento22/.idea/encodings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
+</project>
\ No newline at end of file
diff --git a/luennot/luento22/.idea/.idea.luento22/.idea/indexLayout.xml b/luennot/luento22/.idea/.idea.luento22/.idea/indexLayout.xml
new file mode 100644
index 0000000..7b08163
--- /dev/null
+++ b/luennot/luento22/.idea/.idea.luento22/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="UserContentModel">
+    <attachedFolders />
+    <explicitIncludes />
+    <explicitExcludes />
+  </component>
+</project>
\ No newline at end of file
diff --git a/luennot/luento22/.idea/.idea.luento22/.idea/vcs.xml b/luennot/luento22/.idea/.idea.luento22/.idea/vcs.xml
new file mode 100644
index 0000000..b2bdec2
--- /dev/null
+++ b/luennot/luento22/.idea/.idea.luento22/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
-- 
GitLab