using System;
using System.Collections.Generic;
using System.Linq;

/*You are running a classroom and suspect that some of your students are passing around the answers to multiple choice questions disguised as random strings.

Your task is to write a function that, given a list of words and a string, finds and returns the word in the list that is scrambled up inside the string, if any exists. There will be at most one matching word. The letters don't need to be in order or next to each other. The letters cannot be reused.

Example:
words = ['cat', 'baby', 'dog', 'bird', 'car', 'ax']
string1 = 'tcabnihjs'
find_embedded_word(words, string1) -> cat (the letters do not have to be in order)

string2 = 'tbcanihjs'
find_embedded_word(words, string2) -> cat (the letters do not have to be together)

string3 = 'baykkjl'
find_embedded_word(words, string3) -> None / null (the letters cannot be reused)

string4 = 'bbabylkkj'
find_embedded_word(words, string4) -> baby

string5 = 'ccc'
find_embedded_word(words, string5) -> None / null

string6 = 'breadmaking'
find_embedded_word(words, string6) -> bird

Complexity analysis variables:

W = number of words in `words`
S = maximal length of each word or string*/

class Solution {
    static void Main(String[] args) {

      string[] words = new string[] { "cat", "baby", "dog","bird", "car", "ax"};
      string string1 = "ucayypoinrb";
      string string2 = "tbcanihjs";
      string string3 = "bbityydrj";
      string string4 = "bbirdyaxrlikkj";
      string string5 = "llkjnhyodugutd";
      string string6 = "breadmaking";

      Console.WriteLine("FIRST string returns " + ScanWords(words, string1));
      Console.WriteLine("Second string returns " + ScanWords(words, string2));
      Console.WriteLine("Third string returns " + ScanWords(words, string3));
      Console.WriteLine("Fourth string returns " + ScanWords(words, string4));
      Console.WriteLine("Fifth string returns  " + ScanWords(words, string5));
      Console.WriteLine("Sixth string returns  " + ScanWords(words, string6));
    }


  
 static string RemoveInputCharFromScrambledInput(char inputChar, string scrambledInput)
{
//Console.WriteLine(scrambledInput + " has  " + inputChar.ToString());
  char[] chars= scrambledInput.ToCharArray();
  int index = Array.IndexOf(chars, inputChar);
  //Console.WriteLine("indes is " +index.ToString());
 List<char> rem =  chars.ToList();
 //rem.Remove(inputChar);
 rem.RemoveAt(index);  rem.ToArray();
  //Console.WriteLine(rem.ToArray()  +"  " + Convert.ToString(rem.ToArray()));
  //Console.WriteLine(scrambledInput.ToList().Remove(inputChar).ToString());
 //return scrambledInput.ToList().Remove(inputChar).ToString();
 return new string(rem.ToArray());

 

}

 static bool CheckForCharInScrmbledInput( char inputChar, string scrambledInput)
{

  if(scrambledInput.ToCharArray().Contains(inputChar))
{
return true;

}
  else
  return false;
}
    

     static  string ScanWords( string[] words, string scrambledInput)
      {
        
        foreach (var word in words)
        { int  inputStringCount = scrambledInput.ToCharArray().Count(); 
          string inputjambledword = scrambledInput;
          int loopCount=0;
          foreach(char inputChar in word)
         {   // scrambled input string has this char
         
          inputjambledword = scrambledInput;
          if(CheckForCharInScrmbledInput(inputChar,inputjambledword))
          {
         //remove the  input char from the scrambedInput
          inputjambledword = RemoveInputCharFromScrambledInput( inputChar, inputjambledword);
           loopCount++;
          }
          else break;
    //if yes remove the char from both word and the scrambled input
         }
        // int postOperationCount = scrambledInput.ToCharArray().Count();
       //if (word.ToCharArray().Count() == inputStringCount- postOperationCount)
       
       if (loopCount== word.ToCharArray().Count())
       return word; 
       
        }
       // Check the count of 
       return string.Empty;
     
        }


         
}


    
    

 

C Sharp Online Compiler

Write, Run & Share C# code online using OneCompiler's C# online compiler for free. It's one of the robust, feature-rich online compilers for C# language, running on the latest version 8.0. Getting started with the OneCompiler's C# compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C# and start coding.

Read inputs from stdin

OneCompiler's C# online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.

using System;
 
namespace Sample
{
  class Test
    {
      public static void Main(string[] args)
       {
         string name;
         name = Console.ReadLine();
         Console.WriteLine("Hello {0} ", name);
	}
     }
}

About C Sharp

C# is a general purpose object-oriented programming language by Microsoft. Though initially it was developed as part of .net but later it was approved by ECMA and ISO standards.

You can use C# to create variety of applications, like web, windows, mobile, console applications and much more using Visual studio.

Syntax help

Data types

Data TypeDescriptionRangesize
intTo store integers-2,147,483,648 to 2,147,483,6474 bytes
doubleto store large floating point numbers with decimalscan store 15 decimal digits8 bytes
floatto store floating point numbers with decimalscan store upto 7 decimal digits4 bytes
charto store single characters-2 bytes
stringto stores text-2 bytes per character
boolto stores either true or false-1 bit

Variables

Syntax

datatype variable-name = value;

Loops

1. If-Else:

When ever you want to perform a set of operations based on a condition or set of few conditions IF-ELSE is used.

if(conditional-expression) {
   // code
} 
else {
   // code
}

You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.

2. Switch:

Switch is an alternative to If-Else-If ladder.

switch(conditional-expression) {    
case value1:    
 // code    
 break;  // optional  
case value2:    
 // code    
 break;  // optional  
...    
    
default:     
 // code to be executed when all the above cases are not matched;    
} 

3. For:

For loop is used to iterate a set of statements based on a condition.

for(Initialization; Condition; Increment/decrement) {
  // code  
} 

4. While:

While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.

while(condition) {
 // code 
}

5. Do-While:

Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.

do {
  // code 
} while (condition);

Arrays

Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.

Syntax

data-type[] array-name;

Methods

Method is a set of statements which gets executed only when they are called. Call the method name in the main function to execute the method.

Syntax

static void method-name() 
{
  // code to be executed
}