我正在研究swift的教育脚本。目的是促进大学班级同学之间在统计方面的合作。每个学生都需要(匿名)向同事的工作提出建议。我编写的脚本可以使目录中的所有markdown文件都匿名化(即删除作者和电子邮件yaml键),并创建包含内容的新文件并使用电子邮件地址重命名。
到目前为止,我能够从每个文件中删除author:
和email:
yaml键,并且我还能够重命名目录中的文件。但是,我正在努力创建一种随机化文件和电子邮件的方法。关键是原始文件应该传递给另一个学生,但没有最后一个知道作者。接收学生应该随机决定。这种随机化是我正在努力的方法。
这是一个linux项目,我发现创建MWE的最简单方法是使用优秀的John Sundell's marathon
script structure编写脚本。以下是代码:
import Yaml // marathon: https://github.com/behrang/YamlSwift.git
import Files // marathon:https://github.com/JohnSundell/Files.git
import Foundation
var email: String = ""
var document: String = ""
for file in Folder.current.files {
guard file.extension == "md" else {
continue
}
let content = try file.readAsString()
let pattern = "(?s)(?<=---).*(?=---)"
if let range = content.range(of: pattern, options: .regularExpression) {
let text = String(content[range])
let value = try! Yaml.load(text)
email = value["email"].string!
let author = value["author"].string!
let emailline = "email: " + email
let authorline = "author: " + author
document = content.replacingOccurrences(of: "\n\(emailline)", with: "")
document = content.replacingOccurrences(of: "\n\(authorline)", with: "")
}
// Creating new file with name from email and copying contents into it
//let folder = try Folder()
let file = try Folder.current.createFile(named: email)
try file.write(string: document)
}
示例md文件:
---
# Metadata
title: hum
author: jecatatu
email: email@gmail.com
---
This is more text outside the yaml block
email: zwe@gmail.com
第二个档案:
# Metadata
title: My essay
author: brauser
email: brauser@gmail.com
---
Extra text
第三个档案:
# Metadata
title: My third essay
author: bestuser
email: bestuser@gmail.com
---
Extra text
首先,我不需要代码。但代码是受欢迎的。请注意,可以运行以上示例(前提是您有马拉松installed):
marathon run lf-araujo/collab
答案 0 :(得分:1)
您需要的是将一个评论者分配给一个同伴的确定性方法。您可以通过创建两个(random - &gt;文章)地图来实现这一目标。按随机键对它们进行排序,并按索引匹配文章。伪代码中的一个例子:
/* Note that you may want to be sure that random keys are unique */
map reviewers = [random_integer(): article_one,
random_integer(): article_two,
...]
map articles = [random_integer(): article_one,
random_integer(): article_two,
...]
sort reviewers by key
sort articles by key
for (index in 0..length(reviewers)) {
assign_reviewer(author_from: reviewers[index], to: articles[index])
}