解决编码挑战

模糊#2

可能的解决方案

简介:从模糊1移至模糊2

模糊1是Firehose软件工程程序中对面向对象编程(OOP)的介绍。 模糊1只不过是简单地输出由阵列阵列组成的图像(黑白),该阵列用于表示图像的各个像素。 这并不难。 为了清楚起见,您需要使计算机输出以下内容:

要在“模糊1”中做到这一点,您需要做的就是一起擦几根棍子,瞧,你起了火。 不,但是认真,这是关键成分

  1. 您需要一个带有参数的类。 Image类本质上是特定对象的方法和变量的模板定义。 Image类本质上为我们正在做的事情起了个名字。 但是,由于在这种情况下,我们要处理一组像素,因此需要找到一种方式来存储和表示计算机可以理解的方式。 因此,对于我们的情况,最简单的操作是创建一个数组数组。
  2. 您将需要一个使用该参数的初始化器
  3. 从那里您只需要应用一种将输出参数的方法类型

这些是这样的:

这就是它的长短。

但是,模糊2所需要的远不止于此。 经过大约1个月的时间,实际的解决方案似乎比我想象的要容易。 同时,我学习了很多有关如何编写代码的知识。

什么是Blur2?

模糊2要求您采用给定的阵列数组,并对单个像素(单元)进行模糊处理,并对紧接其周围的像素进行模糊处理。 为了更清楚地了解这一点,请看以下图片:

因此,作为编码人员,您需要查看代码,然后解密它所需要的内容,以及如何将您的想法转化为一系列代码,这些代码序列将输出使模糊原始图像周围单个像素的图像。 因此,如果以上面的两个像素转换为例,您可以看到您的代码最终应该输出与右侧图像相同的结果-您将从左侧的图像开始,但是随即完成右边的内容。

这是我首先要做的

起初我冻结了。 只是冻结。

“这到底意味着什么?”

如果您以前曾经有过这种感觉,那么您将确切地知道这是什么样的。 但是,从那时起,我花时间尝试将问题分解为合理的步骤序列,这些步骤可以根据我现有的代码知识以及其他开发人员的经验来解决。

这是我冷静下来后所做的事情

规则1:总是用简单的英语写出你想做的事情。 由于这样做之后才有意义,因此首先想出一个解决问题的计划即可为您提供参考。 显然,接下来的工作将是您需要阅读的所有代码,但是查看您想做什么并检查推理中可能存在的差距是一个不错的起点。 所以这是我的原始想法:

  1. 所以我得到了需要模糊处理的图像。 大。
  2. 我已经将我的数组连接在一起以组成一个数组数组,所以现在我需要弄清楚要模糊的实际像素在哪里
  3. 我想遍历所有像素和所有行以确定这些实际像素在哪里并将坐标存储在某处
  4. 从那里,我需要找到一种方法来模糊所标识位置的上下左右像素。

这是我犯的错误 :我在互联网上查看了其他人对此的想法,而自己本人并没有全力以赴。

这可能会更快,并且可能会在短期内带您到达目的地,但稍后会遇到问题。 对我来说,我并不完全理解其他人使用的所有代码。 我最终花了很多时间测试和检查他们的代码,而不是尝试自己开发代码。 这让我放慢了脚步,因为我没有专注于寻找对我有用的东西。

第一步

我需要先让我的代码遍历每个单元格和每一行,因此我建立了一个允许这样做的系统:

此方法有一个目标:找出1的坐标,这需要几个步骤。 换句话说,这是在寻找已经模糊的实际像素的坐标。 您会注意到, 如果cell == 1 ,它也有这个

坐标<< [row_index,column_index]

结束

结束

将其放置在此处只是为了声明如果这些坐标具有“ 1”(1表示该单元格中有一个像素)将被推送。 这些线条看似无害,但是如果没有它们,模糊的位置将无法打印在图像上,因为尚未告知它们这样做。

成长的烦恼

从这里开始,真正的痛苦开始了。 是的,我曾要求计算机为我遍历所有行,但我忽略了一些主要事项:1)计算机不知道当时我实际会模糊的位置的坐标; 2)我将朝什么方向前进模糊。

*我一开始不知道如何编码这些想法

因此,经过反复尝试,结果如下:

您可能想知道最上面的代码。 在这里,我要求计算机处理已经具有1的单个像素的坐标。这表示我希望我的计算机从像素A和像素B的位置模糊像素(我有两个已经被像素化的像素) ,因此这要求计算机从这里开始工作。

之后,我要做的就是让我的计算机从我们在上面的先前方法中建立的原点开始模糊新像素。 因此,在这个def blur_at_location中,我已经遍历了所有四种可能的场景以进行模糊处理,以说明新的模糊处理应该去向何处。

想象一下,您想向某人展示您坐着的位置上,下,左或右的位置,然后他们要在这些位置放置卡片,这就是代码的作用。

边缘案例

在我的特殊情况下,这会引起一些问题,因为计算机只会在不考虑您设置的参数的情况下简单地将像素添加到阵列上,因此您需要找到一种方法来对其进行检查。 为了明确起见,我们建立的blur_at_location方法会在像素化单元的所有四个区域周围创建模糊,因此我们需要做的是建立一个条件,将模糊限制在数组的边界内。

因此请注意if(column_index + 1)<@ rows.first.size,这要求代码基本上停留在您所拥有的范围之内,该范围是一个4X4的数组数组。 如果您没有此代码,则将收到以下输出:

0100

1110

01111

0001

请注意,在第三行中,该列上添加了一个额外的数字。 这是因为它们没有保留在具有四个元素的数组的范围内;因此,添加了一个额外的数字。

结论

重要的是要知道您来自哪里。 这将帮助您了解您要去的地方。 话虽如此,这里有一些有用的提示:

  1. 不要使用您不理解的代码。 您只会混淆自己,对其他人看起来会很愚蠢。
  2. 使用irb测试字符串方法。 如果您想查看文档中的某些内容是如何工作的,请将其放在irb中,它将为您提供帮助。
  3. 问问自己:“我以为我的计算机知道该怎么做,但是不知道?”这远远超出了您的想象。
  4. 花时间了解Ruby文档