Advertisement
vencinachev

FSM

Apr 7th, 2021
590
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.63 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace FSM
  8. {
  9.     class Program
  10.     {
  11.         enum State
  12.         {
  13.             EMPTY, N, NA, NAN, NANO
  14.         }
  15.  
  16.         static bool ContainsNano(string text)
  17.         {
  18.             State state = State.EMPTY;
  19.             foreach (var sym in text)
  20.             {
  21.                 switch (state)
  22.                 {
  23.                     case State.EMPTY:
  24.                         if (sym == 'n')
  25.                         {
  26.                             state = State.N;
  27.                         }
  28.                         break;
  29.                     case State.N:
  30.                         if (sym == 'a')
  31.                         {
  32.                             state = State.NA;
  33.                         }
  34.                         else if (sym == 'n')
  35.                         {
  36.                             // same state
  37.                         }
  38.                         else
  39.                         {
  40.                             state = State.EMPTY;
  41.                         }
  42.                         break;
  43.                     case State.NA:
  44.                         if (sym == 'n')
  45.                         {
  46.                             state = State.NAN;
  47.                         }
  48.                         else
  49.                         {
  50.                             state = State.EMPTY;
  51.                         }
  52.                         break;
  53.                     case State.NAN:
  54.                         if (sym == 'n')
  55.                         {
  56.                             state = State.N;
  57.                         }
  58.                         else if (sym == 'o')
  59.                         {
  60.                             return true;
  61.                            // state = State.NANO;
  62.                         }
  63.                         else if (sym == 'a')
  64.                         {
  65.                             state = State.NA;
  66.                         }
  67.                         else
  68.                         {
  69.                             state = State.EMPTY;
  70.                         }
  71.                         break;
  72.                 }
  73.             }
  74.             return false;
  75.         }
  76.  
  77.         static int CountNano(string text)
  78.         {
  79.             int cnt = 0;
  80.             State state = State.EMPTY;
  81.             foreach (var sym in text)
  82.             {
  83.                 switch (state)
  84.                 {
  85.                     case State.EMPTY:
  86.                         if (sym == 'n')
  87.                         {
  88.                             state = State.N;
  89.                         }
  90.                         break;
  91.                     case State.N:
  92.                         if (sym == 'a')
  93.                         {
  94.                             state = State.NA;
  95.                         }
  96.                         else if (sym == 'n')
  97.                         {
  98.                             // same state
  99.                         }
  100.                         else
  101.                         {
  102.                             state = State.EMPTY;
  103.                         }
  104.                         break;
  105.                     case State.NA:
  106.                         if (sym == 'n')
  107.                         {
  108.                             state = State.NAN;
  109.                         }
  110.                         else
  111.                         {
  112.                             state = State.EMPTY;
  113.                         }
  114.                         break;
  115.                     case State.NAN:
  116.                         if (sym == 'n')
  117.                         {
  118.                             state = State.N;
  119.                         }
  120.                         else if (sym == 'o')
  121.                         {
  122.                             cnt++;
  123.                             state = State.NANO;
  124.                         }
  125.                         else if (sym == 'a')
  126.                         {
  127.                             state = State.NA;
  128.                         }
  129.                         else
  130.                         {
  131.                             state = State.EMPTY;
  132.                         }
  133.                         break;
  134.                     case State.NANO:
  135.                         if (sym == 'n')
  136.                         {
  137.                             state = State.N;
  138.                         }
  139.                         else
  140.                         {
  141.                            state = State.EMPTY;
  142.                         }
  143.                         break;
  144.                 }
  145.             }
  146.             return cnt;
  147.         }
  148.         static void Main(string[] args)
  149.         {
  150.             Console.WriteLine(CountNano("nanonanonano"));
  151.         }
  152.     }
  153. }
  154.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement