Hello World
Spiga

归档:2012年11月

如何生成一段Typoglycemia文本(解答)

2012-11-11 23:40 by 老赵, 3702 visits
摘要:关于“生成Tygolycemia文本”这个问题,已经有许多同学给了答案。不过,似乎大部分同学都只是以“完成”作为目标,并没有在解法的效率和内存占用上做过多考虑。其实对于这种非常简单的问题,给出一个解法并没有太大意义,而是要从中获取一些经验,否则就算反复解决这类简单的问题,得到的进步依然十分有限。事实上,这样一个高效的实现也可以十分清晰而简单,可以说并没有因为追求效率而引入任何复杂度。 阅读全文

如何生成一段Typoglycemia文本?

2012-11-05 23:39 by 老赵, 5375 visits
摘要:Typoglycemia是个新词,描述的是人们识别一段文本时的一个有趣的现象:只要每个单词的首尾字母正确,中间的字母顺序完全打乱也没有关系,照样可以正常理解。要不您来试下,如何从一段正确的文本生成一段Typoglycemia文本呢?其实这题还有后续,那就是把目标反一反:从一个前后确定中间乱序的单词,找到其原始的,正确的单词。自然,我们会得到一个长长的单词列表,十万个单词吧,并保证没有两个单词仅仅是中间几个字符的顺序不同。那么,您会如何设计一个数据结构,让我们可以快速的从一个乱序后的单词找到其正确形式呢? 阅读全文

如何让您的事件支持逆变

2012-11-04 18:56 by 老赵, 4397 visits
摘要:在.NET里定义一个事件会需要一个委托类型,一般来说我们会使用.NET里自带的EventHandler类型,但它的定义其实有稍许缺陷。例如,如果您在自己的项目中编写了这样的代码,Resharper这样的工具便会提醒您“TEventArgs可以设为逆变”。让一个委托类型支持逆变只需要加上in关键字,但如果我们还是让C#编译器帮我们生成事件,则会由于Delegate.Combine方法并不支持逆变而导致失败。我们可以构造一个MulticastDelegateManager来解决这个问题,要不您也来试试看?不过请不要仅仅给出“思路”,千万要写下代码来,否则您的思路不说也罢。 阅读全文

为List<T>内部添加一个“删除多个元素”的方法

2012-11-03 00:06 by 老赵, 8982 visits
摘要:不久前我在微博上提出一个问题:众所周知,.NET中自带的List<T>集合类型没有“删除多个元素”的方法,那么假如我们是.NET类库中List<T>的实现者,我们该如何为添加这么一个方法?请注意这里我们是“内部实现者”,因此肯定就是要提供一个高效的,并且尽可能通用的实现。其实这道题目没有标准答案,但是很容易判断出某一个实现好不好,对不对,有哪些缺陷等等。这题的确十分简单,但是会有不少细节方面值得考虑,所以我反复强调,光有思路是不够的,一定要写出代码来。 阅读全文
1
使用Live Messenger联系我