离解出版社


12

http://en.wikipedia.org/wiki/Dissociated_press

Dissociated Press是一种从现有文本生成随机文本的算法。

该算法从在文本中打印任何N个连续的单词(或字母)开始。然后在每个步骤中,它搜索已经打印的最后N个单词(或字母)的原始文本中是否有随机出现,然后打印下一个单词或字母。

以功能或整个程序的形式实施Dissociated Press。最短的代码获胜。不要使用命令行或emacs脚本来调用原始的Dissociated Press程序。不要使用任何外部库。


2
这是“马尔可夫链”的特例,我建议这样做会很好。
dmckee ---前主持人小猫,

您要使用字词还是字母?另外,还有更多示例会有所帮助,我对Wikipedia的示例了解不多。
拉玛先生先生2012年

Answers:


7

Perl,81 82

使用2个字符的重叠,打折换行,遇到死角时停止。

for($/=$,,$_=<>,@_=/(..)/;print($a=$_[rand
@_]),($b.=$a)=~/..$/,@_=/\Q$&\E(.)/g;){}

例如,用于Wikipedia文章的马尔可夫链测试的开始:

$ perl dissociated.pl markov.txt 

j(MCMCST的状态为ap的变态),通过状态的变态性(dap)→变位)功能为stare mat arsterionowastainnexactiond的功能,模型的状态为th的状态,而pout的状态为j),定义为w的状态食用前应先将其与链霉菌素结合在一起,然后用蛋白酶增强其基质,这样可以增强玛丽·恩泽·马可夫(Mary n-ze Markov)的安全性。在使用了现代的ph以后,Bas才能使用pacte-capeaturropmatence。An to ren可以将Markov塞到他们旁边。重新发生大赦。[i]是在a。可靠的可逆的兰尼babingletichnial n×n上进行的。任何配偶,都由工作站决定。[4] 如果是。法院对法规的强制性修改,例如,将盗窃罪改判为死刑,并严格审理婚姻,因此,将全部6名男子Marty dom ince购进。让我们优先考虑的是最初的,那么prolarkov和an-1的关系就死了。在其他情况下,颗粒状等级的稳定性为4/10,在典型的情况下,即是沙西(Ras)食用了探针。[电缆所以分类是合适的liblevare“ tingenarkov clapergeran butiont:理论或enegarkov形式的论证是tivionom的stat ime tributionegive samin th pample,tegime 20,cality delso,

它会意外处理utf-8。可爱。


6

Brachylog,45个字节

s₃ᵇS&s₂ᵇṛ;S↰₁h
tT&ha₁l₂g;Tz{~a₀ᵈ}ˢṛtC&h,C;T↰|

在线尝试!

3N+12N

输入值

虫尾先生向斯内普教授求助,并建议他洗头发,即粘液球。

(样本)输出

ormtair是纤细的商品,并建议教授Profmt Professormtair,为他的商品提供建议,并建议or尾s他的头发,并建议他美好的一天,以及一天的粘液球。


单词级Dissociated Press再输入几个字节:

52个字节

ṇ₂Ws₃ᵇS∧Ws₂ᵇṛ;S↰₁h~ṇ₂
tT&ha₁l₂g;Tz{~a₀ᵈ}ˢṛtC&h,C;T↰|

在线尝试!

输入值

国王十字车站非常繁忙,墙壁和地板都铺有普通的脏污瓷砖。普通人匆匆忙忙地从事普通业务,进行普通对话,产生了很多普通声音。国王十字车站有一个九号站台(他们站在上面)和一个十号站台(就在附近),但在九号站台和十号站台之间只有一堵薄薄,毫无希望的障碍墙。巨大的天窗顶可以让充足的光线照亮任何9号和3个四分之三平台的根本不足。

(样本)输出

屏障墙。巨大的天窗让充足的光线照亮了任何平台九(他们站在)和平台九(他们站在)和平台九(他们站在)以及九号平台和十号平台(就在附近),但九号平台(他们正站在)和九号平台(他们正站在)和十号平台(就在附近)之间什么都没有,但九号平台和四分之三。


1
但是他们在哪个平台上?
Jo King

2

这是用Scala编写的稍微复杂的基于单词的算法,该算法考虑了任意长度的单词序列的概率。(这不是原始的解压新闻算法。)

该算法如下。在每个步骤中,选择从随机位置开始的文本的滚动一半,搜索在该一半中出现的输出单词的最长尾序列(可能为0个单词),然后输出下一个单词。

import io._, collection.mutable.ArrayBuffer, util.Random
import java.io.FileInputStream

val lines = new BufferedSource(new FileInputStream("markov.txt")) getLines
val wordregex = "\\b[a-zA-Z]+\\b|[.,?!]".r
val words = lines flatMap (wordregex findAllIn _) toArray
val rollingwords = words ++ words.slice(0, words.length / 2)
val rnd = new Random()
val outwords = new ArrayBuffer[String]()
for (i <- 1 to 1000) {
  val startposition = rnd nextInt (words.length * 2 / 3)
  val half = rollingwords slice (startposition, startposition + words.length / 3)
  var newword = ""; var n = 0; var index = 0
  while (index >= 0 && n < half.length && n < outwords.length) {
    index = half.indexOfSlice(outwords.takeRight(n))
    if (index >= 0 && index < half.length - n) {
      newword = half(index + n)
    }
    n = n + 1
  }
  outwords += newword
}
println(outwords.foldLeft("")(_ + " " + _))

这也是从marked链上的Wikipedia文章生成的示例输出:

今天的平稳分布不会是唯一的我的概率满足k右箭头的位置,非转移概率分布只能用系统单位上的参数表示,允许n是唯一的,因为i是平稳分布或不变测度。满足Q的平稳分布。

顺便说一句,如果您使用"[a-zA-Z .,!?]".rwordregex也可以使用它来生成基于字母的离解印刷机:

如果Mi pimatransie的休止类打开了系统状态所需的nnn错误,然后随机执行所有任务,则该图或期间具有可重现性的Pater ext状态具有一定的可重复性。

Jargon文件这样的大型文本文件变得非常有趣。现在基于字母的功能已经相当不错了:

其他方向算法会很乐意出错,而且很少见;LISP Mac pre-Internet访问工作站周围已经有数十年的历史了,它曾经是“临时舞会和元定位黑客”的简写。这可能已经死了。网上遇到的东西,尤其是来自网络的东西,通常是“客户”,然后再将其追回纸上,其中一些具有独特的属性。

基于单词的变得非常有趣:

此后据报道。它唯一期望的是一个资源泄漏n。半神话语言的结构不一致,因为它不能首先进行调整。如果您在嬉戏中输入计算机并结束,请获取真实计算机!小鬼 讽刺邀请说。小电缆被指责为真正的编程。十年后的Pascal,但我们大多数产品的现代Subshel​​l不太一样。关于这个词条是否每个人的母亲都有争议。


1
总是很高兴看到代码没有问题,但是为了遵守规则,有必要对代码进行分类(彻底缩短标识符,组合中间步骤,...)。优选地,作为附加代码块。
用户未知

这没有什么意义。即使跳了圈,我也无法与perl条目的代码混淆级别进行远程比较。:-)
汉斯·彼得·斯托尔2011年

好吧-如果您不希望减小尺寸,也许您想增大尺寸,以包含丢失的导入内容,以便至少可以测试该程序是否有效,而无需猜测。
用户未知,

@userunknown糟糕,抱歉-我已修复脚本。
汉斯·彼得·斯托尔2012年

2

Python 2.7,355个字符

实际上,我之前曾作为AI实验编写过这样的程序,所以让我们对其进行一点解剖,删除一些不必要的东西,然后打高尔夫球:D

import re,random,sys
r=range
x=re.compile("([\w']+[\.?!,]?)+")
f=open(sys.argv[1])
c=f.read()
f.close()
t=x.findall(c)
m={}
for l in r(len(t)):
 w=[];c=t[l]
 for y in r(len(t)-1):
  if c==t[y]:w.append(str(t[y+1]))
 m[c]=w
x=random.choice(m.keys())
for i in r(int(sys.argv[2])):
 if len(m[x])==0:break
 y=random.choice(m[x]);print y,
 x=y

输入通过提供文件名和所需输出的长度(以字为单位)而起作用

python disspress.py nevermore.txt 100

and nothing more! Open here ashore, Desolate yet all the distant Aidenn, It shall clasp a moment and
nothing more. Deep into the Night's Plutonian shore! Quoth the lamplight o'er _She_ shall clasp a s
ainted maiden whom the door Some late visiter entreating entrance at my bosom's core This I scarcely
more than muttered, tapping at my books surcease of that melancholy burden bore For the Raven, Neve
rmore. And the chamber door Bird or stayed he hath spoken! Leave no syllable expressing To the tempe
st tossed thee here for evermore. And each separate dying ember wrought its only stock and

先前挑战给您带来的示例文本

(可选)您可以将的内容保存m到文件中以备后用,因此它不必解析整个文件,因为这可能会花费较长的时间来建立它引用的单词字典,尤其是较大的文本(例如图书)。

编辑:无论是否已经选择了一个赢家,无论如何我都会发布它:P


0

Perl,65个字符

$/=$,;$_=<>;/./;($a.=$a[rand@a])=~/..$/while@a=/\Q$&\E(.)/g;say$a

这很大程度上取决于JB的回答,只是打了些高尔夫球。用途say为一个俊俏的双焦降耗,所以需要用Perl 5.10或更高版本以及运行-M5.010(或-E)开关。

在Wikipedia上的相关新闻文章上运行此代码会产生以下可爱的输出:

是所有人都吃afteditterelessam。蒂迪出版社(或pocut ents。Refeed 2007-04-12-29)。Refeaturrand更喜欢Basto Useassociatualgor(1972)。Itedith于1983年发表了一篇论文(1983年,位专家向其介绍了普伦蒂克(Prentinks)和西林卡林(theentlinlin)的使用。 29)。Ame Jarrassocumovin也这样做了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.