Move History

Fork Selected
  • Strings
    Data Types
    Fundamentals
    Basic Language Features
    Algorithms
    Logic
    Description

    Many wasted division operations, but this looks elegant.

    Code
    public class Replacer
    {
      public static string sValueReplacer(string source, int new_text, char old_char)
      {
        char[] intermediate = source.ToCharArray();
        for (int i = intermediate.Length - 1; i >= 0; --i)
        {
          if (intermediate[i] == old_char) 
          {
            intermediate[i] = (char) (0x30 | new_text % 10);
            new_text /= 10;
          }
        }
        return new string(intermediate);
      }
    }
    Test Cases
    namespace Solution {
      using NUnit.Framework;
      using System;
    
      // TODO: Replace examples and use TDD by writing your own tests
    
      [TestFixture]
      public class SolutionTest
      {
        [Test]
        public void MyTest()
        {
          Assert.AreEqual("0000008100596710003=1811", Replacer.sValueReplacer("0000##81#059671####=1811", 3, '#'));
          Assert.AreEqual("9182 7391238 910003", Replacer.sValueReplacer("9182 7391238 91$$$$", 3, '$'));
          Assert.AreEqual("The counter is 011", Replacer.sValueReplacer("The counter is ---", 11, '-'));
        }
      }
    }
    
  • Code
    • using System;
    • using System.Linq;
    • using System.Collections.Generic;
    • public class Test{
    • static void Main(){
    • Console.WriteLine(Replacer.sValueReplacer("0000##81#059671####=1811", 3, '#'));
    • }
    • }
    • public class Replacer{
    • public static string sValueReplacer(string source, int index, char char_to_replace)
    • {
    • string res = source;
    • try
    • {
    • if (!string.IsNullOrEmpty(char_to_replace.ToString()))
    • {
    • if (res.Contains(char_to_replace.ToString()))
    • {
    • // Get ALL Indexes position of character
    • var Indexes = GetIndexes(res, char_to_replace.ToString());
    • int max = GetMaxValue(Indexes.Count);
    • while (index >= max)
    • {
    • index -= max;
    • }
    • var new_value = index.ToString().PadLeft(Indexes.Count, '0');
    • for (int i = 0; i < Indexes.Count; i++)
    • {
    • res = res.Remove(Indexes[i], 1).Insert(Indexes[i], new_value[i].ToString());
    • }
    • }
    • }
    • }
    • catch (Exception)
    • {
    • res = source;
    • }
    • return res;
    • }
    • private static List<int> GetIndexes(string mainString, string toFind)
    • public class Replacer
    • {
    • public static string sValueReplacer(string source, int new_text, char old_char)
    • {
    • var Indexes = new List<int>();
    • for (int i = mainString.IndexOf(toFind); i > -1; i = mainString.IndexOf(toFind, i + 1))
    • char[] intermediate = source.ToCharArray();
    • for (int i = intermediate.Length - 1; i >= 0; --i)
    • {
    • // for loop end when i=-1 (line.counter not found)
    • Indexes.Add(i);
    • }
    • return Indexes;
    • }
    • private static int GetMaxValue(int numIndexes)
    • {
    • int max = 0;
    • for (int i = 0; i < numIndexes; i++)
    • if (intermediate[i] == old_char)
    • {
    • if (i == 0)
    • max = 9;
    • else
    • max = max * 10 + 9;
    • intermediate[i] = (char) (0x30 | new_text % 10);
    • new_text /= 10;
    • }
    • return max;
    • }
    • return new string(intermediate);
    • }
    • }
    Test Cases
    • namespace Solution {
    • using NUnit.Framework;
    • using System;
    • // TODO: Replace examples and use TDD by writing your own tests
    • [TestFixture]
    • public class SolutionTest
    • {
    • [Test]
    • public void MyTest()
    • {
    • Assert.AreEqual("0000008100596710003=1811", Replacer.sValueReplacer("0000##81#059671####=1811", 3, '#'));
    • Assert.AreEqual("9182 7391238 910003", Replacer.sValueReplacer("9182 7391238 91$$$$", 3, '$'));
    • Assert.AreEqual("The counter is 011", Replacer.sValueReplacer("The counter is ---", 11, '-'));
    • }
    • }
    • }