小编Nan*_*ard的帖子

将x项等距放置在n×m包裹网格上的算法

我正在创建一个简单的基于网格的浏览器游戏,我希望等距离放置玩家和目标单元格(想想山丘之王).理想情况下,这将以每个玩家也与最近的目标小区等距离的方式完成.

以下是要求:

  • 游戏需要支持2到20名玩家.
  • n通过m网格可以任意大小,但更多的"广场样"就更好了.('square-like'背后的原理是减少穿越网格所需的最大距离 - 让事情更容易接近)
  • 目标细胞的数量是灵活的.
  • 每个玩家应该有相同数量的目标.
  • 任何玩家或目标与任何其他玩家或目标之间的最小距离为4.

请注意,每个小区具有8个直接邻居(是对角线算作的距离1),和边缘缠绕.这意味着底部的那些在逻辑上与顶部的那些相邻,并且左/右相同.

我一直试图想出一个好的算法,将玩家和目标放在不同的分布中,而不必为每个玩家数量创建一个特定的预定网格.我发现了k-means聚类劳埃德算法,但是我对它们并不是很熟悉,并且我不知道如何将它们应用于这个特定的情况,特别是因为目标细胞的数量是灵活的,我认为应该简化解决方案.

这里有一段非常简化的代码,创建了一个预先确定的6个玩家网格,只是为了展示我的目标:

var cellSize = 20;
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
document.body.appendChild(canvas);

function Cell(x, y) {
  this.x = x * cellSize + cellSize / 2;
  this.y = y * cellSize + cellSize / 2;
  this.id = x + '-' + y;
  this.neighbors = …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm

31
推荐指数
3
解决办法
870
查看次数

在给定开始、结束和步骤的情况下生成 List<Double> 值序列的最佳方法?

我实际上很惊讶我无法在这里找到答案,尽管我可能只是使用了错误的搜索词或其他东西。我能找到的最接近的是this,但他们询问生成double具有特定步长的特定范围的s ,答案是这样处理的。我需要一些可以生成具有任意开始、结束和步长的数字的东西。

我算起来也是在图书馆这样的一些方法已经某处,但如果让我无法轻松地找到它(再次,也许我只是用错了搜索词或某事)。所以这是我在过去几分钟里自己做的事情:

import java.lang.Math;
import java.util.List;
import java.util.ArrayList;

public class DoubleSequenceGenerator {


     /**
     * Generates a List of Double values beginning with `start` and ending with
     * the last step from `start` which includes the provided `end` value.
     **/
    public static List<Double> generateSequence(double start, double end, double step) {
        Double numValues = (end-start)/step + 1.0;
        List<Double> sequence = new ArrayList<Double>(numValues.intValue());

        sequence.add(start);
        for (int i=1; i < numValues; i++) {
          sequence.add(start + step*i);
        } …
Run Code Online (Sandbox Code Playgroud)

java double sequence

15
推荐指数
1
解决办法
1363
查看次数

应用聊天字符限制?

我正在构建一个MEAN Web应用程序,我希望很快就能在开放的互联网上部署.此应用程序的一部分包括由WebSockets支持的令人敬畏的Primus抽象层支持的聊天功能.当我编写聊天模块时,我们会想到是否对这些消息施加字符限制.

我的结论是,有一些限制可能是好的,但我不知道如何决定应该限制什么.它应该取决于我的服务器的强大程度吗?我应该选择一些合理的限制吗?究竟什么合理的限制,为什么?

谷歌和Facebook这样的网络巨头如何决定应用程序的聊天字符限制应该是什么?有人只是说"嗯这看起来很合理",就是这样吗?

一些额外的谷歌搜索发现了一些关于Jabber聊天限制的问题,一个增加Blade和Soul MMO聊天角色限制的请求,以及关于Twitch聊天字符限制的评论,但我似乎无法找到任何表明基于Web的应用程序的典型聊天字符限制的内容,或者为什么它们首先受限于它们的方式.

我知道过去我自己和其他人知道在某些聊天应用程序中看似不必要的短字符限制.这可能会成为一个主要的烦恼,特别是在尝试复制和粘贴大量信息时.我想在保护服务器和带宽完整性的同时避免对用户造成烦恼,同时请记住,某些用户可能正在使用具有网络使用限制等的应用程序.

编辑

我正在开发的应用程序是一款游戏,但它有时会涉及一些重要的外交和玩家之间的战略讨论.对该用例有一个特定的建议会有所帮助,但是有一些基本原则来指导各种应用程序的聊天限制显然会更有帮助.

chat web-applications mean-stack

11
推荐指数
2
解决办法
362
查看次数

当Angular更改时,子弹颜色在Chrome中无法正确显示

任何人都可以解释为什么这些子弹会在Firefox和IE中正确改变颜色,但不能在Chrome中改变颜色(我目前的版本是47.0.2526.106)?为什么第一颗子弹会ul保持白色,但其他子弹最初会改变?

请注意,无论是绑定class还是使用ng-class属性,我都会遇到相同的行为.

有没有办法让颜色正确更新?

火狐/ IE:

FFIE示例

铬:

Chrome示例

angular.module('myApp', [])
  .controller('myCtrl', [
    '$scope',
    '$interval',
    function($scope, $interval) {
      var values = ['Hello', 'Oops', 'Uh-Oh...'];
      var classes = ['good', 'warning', 'danger'];
      var nItems = 8;
      $scope.items = [];

      for (var i = 0; i < nItems; i++) {
        $scope.items.push({});
      }

      function updateItems() {
        for (var i = 0; i < $scope.items.length; i++) {
          var item = $scope.items[i];
          var chosen = Math.floor(Math.random() * values.length);
          item.value = values[chosen];
          item.class = …
Run Code Online (Sandbox Code Playgroud)

html javascript css google-chrome angularjs

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

为什么Java String.length在具有unicode字符的平台之间不一致?

根据String.lengthJava文档

public int length()

返回此字符串的长度。

长度等于字符串中Unicode代码单元的数量。

指定者:

接口CharSequence中的length

返回值:

此对象表示的字符序列的长度。

但是我不明白为什么下面的程序HelloUnicode.java在不同的平台上产生不同的结果。根据我的理解,Unicode代码单元的数量应该相同,因为Java应该总是以UTF-16表示字符串

public class HelloWorld {

    public static void main(String[] args) {
        String myString = "I have a  in my string";
        System.out.println("String: " + myString);
        System.out.println("Bytes: " + bytesToHex(myString.getBytes()));
        System.out.println("String Length: " + myString.length());
        System.out.println("Byte Length: " + myString.getBytes().length);
        System.out.println("Substring 9 - 13: " + myString.substring(9, 13));
        System.out.println("Substring Bytes: " + bytesToHex(myString.substring(9, 13).getBytes()));
    }

    // Code from /sf/answers/689873691/
    private final static char[] hexArray = "0123456789ABCDEF".toCharArray(); …
Run Code Online (Sandbox Code Playgroud)

java string encoding

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

反转HTML元素中子项的默认z-index

因此,规范定义了元素是按照树的顺序绘制的,用于具有相似block级别或float状态且相同的流入的非定位元素z-index.当然,这意味着在HTML标记中最后声明的那些是在顶部绘制的.但是,如果我们希望在特定容器中的任意子项中反转该顺序呢?

例如,假设float div父母中有无限数量的重叠s div:

__________________________________
|  _________________________      |
|  | samant| allis| rachael |...  |
|  |_______|______|_________|...  |
|_________________________________|
Run Code Online (Sandbox Code Playgroud)

我们希望看起来像这样:

__________________________________
|  _________________________      |
|  | samantha |lison |chael |...  |
|  |__________|______|______|...  |
|_________________________________|
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

单靠css还没有办法实现这个目标吗?如果没有,使用javascript为任意子元素实现此功能的最有效和最安全的方法是什么?

先前已经询问过类似功能的问题,但不是专门用于具有任意数量的子元素的一般意义上的问题.看到这里这里.

html javascript css z-index

6
推荐指数
2
解决办法
1185
查看次数

n的有效计算在Node.js中选择k

我在Node.js服务器上有一些性能敏感的代码需要计算组合.从这个SO答案中,我使用这个简单的递归函数来计算n选择k:

function choose(n, k) {
    if (k === 0) return 1;
    return (n * choose(n-1, k-1)) / k;
}
Run Code Online (Sandbox Code Playgroud)

然后因为我们都知道迭代几乎总是比递归更快,所以我根据乘法公式编写了这个函数:

function choosei(n,k){
    var result = 1;
    for(var i=1; i <= k; i++){
        result *= (n+1-i)/i;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我在我的机器上运行了一些基准测试.以下是其中一个的结果:

Recursive x 178,836 ops/sec ±7.03% (60 runs sampled)
Iterative x 550,284 ops/sec ±5.10% (51 runs sampled)
Fastest is Iterative
Run Code Online (Sandbox Code Playgroud)

结果一致表明,迭代方法确实比Node.js中的递归方法快3到4倍(至少在我的机器上).

可能足以满足我的需求,但有没有办法让它更快?我的代码必须具有相当大的价值非常频繁调用这个函数,有时会nk,所以速度越快越好.

编辑

在使用le_m和Mike的解决方案运行了一些测试之后,事实证明,虽然两者都比我提出的迭代方法快得多,但Mike使用Pascal三角形的方法似乎比le_m的日志表方法略快.

Recursive x 189,036 …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm performance node.js

6
推荐指数
2
解决办法
2335
查看次数

在 Python 中使用 Unicode 保持 Java 字符串偏移量一致

我们正在构建一个调用 Java 程序的 Python 3 程序。Java 程序(这是我们无法修改的第 3 方程序)用于标记字符串(查找单词)并提供其他注释。这些注释采用字符偏移的形式。

例如,我们可能会向程序提供字符串数据,例如"lovely weather today". 它提供类似于以下输出的内容:

0,6
7,14
15,20
Run Code Online (Sandbox Code Playgroud)

其中0,6词“lovely”7,14对应的偏移量,“weather”15,20这个词对应的偏移量,以及“today”这个词在源字符串中的偏移量。我们在 Python 中读取这些偏移量以提取这些点处的文本并执行进一步处理。

只要字符在基本多语言平面 ( BMP )内,一切都很好。但是,如果不是,则此 Java 程序报告的偏移量在 Python 端显示为错误。

例如,给定 string "I feel today",Java 程序将输出:

0,1
2,6
7,9
10,15
Run Code Online (Sandbox Code Playgroud)

在 Python 方面,这些转换为:

0,1    "I"
2,6    "feel"
7,9    " "
10,15  "oday"
Run Code Online (Sandbox Code Playgroud)

最后一个索引在技术上无效。Java 将 "" 视为长度 2,这会导致该点之后的所有注释从 Python 程序的角度来看都相差一个。

据推测,这是因为 Java 在内部以 UTF-16esqe 方式对字符串进行编码,并且所有字符串操作都作用于这些 UTF-16esque代码单元。另一方面,Python 字符串似乎对实际的 unicode 字符(代码点)进行操作。因此,当一个字符出现在 BMP 之外时,Java 程序将其视为长度 2,而 …

python java string unicode

5
推荐指数
1
解决办法
156
查看次数

jQuery UI Draggable:Stack on Click

有什么方法可以draggable在单击时启动堆栈过程,而不仅仅是拖动?

我找到了这个解决方案,基本上只是试图复制库代码.(它也缺少我在下面插入的重要部分).有没有更优雅的解决方案?

修改作者的代码,以下解决方案有效:

function bringFront(elem, stack){
    // Brings a file to the stack front
    var min, group = $.makeArray($(stack)).sort(function(a, b) {
        return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
    });

    if(group.length < 1) return;
    min = parseInt(group[0].style.zIndex, 10) || 0;
    $(group).each(function(i) {
        this.style.zIndex = min+i;
    });

    if(elem == undefined) return;
    $(elem).css({'zIndex' : min+group.length});
}
Run Code Online (Sandbox Code Playgroud)

但是以某种方式调用库方法显然会更好.

javascript jquery jquery-ui

4
推荐指数
1
解决办法
886
查看次数

为什么 Vec.sort() 似乎需要静态生命周期?

这是我遇到的问题的一个大大简化的示例,但是给定了trait Thingwhich implementsOrdstruct Objectwhich implements Thing,我有以下结构:

pub struct MyStruct<'a> {
    my_things: HashMap<i32, Vec<Box<dyn Thing + 'a>>>
}

impl<'a> MyStruct<'a> {
    pub fn new() -> MyStruct<'a> {
        MyStruct {
            my_things: HashMap::new()
        }
    }
    
    pub fn add_object(&mut self, key: i32, obj: Object) {
        if !self.my_things.contains_key(&key) {
            self.my_things.insert(key, Vec::new());
        }
        
        let new_thing: Box<dyn Thing> = Box::new(obj);
        let things = self.my_things.get_mut(&key).unwrap();
        
        things.push(new_thing);
        things.sort();
    }
}
Run Code Online (Sandbox Code Playgroud)

它本质上需要一个密钥和Object,并将该对象添加到HashMapVec使用给定密钥s。我知道这不是执行此操作的最佳方法,但我想让它更简单以进行说明。

编译器在调用 时抱怨things.sort()以下错误:

error[E0308]: …
Run Code Online (Sandbox Code Playgroud)

vector traits lifetime rust trait-objects

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

以编程方式添加CSS渐变作为背景图像

为什么我可以像这样在CSS中定义规则

.red {
    background-color: red;
    background-image: linear-gradient(to bottom, rgba(0,0,0,0) 0%,rgba(0,0,0,0.01) 1%,rgba(0,0,0,1) 100%);
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是当我在JS中执行此操作时

var red = document.getElementById('red');
red.style.backgroundColor = 'red';
red.style.backgroundImage = 'linear-gradient(to bottom, rgba(0,0,0,0) 0%,rgba(0,0,0,0.01) 1%,rgba(0,0,0,1) 100%);';
Run Code Online (Sandbox Code Playgroud)

它似乎只能在IE中运行,而不能在Chrome或Firefox中运行?

当需要在JavaScript中设置样式时,如何获得相同的行为?

.red {
    background-color: red;
    background-image: linear-gradient(to bottom, rgba(0,0,0,0) 0%,rgba(0,0,0,0.01) 1%,rgba(0,0,0,1) 100%);
}
Run Code Online (Sandbox Code Playgroud)
var red = document.getElementById('red');
red.style.backgroundColor = 'red';
red.style.backgroundImage = 'linear-gradient(to bottom, rgba(0,0,0,0) 0%,rgba(0,0,0,0.01) 1%,rgba(0,0,0,1) 100%);';
Run Code Online (Sandbox Code Playgroud)
var red = document.getElementById('red');
red.style.backgroundColor = 'red';
red.style.backgroundImage = 'linear-gradient(to bottom, rgba(0,0,0,0) 0%,rgba(0,0,0,0.01) 1%,rgba(0,0,0,1) 100%);';
Run Code Online (Sandbox Code Playgroud)

我目前正在使用以下版本:

  • Firefox 45.0.1
  • 铬49.0.2623.110
  • IE 11.0.9600.18230

javascript css

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

如何将 Box&lt;dyn Trait&gt; 转换为 Rc&lt;dyn Trait&gt;?

我有一个接收 a 的函数,Box<dyn Trait>需要将其转换为 anRc<dyn Trait>以在线程内共享只读所有权。

随着Box<T>一些T: Sized,我们可以做的Rc::new(*my_box),但不幸的是不起作用的未分级特征的对象

这是一个过于简化的例子,希望能澄清这个问题:

use std::rc::Rc;

pub trait Trait {}

pub struct Foo {}
impl Trait for Foo {}

fn main() {
    let trait_box: Box<dyn Trait> = Box::new(Foo {});
    let trait_rc: Rc<dyn Trait> = Rc::new(*trait_box); // -> Error
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接

我在这里和那里看到了一些关于暴露内部RcBox以支持在Box和之间移动的事情Rc,但 AFAIK 今天不可用。

有解决方法吗?

或者,如果这种类型的转换是不可能的,那么推荐的存储特征对象的方法是什么?

Rc<RefCell<dyn Trait>>当我知道到目前为止我只有一个所有者时,使用 a似乎有点矫枉过正......

memory-management rust trait-objects

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