小编Jos*_*oon的帖子

Minesweeper大师来自Google Code Jam(2014)资格赛

这是来自Google Code Jam资格回合的问题(现已结束).如何解决这个问题呢?

注意:如果您的方法与答案中讨论的方法不同,请分享,以便我们扩展我们对解决此问题的不同方法的了解.

问题陈述:

扫雷是一种计算机游戏,在20世纪80年代开始流行,并且仍然包含在某些版本的Microsoft Windows操作系统中.这个问题有类似的想法,但它并不假设你玩过扫雷.

在这个问题中,您正在相同单元格的网格上玩游戏.最初隐藏每个单元格的内容.在M个不同的网格单元中隐藏着M个矿井.没有其他细胞包含地雷.您可以单击任何单元格以显示它.如果揭示的细胞包含一个矿,那么游戏就结束了,你输了.否则,显示的单元格将包含0到8之间的数字(包括0和8),这对应于包含地雷的相邻单元格的数量.如果两个单元共享一个角或边,则它们是邻居.另外,如果显示的单元格包含0,那么所揭示的单元格的所有邻居也会以递归方式自动显示.当所有不包含地雷的细胞都被揭露时,游戏结束,你就赢了.

例如,电路板的初始配置可能如下所示('*'表示我的,而'c'是第一个单击的单元格):

*..*...**.
....*.....
..c..*....
........*.
..........
Run Code Online (Sandbox Code Playgroud)

点击的单元格旁边没有地雷,因此当它被显示时,它变为0,并且它的8个相邻单元也被显示出来.此过程继续,导致以下板:

*..*...**.
1112*.....
00012*....
00001111*.
00000001..
Run Code Online (Sandbox Code Playgroud)

此时,仍有未显示的单元格不包含地雷(用'.'字符表示),因此玩家必须再次点击才能继续游戏.

你想尽快赢得比赛.没有什么比单击赢得更快.考虑到电路板的尺寸(R x C)和隐藏的地雷M的数量,是否有可能(但不太可能)一键获胜?您可以选择单击的位置.如果可能,则按照"输出"部分中的规范打印任何有效的矿井配置和点击坐标.否则,打印"不可能".

我试过的解决方案:

因此,对于解决方案,您需要确保每个非采矿节点与其他非采矿节点处于3x3矩阵中,或者如果节点位于网格边缘,则需要3x2或2x2矩阵; 我们称之为0Matrix.因此,0Matrix中的任何节点都具有所有非矿井邻居.

首先,检查是否需要更少的地雷,或更少的空节点

if(# mines required < 1/3 of total grid size)
    // Initialize the grid to all clear nodes and populate the mines
    foreach (Node A : the set of non-mine nodes)
        foreach (Node AN : A.neighbors)
            if AN forms a OMatrix with it's neighbors, continue
            else break;
        // If we got here means …
Run Code Online (Sandbox Code Playgroud)

algorithm minesweeper

30
推荐指数
2
解决办法
6466
查看次数

QuickSort Dijkstra 3-Way Partitioning:为什么要额外交换?

算法

根据这里的算法,看看我在"X"的情况,发生以下情况:

场景: i - >"X","X">"P"

1. swap("X", "Z"), gt--;   // the value at i is now "Z", which is still > "P"
2. swap("Z", "Y"), gt--;   // the value at i is now "Y", which is still > "P"
3. swap("Y", "C"), gt--;    // Now we finally get a value at i "C" which is < "P"
// Now we can swap values at i and lt, and increrement them
4. swap("P", "C"), i++, lt++;
Run Code Online (Sandbox Code Playgroud)

为什么我们不直接递减gt,直到gt指向<lt的值(在这种情况下为"P"),然后我们将此值与i处的值交换.这将节省交换操作.

因此,如果我们为上述场景做到这一点,我们将做:

1. gt--
2. …
Run Code Online (Sandbox Code Playgroud)

sorting algorithm quicksort

14
推荐指数
2
解决办法
2145
查看次数

Jersey 2.x:如何在RESTful Client上添加Headers

我已经看过如何使用Jersey Client API在RESTful调用上添加Headers,但这适用于Jersey 1.x.

如何在Jersey 2.21中设置标头值(例如授权令牌)?

这是我正在使用的代码:

public static String POST(final String url, final HashMap<String, String> params)
{
    ClientConfig config = new ClientConfig();
    Client client = ClientBuilder.newClient(config);

    WebTarget target = client.target(url);

    String data = new Gson().toJson(params);

    Entity json = Entity.entity(data, MediaType.APPLICATION_JSON_TYPE);
    Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE);
    return builder.post(json, String.class);
}
Run Code Online (Sandbox Code Playgroud)

java rest jersey jersey-2.0

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

Angular2:匿名函数中的Access类变量

我确信有一种简单的方法可以做到这一点,但我似乎无法找到它.这是我的代码

export class UserLoginComponent {
private user: User;
public authService: AuthService;

constructor(private cognitoConfigs: CognitoUtil, authService: AuthService) {
    this.user = new User();
    this.authService = authService;
}

authenticate() {

    // Some work being done here
    let cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);

    cognitoUser.authenticateUser(authenticationDetails, {

        onSuccess: function(result: any) {
            this.authService.login(this.user, result);
        },
        onFailure: function(err: any) {
            console.log(err.message);
        },

    });

}
}
Run Code Online (Sandbox Code Playgroud)

问题:在onSuccess回调中,我无法访问this.authService属于它的父类的变量.

typescript angular

10
推荐指数
2
解决办法
8879
查看次数

有没有办法将默认构造函数添加到接口

现在将默认方法添加到Java 8中,有没有办法创建默认构造函数?

我试过了:

public interface KadContent<T>
{
    public default KadContent()
    {

    }
...
Run Code Online (Sandbox Code Playgroud)

<identifier> expected从Netbeans 获取错误

为什么需要?我正在使用Gson序列化对象并获得"无法调用no-args构造函数.."错误,我知道我可以使用Gson的InstanceCreator解决这个问题.但有没有办法创建默认的构造函数?

更新

我发现自己的代码存在问题.我在用

gson.fromJson(new String(data), InterfaceName.class);
Run Code Online (Sandbox Code Playgroud)

代替

gson.fromJson(new String(data), ClassName.class);
Run Code Online (Sandbox Code Playgroud)

因此,即使子类具有默认构造函数,反序列化代码也是不正确的.但是默认构造函数的问题仍然存在.

java generics java-8 default-method

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

向Kademlia添加新节点,构建Kademlia路由表

我不能完全围绕Kademlia DHT的加入过程.我在网上看过一些教程和演示文稿,但它们似乎都以相同的方式说出来,并且所有psedo代码等在大多数情况下都是相同的(实际复制/粘贴).

有人可以高度重视这个吗?

p2p dht kademlia

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

Java默认方法-获取子类的类型

我有一个接口,我想在其中提供默认方法来序列化继承的类。我使用一个JsonSerializer<T>类来进行序列化。

该方法如下所示:

public interface A
{
    public default String write()
    {
        new JsonSerializer</*Inherited class type*/>();
        // I've tried new JsonSerializer<this.getClass()>();  - Doesn't work

    }
}

public class AX implements A
{
}
Run Code Online (Sandbox Code Playgroud)

所以当我实例化AX时,我想使用write方法来序列化AX

AX inst = new AX();
String instSerialized = inst.write();
Run Code Online (Sandbox Code Playgroud)

我需要将 AX 的类型传递给 A 中的 write 方法。这可能吗?

java generics default-method

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

当我使用非cst内存模型时,为什么我的spinlock实现性能最差?

我在下面有两个版本的自旋锁.第一个使用默认值memory_order_cst,而后者使用memory_order_acquire/memory_order_release.由于后者更放松,我希望它有更好的表现.但似乎并非如此.

class SimpleSpinLock
{
public:

    inline SimpleSpinLock(): mFlag(ATOMIC_FLAG_INIT) {}

    inline void lock()
    {   
        int backoff = 0;
        while (mFlag.test_and_set()) { DoWaitBackoff(backoff); }
    }   

    inline void unlock()
    {   
        mFlag.clear();
    }   

private:

    std::atomic_flag mFlag = ATOMIC_FLAG_INIT;
};

class SimpleSpinLock2
{
public:

    inline SimpleSpinLock2(): mFlag(ATOMIC_FLAG_INIT) {}

    inline void lock()
    {   
        int backoff = 0;
        while (mFlag.test_and_set(std::memory_order_acquire)) { DoWaitBackoff(backoff); }
    }   

    inline void unlock()
    {   
        mFlag.clear(std::memory_order_release);
    }   

private:

    std::atomic_flag mFlag = ATOMIC_FLAG_INIT;
};

const int NUM_THREADS = 8;
const int NUM_ITERS = 5000000;

const …
Run Code Online (Sandbox Code Playgroud)

c++ performance multithreading lock-free c++11

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

使用GzipInputStream解压缩到byte []

我有一个压缩和解压缩字节数组的类;

public class Compressor
{
    public static byte[] compress(final byte[] input) throws IOException
    {
        try (ByteArrayOutputStream bout = new ByteArrayOutputStream();
                GZIPOutputStream gzipper = new GZIPOutputStream(bout))
        {
            gzipper.write(input, 0, input.length);
            gzipper.close();

            return bout.toByteArray();
        }
    }

    public static byte[] decompress(final byte[] input) throws IOException
    {
        try (ByteArrayInputStream bin = new ByteArrayInputStream(input);
                GZIPInputStream gzipper = new GZIPInputStream(bin))
        {
            // Not sure where to go here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何解压缩输入并返回字节数组?

注意:由于字符编码问题,我不想对字符串进行任何转换.

java compression gzip

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

Laravel Passport 自定义哈希机制

我目前正在构建一个与更大的应用程序(Zend 1.x)一起工作的应用程序(使用 Laravel)。

我使用 Laravel Passport 进行 API 身份验证。我需要将 Laravel Passport 默认哈希机制更改为 Zend 哈希才能进行身份验证。

有人可以向我指出一个 API 或我需要重写才能运行它的东西吗?我不想编辑核心 Laravel Passport 代码。

我已经看到了创建自定义用户提供程序和修改validateCredentials()方法的建议,但这些都是针对核心 Laravel 的。

我已经在 User 类中使用 findForPassport 方法来覆盖用户名字段。

public function findForPassport($username)
{
    return $this->where('email', $username)->first();
}
Run Code Online (Sandbox Code Playgroud)

php laravel-5 laravel-passport laravel-5.4

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

使用 - >静态函数

嗨,我对OOP有点新手,我只是有一个简单的问题:说我在一个声明为类的类中有一个函数

class House
{
    public static function hasAlcohol() 
    {
        // Do Something
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以称之为

House::hasAlcohol()
Run Code Online (Sandbox Code Playgroud)

但是,我还想知道它是否可以使用编码标准和PHP,如果从一个房子的实例调用hasAlcohol()是没有错误的(我试过它并且没有错误),例如

$house = new House();
$house->hasAlcohol();
Run Code Online (Sandbox Code Playgroud)

php

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

PHP方法链接混乱

我最近被介绍过方法链,我不确定我在这里做的是非法的,或者我做错了.我有一个数据库类,如:

    class Database
    {
    private $connection;
    private $resultset, $last_query, $current_row;

    function __construct()
    {
        $this->connect();
    }

    public function connect()
    {
        // Connect to the database
    }

    public function query($query)
    {
        $this->last_query = $query;
        $this->resultset = mysql_query($query, $this->connection);
    }

    public function fetchObject()
    {
        $this->current_row = mysql_fetch_object($this->resultset);
        return $this->current_row;
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用它像:

$db->query("SELECT * FROM users WHERE name='JimmyP'")->fetchObject();
Run Code Online (Sandbox Code Playgroud)

我也试过了

$db->fetchObject()->query("SELECT * FROM users WHERE name='JimmyP'");
Run Code Online (Sandbox Code Playgroud)

但我得到错误:"在非对象上调用成员函数fetchObject()"

有人可以向我解释我在这里做错了什么,因为它与使用方法链接有关.谢谢.

php

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