Go 编程:生成组合

2024-02-03

这是家庭作业

我正在开发一个项目,其中一个非常小的(非常小,一旦我开始工作......它基本上是项目其余部分的先决条件)部分是使用 Go 例程生成一些组合。

我的代码是:

package bruteforce

// GenerateCombinations is an iterator function.  Given an alphabet and a
// length, it will generate every possible combination of the letters in
// alphabet of the specified length.
//
// It is meant to be consumed by using the range clause:
//
//  for combination := range GenerateCombinations(alphabet, length) {
//      process(combination)
//  }
//
func GenerateCombinations(alphabet string, length int) <-chan string {

GenerateCombinations(alphabet, length):
if length == 0:
    yield ""
else:
    for i := range alphabet{
        for j := range GenerateCombinations(alphabet, length-1){
            i + j
        }
    }

    return nil
}

我真的完全不明白这一点。正如你所看到的,那里有一些讲师提供的伪代码,但它的实现却让我费尽心思。

I/O 示例如下:

如果字母是{0, 1},密码长度是2,那么需要生成{0, 1, 00, 01, 10, 11}。

我感谢所有建议,但请认识到“初学者”一词并不能描述我的 Go 能力。说“使用渠道”之类的东西对我根本没有帮助。解释是我的朋友……除了“使用渠道”之外,我没有太多运气从我的教授那里得到解释。


你的老师已经暗示你应该使用通道而不是返回一个大数组。通过这样解决它,您将不必存储包含所有组合的这一大块数据,而是为您的函数提供不同的迭代并一次处理它们。

我们可以看到你们的老师暗示GenerateCombinations返回一个chan string而不是一个[]string:

func GenerateCombinations(alphabet string, length int) <-chan string

这也意味着该函数必须 1) 创建一个要返回的通道,2) 启动一个将迭代提供给该通道的 goroutine。这个函数看起来像这样:

func GenerateCombinations(alphabet string, length int) <-chan string {
    c := make(chan string)

    // Starting a separate goroutine that will create all the combinations,
    // feeding them to the channel c
    go func(c chan string) {
        defer close(c) // Once the iteration function is finished, we close the channel

        // This is where the iteration will take place
        // Your teacher's pseudo code uses recursion
        // which mean you might want to create a separate function
        // that can call itself.
    }(c)

    return c // Return the channel to the calling function
}

虽然我将把实际的迭代留给您,但每个循环都应该导致您将组合字符串放入通道中。由于它不是缓冲通道,因此迭代函数将等待主函数读取该值,然后再继续处理下一次迭代。

一个游乐场版本,包括主要功能:http://play.golang.org/p/CBkSjpmQ0t http://play.golang.org/p/CBkSjpmQ0t

使用递归的完整工作解决方案:http://play.golang.org/p/0bWDCibSUJ http://play.golang.org/p/0bWDCibSUJ

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go 编程:生成组合 的相关文章

  • 无法通过键获取 Gorilla 会话值

    我无法通过这种方式从会话中获取价值 它是nil session initSession r valWithOutType session Values key 完整代码 package main import fmt github com
  • 投射回更专业的界面

    我正在用 Go 编写一个游戏 在 C 中 我将所有实体类存储在 BaseEntity 类的数组中 如果一个实体需要在世界中移动 那么它将是一个从 BaseEntity 派生的 PhysEntity 但添加了方法 我尝试模仿这是 go pac
  • nsq 无法通过连接到 nsqlookupd 来消费消息

    我尝试使用 docker compose 来运行 nsq docker compose yml如下 version 3 services nsqlookupd image nsqio nsq command nsqlookupd ports
  • 在函数中将通道作为参数传递的不同方法

    我正在阅读一些Go代码 并说了几种传递Go通道的不同方法 也许它们是相同的 但我想知道是否有任何区别 因为我无法在线找到文档 1 func serve ch lt chan interface do stuff 2 func serve c
  • 使用 testify 模拟接口方法两次,输入和输出不同

    如何在 golang 测试中模拟接口方法两次 例如 type myCache interface Get key string data interface error type service struct cache myCache f
  • 使用 OpenTelemetry 统一不同服务的范围

    我刚刚开始使用 OpenTelemetry 并为此创建了两个 微 服务 Standard and GeoMap 最终用户将请求发送到Standard服务 该服务又将请求发送到GeoMap在将结果返回给最终用户之前获取信息 我使用 gRPC
  • 递归追加到切片不起作用

    我正在尝试学习 Go 但我不明白为什么递归调用堆栈末尾的这段代码返回一个空切片 有帮助吗 还tmp甚至似乎没有在调试器中注册 func main input 3 int 4 6 7 expected 6 7 4 6 7 4 6 4 7 fm
  • 如何在Go中将字节数组转换为字符串[重复]

    这个问题在这里已经有答案了 byte字符串会引发错误 string byte n 也会引发错误 顺便说一下 例如 文件名的 sha1 值是字符串 它是否明确需要 utf 8 或任何其他编码集 谢谢 我用来转换的最简单方法byte to st
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List
  • Golang HTTP Post 错误:连接被拒绝

    我正在尝试向正在运行 PHP 应用程序的端口 8080 上的本地主机发送 post 请求 卷曲效果很好 curl data key asdf http localhost 8080 但在 Go 中我收到以下错误 Post http loca
  • Golang 有 libfaketime 替代品吗?

    我想自动化一些测试 我必须操纵系统时间来检查用 golang 编写的程序的身份验证行为 根据这个帖子 https stackoverflow com questions 36024872 libfaketime doesnt work wi
  • 如何在 Docker 容器中持久保存 go 1.11 模块?

    我正在将 Go 1 10 应用程序迁移到 Go 1 11 这还包括从dep https golang github io dep to mod https github com golang go wiki Modules用于管理依赖关系
  • Golang SSL TCP套接字证书配置

    我正在创建一个 Go TCP 服务器 不是 http s 并且尝试将其配置为使用 SSL 我有一个 StartCom 免费 SSL 证书 我正在尝试使用它来完成此任务 我的服务器代码如下所示 cert err tls LoadX509Key
  • 将 Protobuf 消息持久保存到数据库

    保存使用 protobuf3 定义的数据的正确方法是什么 我使用 golang 和 Java 两者都支持 ORM 在 java 中使用 Hibernate 在 golang 中使用 gorm 这两个地方我都需要将生成的代码转换为相应的实体模
  • 如何在Postgresql时间戳中存储Golang time.time?

    我可以知道如何存储time timePostgresql 中的对象 例如 SQL 查询 INSERT INTO UserAccount email login time VALUES email protected cdn cgi l em
  • http:多余的response.WriteHeader调用

    我有一个HandleFunc 如果成功的话 我希望 显然 能够 sent a 200回复 在回复中写一条信息性消息 但是以下代码片段 在快乐路径中执行 if fullRun w Write byte successMsg w WriteHe
  • 如何最大限度地减少 Go 中的垃圾收集?

    有时您可能想避免 最小化垃圾收集器 所以我想确定如何做到这一点 我认为下一个是正确的 在函数的开头声明变量 使用数组代替切片 还有吗 为了最大限度地减少 Go 中的垃圾收集 您必须最大限度地减少堆分配 为了最大限度地减少堆分配 您必须了解分
  • 如何退出执行延迟调用的 go 程序?

    我需要使用defer释放手动创建的分配C图书馆 但我还需要os Exit在某个时刻具有非 0 状态 棘手的部分是os Exit跳过任何延迟指令 package main import fmt import os func main defe
  • 使用指针接收器调用函数的 Go 语法

    在Go中 如果我定义一个带有指针的函数作为接收者 它是否应该只允许从指针调用该函数 为什么从值本身调用这个函数就可以 并且有同样的效果 例如 在以下程序中 m1 reset 和 m2 reset 具有相同的效果 即使 m1 是一个值而 m2
  • Go中通过反射给struct成员赋值

    我有一个结构 v 其中包含成员 A B C 字符串 使用反射 我可以获得字段的名称及其值 typ v Type for i 0 i lt v NumField i gets us a StructField fi typ Field i f

随机推荐

  • 动态添加按钮到面板并获取其父 ID

    我创建了一个页面 为管理员提供了一种更改照片信息 例如标题 描述等 的方法 页面上的所有控件都是动态添加的 因为我有多个照片库 面板 gt 父级 button 标题文本框 描述文本框 在每个面板中 我都有一个按钮 单击该按钮会将更改后的信息
  • 32 位编译在 64 位 Ubuntu 16.04 上失败

    我有一个应用程序需要使用 glib 和第三方提供的 32 位库 当我在 32 位 Ubuntu 上编译时 应用程序构建并成功运行 但是 当我在 64 位 Ubuntu 上尝试相同的操作时 由于以下错误而无法构建 usr include gl
  • CGPDFDocument 和 CGPDFPage 的 MonoTouch CoreGraphics PDF 内存问题

    我已经使用 MonoTouch 3 周了 一切都很顺利 直到我必须在我的应用程序中显示 PDF 使用苹果的Quartz 2D 编程指南 http developer apple com mac library documentation G
  • 如何录制媒体播放器中当前正在播放的实时视频流

    我用谷歌搜索了很多 但没有发现任何成功 甚至没有一个可以让我启动的点 我正在使用 VideoView 播放来自 url 的视频 成功播放视频 同时我想录制当前播放的视频 例如 http ip streamname playlist m3u8
  • 在 Flutter 中创建弹出对话框

    我需要一种在颤动中创建弹出对话框的方法 我能够根据需要创建 双色调 设计和一个对话框 但是当用户单击按钮导航到此屏幕时 我无法找到弹出对话框的方法 创建视图的代码 class CreateID extends StatelessWidget
  • 如何有条件地更改详细信息列表中行的颜色?

    我正在看自定义项目行 https developer microsoft com en us fabric components detailslist customitemrows但没有太多文档 我有一个表 如果当前用户创建了一行 我想将
  • 马尔可夫链如何工作以及什么是无记忆?

    马尔可夫链如何工作 我读过维基百科马尔可夫链 http en wikipedia org wiki Markov chain 但我不明白的是失忆 无记性指出 下一个状态仅取决于当前状态 而不取决于 之前发生的事件的顺序 如果马尔可夫链具有这
  • 如何清除 PHP 中先前回显的项目

    在 php 中 有没有办法清除 删除所有先前回显或打印的项目 例如 我的脚本使用 include 函数 包含的文件不应回显任何内容 以防万一有人 例如黑客 尝试 我需要一种方法来删除
  • Xamarin.Forms 页面BackgroundImage 属性

    由于 BackgroundImage 是一个字符串 您应该如何设置页面的背景图像 我将非常感谢任何建议 到目前为止我已经尝试过 MainPage new ContentPage BackgroundImage Images image pn
  • pg-promise:在事务中的下一个查询中使用一个查询的结果

    我是带有 pg promise for postgres 的 node js 尝试按顺序执行 2 个插入的事务 第一次插入的结果 ID 应在事务中的下一次插入中使用 如果任何查询失败则回滚 嵌套第二次db none inside then
  • 错误:NullPointerAccess:变量“”在此位置只能为空

    我正在创建一个 Web 服务来查询数据库并返回数据库中对象的列表 我收到错误 NullPointerAccess 变量 varname 在此位置只能为空 无论我将变量放在哪里 我都会收到相同的警告 无论我在变量中放入什么 它都会返回 nul
  • 这是确保 Java 中仅存在对象的单个实例的有效方法吗?

    我在使用 Mongodb 时遇到了一些奇怪的错误 在 Mongodb 中 你应该维护Mongo单例 我只是想确保这实际上是有效的 public class DBManager public static Mongo mongoSinglet
  • 读取工作簿而不使用 ADO 打开它

    在这个问题之后 无需打开另一个工作簿即可获取值 图表 https stackoverflow com questions 16840573 get value charts in another workbooks without open
  • 基于 jquery xml 的模板引擎

    从缺乏信息来看 我猜下面的问题可能有点 偏离滑雪道 正如他们所说 我正在尝试找到一个基于 XML 的 javascript 首选基于 JQuery 模板引擎 有点像 Ext JS Sencha 或 SPRY 数据集如何做事 轻一点的东西 显
  • 如何在 Dapper 中使用“Where In”

    我已经尝试使用一段时间但没有成功IEnumerable
  • 如何使用 FragmentManager 替代已弃用的 showDialog

    我正在使用 displayDialog 方法 它有效 但 Eclipse 向我显示了一个警告 showDialog showRetry 1 0 Method private void displayDialog final boolean
  • 如何跨域共享 Firebase Simple Login 会话?

    我有 example com 和 app example com 如何让某人从一个域登录并与另一个域共享该会话 Firebase 简单登录会话使用 LocalStorage 或 SessionStorage 进行持久化 其范围仅限于 HTM
  • Android Studio - 无法打开调试器端口:java.io.IOException

    我在这里陷入了一个问题 我无法使用 Android Studio 3 5 1 附加调试 它不断向我显示消息 运行 Android 调试器 8600 时出错 无法打开调试器端口 localhost 8600 java io IOExcepti
  • 使用 WHERE 在 SQLAlchemy Core 中进行批量更新

    我已经成功地在 SQLAlchemy 中使用批量插入 如下所示 conn execute addresses insert user id 1 email address email protected cdn cgi l email pr
  • Go 编程:生成组合

    这是家庭作业 我正在开发一个项目 其中一个非常小的 非常小 一旦我开始工作 它基本上是项目其余部分的先决条件 部分是使用 Go 例程生成一些组合 我的代码是 package bruteforce GenerateCombinations i