분리 된 프레스


12

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

Dissociated Press는 기존 텍스트에서 임의의 텍스트를 생성하는 알고리즘입니다.

알고리즘은 텍스트에 N 개의 연속 된 단어 (또는 문자)를 인쇄하여 시작합니다. 그런 다음 모든 단계에서 이미 인쇄 된 마지막 N 단어 (또는 문자)의 원래 텍스트에서 임의의 발생을 검색 한 후 다음 단어 또는 문자를 인쇄합니다.

기능 또는 전체 프로그램으로 Dissociated Press를 구현하십시오. 가장 짧은 코드가 승리합니다. 명령 행 또는 emacs 스크립트를 사용하여 원래 Dissociated Press 프로그램을 호출하지 마십시오. 외부 라이브러리를 사용하지 마십시오.


2
이것은 "Markov Chain" 의 특별한 경우이며 , 좋은 태그를 만들 것을 제안합니다.
dmckee --- 전 운영자 고양이

이것이 단어 나 글자로 작동하기를 원하십니까? 또한 몇 가지 예가 더 도움이 될 것입니다. 나는 Wikipedia의 예를 많이 얻지 못했습니다.
Mr. Llama 2019

답변:


7

펄, 81 82

2 개의 문자 겹침을 사용하고, 줄 바꿈을 할인하고, 막 다른 길을 만나면 멈 춥니 다.

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

예를 들어, Markov 체인에 대한 Wikipedia 기사의 테스트를 시작할 때 사용됩니다.

$ perl dissociated.pl markov.txt 

j (MCMCST 상태 wily ov chaimices suces aps) diniter → throbabilit) statep chaility deps) fution mamamences steare mat arsterionowastainnexactiond ch 모델 상태 캘리 디스 disth haidete state and pout orent weenced j) 정의 witionton 캐비넷 정의 eation-zer-cated는 넥타이 fociatrin abilitins thenzyme ther 매트릭스를 이용하여 alin istativeloperizermaked applin ithanced, soren alithe examinibuticass Mary n-ze Markov corions를 사용하여 letuchainits tote ateuated Wine ine mod sain ph로, Bas는 pacte-capeaturropmatence를 사용했다. 그들에게 마코프는 체인 사이드 펜을 할 수 있습니다. 성결의 율표. powevelogenothe i) assucies exteplity reverticat grobabilition에 따라 alyible lany babingletichnial n × n. [14] 스테이트에 의한 모든 메이트 화학. [4] 경우. 예를 들어, 공무원에 대한 robaboteropy cor는 사악한 문명과 박식 한 귀족과 결혼 한 사람으로 인해 6 명의 모든 마티 돔의 계단을 차지한다. 우리가 ittiont의 전나무를 ariticiabilithighe하자 arial 다음에 -1는 그들에게 prolarkov 체 체인 다이. 뒷모습, grany classe는 안정된 4/10, Pever efical requancesparrecon, retereted 즉 Shasse는 probal devion을 먹는다. [성경이 너무나도 자상하다. "성경은 suate liblevare"tingenarkov clapergeran butiont : 이론 enegarkov 구성 공식적인 동기 부여 토템 통계 자료 배포자 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↰|

온라인으로 사용해보십시오!

캐릭터 레벨 해리 누르면, N = 2 (초기를 변경함으로써 변경 될 수 에 와 다른 행의 등. ).N + 1 (2) N3N+12N

입력

Mr. Wormtail은 Snape 교수의 좋은 하루를 입찰하고 그의 머리, slimeball을 씻도록 조언합니다.

(샘플) 출력

선량한 선한 사람인 ormtair와 선임 교수 인 MTair는 선한 사람에게 조언하고 소름 테일은 머리카락을 털어 놓고 좋은 날과 날, slimeball을 조언합니다.


분리 된 워드 레벨 몇 바이트 만 더 누르면됩니다.

52 바이트

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

온라인으로 사용해보십시오!

입력

King 's Cross Station은 거대하고 바빴으며, 벽과 바닥은 일반 흙으로 얼룩진 타일로 포장되었습니다. 평범한 사람들이 그들의 일상적인 사업에 대해 서두르고 평범한 대화를 통해 많은 소음을 낳았습니다. King 's Cross Station에는 Platform Nine (그들이 서 있었던)과 Platform Ten (가까운 곳)이 있었지만, 얇고 유망한 장벽을 제외하고 Platform Nine과 Platform Ten 사이에는 아무 것도 없었습니다. 뛰어난 천창 조명으로 많은 조명을 비추어 Platform Nine 및 Three-Quarters의 전체 부족을 조명합니다.

(샘플) 출력

방벽. 큰 채광창 오버 헤드로 충분한 조명을 비추어 Platform Nine (서있는 플랫폼)과 Platform Nine (서있는 플랫폼) 및 Platform Nine (서있는 플랫폼)과 Platform Nine과 Platform Ten (가까운)이지만 Platform Nine (서있는)과 Platform Nine (서있는)과 Platform Ten (가까운) 사이에는 아무 것도 없었지만 Platform Nine과 사분의 삼.


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("")(_ + " " + _))

다음은 Markov 체인에 대한 Wikipedia 기사에서 생성 된 샘플 출력입니다.

오늘 고정 분포는 고유하지 않습니다. I 확률이 k 오른쪽 화살표 위치를 충족하지 않음 전이 확률 분포는 시스템의 매개 변수가 시스템에있는 매개 변수 인 경우에만 매핑으로 표현 될 수 있으며, n이 고정 분포의 경우 i에서 고정 분포 또는 변하지 않는 경우 Q에 대한 고정 분포를 충족합니다.

당신이 사용하는 경우 그건 그렇고, "[a-zA-Z .,!?]".rwordregex당신은뿐만 아니라 편지를 기반으로 해리를 눌러 생성하기 위해 이것을 사용할 수 있습니다 :

Mi pimatransie의 나머지 클래스가 시스템 상태에 필요한 nnn에 오류가 발생하여 모든 작업을 늦추는 경우 Pater ext 상태의 backgrobability가 많은 성명을 지니고있는이 그림 또는 기간.

Jargon 파일 과 같은 큰 텍스트 파일로 정말 흥미로워집니다 . 이제 문자 기반은 이미 꽤 좋습니다.

다른 방향 알고리즘은 행복하게 오류가 발생합니다. LISP Mac 사전 인터넷 액세스 워크 스테이션을 중심으로 수십 년 동안 구축 된 "프롬 (prom)"및 메타 위치 해킹 (meta-location hack)의 약자입니다. 네트워크, 특히 네트워크에서 발생하는 네트워크와의 만남으로, 일반적으로`고객과 차드에서 종이에 다시 싣고 일부는 고유 한 특성을 가졌다.

단어 기반은 매우 재미있어집니다.

그 이후로보고되었습니다. 단 하나의 리소스 누수가 예상됩니다. 반 신화적인 언어 구조는 처음부터 조정할 수 없기 때문에 일관성이 없습니다. 당신이 장난에 컴퓨터를 입력하고 종료하면 실제 컴퓨터를 얻으십시오! 노출 수 말하는 것을 말하는 냉소적 인 초대. 작은 케이블은 실제 프로그래밍으로 비난 받았다. 10 년 후 파스칼이지만, 우리 제품의 대부분은 현대의 서브 쉘과 완전히 같지 않습니다. 이 항목이 모두 어머니인지에 대한 논쟁이 있습니다.


1
코드를 ungolfed로 보는 것이 항상 좋지만 규칙을 준수하려면 코드를 골프화해야합니다 (식별자를 단축하고 중간 단계를 결합하는 등). 추가 코드 블록으로서 바람직하게.
사용자가 알 수 없음

그 점은별로 없습니다. 농구대를 뛰어 넘더라도 펄 항목의 코드 난독 화 수준과 원격으로 비교할 수 없습니다. :-)
Hans-Peter Störr

글쎄-크기를 줄이고 싶지 않다면, 크기를 늘리고, 누락 된 가져 오기를 포함하여 적어도 작동하는지 여부를 추측하지 않고 프로그램을 테스트 할 수 있습니다.
사용자 알 수 없음

@userunknown 죄송합니다. 스크립트를 수정했습니다.
Hans-Peter Störr

2

파이썬 2.7, 355 자

AI 실험으로 전에 이와 같은 프로그램을 실제로 작성 했으므로 조금 해부하고 불필요한 것을 제거하고 골프를 치자.

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

펄, 65 자

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

이것은 JB의 답변 에 크게 의존 하고 있으며 조금 더 골프를 쳤습니다. 용도 say위선적 두 문자 절약을위한, 그래서 펄 5.10 이상과 함께 실행해야 -M5.010(또는 -E) 스위치.

Wikipedia dissociated 언론 기사 에서이 코드를 실행하면 다음과 같은 멋진 결과가 나옵니다.

Thided Press (또는 pocut ents. Refeed 2007-04-12-29). Refeaturrand는 basto useassociatualgor 1972)를 선호합니다. 1983 년 3 월 Itedith specelabst itelastst is (1983 inted bittechnif loodshe samplebrither foriginto useche inteditted Prentinks alsociallin)는 산포자를. 다. 29) Ame Jarrassocumovin aot sain 그의 ot. 이것들 (원산지로 acia는 잉크를 사용하여 어플리케이터가 정식으로 pociaticle을 사용함, lem Wilet ourraymovem!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.