小编Ali*_*ell的帖子

如何解决"Mastermind"猜谜游戏?

你将如何创建一个算法来解决以下难题,"Mastermind"?

你的对手选择了六种不同的颜色(黄色,蓝色,绿色,红色,橙色,紫色).你必须猜测他们选择了哪个,以及以什么顺序.在每次猜测之后,你的对手会告诉你你猜到的颜色中有多少(但没有哪种)是正确的颜色["黑色"]和多少(但不是哪个)是正确的颜色但是在错误的地方[ "白色"].当你猜对了时,游戏结束(4个黑人,0个白人).

例如,如果您的对手选择了(蓝色,绿色,橙色,红色),并且您猜测(黄色,蓝色,绿色,红色),您将获得一个"黑色"(红色)和两个白色(用于蓝色和绿色).猜测会得到相同的分数(蓝色,橙色,红色,紫色).

我对您选择的算法感兴趣,并且(可选)如何将其转换为代码(最好是Python).我对以下编码解决方案很感兴趣:

  1. 清楚(容易理解)
  2. 简洁
  3. 高效(快速猜测)
  4. 有效(解决难题的猜测次数最少)
  5. 灵活(可以轻松回答有关算法的问题,例如最糟糕的情况是什么?)
  6. 一般(可以很容易地适应其他类型的拼图而不是Mastermind)

我很满意一种非常有效但效率不高的算法(前提是它不仅实现得不好!); 然而,一种非常有效且无效的算法实施起来是不可用的.

我已经发布了我自己的(详细)Python解决方案,但这绝不是唯一或最好的方法,所以请发布更多!我不期待一篇文章;)

python algorithm

34
推荐指数
3
解决办法
3万
查看次数

我如何在Scheme中做指数?

pow,^,**不工作,并计划似乎是太常见了一个能够有效google一下字.

scheme

29
推荐指数
4
解决办法
3万
查看次数

PHP的功能列出所有对象的属性

是否有一个函数列出PHP中的所有对象的属性(如公共方法和属性),类似于Python dir()

php attributes

21
推荐指数
4
解决办法
4万
查看次数

打印堆栈跟踪并在R中发生错误后继续

我正在写一些R代码调用可能失败的其他代码.如果是这样,我想打印一个堆栈跟踪(追踪出错的地方),然后继续进行.但是,traceback()函数仅提供有关未捕获异常的信息.我可以通过涉及tryCatch和dump.frames的相当复杂,纯粹的构造获得我想要的结果,但是没有更简单的方法吗?

debugging r

21
推荐指数
4
解决办法
9790
查看次数

如何在Python中制作重复生成器

你如何在Python中创建像xrange这样的重复生成器?例如,如果我这样做:

>>> m = xrange(5)
>>> print list(m)
>>> print list(m)
Run Code Online (Sandbox Code Playgroud)

我两次得到相同的结果 - 数字0..4.但是,如果我尝试使用yield:

>>> def myxrange(n):
...   i = 0
...   while i < n:
...     yield i
...     i += 1
>>> m = myxrange(5)
>>> print list(m)
>>> print list(m)
Run Code Online (Sandbox Code Playgroud)

我第二次尝试迭代m,我什么都没回来 - 一个空列表.

有没有一种简单的方法可以创建像xrange那样的带有yield或生成器理解的重复生成器?我找到了Python跟踪器问题的解决方法,该问题使用装饰器将生成器转换为迭代器.每次开始使用它时都会重新启动,即使您上次没有使用所有值,就像xrange一样.我也提出了我自己的装饰器,基于相同的想法,实际上返回一个生成器,但一个可以在抛出StopIteration异常后重新启动:

@decorator.decorator
def eternal(genfunc, *args, **kwargs):
  class _iterable:
    iter = None
    def __iter__(self): return self
    def next(self, *nargs, **nkwargs):
      self.iter = self.iter or genfunc(*args, **kwargs):
      try:
        return self.iter.next(*nargs, **nkwargs)
      except StopIteration:
        self.iter …
Run Code Online (Sandbox Code Playgroud)

python

20
推荐指数
2
解决办法
9960
查看次数

在番石榴中反向供应商<T>

我正在寻找Supplier<T>番石榴的反面.我希望它会被称为Consumer- 不 - 或Sink- 存在,但它是为了原始价值.

它隐藏在某处,我想念它吗?

我希望看到它有同样的原因Supplier.诚然,使用不太常见,但是Suppliers,例如,许多静态方法将以类似的方式应用,并且在一行中表达诸如"在此可迭代中发送该供应商的每个值"之类的事情将是有用的.

在此期间,PredicateFunction<T,Void>丑陋的解决方法.

java functional-programming guava

16
推荐指数
1
解决办法
5005
查看次数

Django中的每会话事务

我正在创建一个Django Web应用程序,它允许用户在通过最终POST将数据库提交到数据库(或还原)之前,在一系列GET/POST上构建一组更改.我必须保持更新与任何并发数据库用户隔离,直到它们被确认(这是一个配置前端),排除在每次POST后提交.

我首选的解决方案是使用每会话事务.这样可以记住在其所属的数据库中记住更改内容(以及它如何影响后续查询)以及实现提交/回滚的所有问题.死锁和长期锁定不是问题,因为由于外部约束,任何时候只能有一个用户配置系统,并且它们表现良好.

但是,我找不到有关设置Django的ORM以使用这种事务模型的文档.我把一个最小的猴子补丁(ew!)放在一起解决问题,但不喜欢这样一个脆弱的解决方案.有没有其他人这样做过?我在某个地方错过了一些文档吗?

(我的Django版本是1.0.2 Final,我使用的是Oracle数据库.)

python django transactions

8
推荐指数
1
解决办法
1855
查看次数

结构化编程和Python生成器?

更新:我一直想要的是greenlets.


注意:随着人们的回答迫使我"提高赌注",这个问题发生了一些变异,因为我的琐碎例子有微不足道的简化; 根据亚历克斯的建议,我不会继续在这里改变它,而是当我把它更清楚时,我会把这个问题放在脑后.


Python生成器是一个美丽的东西,但我怎样才能轻松地将其分解为模块(结构化编程)?我实际上想要PEP 380,或至少在语法负担方面有所作为,但在现有的Python中(例如2.6)

作为一个(公认的愚蠢)例子,请采取以下措施:

def sillyGenerator():
  for i in xrange(10):
    yield i*i
  for i in xrange(12):
    yield i*i
  for i in xrange(8):
    yield i*i
Run Code Online (Sandbox Code Playgroud)

作为DRY的忠实信徒,我在这里发现了重复的模式并将其分解为一种方法:

def quadraticRange(n):
  for i in xrange(n)
    yield i*i

def sillyGenerator():
  quadraticRange(10)
  quadraticRange(12)
  quadraticRange(8)
Run Code Online (Sandbox Code Playgroud)

......当然不起作用.父必须在循环中调用新函数,产生结果:

def sillyGenerator():
  for i in quadraticRange(10):
    yield i
  for i in quadraticRange(12):
    yield i
  for i in quadraticRange(8):
    yield i
Run Code Online (Sandbox Code Playgroud)

......比以前更长!

如果我想将一部分生成器推送到一个函数中,我总是需要这个相当冗长的两行包装器来调用它.如果我想支持send(),情况会变得更糟:

def sillyGeneratorRevisited():
  g = subgenerator()
  v = None
  try:
    while True: …
Run Code Online (Sandbox Code Playgroud)

python generator

6
推荐指数
3
解决办法
1319
查看次数

为什么Joda瞬间扩展原始类型Comparable?

Joda的AbstractInstant接口扩展了原始类型Comparable,而不是Comparable<AbstractInstant>,它似乎违反了Java最佳实践.特别是,这意味着我不能使用DateTime来参数化这样的类:

class Foo<T extends Comparable<? super T>> {
    public int ct(T a, T b) {
        return a.compareTo(b);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的理解是这种类完全有效(它肯定适用于Double等).但是,为了让它与DateTime一起工作,我使用原始类型和抑制警告丢弃了我自己的代码:

@SuppressWarnings("unchecked")
class Foo<T extends Comparable> {
    public int ct(T a, T b) {
        return a.compareTo(b);
    }
}
Run Code Online (Sandbox Code Playgroud)

有一个相关的问题暗示了一种解决方法(为了比较的目的将DateTime包装在另一个类中),但我不明白为什么这是必要的.我的问题是:

  1. 有谁知道为什么Joda正在扩展原始类型,或者
  2. 这是我应该向图书馆维护者报告的错误吗?

java jodatime

6
推荐指数
1
解决办法
281
查看次数

封装会严重损害性能?

我知道这个问题有点愚蠢,也许它只是编写代码的一部分,但似乎定义简单的函数真的会严重损害性能......我尝试过这个简单的测试:

def make_legal_foo_string(x):
    return "This is a foo string: " + str(x)

def sum_up_to(x):
    return x*(x+1)/2

def foo(x):
    return [make_legal_foo_string(x),sum_up_to(x),x+1]

def bar(x):
    return ''.join([str(foo(x))," -- bar !! "])
Run Code Online (Sandbox Code Playgroud)

这是非常好的风格,使代码清晰,但它的速度可能只是字面上的三倍.对于可能产生副作用的函数来说,这是不可避免的,但实际上几乎无足轻重地定义一些函数,这些函数每次出现时都应该用代码行替换,将源代码转换为只编译.同样我认为对于幻数,它不需要花费很多时间从内存中读取,但是如果它们不应该被更改那么为什么不在代码编译之前用文字替换'magic'的每个实例?

python performance

3
推荐指数
1
解决办法
628
查看次数

防止RegEx在大型比赛中挂起

这是日期的一个很好的正则表达式...但它在我尝试的这一页上无限期挂起...我想尝试这个页面(http://pleac.sourceforge.net/pleac_python/datesandtimes.html)它确实有很多日期,我想抓住所有这些日期.我不明白为什么它在其他页面上没有悬挂...为什么我的正则表达式挂起和/或我怎么能清理它以使它更好/更有效?

Python代码:

monthnames = "(?:Jan\w*|Feb\w*|Mar\w*|Apr\w*|May|Jun\w?|Jul\w?|Aug\w*|Sep\w*|Oct\w*|Nov(?:ember)?|Dec\w*)"

pattern1 = re.compile(r"(\d{1,4}[\/\\\-]+\d{1,2}[\/\\\-]+\d{2,4})")

pattern4 = re.compile(r"(?:[\d]*[\,\.\ \-]+)*%s(?:[\,\.\ \-]+[\d]+[stndrh]*)+[:\d]*[\ ]?(PM)?(AM)?([\ \-\+\d]{4,7}|[UTCESTGMT\ ]{2,4})*"%monthnames, re.I)

patterns = [pattern4, pattern1]

for pattern in patterns:
    print re.findall(pattern, s)
Run Code Online (Sandbox Code Playgroud)

顺便说一句...当我说我试图反对这个网站..我正在尝试它反对网页来源.

python regex

3
推荐指数
1
解决办法
3401
查看次数

如何计算java中两个日期之间的年龄或差异

我想得到2个日期之间的月数.日期是某人生日和当前日期.所以我得到两个日期之间的年数而不是月数.

假设我的日期是06/09/201106/11/2012.所以我希望答案是1年2个月.我得到的一年而不是月份.请帮助.下面是获取年数的代码

 public int getAge(Date dateOfBirth)      {                                                                                                                                                                         

    today = Calendar.getInstance(); 
    Calendar birthDate = Calendar.getInstance();

    birthDate.setTime(dateOfBirth);
    if (birthDate.after(today)) {
        throw new IllegalArgumentException("Can't be born in the future");
    }

    age = today.get(Calendar.YEAR) - birthDate.get(Calendar.YEAR);
    month = today.get(Calendar.MONTH) - birthDate.get(Calendar.MONTH);

    if ( (birthDate.get(Calendar.DAY_OF_YEAR) - today.get(Calendar.DAY_OF_YEAR) > 3) ||
            (birthDate.get(Calendar.MONTH) > today.get(Calendar.MONTH ))){
        days = birthDate.get(Calendar.DAY_OF_MONTH) - today.get(Calendar.DAY_OF_MONTH);
        age--;

        Toast.makeText(getApplicationContext(), "inside if", Toast.LENGTH_SHORT).show();
        Log.e("month is",month+"");
        Log.e("Days",days+ " left");


    }else if ((birthDate.get(Calendar.MONTH) == today.get(Calendar.MONTH )) &&
              (birthDate.get(Calendar.DAY_OF_MONTH) > today.get(Calendar.DAY_OF_MONTH ))){
        Toast.makeText(getApplicationContext(), …
Run Code Online (Sandbox Code Playgroud)

java date date-difference

3
推荐指数
1
解决办法
2万
查看次数

如何在Scheme中检查NaN?

还有一个地方我可以在Scheme中查找所有浮点操作吗?

scheme

2
推荐指数
1
解决办法
432
查看次数