Click here to Skip to main content
15,919,931 members

Welcome to the Lounge

   

For discussing anything related to a software developer's life but is not for programming questions. Got a programming question?

The Lounge is rated Safe For Work. If you're about to post something inappropriate for a shared office environment, then don't post it. No ads, no abuse, and no programming questions. Trolling, (political, climate, religious or whatever) will result in your account being removed.

 
GeneralRe: Coding Challenge - Morris Sequence Pin
Member 1355268916-Dec-17 1:35
Member 1355268916-Dec-17 1:35 
GeneralRe: Coding Challenge - Morris Sequence Pin
Dave Kreskowiak16-Dec-17 4:46
mveDave Kreskowiak16-Dec-17 4:46 
GeneralRe: Coding Challenge - Morris Sequence Pin
PIEBALDconsult1-Dec-17 18:54
mvePIEBALDconsult1-Dec-17 18:54 
GeneralRe: Coding Challenge - Morris Sequence Pin
Kenneth Haugland1-Dec-17 20:48
mvaKenneth Haugland1-Dec-17 20:48 
GeneralRe: Coding Challenge - Morris Sequence Pin
Dave Kreskowiak2-Dec-17 5:16
mveDave Kreskowiak2-Dec-17 5:16 
GeneralRe: Coding Challenge - Morris Sequence Pin
Kenneth Haugland2-Dec-17 7:19
mvaKenneth Haugland2-Dec-17 7:19 
GeneralRe: Coding Challenge - Morris Sequence Pin
Dave Kreskowiak2-Dec-17 7:53
mveDave Kreskowiak2-Dec-17 7:53 
GeneralRe: Coding Challenge - Morris Sequence Pin
Kenneth Haugland2-Dec-17 17:29
mvaKenneth Haugland2-Dec-17 17:29 
They definitely store the booleans as bytes. I ran this:
string MorrisBitVector32(int S, int N)
      {
          //Need the mask for accessing the individual bits
          int[] _masks = new int[32];
          {
              _masks[0] = BitVector32.CreateMask();
          }
          for (int i = 1; i < 32; i++)
          {
              _masks[i] = BitVector32.CreateMask(_masks[i - 1]);
          }

          //Hopefully setes the path to the project folder
          string projectPath = System.IO.Path.GetFullPath(@"..\..\..\");


          using (BinaryWriter writer = new BinaryWriter(File.Open(projectPath + "input.txt", FileMode.Create)))
          {
              BitVector32 v = new BitVector32();
              // Standard 3 = 11, 2=10,1=01 and
              // 00 is not more numbers in this BitVector32
              v[_masks[0]] = S >= 2;
              v[_masks[1]] = S != 2;
              //Writes a 32bit integer to the file
              writer.Write(v.Data);
          }


          for (int i = 1; i < N; i++)
          {
              Debug.WriteLine(i + 1);

              using (BinaryReader reader = new BinaryReader(File.Open(projectPath + "input.txt", FileMode.Open)))
              {
                  // Initiates variables for each N run
                  bool currMSB, currLSB, firstRun;
                  firstRun = true;
                  currMSB = false;
                  currLSB = false;
                  int count = 0;
                  int k = 0;
                  BitVector32 outputBits = new BitVector32();

                  using (BinaryWriter writer = new BinaryWriter(File.Open(projectPath + "output.txt", FileMode.Create)))
                  {

                      while (reader.BaseStream.Position != reader.BaseStream.Length)
                      {
                          BitVector32 inputBits = new BitVector32(reader.ReadInt32());
                          if (firstRun)
                          {
                              count = 1;
                              currMSB = inputBits[_masks[0]];
                              currLSB = inputBits[_masks[1]];
                          }


                          bool nextMSB, nextLSB;
                          for (int j = (firstRun ? 2 : 0); j < 32; j += 2)
                          {
                              nextMSB = inputBits[_masks[j]];
                              nextLSB = inputBits[_masks[j + 1]];

                              // If both values are zero that means that there
                              // are no more values in the BitVector32
                              if (!(nextLSB || nextMSB))
                              {
                                  break;
                              }

                              // The values continue
                              if ((currMSB == nextMSB) && (currLSB == nextLSB))
                              {
                                  count++;
                              }

                              // New values found sore and perhaps write to file
                              else
                              {
                                  if (k == 32)
                                  {
                                      //BitVector32 is full, need to store and create a new one
                                      writer.Write(outputBits.Data);
                                      outputBits = new BitVector32();
                                      k = 0;

                                      outputBits[_masks[k]] = count >= 2;
                                      k++;
                                      outputBits[_masks[k]] = count != 2;
                                      k++;
                                      outputBits[_masks[k]] = currMSB;
                                      k++;
                                      outputBits[_masks[k]] = currLSB;
                                      k++;
                                      currMSB = nextMSB;
                                      currLSB = nextLSB;
                                      count = 1;
                                  }
                                  else
                                  {
                                      //More room left in the BitVector32
                                      outputBits[_masks[k]] = count >= 2;
                                      k++;
                                      outputBits[_masks[k]] = count != 2;
                                      k++;
                                      outputBits[_masks[k]] = currMSB;
                                      k++;
                                      outputBits[_masks[k]] = currLSB;
                                      k++;
                                      currMSB = nextMSB;
                                      currLSB = nextLSB;
                                      count = 1;
                                  }
                              }

                              // Used to initiate the current number
                              if (firstRun)
                                  firstRun = false;
                          }
                      }

                      //Write out the remaining data
                      if (k == 32)
                      {
                          writer.Write(outputBits.Data);
                          outputBits = new BitVector32();
                          k = 0;

                          outputBits[_masks[k]] = count >= 2;
                          k++;
                          outputBits[_masks[k]] = count != 2;
                          k++;
                          outputBits[_masks[k]] = currMSB;
                          k++;
                          outputBits[_masks[k]] = currLSB;
                          k++;
                          writer.Write(outputBits.Data);
                      }
                      else
                      {

                          outputBits[_masks[k]] = count >= 2;
                          k++;
                          outputBits[_masks[k]] = count != 2;
                          k++;
                          outputBits[_masks[k]] = currMSB;
                          k++;
                          outputBits[_masks[k]] = currLSB;
                          k++;
                          writer.Write(outputBits.Data);
                      }
                  }
              }

              // Exchange the input and output files
              File.Delete(projectPath + "input.txt");
              System.IO.File.Copy(projectPath + "output.txt", projectPath + "input.txt");
              System.IO.File.WriteAllText(projectPath + "output.txt", string.Empty);
          }


          StringBuilder output = new StringBuilder();
          using (BinaryReader reader = new BinaryReader(File.Open(projectPath + "input.txt", FileMode.Open)))
          {
              bool nextMSB, nextLSB;
              while (reader.BaseStream.Position != reader.BaseStream.Length)
              {
                  BitVector32 InputData = new BitVector32(reader.ReadInt32());
                  for (int i = 0; i < 32; i+=2)
                  {
                      nextMSB = InputData[_masks[i]];
                      nextLSB= InputData[_masks[i+1]];

                      if (!(nextLSB || nextMSB))
                          break;

                      if (nextMSB && nextLSB)
                          output.Append("3");
                      else
                      {
                          if (nextMSB)
                              output.Append("2");
                          else
                              output.Append("1");
                      }

                  }
              }
          }

          return output.ToString();
      }


Files are now very small, and it is reasonably fast.
GeneralRe: Coding Challenge - Morris Sequence Pin
Dan Sutton2-Dec-17 6:58
Dan Sutton2-Dec-17 6:58 
GeneralRe: Coding Challenge - Morris Sequence Pin
Dave Kreskowiak2-Dec-17 7:57
mveDave Kreskowiak2-Dec-17 7:57 
GeneralRe: Coding Challenge - Morris Sequence Pin
Member 131943022-Dec-17 11:06
Member 131943022-Dec-17 11:06 
GeneralRe: Coding Challenge - Morris Sequence Pin
Dave Kreskowiak4-Dec-17 4:17
mveDave Kreskowiak4-Dec-17 4:17 
GeneralRe: Coding Challenge - Morris Sequence Pin
Member 131943024-Dec-17 4:22
Member 131943024-Dec-17 4:22 
GeneralRe: Coding Challenge - Morris Sequence Pin
Dave Kreskowiak4-Dec-17 6:39
mveDave Kreskowiak4-Dec-17 6:39 
GeneralRe: Coding Challenge - Morris Sequence Pin
Member 131943024-Dec-17 6:51
Member 131943024-Dec-17 6:51 
GeneralRe: Coding Challenge - Morris Sequence Pin
Dave Kreskowiak4-Dec-17 11:25
mveDave Kreskowiak4-Dec-17 11:25 
GeneralRe: Coding Challenge - Morris Sequence Pin
Member 131943025-Dec-17 2:42
Member 131943025-Dec-17 2:42 
GeneralRe: Coding Challenge - Morris Sequence Pin
Dave Kreskowiak5-Dec-17 3:56
mveDave Kreskowiak5-Dec-17 3:56 
GeneralRe: Coding Challenge - Morris Sequence Pin
Dave Kreskowiak5-Dec-17 15:40
mveDave Kreskowiak5-Dec-17 15:40 
GeneralRe: Coding Challenge - Morris Sequence Pin
Member 131943026-Dec-17 3:13
Member 131943026-Dec-17 3:13 
GeneralRe: Coding Challenge - Morris Sequence Pin
Dave Kreskowiak6-Dec-17 4:57
mveDave Kreskowiak6-Dec-17 4:57 
GeneralRe: Coding Challenge - Morris Sequence Pin
Member 131943027-Dec-17 4:22
Member 131943027-Dec-17 4:22 
GeneralRe: Coding Challenge - Morris Sequence Pin
PIEBALDconsult2-Dec-17 12:38
mvePIEBALDconsult2-Dec-17 12:38 
GeneralRe: Coding Challenge - Morris Sequence Pin
Tony Riddiough3-Dec-17 10:57
Tony Riddiough3-Dec-17 10:57 
GeneralRe: Coding Challenge - Morris Sequence Pin
PIEBALDconsult3-Dec-17 12:32
mvePIEBALDconsult3-Dec-17 12:32 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.