object PartOne(string input) { var painted = new HashSet <Point>(); var sif = new Sif(); var direction = Direction.Up; var location = new Point(0, 0); var vm = new IntCode(input); while (vm.State != ProgramState.Finished) { var currentColor = sif.GetColor(location); currentColor = currentColor == Sif.Color.Transparent ? Sif.Color.Black : currentColor; vm.ProvideInput((long)currentColor); vm.RunToNextInputOrFinished(); // Get the output (if any) if (vm.HasOutput) { var color = (Sif.Color)vm.ReadOutput(); sif.SetColor(location, color); painted.Add(location); var turn = vm.ReadOutput(); if (turn == 0) { // Turn left direction = (Direction)(((int)direction - 1 + 4) % 4); } else { // Turn right direction = (Direction)(((int)direction + 1) % 4); } switch (direction) { case Direction.Up: location = new Point(location.X, location.Y - 1); break; case Direction.Right: location = new Point(location.X + 1, location.Y); break; case Direction.Down: location = new Point(location.X, location.Y + 1); break; case Direction.Left: location = new Point(location.X - 1, location.Y); break; default: throw new ArgumentOutOfRangeException(); } } } return(painted.Count); }
public override void onCreate(Bundle savedInstanceState) { base.onCreate(savedInstanceState); ContentView = R.layout.general_purpose_image_filter; Sif imageFilterSdk = new Sif(); try { imageFilterSdk.initialize(this); } catch (Exception e1) { // TODO Auto-generated catch block Console.WriteLine(e1.ToString()); Console.Write(e1.StackTrace); } mContext = this; mImageFilterBtn = (Button)findViewById(R.id.imagefilter); mImageFilterBtn.OnClickListener = imagefilterBtnClickListener; mBackgroundImageBtn = (Button)findViewById(R.id.backgroundimage); mBackgroundImageBtn.OnClickListener = backgroundimageBtnClickListener; mFilterLevelBtn = (Button)findViewById(R.id.filterlevel); mFilterLevelBtn.OnClickListener = filterlevelBtnClickListener; mBackgroudnImageView = (ImageView)findViewById(R.id.imageview_background); arrayAdapter = ArrayAdapter.createFromResource(this, R.array.imageoperation, R.layout.general_purpose_filter_list); filterlistView = (ListView)findViewById(R.id.filter_list); filterlistView.Adapter = arrayAdapter; filterlistView.ChoiceMode = ListView.CHOICE_MODE_SINGLE; // Don't show list view bShowListView = false; filterlistView.Visibility = View.GONE; // initial background bmBackgroundBitmap = BitmapFactory.decodeResource(Resources, R.drawable.baby); mBackgroudnImageView.ImageBitmap = bmBackgroundBitmap; // getting Get the original image // Bitmap backgroundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.baby); // Bitmap filteredBitmap = SifImageFilter.filterImageCopy(backgroundBitmap, SifImageFilter.FILTER_SEPIA, // SifImageFilter.LEVEL_MEDIUM); // Apply image filtering filterlistView.OnItemClickListener = new OnItemClickListenerAnonymousInnerClassHelper(this); }
public override void onCreate(Bundle savedInstanceState) { base.onCreate(savedInstanceState); ContentView = R.layout.general_purpose_image_filter; Sif imageFilterSdk = new Sif(); try { imageFilterSdk.initialize(this); } catch (Exception e1) { // TODO Auto-generated catch block Console.WriteLine(e1.ToString()); Console.Write(e1.StackTrace); } mContext = this; mImageFilterBtn = (Button) findViewById(R.id.imagefilter); mImageFilterBtn.OnClickListener = imagefilterBtnClickListener; mBackgroundImageBtn = (Button) findViewById(R.id.backgroundimage); mBackgroundImageBtn.OnClickListener = backgroundimageBtnClickListener; mFilterLevelBtn = (Button) findViewById(R.id.filterlevel); mFilterLevelBtn.OnClickListener = filterlevelBtnClickListener; mBackgroudnImageView = (ImageView) findViewById(R.id.imageview_background); arrayAdapter = ArrayAdapter.createFromResource(this, R.array.imageoperation, R.layout.general_purpose_filter_list); filterlistView = (ListView) findViewById(R.id.filter_list); filterlistView.Adapter = arrayAdapter; filterlistView.ChoiceMode = ListView.CHOICE_MODE_SINGLE; // Don't show list view bShowListView = false; filterlistView.Visibility = View.GONE; // initial background bmBackgroundBitmap = BitmapFactory.decodeResource(Resources, R.drawable.baby); mBackgroudnImageView.ImageBitmap = bmBackgroundBitmap; // getting Get the original image // Bitmap backgroundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.baby); // Bitmap filteredBitmap = SifImageFilter.filterImageCopy(backgroundBitmap, SifImageFilter.FILTER_SEPIA, // SifImageFilter.LEVEL_MEDIUM); // Apply image filtering filterlistView.OnItemClickListener = new OnItemClickListenerAnonymousInnerClassHelper(this); }
object PartTwo(string input) { var layersString = new List <string>(); for (var index = 0; index < input.Length; index += 25 * 6) { layersString.Add(input.Substring(index, 25 * 6)); } var finalImage = new StringBuilder(); for (var index = 0; index < 25 * 6; index++) { var layersForThisPixel = layersString.Select(s => s[index]).ToArray(); var color = layersForThisPixel.First(c => c != '2'); finalImage.Append(color); } var text = finalImage.ToString(); var sif = new Sif(); for (var l = 0; l < 6; l++) { var line = text.Substring(25 * l, 25); for (var ci = 0; ci < 25; ci++) { sif.SetColor(new Point(ci, l), line[ci] == '0' ? Sif.Color.Black : Sif.Color.White); } } sif.Draw(Console.Out); return(sif.OCR()); //for (var l = 0; l < 6; l++) //{ // var line = text.Substring(25 * l, 25); // var t = line.Replace('0', ' '); // t = t.Replace('1', '█'); // Console.WriteLine(t); //} // //return "ZYBLH"; }
object PartTwo(string input) { var sif = new Sif(); var direction = Direction.Up; var location = new Point(0, 0); sif.SetColor(location, Sif.Color.White); var vm = new IntCode(input); while (vm.State != ProgramState.Finished) { var currentColor = sif.GetColor(location); var vmInput = currentColor == Sif.Color.White ? 1 : 0; vm.ProvideInput(vmInput); vm.RunToNextInputOrFinished(); // Get the output (if any) if (vm.HasOutput) { var color = (Sif.Color)vm.ReadOutput(); sif.SetColor(location, color); var turn = vm.ReadOutput(); if (turn == 0) { // Turn left direction = (Direction)(((int)direction - 1 + 4) % 4); } else { // Turn right direction = (Direction)(((int)direction + 1) % 4); } switch (direction) { case Direction.Up: location = new Point(location.X, location.Y - 1); break; case Direction.Right: location = new Point(location.X + 1, location.Y); break; case Direction.Down: location = new Point(location.X, location.Y + 1); break; case Direction.Left: location = new Point(location.X - 1, location.Y); break; default: throw new ArgumentOutOfRangeException(); } } } // Gah. Should've trusted my instincts and made the SIF OCR. sif.Draw(Console.Out); return("JZPJRAGJ"); }