Schreiben Sie einen Hangman Solver


28

Sie müssen einen Hangman-Löser schreiben. Bei der Prüfung anhand dieser englischen Wortliste [1] gewinnt der Löser, der die meisten Wörter löst, wobei die Anzahl der insgesamt falschen Vermutungen der entscheidende Faktor ist. Alle Wörter in der Wortliste werden in zufälliger Reihenfolge getestet.

[1]: Diese Wortliste stammt von hier , dann werden die Zahlen entfernt, dann werden Wörter mit der Länge 1 oder mit nicht alphabetischen Zeichen entfernt, und dann werden die häufigsten 4096 eindeutigen Wörter als diese Wortliste ausgewählt.

Die Details:

Ihr Programm interagiert mit dem Spielprogramm, das Sie durch die Unterstriche und richtig erratenen Buchstaben führt. Ihr Programm wird geben, um Ihre Vermutungen auszudrücken, und es muss aus der Eingabe abgeleitet werden, ob die vorherige Vermutung richtig oder falsch war. Nach 6 Fehlversuchen verliert Ihr Programm. Ihr Programm muss nach jedem Spielende (nach Gewinn oder Verlust) für das nächste Spiel bereit sein.

Ihre Codelänge muss streng unter 2048 Byte liegen, und Ihr Programm darf keine externen Ressourcen verwenden (einschließlich, aber nicht beschränkt auf den Zugriff auf die Wortliste im lokalen Speicher oder über das Internet).

Beispiel : (Die Eingabe wird >hier nur zur Verdeutlichung vorangestellt - sie ist tatsächlich nicht in der Eingabe vorhanden.)

>_______         // 7 underscores
a                // Now you wait for input again
>_a___a_
e
>_a___a_         // Implies that your guess is wrong
>_____           // new round, this will be given ONLY IF you already have 6 losses

Angenommen, Sie liegen sechsmal falsch, dann erhalten Sie eine letzte Eingabe, die impliziert, dass Ihre Vermutung falsch ist, und Ihr Programm muss bereit sein, eine neue Runde zu beginnen (dh eine weitere Eingabe vorzunehmen).

Wenn du gewinnst,

>_angman
h
>hangman
>_____           // new round

Nachdem Sie wissen, dass Sie gewonnen haben (da die Eingabe keine Unterstriche enthält), müssen Sie bereit sein, die nächste Runde anzunehmen.

Ihr Programm muss beendet werden, wenn es eine Eingabe erhält END.

Wenn Ihr Programm nicht deterministisch ist (abhängig von Zufälligkeit, Pseudozufälligkeit, Systemzeit, Umgebungstemperatur, meiner Stimmung usw.), müssen Sie dies in Ihrer Einreichung ausdrücklich angeben, und Ihre Punktzahl wird zehnmal (von mir, sofern nicht anders angegeben) vergeben. und gemittelt.

Hinweis : Wenn Sie Sprachen wie Python verwenden, müssen Sie Ihre stdout nach jeder print-Anweisung explizit löschen.

Das Spielprogramm sieht wie folgt aus ( Dank an Nneonneo ):

import sys, random, subprocess

proc = subprocess.Popen(sys.argv[1:], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
def p(x):
    proc.stdin.write(x+'\n')
    proc.stdin.flush()

wordlist=[]
f=open('wordlist.txt', 'r')
for i in f:
    wordlist.append(i[:-1] if i[-1]=='\n' else i)
# wordlist=[i[:-1] for i in f]
random.shuffle(wordlist)

score=0
totalerr=0

for s in wordlist:
    s2=[]
    for i in s:
        s2.append('_')
    err=0
    p(''.join(s2))
    while err<6 and '_' in s2:
        c=proc.stdout.readline().strip()
        nomatch=True
        for i in range(0, len(s)):
            if s[i]==c:
                s2[i]=c
                nomatch=False
        if nomatch:
            err+=1
            totalerr+=1
        p(''.join(s2))
    if err<6:
        score+=1
p('END')
sys.stderr.write('score is '+str(score)+', totalerr is '+str(totalerr)+'\n')

Verwendung: python ./game.py [yoursolverprogram]

Beispiel: python ./game.py ruby ./solver.rb

Dies sollte wie das alte Scoring-Programm funktionieren, ist jedoch nicht von Named Pipes abhängig, sodass es auch auf anderen Plattformen funktioniert. Lesen Sie den Revisionsverlauf, wenn Sie an der alten interessiert sind.


Welche Laufzeitumgebungen werden Sie haben? Kann ich node.js verwenden?
Aebabis

Wenn eine Einreichung ein Wort verfehlt, das keine Buchstaben erraten hat und das nächste Wort die gleiche Länge hat, ist es unmöglich, nur anhand der Eingabe zu bestimmen, dass sechs Raten verstrichen sind. Die Anzahl der Vermutungen muss also als Status gespeichert werden.
Laindir

1
"Wenn Ihr Programm nicht deterministisch ist (abhängig von Zufälligkeit, Pseudozufälligkeit, Systemzeit, Umgebungstemperatur, meiner Stimmung usw.), müssen Sie dies in Ihrer Einreichung ausdrücklich angeben, und Ihre Punktzahl wird zehnmal (von mir, sofern nicht anders angegeben) genommen ) und gemittelt. " Ihr eigenes Testprogramm ist nicht deterministisch, daher halte ich es für fair, bei allen Einsendungen so vorzugehen?
Martin Ender

1
@ace Nicht, wenn sich mein Beitrag daran erinnert, welche Wörter bereits verwendet wurden. ;) Ich nehme an, dass in die Kategorie "Ihr Programm hängt von der Pseudozufälligkeit ab" fällt ... obwohl es die Pseudozufälligkeit in Ihrem Testprogramm ist. : D
Martin Ender

2
@ace: Darf ich vorschlagen, subprocessanstelle eines externen Fifo das Spiel zu steuern? Auf diese Weise funktioniert der Code auch für andere Betriebssysteme (z. B. Cygwin unter Windows). Hier wurde eine game.pyÄnderung vorgenommen, subprocessum das in der Befehlszeile angegebene Programm zu starten: gist.github.com/nneonneo/d173f8888e1ea0c6fe37 . Verwenden Sie es als python game.py <program> [args]zB python game.py python hangman.py.
Nneonneo

Antworten:


1

Python 2, Score = 2111

Laufen Sie mit python -u. (Zum Testen mit dem angegebenen Controller python ./game.py python -u ./solver.py.) Dies sind 2044 Codebytes + 1 für -u= 2045 Bytes.

I=raw_input
a=I()
while'^'<a:
 c=g=''
 while len(set(g)-set(a))<6and'_'in a:
	m=1879
	while c in g:c='eunotitihencatpangnaottoesthesdoeitmbolocepnngcbelympvhanlrarnnccinatceaesdabceatelittlvuumineiltlatrnrttnomnnlnaildplttryliaxgtssclhemngfrssioninssenryinoeovortpcntapeetedlrruitardooiitacteutrsotdsoanedytsacnstshesmoeloluaiaceaceuhlortnegveprreanslrraneioeitslincssdsisuosycmieiebrinncrueoinytnabatepcciamenitnisecgaannehiphanotntnorvrvpcaddcdiittdnnieirsytescdeaaorfrerroleomdaeripmaandrgndipaimesctrsliavnopstmhiagamnimnlaaieceotlarscnbvnssvtaslplpisoiicinynriilirelaiohllvlndohenossvildgerltgterisahcreridsctnedainmteooeelnppeiemitceciyndetgfltrtsnatlrasrnsreiueletunsttainrctreydcpmiieecpedarulcaosoiulinrtpinoopptcpuarnioredabtilsnleoonslmltircninloaludrltrviocsatcgratduioeietnseaidltmmryalaaaorbctaglnlatatiosnloettuongaetlndesicircelunoeaofaciunhcdnnteeadtaadteairceneangugipadcrhaetftoloilisesaeaishtcinemcoleiibloyuoeiupovgtrccttsuttialnnnncatbamtrrndtperieonsavseoalncrrvvmctdmornstsunilnrscariranagloeoeciteptiplctpmadtnertslioractotlairneutorccaocletedoaammiiaurcadgdsmtmooaefmhedetvoelmoaemoaacoeieneislsaccllsunacnnspaomtdpnioocposrocniciicounnatosuvrsrodreacloapcansrsnrohlnotpiiptdneauaaatorofaatsnigiioegloreraiipaitnsssrststetomtoneifencntopxmstsruiosgopanriapiapelteeeelraaeeeipavauptneaalinnrlgipgoteienenrnfdmorouslpcaprmaeusnnnclltpcasrsitiuaictigsarsdenteetrtelnrecurupmautosotrssnisrdsnnulisrgomnpeatyotioipetalyanluatsoteoytirsmssyeatpryrtfclfnttniscloeuiaerasniracntfglaylurotngoaesuetillrrldnranosteldmpooonticteaprdcdmoecaafnftaivsmtrtlrpigcrnodueusmyepeotpnotltalgtltlvyhspphrtaliemyrtehrrdeiesoiiteptsptintnypmoinspsgiocacurarpruiardmnmrpgtpnoimtlsonpacrsnenpcinantayvryumpncyaelnrtrsisrdmnspgmarlttttptitsmeipuaervntgcunnncrtrnnitbltarssmaircptrenrerrerpceoiedchecefbrttutbumnbsnoeitaenutetreccosttofcdtgslgeaoacmicuiotelornahmticcsrdswaoignancoelrrsarnrnrrptiyadetilcricnasnoasenpstasiopdtnossrccllsoelirtfarrioemaeosioaeorcaesfnfsthklcsrdhlwakl'[int(a.replace('_','1'),36)%m];m-=6
	print c;g+=c;a=I()
 a=I()

Ergebnis

score is 2111, totalerr is 20751

Wie es funktioniert

Das Programm ersetzt alle _s durch 1s im aktuellen Zustand, behandelt das Ergebnis als Ganzzahl zur Basis 36 und nimmt es als Modulo 1879, was uns eine grobe Hash-Funktion gibt. Es wählt einen zu erratenden Buchstaben aus, indem es diesen Hash-Wert in die lange Buchstabenfolge indiziert. Wenn es diesen Buchstaben bereits vorher erraten hat, verringert es den Modul um 6 (so bleibt es immer relativ prim bis 36) und wählt einen anderen Buchstaben aus und wiederholt ihn, bis es einen Buchstaben findet, den es noch nicht erraten hat.

Ich habe diese Strategie so entworfen, dass sie viele optimierbare Variablen (die einzelnen Buchstaben der langen Zeichenfolge) enthält, von denen die meisten die endgültige Punktzahl unabhängig voneinander geringfügig beeinflussen. Damit eignet es sich gut für die Optimierung von Bergsteigerstilen - ich habe die diversifizierte Spätakzeptanzsuche verwendet .

Python 2, Score = 2854

Mit der großzügigen Verwendung nicht druckbarer Bytes und der integrierten Komprimierung können wir viel mehr Informationen einlesen.

Dekodiere mit xxd -rund starte mit python -u. (Zum Testen mit dem angegebenen Controller python ./game.py python -u ./solver.py.) Dies sind 2047 Codebytes + 1 für -u= 2048 Bytes.

00000000: efbb bf49 3d72 6177 5f69 6e70 7574 0a61  ...I=raw_input.a
00000010: 3d49 2829 0a77 6869 6c65 275e 273c 613a  =I().while'^'<a:
00000020: 0a20 633d 673d 2727 0a20 7768 696c 6520  . c=g=''. while 
00000030: 6c65 6e28 7365 7428 6729 2d73 6574 2861  len(set(g)-set(a
00000040: 2929 3c36 616e 6427 5f27 696e 2061 3a0a  ))<6and'_'in a:.
00000050: 096d 3d33 3433 310a 0977 6869 6c65 2063  .m=3431..while c
00000060: 2069 6e20 673a 633d 2727 2778 da05 c101   in g:c='''x....
00000070: 62a8 3808 04d0 b322 1923 bf04 b230 b1f5  b.8....".#...0..
00000080: f6fb 1e42 6c73 475a e2e1 277d 3d19 d0c1  ...BlsGZ..'}=...
00000090: 5f9e d177 4f21 50d6 67ab 49b2 9ce1 09cb  _..wO!P.g.I.....
000000a0: b4ca 793e ab4a 49a6 c567 e530 b9bf 41a9  ..y>.JI..g.0..A.
000000b0: 61b1 4dcc 77a1 7a3a c5a8 cb6a 3008 5958  a.M.w.z:...j0.YX
000000c0: fc15 ff50 d515 e0b3 326f 44d7 aecf 32fb  ...P....2oD...2.
000000d0: 4050 03b0 3302 5e1c f038 1ea2 bf04 19f6  @P..3.^..8......
000000e0: a847 1a8a 2571 47a3 0c68 a6c6 4b5c 72ed  .G..%qG..h..K\r.
000000f0: e463 a51a 509b aae2 bd85 dc96 5ca7 dbb0  .c..P.......\...
00000100: a5af bddc 6b77 f9ef 020c 86c1 8bba 2734  ....kw........'4
00000110: 4cb6 20bb e2b6 68af ba5d 5d4a 44ce 73a7  L. ...h..]]JD.s.
00000120: 5c72 4ad8 1d3a 0eed ea63 9629 9c56 518f  \rJ..:...c.).VQ.
00000130: e51b 32fa 2f4f da18 3592 de3c 335d edae  ..2./O..5..<3]..
00000140: 1f1f cd86 bedb cb3b 44c5 cf91 8047 d8b4  .......;D....G..
00000150: 33c2 aeff eea6 3184 5332 09bb a051 1191  3.....1.S2...Q..
00000160: 18dc f1dc a3a5 4220 36d7 c95c 7bb4 fc2d  ......B 6..\{..-
00000170: a518 9d56 937d bb35 b962 2e6d bdb6 dc07  ...V.}.5.b.m....
00000180: 5b10 ca25 275b 2523 d57c 1363 5ad7 f9ca  [..%'[%#.|.cZ...
00000190: 249e 8ea2 83c6 6af4 3de3 1fea 15ba ec1d  $.....j.=.......
000001a0: e70c 96b8 38d8 b225 62a4 63d0 fa2e 5c72  ....8..%b.c...\r
000001b0: 6057 ecf8 3db2 9f7d 185c 72ee 8e5a e519  `W..=..}.\r..Z..
000001c0: 02db bfbb c25a c738 d2b6 b454 8d56 5ab6  .....Z.8...T.VZ.
000001d0: 11ae 27cc e476 81e8 2321 9135 c833 3a4b  ..'..v..#!.5.3:K
000001e0: 8a89 919e 26e8 3623 e44d aaec 59db 6f6e  ....&.6#.M..Y.on
000001f0: 79da 3941 29e8 d274 7eb6 0aac 3249 8b1b  y.9A)..t~...2I..
00000200: b25d 1ff1 c496 f75c d125 e2aa f3b4 21a0  .].....\.%....!.
00000210: 7a55 d31d 4939 8433 ea97 f927 f9f3 0954  zU..I9.3...'...T
00000220: a861 2baa 7568 e1ce d489 f59d 1365 a69e  .a+.uh.......e..
00000230: fc22 bef1 a0cc 7dfc a320 7ad5 fa39 3f5d  ."....}.. z..9?]
00000240: 16b0 58b0 253c c54b f4d8 5729 cfb6 2371  ..X.%<.K..W)..#q
00000250: c328 c5ab 1315 fcc2 27ad 8462 b5d5 d6f8  .(......'..b....
00000260: 76aa fb12 c775 1733 24df 98f9 dd86 cbbe  v....u.3$.......
00000270: 0c6e eb38 695f 705b 062d e231 3812 bdc4  .n.8i_p[.-.18...
00000280: 4664 ae0e 30a9 2cfb 3cf2 84dc 806e eb86  Fd..0.,.<....n..
00000290: 7988 d147 1bc9 f7b3 ad1f 1914 2d97 99c2  y..G........-...
000002a0: d096 711b 4f24 74d3 ebd9 8d11 7a4a 6518  ..q.O$t.....zJe.
000002b0: e25a 9c0c 79b2 661c 8188 6a88 7315 ed7e  .Z..y.f...j.s..~
000002c0: b7ce 6d18 b06a 34d0 0a89 de1c 0509 65b4  ..m..j4.......e.
000002d0: ae5d 303d d2f2 7e98 cf07 ebb6 a4c0 e311  .]0=..~.........
000002e0: 13c4 1133 9b69 ecb6 9da7 75c8 1806 c136  ...3.i....u....6
000002f0: 2531 acbe aaa1 9353 fa13 ff28 fa62 999b  %1.....S...(.b..
00000300: b59f f13d 47ca a7f5 e706 06f1 9374 78b1  ...=G........tx.
00000310: 649a ea19 a156 efe0 084a b06b 31c0 d86d  d....V...J.k1..m
00000320: c913 a3d4 dbb0 6248 851f 688f 11fb cd91  ......bH..h.....
00000330: f339 9fb9 c9fe 0ecc acfc 6eeb 1544 6469  .9........n..Ddi
00000340: 223c 5d5e 14bd caaf f3ca fc4c 6cc4 b2a2  "<]^.......Ll...
00000350: ade5 5656 df3f 7046 c9ab cd63 3c5a caf3  ..VV.?pF...c<Z..
00000360: eec4 23ce aeb0 5aa8 7273 c1a7 d5b3 627a  ..#...Z.rs....bz
00000370: 4b5b ec3b 7f87 48cb 5740 51d8 79aa f4cd  K[.;..H.W@Q.y...
00000380: 5315 f53b ed89 2d7f 5736 d4f4 12e1 f1a0  S..;..-.W6......
00000390: 7d5b f45b 8323 4bd8 37fb 173e ed3e e85d  }[.[.#K.7..>.>.]
000003a0: 7f82 e83d de15 2925 cbb4 702f 04c4 b8f0  ...=..)%..p/....
000003b0: 4998 b5f4 7ad3 b8f3 9ad3 5008 1722 c7ee  I...z.....P.."..
000003c0: ca10 40f2 3fb1 8f2b 2262 f70e 8358 c2ac  ..@.?..+"b...X..
000003d0: 0b78 4ca2 163b 2f74 3c02 df67 a4eb f9f9  .xL..;/t<..g....
000003e0: 799c b5c4 14b6 d672 54d5 37c3 6a7d 1675  y......rT.7.j}.u
000003f0: f219 bd6e ee58 eda8 3af1 6989 c8c9 f1a8  ...n.X..:.i.....
00000400: eeeb dcfa bed7 eef5 4ea7 50ff bde8 92f8  ........N.P.....
00000410: 6648 2980 ebf9 7645 84d9 0ef5 1192 c672  fH)...vE.......r
00000420: 254f e460 8da5 79d6 0fbc 2138 1edf b1ad  %O.`..y...!8....
00000430: 355a 98ab 548b db38 43ef 12db ef01 b93c  5Z..T..8C......<
00000440: 933a cbf1 44e6 2b85 f22c f6db e922 e1e3  .:..D.+..,..."..
00000450: 113e 803f 562c 83df 898c 3dca 86fc c809  .>.?V,....=.....
00000460: c09d 8585 87b0 4a78 8908 fc4f e0f3 4731  ......Jx...O..G1
00000470: 671f c4de 53f3 a85f 8954 fed5 ee2c 99c4  g...S.._.T...,..
00000480: f091 6feb 5307 4f70 7df4 2620 d7d9 dca4  ..o.S.Op}.& ....
00000490: 4644 a948 4016 44bc 80df 7d6f c686 6499  FD.H@.D...}o..d.
000004a0: a4bc 75d0 2506 bf1d 2747 6b54 95be cfb1  ..u.%...'GkT....
000004b0: 7b4b d70a 89b0 ac68 e2c4 1394 ba20 4d01  {K.....h..... M.
000004c0: 204c 64f3 721f 2a53 862d 89f5 59df b273   Ld.r.*S.-..Y..s
000004d0: 7c32 470f 7055 ef6e 2167 d4dd f546 9c0e  |2G.pU.n!g...F..
000004e0: 9eda bf3a 78ce d946 28b5 2c8d f79f 7c31  ...:x..F(.,...|1
000004f0: f940 d75d 8940 aca2 f6af f538 1eaf 6ef7  .@.].@.....8..n.
00000500: c81d 56c5 955c 0506 7474 fa7d 4627 b6fe  ..V..\..tt.}F'..
00000510: 4aa9 9abd 825d 166f 852c 8a4b b87e 727f  J....].o.,.K.~r.
00000520: 43c6 d657 eeb5 46cb 449b ce1b cc11 a25c  C..W..F.D......\
00000530: 72b1 8ccd 7feb ac50 8c21 a75c 30cb a3a7  r......P.!.\0...
00000540: ebc3 326c 0a9e 8b3a 513e 560b 2c31 cb61  ..2l...:Q>V.,1.a
00000550: c6bc 6748 90e1 6e3c ae15 8e37 9264 f73f  ..gH..n<...7.d.?
00000560: 696b 3c62 47a8 f091 82a7 0f4e 2f7d 1343  ik<bG......N/}.C
00000570: d202 b436 3e36 7825 7fc7 8b0b 2543 cdff  ...6>6x%....%C..
00000580: 2a33 08af e34a 652e d547 d87d 0c4f b6d8  *3...Je..G.}.O..
00000590: 5105 ad4b 47e9 31ad 2bec 98f0 d6aa 487d  Q..KG.1.+.....H}
000005a0: d26b 33fa 651c 67b7 f189 7c01 cf87 24ee  .k3.e.g...|...$.
000005b0: f2d5 3634 49f3 6aad 898c 914f e6fe 202d  ..64I.j....O.. -
000005c0: 8f18 2e3b a1dc fe8c 624c 3d66 27ca 54da  ...;....bL=f'.T.
000005d0: 1183 c790 96fa f357 bee8 6171 d69e 451d  .......W..aq..E.
000005e0: 5aad 5bd5 681a 0cc1 b6ce c3d4 82d9 d7a6  Z.[.h...........
000005f0: e269 4bac bbff c406 7388 85d6 6dda f2c4  .iK.....s...m...
00000600: 0f75 e17c dd1d acfd 6086 904c c59c 935b  .u.|....`..L...[
00000610: 0a8f cef8 c935 51ad d44a d9b2 aa0b e01c  .....5Q..J......
00000620: 3ff9 bb87 3190 b4cc 2fed 4bd1 58a1 f06b  ?...1.../.K.X..k
00000630: ee44 1a6c 435d ae3a e7ef a501 a30e 6def  .D.lC].:......m.
00000640: 21ea 3b89 32e1 631b 53f8 c14a f636 51f9  !.;.2.c.S..J.6Q.
00000650: d662 ef32 b386 ed27 6b87 5b5e 8f5b 9776  .b.2...'k.[^.[.v
00000660: dfe0 e83d 1f29 fbf2 dc5b b843 60bf cbc8  ...=.)...[.C`...
00000670: aa9a 9ad2 f94e 2ea9 96b0 296c 937e 65a3  .....N....)l.~e.
00000680: eafd a4d0 85b5 9f4a c671 7ece 5811 c7b7  .......J.q~.X...
00000690: d3c6 75e0 70b3 224d c9aa d8f1 fb6e f4ea  ..u.p."M.....n..
000006a0: 1d7a cef7 5fc7 5a98 7fd5 28b5 753f 7c43  .z.._.Z...(.u?|C
000006b0: da79 9d90 1a51 33ae ca7a d5ea a990 fed3  .y...Q3..z......
000006c0: 5ff5 2975 7b99 8333 44c2 a7fa 17a3 875d  _.)u{..3D......]
000006d0: 70ef 2361 6d5a 1cc8 13a7 d482 30c6 2b84  p.#amZ......0.+.
000006e0: 4d4a a765 c81b 2e16 3e62 08d8 ce5a 2beb  MJ.e....>b...Z+.
000006f0: a823 42ef 633f 7858 cdaa 755c 3097 f029  .#B.c?xX..u\0..)
00000700: 2afa 06d8 47c0 2714 f3fa 1554 d8a5 1a8b  *...G.'....T....
00000710: 77ac b319 ac47 9b5e 5ba7 a5ae 7dc7 c86f  w....G.^[...}..o
00000720: e73b 2a62 7a3e 7b29 6583 b227 0417 bb6e  .;*bz>{)e..'...n
00000730: 98ef 9097 6f9b c655 8f20 32ce a60e 6556  ....o..U. 2...eV
00000740: ce62 c8c9 afab c30e 6908 5675 19c6 5019  .b......i.Vu..P.
00000750: 62dd 131b 9c2d 3968 3f42 5b96 e7c9 1e23  b....-9h?B[....#
00000760: f1b0 0280 9ce9 f9cc 92ec 7eb5 a7c6 9619  ..........~.....
00000770: 5aab b832 b7cf 865c 72f1 9454 e33a 9975  Z..2...\r..T.:.u
00000780: 5b8a d8e8 5f46 0a22 2397 7d77 f70a 33b7  [..._F."#.}w..3.
00000790: 5183 5d5e 7267 54c5 a204 1e2f 470a dad2  Q.]^rgT..../G...
000007a0: a554 e493 7f06 7ff9 5fdd dfff 8428 a74f  .T......_....(.O
000007b0: 2727 272e 6465 636f 6465 2827 7a69 7027  '''.decode('zip'
000007c0: 295b 696e 7428 612e 7265 706c 6163 6528  )[int(a.replace(
000007d0: 275f 272c 2731 2729 2c33 3629 256d 5d3b  '_','1'),36)%m];
000007e0: 6d2d 3d36 0a09 7072 696e 7420 633b 672b  m-=6..print c;g+
000007f0: 3d63 3b61 3d49 2829 0a20 613d 4928 29    =c;a=I(). a=I()

Ergebnis

score is 2854, totalerr is 19482

9

Python: 2006 Bytes, Score = 1501

1885 Bytes, Score = 1337

1961 Bytes, Score = 1207

Hier ist mein Beitrag:

import sys
b='eJwdVQuW4ygMvJdyGgwYtAGJQQKHOf2Wp9/rJqGxVaqP+HxUMlGx5F86/XoqsUuonzAz5cf5vqjJ6OlQudxOJR3ibJ8cwuSmsTX12daVht8ubj15miaEH/GrESXrQrXbl1K0m2hs6dRjMkp1PuS2/9JoVslkLmp2L6J6f5kij4s0nkSPni/5GZtixSuKcKd7lYvsfi7yNYxseKXqV6fURkc//KXe+P6Hc071xuZteixiSRtzMnavwNfqcydqSzb+9hMTlW/UQSNe5uRx1EVp1OhA7gXb0v+i0rKN1rYsGlWBufozlFbzP+i2KXCpNKNjfTwkytcBnv+OgoV6blJ/8NDjF6iqUd2ojqcbrScmIaurHJxs6yHjck96brZJwncsIOHhzwyemZurKFrkmpIX9yXSNGsKdF+F+rF2fam0+KAMj3YdoXFJR+nY7AL4y1jaopNuBhk6sl03pSd7x2IxoyeLO6dGedjp9V0inusji0EAyR4pBttN6dt+UR/SYBHCVwuxPZSvqNYpZhPIWXM3Segs30IFXKZKSzqDkcdORud59xVJ8o4WsJQelUqXnIAjV/2whDybo1mDmhYCeAjZV4552gSWOa5aSG3WZ0SaqZVe4Y+o7R+Ps5knum0pDGNxrKA3De3Lwo/si420aemw2g/tdq5sKN1HyltpLNeY/qPUYwsLatc/pwRq5eSwK4l5LhHEnSIZhhG9xsFqeqDMRctmTnVQRoamwUtloiLNrgV+a0uzHBKAyUYl61yD+m++GkgeW1eiuMDEoCR6504z32V9JHD25tPVHFyXOGOc+A2vABogIw9vfxWBatuHwaWggEELdS+8De8z7ZHhir70cLoQpYYDOgfMw+ASbrhnbrwQ27x4TNt/3qHBEPSmwzlagqlH5J4Bk2FBqEvc9fXORUnnnceiMAc2kALwNdOB4W87eAw2uAwsIncpu+IYutsJwsJ/JfusCZNipqyL8uwjNHuDN3MJQBSg/Sr1ppByfD9RWaAt/QhLGDDv2C1PxSvBbfyEFqNO5ZwZpE2yqd2PjEwueV1aJoBdGxNjSl8klx3nuWAAxgCxKePt0bykLrCcQWspM61K3qcNuJYa53VMBWKNJCsrYkzZGfZf49fotx3ZYURvyYQ+GR6iOVCfT6fB4hkehfOws/k3PjFo82ZgaE60TxccO4DqKEKDVXSsuknSmuzZwB8C+h7YBS3oaRPSyGvurfnNvM2bMustIxXMYsM/WdvAvLn8hIx5CMCJQxEM2P2yLuyWYHvZziC+T8IWooeMVWDnvoF6wcETdOUVYBFcFdCop/CJ07RpwyjNy1kslHYwdfNxGYGtX4lWduETDAFIeLJntoAk/sjHlLI5tIwp6mcLF5gxJOR2eugsO5/fey0EhMb72J+mrwyB3rkw2eT0cCPuAOUc5cw/b7mQi8942Eaig4nkYUE9xi3D+FTVRxd80XLL9MXhgISod0JBHxjPPCNirRsh/0TgWdrB/6u01zHbvUnBDc4yhknZxCXgrgSWdv8h1oQR3q8hjdbbE5zK6e4U9nhNkHxCwjCdN26sS9+BIMPe7+EDExPGccPLQYvC8+SY1ioz3AxVUWfdJi3RNjjEMyiWq31CjITE1cQPTO5En39bkFEzri7c2f8Dkow6qw=='.decode('base64').decode('zlib').split(';')
R=raw_input
def G(c):print c;sys.stdout.flush()
def P(w):
 if'END'==w:exit()
 d=b[len(w)].split(':');l=len(d[0]);p=f=0
 while p<l:
  G(d[0][p]);x=R();r=w==x;w=x;f+=r;p+=p+1+r
  if'_'not in x:return
 for c in d[p-l+1]+'zq':
  G(c);x=R();r=w==x;w=x;f+=r
  if'_'not in x or f>5:break
while 1:P(R())

Ergebnisausgabe:

score is 1501, totalerr is 21608

Dieses Programm ist vollständig deterministisch. Der Riesen-Blob (ein mit der Basis 64 codierter Block zlibkomprimierter Daten) ist eine Liste von Entscheidungsbäumen (ein Baum pro Wortlänge). Jeder Entscheidungsbaum codiert einen vollständigen Binärbaum mit einer Tiefe zwischen 2 und 5. Jeder interne Knoten ist ein einzelnes Zeichen, und die Entscheidung erfolgt basierend darauf, ob das Zeichen im Henkerwort vorhanden ist oder nicht.

Jeder Blattknoten des Binärbaums enthält eine optimierte Häufigkeitstabelle, die für diesen Zweig der Baumsuche spezifisch ist. Die Tabelle wurde speziell optimiert, um die Vervollständigung bestimmter Wörter zu fördern, während andere Wörter vollständig ignoriert werden (was aufgrund des begrenzten "Fehler" -Budgets nicht möglich ist). Die Tabelle ist nicht für die Minimierung von Fehlern optimiert, und daher ist die Gesamtanzahl der Fehler des Programms trotz seiner (relativ) guten Punktzahl hoch.

Der Optimierer, der nicht gezeigt ist, verwendet einen nichtdeterministischen nichtlinearen Optimierer, der eine randomisierte Gradientenabstiegsstrategie verwendet, um die Häufigkeitstabellen zu erzeugen.


5
1337 ist eine gute Punktzahl. Lass es dort! = p
Hälfte

Wenn Sie Golf spielen möchten, range(4)können Sie diese durch ersetzen, [1]*4sofern Sie den Wert von nicht wirklich verwenden müssen i.
pastebin.com Schrägstrich 0mr8spkT

@ace: Danke. Ich habe vergessen, dass du das tun könntest. (Wie auch immer, ich habe gerade diese Schleife für die letzte Punktzahlverbesserung umgeschrieben, also ist das Ganze jetzt weg ...)
nneonneo

@justhalf: Ich mochte diese Punktzahl auch, aber ich möchte diese weiter verbessern. Es gibt so viel zu
tun

1
Übrigens können Sie einen Charakter rasieren, indem Sie decode('zip')anstelle vondecode('zlib')
justhalf

5

Rubin

Eine gemeinsame Einreichung von Benutzer PragTob und mir.

MAX_TURNS = 6

frequencies = {?t=>[3,48,145,214,252,266,249,223,191,142,63,44,16,1,0,1],?h=>[2,14,81,125,85,91,60,42,30,14,11,6,1,1],?e=>[5,49,260,316,456,408,328,279,202,125,50,32,12,0,0,1],?a=>[4,60,211,259,249,266,253,192,152,111,51,42,15,1,0,1],?n=>[4,30,120,136,214,252,238,214,189,128,59,45,16,0,0,1],?d=>[1,25,100,104,131,123,131,81,63,36,14,15,7,1],?f=>[2,13,51,58,64,67,41,40,28,18,11,9,3,1],?o=>[9,44,150,165,195,220,214,168,155,104,46,37,14,1,0,1],?r=>[1,25,140,246,312,310,263,206,150,95,45,32,11,1],?y=>[3,29,41,58,86,94,83,63,52,31,21,12,2],?u=>[2,23,67,117,126,154,107,97,85,48,27,16,2,0,0,1],?b=>[2,22,53,60,72,59,41,30,36,16,7,6,1],?i=>[3,38,143,179,223,299,270,241,205,134,64,44,16,1,0,1],?s=>[3,23,129,176,195,208,177,136,117,71,44,23,13,1],?c=>[0,12,68,122,146,194,180,163,130,85,49,25,7,0,0,1],?l=>[0,18,153,172,190,196,164,131,125,67,35,20,5,0,0,1],?g=>[1,19,42,75,82,104,78,60,39,30,12,10,0,1],?w=>[1,21,56,56,40,41,18,16,6,2,1,0,0,1],?m=>[2,10,77,68,119,94,104,76,68,45,15,17,8,0,0,1],?p=>[1,24,82,84,94,129,105,88,99,56,24,11,7],?k=>[1,6,65,37,28,24,6,10,3,4],?j=>[0,5,5,6,7,6,5,6,2,0,1,1],?x=>[0,6,4,7,15,22,13,16,9,9,2,2],?v=>[0,3,21,39,47,58,63,42,40,23,10,9,2],?z=>[0,0,3,3,3,5,2,3,0,0,1],?q=>[0,0,1,9,5,13,8,3,5,4,3,2]}

while !(input=gets.chomp)['END']
  current_turns = MAX_TURNS
  won = false
  chars = frequencies.keys.sort_by {|c|
    -(frequencies[c][input.length-2] || 0)
  }
  i=0
  while (current_turns > 0) && !won
    c=chars[i]
    i += 1
    puts c
    $stdout.flush
    old_input     = input
    input         = gets.chomp

    if input == old_input
      current_turns -= 1
    # else
    #   frequencies[c][input.length-2] -= 1
    end
    won = !input[?_]
  end
end

Ergebnis:

score is 625, totalerr is 23196

Dies hat 1672 Zeichen und ist noch nicht golfen, so dass wir reichlich Raum für algorithmische Verbesserungen haben.

Zuerst speichern wir einen Hash von Zeichenhäufigkeiten (berechnet aus der Wortliste), gruppiert nach Wortlänge.

Dann sortieren wir in jeder Runde einfach alle Zeichen nach den Frequenzen für die aktuelle Länge und probieren sie von den häufigsten bis zu den am wenigsten verbreiteten aus. Mit diesem Ansatz scheitern wir offensichtlich an jedem einzelnen Wort, das auch nur einen mittleren gemeinsamen Charakter hat.


Ich glaube, das ist nahe an der optimalen Lösung.
Nur die Hälfte des

@ Justhalf so viel für die optimale Lösung ...;)
Martin Ender

@ m.buettner +1 <Fülltext>
user80551

Ist das score is 625, totalerr is 23196mit deinem aktualisierten Algorithmus noch auf dem neuesten Stand? Ich habe es mit einer ähnlichen
Methode

1
@nneonneo Wenn Sie sich auf den ersten Kommentar von justhalf beziehen ... das war eine frühere (ungültige) Version dieser Antwort, die ungefähr 3950 Punkte erzielte.
Martin Ender

5

Aktualisieren Mit einer @ nneonneo-ähnlichen Methode erreiche ich diesen Code mit genau 2047 Zeichen .

Ergebnis:

Gäste ist 987, totalerr ist 21964

Code:

import sys,re
R=raw_input
F=';;;topenayr;elsatrodin;eatslroncih;eastrinclodu;etnocsiralupd;enostciarldpmu;eitnoasrclupmdy;einocstarlpumdyg;itacslnorepumdgyv;intaoslecrupymdgfh;nitaoerclsmudpygfvh;itneaorscmpdlfuvybh;ratdgfihosw;;ceimontalu'.split(';')
G=[''.join('.'*int(c)if i%2 else c for i,c in enumerate(re.split(r'(\d+)',w)))if w else''for w in 'eJwdlA2S4yoMhK+0CpPJ28ppQPxuQFBITMq3f52JXY5TdpC69TXP50ziQ6RWKxV3stBw+XEtIXXvx4u+g5I5e1x0V+fGN236S/b0aU+7UjMNFoyOvVc8hSInersrxBWr0BUqNSchUXT835YlWCyUTtW9Q6PL1UfhRtmVR3gm72dvu/Vts3c+sqPFoSaWbUWqqi9dylLXe65MWM12/CEdkcLX6LVXU7HBuQXSqDyMKTOjgX40Dty966CXY66Q2H/r7b3b7qat2zF8NLbWZ1QpTLvXWN+1NancuPdoE8sXNi1DqrtssxY+7RzRdxUWa5FLDVPzJJnWpTZW4xN4Uay1BFvUIxNKtz2le7/N47Bt3XedKjyttQgl/dhlcfvNZaNkFN8OnsrULiPQGqeeOsZRPZVl+sXsT61413rvqr751pbIBR/CSyWWs+JLrl66li+lM1j2JVDQowzxlUeo451DGDXOnDlD5Dw+7jcrnC855BmvCr8jGpzsa1P/E0VeWqKGwWGtEKVNiodj/4mTRXtgUDQChs4k7UWZ/py7ldsbv5WZ44ugjdj735MDzpFDffPgtQruJdO6vT7rVwYMQa+dCc7xCgVyJ57+65bH6yxj43/D7cxl3vaPAS/YEGfzo/Ess2iINV5To1/5VbMqrXMsV7ZYZJU1KPAZH4rrUNA/pK8MjlCcYAipoCYryaesw1wbD6SFb2+n7YfOZ6xexOb0RZv34Kprn743BtGwYsnZXbadfX3Yw8jAFGtbYGxxc1p08LF4bbbDdYdsvA7wyPUVm3GD70u9t9I9q8oAMUPbaVdV/oXKNwNUIkCCTDyAnd46e21yAyJQFFRn35+G5i97rXeZwuW+tcPYa0VesXNAXzguNviOKGEyEbYjkT56VehF14eRgNYHSjePNnl3L3CAJsMDhNhP072ng0sRvk0Gq0LeMHqRvRUj3/xQNwt3cyBiaEH0we28VZ4LMIse/O34T32sybiAlf1sCXHEzgUNU3wiqOt74zXdqc/pOpXC1UIffoyNUCAjiyfjFb8fehue6hbaPKjXgI4RwIVgBAmXeiC5J5ihGFZKnGAFxLF/WmpxJ6HPtuXTdM1D8m3iWfKPSQFKQPEdmSL/+WA7vItr9JuMKGWsi/7kTrzGLXDoPzvy/jjxq4gMi0E+87xnz7SS+p08EXbM7h32M5QOxRNk3py6TdrHd0kftelzravf4MDBcrCGWvJu4toejG9Ok75SffANw9hp3/6Osegr6L1hfx4YRXoCVUrkXbwFecx74on+P/VTUoewuekqaRrP5/N/1MpqAw=='.decode('base64').decode('zlib').split(';')]
while 1:
 w=R();i=0
 if'END'==w:break
 f=0;l=len(w);g=set()
 if G[l]:
  while i<len(G[l]):
   c=G[l][i];print c;sys.stdout.flush();g.add(c);x=R();i=2*i+2-(w==x);f+=w==x;w=x
   if'_'not in x or f>5:i=0;break
 if i>=len(G[l]):
  for c in F[l]:
   if c in g:continue
   print c;sys.stdout.flush();x=R();f+=w==x;w=x
   if'_'not in x or f>5:break


Alter Eintrag

Ergebnis:

Die Punktzahl beträgt 656, die Gesamtpunktzahl 22962

Es ist kein Durchschnitt, da dieser Algorithmus deterministisch ist, dh, er gibt für jede gemischte Liste von Wörtern immer die gleiche Punktzahl an.

Hier ist mein Eintrag in Python 2.7; Golf (717 Zeichen)

import sys
class S():
 def __init__(s):
  s.l=6
  s.g=set()
  s.p=''
F=[0,0,'onastifeybhmudgkprw','topenayridsubwglfhcmkxjv','elsatrodinphmcukwbfgyvjxzq','eatslroncihudpgmfbywvkqxjz','eastrinclodumphygbfvwkxjqz','etnocsiralupdmgyhfbvwkxqjz','enostciarldpmuygvhfbwxqkjz','eitnoasrclupmdyghfvbwxkjqz','einocstarlpumdygvbhfxwqkj','itacslnorepumdgyvfbhxkqw','intaoslecrupymdgfhvbqxjwz','nitaoerclsmudpygfvhbqxj','itneaorscmpdlfuvybh','ratdgfihosw',0,'ceimontalu']
s=S()
while 1:
 c=raw_input()
 if c=='END':sys.exit()
 if '_' not in c:s=S();continue
 if c==s.p:s.l-=1
 if s.l==0:s=S();continue
 s.p=c
 for x in F[len(s.p)]:
  if x not in s.g:
   s.g.add(x)
   print x
   try:
    sys.stdout.flush()
   finally:
    break

Dies verwendet eine ähnliche Idee wie @ m.buettner und speichert eine geordnete Liste von Buchstaben, nach denen die Vermutungen angestellt werden. Dabei werden die Frequenzdaten jedoch nicht direkt verwendet, sondern es werden nur fast alle möglichen Buchstabenpermutationen versucht, das Spiel simuliert und schließlich die Permutation verwendet, die die beste Punktzahl ergibt.

Diese Version wurde unter Verwendung der Top-9-Buchstaben optimiert, sodass für Wörter mit 2 und 3 Buchstaben die Permutation in der Klasse der Algorithmen, in der die Informationen aus der vorherigen Eingabe ignoriert werden, bereits die optimale ist. Ich führe derzeit noch den Code für Top-10-Buchstaben aus, optimiere die 4-Buchstaben-Wörter (und finde auch eine bessere Lösung für längere Wörter).


Ungültiger Eintrag

Für mein Benchmarking ist hier der Code, der den vollständigen Entscheidungsbaum (11092 Zeichen) verwendet.

Ergebnis:

Gäste ist 2813, totalerr ist 17539

Code:

import sys,re
R=raw_input
F=';;;topenayri;elsatrodin;eatslroncih;eastrinclodu;etnocsiralupd;enostciarldpmu;eitnoasrclupmdy;einocstarlpumdyg;itacslnorepumdgyv;intaoslecrupymdgfh;nitaoerclsmudpygfvh;itneaorscmpdlfuvybh;ratdgfihosw;;ceimontalu'.split(';')
G=[''.join('.'*int(c)if i%2 else c for i,c in enumerate(re.split(r'(\d+)',w)))if w else''for w in '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'.decode('base64').decode('zlib').split(';')]
while 1:
 w=R();i=0
 if'END'==w:break
 f=0;l=len(w);g=set()
 if G[l]:
  while i<len(G[l]):
   c=G[l][i];print c;sys.stdout.flush();g.add(c);x=R();i=2*i+2-(w==x);f+=w==x;w=x
   if'_'not in x or f>5:i=0;break
 if i>=len(G[l]):
  for c in F[l]:
   if c in g:continue
   print c;sys.stdout.flush();x=R();f+=w==x;w=x
   if'_'not in x or f>5:break

2
Ich habe Ihren Code ohne Änderung der Funktionalität auf 527 Byte reduziert
nneonneo

5

Perl, 1461 Bytes, Score = 1412, Totalerr = 21050

$|++;
while(!eof) {
  $l = $pg = '';
  %d = "[eaitrnoslcdupmhygfbvwkxjqz]<[scpardetmfbilwhognuvjkyqz]a[tlrncsidbpgmyuvkfwxzhoj]b[leoairusytjvmb]c[oetahiulrkcysq]d[eiaourlyvdgsmfwjnhqt]e[rnaslcdtmxevpfgqiwyobhkzju]f[ieoauflrty]g[erhiaunolygsmtdb]h[eaoituyrnldmbcw]i[notsclvdagrmefbpzxkuq]j[uoea]k[einaslywftogd]l[eyialoutdfvskcmpbwnr]m[eaipombuysnftl]n[tgedcsaionvufkylmhjqwxp]o[nrumlstwpocvdgfbaikyexjh]p[reoaliptuhsymdbfw]q[u]r[eaiotymdsruncgvklpbfwh]s[teisuhpoacmlykwfqndbr]t[iearhoyultcmwnsfbpg]u[rnstliceampbgdfyok]v[eiaoyu]w[aiehonrlsdtkfy]x[pctiaehuy]y[esomatpcwbildgrn]z[eoaiy]"
    =~ /(.?)\[(.*?)\]/g;
  %r = ">[etynrldgshmkpcwfoabxui]a[retclmnphisfvwbudgoxykjz]b[aiumoerylbhgspt]c[ienaouscrxtlyh]d[neairoludhsywgpk]e[rtldsvcmnphgefibkuwyzjox]f[eifnoalrustdmkwp]g[niaeroudgykt]h[tcsgwpenrxado]i[trsldnacmfhvpugwbekoxyz]j[nbdeao]k[carnosilewu]l[aeliobpuctfsrdgnwhkym]m[oeiarumstdynlghbp]n[oieaurngwkhtmsldy]o[icrplthmsfnobdwvgejyuzak]p[msaoepuixrlynt]q[eisncd]r[eaotpuigcrbdfhwlys]s[iesaunorbydclptmkgw]t[ansicreuolthpfxbygkwmd]u[ostcqlrfdbpagnmjhixev]v[ieoanrdlb]w[oaesrtydnlkph]x[eiaon]y[ltradcnsheomfbgpkuvzxw]z[iae]"
    =~ /(.?)\[(.*?)\]/g;
  while (<>) {
    chomp; last if !/_/ or /^END$/;
    $l++ unless /$pg/;
    last if $l>5;
    s/$pg//g for values %d, values %r;
    $_ = "<$_>";
    my %s;
    while (/([^_]?)_/g) {
      $x = $d{$1} || $d{''};
      $s = 180;
      for (split //, $x ){ $s{$_} += $s; $s -= 100 / length $x }
    }
    while (/_([^_])/g) {
      $x = $r{$1} || $d{''};
      $s = 180;
      for (split //, $x ) { $s{$_} += $s; $s -= 100 / length $x }
    }
    ($pg) = sort { $s{$b} <=> $s{$a} } a..z;
    print $pg, $/
  }
}

(Beachten Sie, dass es 1461 Bytes sind, nachdem einiges an optionalem Leerzeichen entfernt wurde. Wie gedruckt, ist es ungefähr hundert schwerer, aber immer noch deutlich unter 2000.)

Ich habe ein paar "subtilere" Ansätze ausprobiert, aber dieser hat sie alle geschlagen. Bei den beiden Datenfolgen handelt es sich einfach um Ranglisten der Zeichen, die am wahrscheinlichsten auf jedes Zeichen folgen, und der Zeichen, die am wahrscheinlichsten vor jedem Zeichen stehen (mit Digraphen, die in der überhaupt nicht dargestellten Wortliste nicht vorkommen). <und >werden verwendet, um den Anfang und das Ende des Wortes darzustellen. Bedeutet beispielsweise, "w[aiehonrlsdtkfy]"dass "wa" häufiger ist als "wi" häufiger als "wir" usw. %d, enthält die Vorwärtsabbildung eine globale Rangfolge, gespeichert als $d{''}. Es wird für Orte verwendet, an denen sich zwei Unbekannte in einer Reihe befinden oder an denen alle Digraphen in der Wortliste erschöpft sind (es muss sich also um ein Wort handeln, das keine Wortliste ist).

Für jede unbekannte Position im Wort wird das vorangegangene Zeichen angezeigt. Jedes mögliche nachfolgende Zeichen erhält eine Punktzahl, beginnend bei 180 für das bestplatzierte Zeichen und absteigend auf 80 am Ende der Liste. dann wird dasselbe für das folgende Zeichen gemacht. Alle Punktzahlen für alle Charaktere werden addiert und die mit der höchsten Punktzahl wird ausgewählt.

Nachdem ein Buchstabe erraten wurde, wird er direkt aus den Ranglistentabellen entfernt, sodass er nicht mehr erraten werden kann (bis wir ein neues Wort beginnen und die Tabellen neu initialisieren).

Update: Wir haben eine Reihe von Punkten gesammelt, indem wir einen Fehler behoben haben (wir haben keine Buchstaben aus der umgekehrten Tabelle entfernt) und die Art und Weise geändert, in der die Punkte in der Liste abfallen.


1
Gute Verwendung von Digraphen. Dies nutzt Positionsinformationen auf eine Weise, die meine Lösung nicht stört, wenn ich mit der Kombination dieser Ansätze experimentiere.
Nneonneo

@ Nneonneo viel Spaß :)
Hobbs

3

Python: 2046 Bytes, Score = 1365

Score ist 1365, totalerr ist 21343

import sys
from math import factorial as f
z=lambda r,x:f(r+x)/f(r)/f(x)
d='eJxtVouWwygI/dYEV03rg5Fg63z9Apo+ZtczZ5JU5HG5gP+0cyvHlhjORrI6lQpnZoq0Z8o46GO5\noJ/YE8XwpBw6UXGEcLPdM2MacpBzO8kVcr1TSttJxx5/Rg/u7h5EDJlI/jgBiRkCO1sDuWUETVci\nxkxM+junUWBQF+OeSgxUxg+B+ExnbB2hgJxp8cR5fA/dT6U7q7+Ovhf8/ahIEWrGQyR3+3X8ORKY\nnvI48vw88jClT4IDh+fh4mMQ2Nn8cWyfxpkmspj73EXYD9sfxzkwP6GKYP7ya3lQ5ZgsD30lIM6n\nZKZPkYqQzyV9bkeGgbGKeMyfUcxj96UUHOoP/IwrngrDIHtswBqFQ+YTDpftHeshJKkggNNWXd7U\nU5yw4me818L5KDjD/Lv8jyC6XldyulpFzvswm4T6faiQy0K6JmTKRyEYgZ7hrWm+VjezxuH1tcPK\nBLA8sNq7f/mHXkV4NDfeFG/0Fgp3PZErqM4s+WEXKb+ZhBQqXrH6PdE+E0SjUGWJzwfNei8KwM2L\nDdObnZ+WEt+IGcQxc73QAcYSU6q+V2XPF3NxKnhHMb0Nwj2Tc2lcGR4XMGFxL3tjoRQVe5gBL/rA\nqHpaQZqizuyoMGv5MGfEx4Q6HNMhV/nTh0WF+js35a8RZHAGeqiyfTxY2kSW4yN40NK3wvTLkq7I\nk/4QVcJedkvanSsdBTPEnjEstrUs2FHyCO3Dj14HXeUNgmQS1wI4n9YhaT1egUmATRwABYwkd4tQ\ncCTWdqPiK5ssve67F1R6mUjznIMJJRZnv3/X8bXScmHZYiiTngWOIJCnHCjG+jZBv23gXsdOWpkX\n88IRd4FSMRW+CElyPYoEOMbes+IWG4Xo60PSaNrw6nZXjPMJPks+9lgHR41S+KutQOh6ViiiWdSL\nzI1etbyiz/3qJd8bK49tmakpe/F81vL0vUmUt7+tmDBtCtnCeG5v2cDy35IZTdtKpmQJh0yCdmmM\nWgAUcZ5crBA0nnY2bd32iySehf8Om0vHwPrMY78sPL97WZQKTtZDU0Mz64SRDYTJyo6B4qiojsog\nddZ9tH/vNKwtmUYVi0F4xFOtvFnFcNmSdBYZJenOacfqNc3mcJCJM+N34wUMG06oQmuOHH1BU+NU\nvXrSIc3asfhunl5kngmyCZ6pJ4lFN8CzTm33B24TVm06WoMVFoUcP7dfNaL/f3arAp6Ta0OSsgX8\nPuAsL8/5saVdRhS5hTlkG0nJhyal7kJXlrOATf5BG2j3xd4/EySk1aTElqLB3tOupqNr4aHd+wdq\nSNz0uhJA7iFkk1Gqp0mnG8k6gcyZq74XDbRp6ZxruSfLlx9Q1xZhHNq8pYgiti2AjHyItUme1fRO\n3S1l/EzGt/9b60aQ94vt8b/79vwoML/q15lP0sZlUDw3bQvGMJkjXfKtPT3Ny9VSYXix0E1dyf50\nYdbbJteynCo8esQcfqeUrTKklKQAuXSy3ndC+RMAvqVdXQH79Yxhee12LnBXr884xPqQtr8i1jvj\n4o4aWFNbZsxNPH2GWSX1IX1IwqlFDqILelFIesMRdwQEH2TqSdcq0yHWuxSpiakW5J6UJB2OJro3\nvULus01HDncbYPWRYORC/wJ6k9G1\n'.decode('base64').decode('zip')
D=len(d)
R=raw_input
def G(c):print c;sys.stdout.flush()
def P(w):
 if'END'==w:exit()
 i,l,X=0,'e',6
 r=x=''
 while 1:
  if l not in r+x:
   G(l);w=R()
   if l in w:r+=l
   else:x+=l;X-=1
  if not(X and'_'in w):return
  if l in w:j=1
  else:j=z(12-len(r),X)
  i=(i+j)%D;l=d[i]
while 1:P(R())

Ein Großteil des Codes stammt von Nneonneos Python-Einreichung (ohne die ich das 2048-Byte-Limit nicht erreicht hätte). Ursprünglich dachte ich, dass dies ungefähr 200 Punkte mehr bringen sollte, aber ich entdeckte einen Fehler in meinem Tool zum Erstellen von Datenstrings. Nun, das ist behoben, meine Punktzahl ist ein viel vernünftigeres 1365.

Anstatt Binärbäume basierend auf der Länge zu erstellen, habe ich einen einzelnen Binärbaum erstellt, der die Frequenzinformationen enthält. Der Baum hat keine einheitliche Tiefe, da es keinen Grund gibt, Frequenzinformationen für etwas tieferes als sechs falsche Vermutungen zu speichern (aber die richtigen Vermutungen könnten theoretisch für "erheblich" und "unangenehm" zwölf tief sein). Dieser unbeholfen geformte Baum wird durch den Fakultätscode navigiert (tatsächlich unter Verwendung der Kombinationsfunktion ). Um den Datenstring komprimierbarer zu machen, habe ich alle nicht verwendeten Indizes mit 's' aufgefüllt.

Ich habe ein Skript verwendet, um gute Zeichenfolgen zu berechnen, die als d gespeichert werden sollen. Wenn jemand ein paar Zeichen mehr aus dem Rest des Skripts herausholen kann, sind hier einige Ersetzungen aufgeführt, die zu besseren Ergebnissen führen sollten. Die oberste Zeile ist die im obigen Programm codierte Zeichenfolge.

score | length of encoded string | actual string
1365  | 1646                     | ertanialuctrssssvsnoctmushsbmsmpyssssssssssssdgyssspvlshgxsmgvssndspcjssssstmplyushumrtsdnsdvvsllatsibhqyvgdkdwssucmssmssulcsmusscsssssogsdssssssspsssstlsupmsusgsdsulyncysvyssfsnhgsnyqscalusthrvpcncpssrhtpsssspsbgvfsssssobuysssdssssssssssssssscsssssssssssscsssopshcompidssbsssssysssssssssssssssgusxsssimssssssimydssssxscipyfuydhwyscbssssmsssssssssssbssdsssusssssvspmvmssssspcbissssbyitypmxcossdmcssssssssssssyssssssosvssssfcvsssssdghsssssdsmpvysssssopcmtysssssstaimcyphocvshmsysssssssssshssssskssssssocdphsssuxhssssssiocyfsssswacubsssdpuutcidmsssdppoitanoclussaodmacssspdssssspmssssssssssssssssssspssssssnpbissssssssssssssssssssfqssgssssssfdssssssvbssspumbydmsssspbsssigsssdmgysrsdvminscygsxgssssssssssgsssssodbsssssugssssodbssbcssmsssscumsspomssssfssssssssppfssbcuyrdympysssssssrsssssfsssssgkmsssmocugssmcosudhsmdssssssssspsgopssssspssfblsbvssssssynsouqssfgusssvnisssjfpysfssssmdfssssrslujsuucpombssssnsicussssopssscssmossbsdsssssssssssspssssmdsfssssssssssssfsgdhwdssssdlyssksssssysgsssssogsusssssmfssusslsuufcpyssssvyssssscyodsssmsspusssssdpssssusslubuysuumppwsssgssgidsssssdoussssssssssssspdssssozsssssdssdrscmcdomsssgospdiwudspmidsygfcsulcuysssfssssusssssshucssssschgfcsssschbmsssskuosinpmchvmpgmssssssrmucpslfpcrsssssssssssvoyssscssssscopslsspgcdflssssssrucmfgssslcpruysclysssblsgsssssscilugsdslsssvssssssupvlysssssssssssssosssscssssslgsssssdcvysssspndcssssmcsssssssssssssssssssslsssssrugssssssucnmsssscncigdpslmgshhosssssossssszrypboybsyfssmdssssssgihbudsospdcusmosmoindflyybvmfcsshrsghfowsdphossspscssssssgsssssscgssssscfmspmbhoyuhssuplsbhsssvnitocnusmdcucfmjssspssssssssssssomvsshsssssspssssssssssssssussssrgssssssolmfbsydmssssdsssssrdpsjdssssssssssssssssplasssmyssssssdsssssamlssssfssssssssssssssmpdmsssflsssssdslpyhgsrdssssssshssdlshpssssfsrsssssshrsxssssmlavssdlsnpruupysdprdliypoxmybssssssssxpmsssssssssssshguslsyssslrpflsssdbmsrcdspvsssypsamssmhsblssfssdbssssmsssssfdasssalpmsssamsshglysusssshglyspdsssunalcosydslkulbpofmdssxssssgsgufsssssdyssssdssssusmysspmdssvmsssssivsssssmpohsssshgopsssssinocdusyspvssssvssssssssssrgyssspmsvlmsrvssscfulyusdfssssssssssssssssssrpssspssrgoyssssgmhssssssssssssvssssssupssssqbvysssussysssapsuoscpmhssssssssssssdsrsssxssssssalbhmssdmsssssscmphssslfgrmchdgvdsosucdssfwsacdhsmpvvmsssssssssssplslssshrlhssmssvlbyssshdrgwkmssqcoglurspvlgcllascyphoudsrpusylfgsssspblyssssssbssssssomsslussrmvlussssfycossssssosphyssrscgshpragcscbchoralpbyssbsvdyssssssuxlssdlsssssssssssssssssssssdsssussmbdsssssamhssssssssssssssdsssssssdpssssssssssfsgsssssdlussslsusopxasmdspmssscpovdussvyslssmssussssssdmssssuspdlsssmftdglasssmalatmlocwvhpmgzssssussssssnyshsmlsunvsvlysstcnssssssssssssssspsssussssssdoyssssssfysssssshgpssssssdbunckgsssthylssycsubdssssssndsvsssssslyssugssssowssjuspxgusssshowcnuysloncsupdgfdsslsstacnslusfghwdlsbnsssspsussbyscsubssssslcghslsvddsmhssssjulynbyssssphugkousssowlcymns
1381  | 1662                     | ertaniocvsplttushtpyutsudwbvumgdlatcpisppmgdsyusuqphplgpmypppplppppppuhslypppppppyvpppppsulcspommdbpppppppppppppppppppppnjpppppsgppppydncmpppppfsnhgpmuqycalinscyvpcncpppppspppppppppppppppppppposbpgpppisbhpmpgxyppppppodbdppppupppppvfpppppmulympppbusoybppfscipypslhppodbpdppppppffpppppppopfppppuppppypppmppppppppcbipppppyityfcvppppdmcpppppppppuvppppppppxbppppppocmxppldgmpyppppsmpobuppppopcmtypgpppstaimcyphpchmvxpppppplppppphpgpppkppppppocdphpppuxhpppppgiophyppppwacubpsdvmuutcivappubppoitanocluspaddmacopfpdgpppplvmpppppppppppppppppppuypppplpppppppgupppppppppppppbfqppsgpppppugpppppppvbbcpdmppppcumppbgpppppppppppprpppppmpppyppppppppppppppppppppppppppygnpppppppppppppppppppvpsfplmpyppppppppppppppbrpppxrdyppppppppppppppppppppppppppppppvyupsmpppppppppppppppcyppppcuypppppppsbpumpppspppfpsuqpgkmpponmocucuddpppcfujppmdcmcoprslujpuuppppppppbgppupppppppppppnupppfblsonppppppnsicupphbmdppppppppppppppfppppwdppppdlyppkppppppppppyppdspupdpppmfpbvpplsuppppyppgpppppogppghpppdspppuppgohdpspsdhpslubyppcumpppugppypppppufcpppvypppppyodpppppwppppppgidpppppdroupppppppppppppppppgozpppygdpppppcmcdompspfospdiwpuupmidpcppgfcpppppppppppgupppppucuhpppplchdigprmhchbmppcruuosinpmchvmpgmppdppppppppplppppplflpppppprucmfgppplcpruypbdspocgdpppppppppppppppkppblplfocdpppgxpppyppppppppppogppppcvpppplyupvlysgypppppcilybppplpcppppplgpppppdcvypppppndcrugomcpppppppppppppppppppslmphsoocdmsopppucnrypboxncigdpplmgppppppppouppppmzppppppvppppomybsdpuvgirsghfowpdcuppdppvindflyppvmfchbugdppfpcfoypgppoyuhsphopscxppppmpgoncusmpsspmbhppsupsuplbhppppvnitoclaspdcucyffqpppppppuppppppprjdpppppppomvppppppppdppppprdpppppppphsppppppmuppbpppppmyppuppsdpgsppfppolmfbppddmpppppppppmpppvppflsupppxpruyppppppppppppppppppppppppppmppppppspppppppuslpppdmlrshyppypppppmppppyhppppspafspppchpppppumpppppppmpppppppslpybpdlycsrcupsducymliypuyvybppppppppppppnpppmppdppmppppudnyoxmpmhglyppppuahglyfdapppunalcosyddlkulpuppmdpusppppvpppppppppppppppppppppbpofpppgufpppppppppppppppppppphpppppyppmdpmvpppppppsdypppsppdpprvpsvgrdgysgmrpppmpmppppxmpohpppphgopppqupinocdushppvscfurgoyfvlmfppppppmpgsppppyppppppmpxdpppbusmyppmsyypppppposcpmhsppppppppplypprpppvpppadppppppppdmppppppcmphhupgfgrmchppsalosucddpfwschdswppppxppppppddvgppluvmppprdgacdlpprvgxlfpprgwkpppphgglursplubcllascyphohmdfylppgfpcosulxpgplgpppbpbhmlvumppppvbrmyppufpyrypdpppppdosphyppgppfshpragcpvmchoralpbyppbpvdyppdplupppppmpppppdfpppppplpbypmppppppmbdpppppppppppppppppppppuppppplappppvllyppppamhspppppppppppppppppspplpppppsppppppfsgpppppdlupmppppsospxappppxuuppppppmmftpvplppppuvyppppumqppppmcpovudppddglanyppppatmlocsvotcnspppppxmgzpppppdlpppppplgpyvmwgpppbfyppphpphpgpppunpdbusvlypppthuglypncfbsppgpppwspuppppppdoypppppppppppfudppwgsdjupppcnuyppppsyupdfnpsoumytacnslupgghwdlpvlpsdpppppyoypppppxpppppphowlppypsoncvboculynbcsubpphuglcghpppplcymnpppdjdvalutcrspgppknmcpypowodppppguppppppbchgxpsysppoctmduppppsmpnryppppkppsyrhppppupprtsdnsuqlwp
1382  | 1796                     | ertaniocvsluuuuuluouuuuflbvuuuurucmfguuulcpruyubuuuuuudsuuuuupgohcuuuygnuuuuuuuuuuuuuuuuuuuuuuuuuuuuouuuuuuuuuuuuuuuuuuuuyuuuuuybuuuuudmuuuuuuuuuuuuuouuuuusmuuuuuruguuuuosuuuuudmuuuuuuuuuuuusbpumuuusohuuupmrypblouoyfuuucnuuuuucfuuouupcnmoulonbuvuuuuuuybsduuusprsghuuuvqhopsuuuuuusonpuufownsicuudhbluvbuuuuuoyhuuuuuysfyuuuumpconcusmlxfmumcuuuuuuuuuuduuumuuuuuuuuuuuuuupuguuuuuoguuuuguuulrvmuuuuuuuuuuuuujvyuuduycyordpumuuuuguuuuuuuuuuuububuuusguuupwsduuuugidvbuuudouuuusdvmuugumyuuuuuufluuuuuopruyuuucdomuuuguspdiwuuupmiduumuuuuuusuuuuuuuusllpuuulrshcuuuuchidguuuuchbmuuuuuuosinpmchvmpgmuuuuuupydcumuuuslpybuugfvsrcdbuuccymcdyuuuuuuuuucgduuuuuuuuuuuuumpvuubluudncduuunhglyuguuuuhglyryguuuunalcosydulyupvuuumduuuuuuuuuuvuguuuuupvuuuuudcvkmuuupndcuuuumcuuduuuhmuuuulmpyuuduluuuuxucpmuuuuvucnmucyuxncimoculmgdurdgyuurpuuuufbuuuuugdpuuuumduuguzpgihbudvufpdcuuuurgoindflgkuvmfcpyuuuuuuuuuyuuymuuuucubvyuugsusyuuugsuuoscpmspmhbuuufusuplbhuuruvnitoclaumdcudmfuuuupcmphudugfgrmchuuuduosucduyfwschdswuuuuuuuuuspuuuuuulufcuuvrgdhuuuuprvuuuuuurgwkuuuuhgglurspyxpcllascyphoudsrpguusyguuuuuuuhguuuuubsuuuuupduuuuufmryuuuuuurypdulcuduosphypmuudfshprgfuucychoralpbyuuspadvyuuuuuuyuuuuubuuuumuuuuuuuuufsuuuuuuuuuuuuuuuuuuuukuuyuulfoyuuuuuuuuuuuuumuuuucmpuuucopuuuupgcuuuuuuuuauuuufdausuualpmuulduuuuusguuuuuuciluguuuluuuuuuuuxuumftuuuuuuuuuyuuuugsuuuuuuuuuuuuuuduuunusmyuupunvtymuyutcnsuuuuuuuumdsuuusvguuuusgmhuuymxuuuufyuuuuuuhpguuuuuqdbunckvlmuthugscfulfbsdfucpuwsuuuuuuuuuuyulyuuuuuuuuuuuuhwguuuuuuucnuyuuovuuupdfnuupluutacnsluuushwdaduuuuuuuluuuuyuuuuuuuhuuuuuxuuuuuualbhmuudvlynbuuuuuuhuguyuuuuudlcymnuvmuuuualcautlrsxgxnmcpyuhsuuuuuomduuuudsuuuuulhuuysuualvbyfughcossulquvdyluntryuuuufurtsdbfluuuomutsdyuxuuuvcyyrhtmuluguytnguuuuuuuuuuuuuuuuuuuushuuuudhpuuuufuuuuuuuuuuuuuuuuuuuumudluumbdupsluuuuliypoxmybuuuuuuuuuplauuuuvluuuuuuamhsuuuuuuuuuuuuuuuuuuuuluvuuuuuuuuuufsguuuuudluuuuuuusopxadbpuluuuuuuuuuuuuuuulubpofuuugufudmuuuuuupdluuuualdglahuuuhoatmlovavopmgzsdypuuuuuuuuuuuuuuuuuuuuuuuuuuivuuuuumpohuuuuhgopcuuuuinocdusyupvuuuucwhuuuguuuuuuuuuuuuuuuuuuuuuuuuuuufuduuuusdjuuuuuuuuuuuuuuuuspuuuuuuuucopuuuuguuuuuuulpsuuuuupypuuuuuuuuuuuuuuuuuuupsuuuuubocsuuuucsubuuuuulcghuyuuddvghuuuuuuuuuuuuuuuuuuklfuuuuowoduuuugusuuuubbchgxmpvuupoctmpuuuuusmpkuuuuuuuuuuuuuuuuusduuuuuusqulyuuusuquvuuuhltmpyuuuydtsubqlyuugdlatisbhdpmgdsuyuuuuuuuuuuuuuuuuuuuuudflyuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuslpbvfuuuuyuuuuuuuuuuuvuuuguvluudoupspumcopduuuuuuuuuuuuuuuuuuuumuuuydusuvydcuxpuuucoguuuuuuuumuuuuumuuuuulumquuuhgcpovdxyuuuuuubsouyuuuuscipyfuuvguuuuuuusuuuuuuuuuuuuubuuuuumuuuuuuuupmuuuuuuupcbhluuuuyityfcvuuuudmcuuuuuuuuuuusvluuuuuxbdoyuupocmxuuudghuuuuuusmpobuuvuuopcmsyuuuuustaimcythmlhmvuuuuuuuuuuuuuhuupuukuuuuuuocdphuuuuxhuuuuonuidouuuuuwacubuuupjgitcivauuudppoitanoclusuaddmacoufpduuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusofquuuuuucvsyuuuuuuuuuuuuuuuuumyuuuupbspduuuhwkuuuurupcpmuuuusmvuuuuuuuuuuuuuuuuuuuujuuuuuysuuuuuususmcuuvuulcssfuucuuuuuuuuuuuuuuuubpuuudrdyuuuusguruuuuncyuhuuufsnhguuqyucalinscyvpcncvluuugpuuuupuumuuuuuuuuuuuuucugusuufuusuquuufguuuuodbuujfuuufuuuodmdfuuuurslujuuupbuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuopfuuuuuuuuumduuuuuuuuuuuuuufuuuuwduuuudlyuukuuuuuuuuuuuuvuuuuuuuuumfuuuuulsuuuupyumpyuuuuuuuuuuuuuuuuupuuuuuudpsuuuuuslubyuuuumpuuuuuuuuuuuguuuuuuuuuuuuuuuuuuuuuuuuuugouuuuuuuudruuuuuuuuuuuuuuuupubcuuumcygfcuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuugfcuuuuuuuuuuuuuuuuuuouuuuuuuduuuuuurmucpupupcrupuuuuuuuuu
1388  | 1800                     | ertanioclcpruyuuuuuuuuuuuuuuuuouugohucmfguuulbvuuuuuuygnuuuuuuuuuuduouuuuuuuuuuuuuuuuuuuuyuuuuuybuuuuvsuuuuuuuuuuuuuuouuubusmuuuuurugupmuoduuuuuuuuuuuuuuuuuuuuhsouuuusouuuuuurpsumbuuyfuuuuuuuuuuuuuuonuuuusvuuuuuycfuuuucybsonuduhrsghobdvqhodmouuyuuvuuuuufwduuupslhsonpuuuuunscifyohbuvsyfuuubuuooncusmpuuumucuuuuuuuuuuuuuuuuuuuuuuuulxuuuuuuunuuuuuuuuuuumudrjduuyoduuuuuuhouuuuupombugrduplvuyuufuuogiuuuuuubuuumumyuuuuusduuugufuuuuuupwuuuubugidsguumpuuuuufluuuvbuprdmuuuusdvmuxgduuuuuuucdomuuuuyspdiospupmimdusluuuuulrshyzuuuuucuuguuhucuuuuuchlpuuucuchbmuumuuuosinpmchvmpgslpybuumuusrcduuugchmcdbuucumuumuuuupyducvuuufluucgduuuuuudnyuuuuuhglybluuuuhglyrupvuuunalcosydulkuluuuhcduuulmupvlyuuuuuuuuuuuuuuuuuucuuuuulguuuupdcvyuuuupndcuuuumcuvyuuuxuuuupmuuuuuuulucyuuuccuyuurvucmnrdgyxncigdpfumguugkmuuuumocuguzduuuupvuuuuumrpuuuuugirhbududpdcufbluuuindflyuuvmfcoyuuuuuduuuuuumpyuuucuuoscpgsuuuuuugsuuuuuumspmbmhuufusuplbhudmuvnitoclaumdcucgrmchupfhuosucduufwschdswuuumpduuuuurgduuuluuuuudgrdhuuuuprvuuuusurgwkspuuhuglurspgyucllascyphoudsrpuuuuuguuuuuuuuvuuuusbuuuhguomuxufcurmyuuuuuurypduuuuudosphypduuufshpragcycycporalpbyuubgvdyuuuudsuuufsspamuuubuuumuuuuuuuuuuufuuyhuuuuuuuuuuuuuuuuuuuuuukuuuuuuuyuuuuuuuuuuuuvuuuuulfoyuuumpuuuuuuuuuuuuucsuuuucuaopuupxauuuualpmuuufduuuuuuuuuuuuugcumftusguuuuuuciluguuuluuuuuuuuuyuugsxunyuuuuuuunvtyuuuutcnsuupmdsuduuuuuuuuuuusmyuumuuyuusvgufyusgmhuhpmxuuuuudbunckguuuthuglquyufbsvlmuuuwsscfulyuydfuuuuuuuuuuuuuuuuuwguuuuuuucnuyuuuuuuupdfnuuuluutacnsluuughwdluuuuuuuuuuuuvypamovuuuuuuuuuuuuuuusmhduuuuulyhouuualbhuguxuuunbulcymnuuusyumalutcrsuuuvmnmcpyuacdlhsuxgxuuuudvguuuugvysuuuuulnrgsuulvonhcumdyflssyrhcosulubrtsdnquuuwlputsdyuuuyuucyyrhtmuuuuxuunguuuuuuuuuuguuuuuuuuuuuuuuuuuuuuuuuuuuuuuuduuuuuuuuuuuuuuuuuhpuuuuuuuumuuuuuumbduuuuuuuuudluuuuuupsluuuuliypoxmybvluuuuuuamhsuuuuuuuuuuuuuuuuuuuuluuuuulmfbuuufsguuvuudluuuuuuusopxauupuldbuuuusuuuuuuuuluuuuuuuuuuuudmuuubpopdlugufaldglafdmualatmlocwvhpmgzuyuuuuuuvushuuhusdypuuufgyuupuuuuuuuuuuuuuuuuuivuuuuumpohuuuuhgopuuuuuinocdusyupvuuuuuuuuuuuuuuuufduuuuguuuuuusdjuuuuuuuuuuuuuuuuuuuuuuuuuucopuuusguuuuuuulpsuuuuupyuupuuuuuuuuuuuuupuuuyuuuuuubocsuuuucpsuuuuuulcghuuuusdvguuuuuuuuuuuuuuuuuuukowduuuowuuuuuugulfuuuubchgxuuuuupoctmuduuuusmpksuuuuubuuuuuuuuuuupuuuuuusqulyuuusuquuuuuhltmpyuuuydtsulpmuuugdlatisbhddkgdsypblvmpuuuuuuuuuuuuuuuuuuuluuuuupmuuuuudflyuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvfuuuuuuuuuuuuuuuuuuuuguuuuudouuuuumcopduuuuuuuuspuuuuuuuuuuuuuuyduuuuudcuuumuucogusuvyuuuxpuuuuuuuuuuuuuumuuhuumuuuxylumquubsocpovduscipyfuuvguuuuuuyuuuuuuuuuuuuuubusuuuuuuuuuuuupmuuuuumupcbiuuuuuyityfcvuuuhdmcuusvlyuuuuuuuuuuuuuxbuuuuupocmuuuudghdoyuuusmpobuuuuuopcmtyuuuuustaimcyphshhmvuuusoumyuuulyhuuvuukuuulyuocdphuuhuxhuuupxuiophyhowlwacuboncvmuutcivauuudppoitanoclusuaddmacoufpduuwuuuuuuuuuuuuuuuuusyuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuufquuuuuuuuuuuuuuuuspduuuuushuuuuluupbuuuuuuuuuuuygruuuvpmuuuymgvuuuuupcjuuuuusduuuuuuuuuuuuuuuuuuuumuuuuuuyvuuusfusucmuuuuuulcspuuucbruuuurdyuuuuuuuuuuuuunyuuuuusguuuuuuncyuuusmfsnhguuqyucalinscyppcncpuuumupuuuuuuuuusuuuuusuquuufgguuuuuuuujfuuufuuuuumdfuuuurslujuuupuuodbuuuuuuuuuuuuuuuuuuuuuuuuuuuuodbuuuuuuuuuuuuumduuopfuuuuuuuuufuuuuwduuuudlyuukuuuuuuuuuuuuuuuuuuuuuumfuuuuvlsuuuupyuuuuuuuuuuuuuuuuumpyupuuuuuudpsuuuuuslubyuuuumpuuuuuuuuuuuuuuuuuuuuuuuuuuuguuuuuuuuuuuuuuuuuuuudruuuugouuuuuuuuuuuuuuuuuuuygfcuuupubcuuumcouuuuuuuuuuuuuuuuuugfcuuuuuuuuuuuuuuuuuuuuuuuuuuduuuuuurmpucuuupcruuuuuuuuuuuuuuuuupuuuuuuuuuluuuuuufluuuuuur
1392  | 1848                     | ertaniocvslogppppppppppppppppppppppppppvypppppcyopmppmppppppppppdppppuprvppuprdgyppwrpppppgidpppppdouppppppppppppmppppppozpppppdrgoypcdcmopfpmppspdiwpdhdmidfpmpopppkbvypppspsyupppppposcpmhppchuppppppchbrmpmppuosinpmchvmpdmlpppppcmphpppgfgrmchpppdposucdpplwschpslhbppppfpcgdppppyplpppppprdgppblpprvcdpppprgwkpppphgglurspgypcllascyphoupsrvlypppgppppppppppvpppbppplgcolmpdcvyrmyppndcurypmlvmppdosphypppppfshprauypcyccoralpbyucnmvdypxncigdpblmgpsgpdppppppmpppzpvbpppdmppppsdvmpxgfgihbudppppdcuplppppindflyppvmfgvppppdppppppppgpppppcppppppgspppslpgsppppppmspmbhpppfpsuplbhppppvnitoclaumdcufmtppppppdpcumppppppppppppugpvpdppppnvtypmppmnybcppsptcnsppppppppvppvpppppppppppppphypppgupfyplmpyphpgppppppdbunckghgxthuglyycpfbsppppppwspppppppppppppvyppppppppppppwgpppppcycnsucuypppupdfnpppppptacnslupsphwdlpppymocugppgkyppppyhppppppuppppampsmhpppppflynbppppuyhugpppppppplcymnpppmpppalutcrspppppnmcpypfbppppppppppfdappppalpmyspxppppnryppppdsnhcmappppssyrhpppxppprtsdnapppwpyutsdgspppppcyyrhtmppdypppusmypppmdspvmghppupppppufcppdpppppsvgppppsgmhpppmxppppppppppppppupppppqupppppvlmgppppscfulyupdfppppppsppppppdpppppppppppppppppppplcppppgfpppppudvppppsbppppppppppppppppppppadpppppppppppppppppppphuppppxspppppalbhmppdvppppppkppppplfyoppppdvgppppvmpppppcacdlpcoxgxpppgcppppppppppppppplhppppplvbylypmdylsgpgfpcocisulxpllgpppfpppppvppppppppppppppppppppgppppppppppppppppppppppppppppppppppppppppppppppdpppppppppppppppppppppppppppmppppppmbdpppphpppppppppppppppppppppplappppvlppppamhspppppppppppppppppppplppppppppppppfsgppgppdlulugpppsopxapppplppppppppppppppplpppppuppppppdmpppppppdlpphoaldglappppalatmlocwpvpmgzpomvppvppppppphppppppppppppphupppppolmfbppdmpppppppppppppppppppppppppppppppgpppppppppppppppppppppppppppfudppppsdjuppppppdmpppppppppppppppppcopppppgpshpppplpuslppppypppppppppppppppppppphpppppphdlppppyliypoxmpblcowkdgpppppppppppppppppppppppppppppcshgpppppdguppvppppchgxppppppoctmppdbppsmusppppppppppppppppppdupppppsbpofpppsdylpppphlduymppppptsubqlypppplatisbgupmgdsusdypppfyvpypppppppppppppppppppivpppppmpohpppphgohpppppinocdusyppvppppupppppvfppppppppppppppppppppgpppppdopppppmcopdppppppppppppppspppppppppydpppppdcppppupcogupppppppppppppppppppppppppppsuppppxyppppppbsouyppppscipyfppvgpppppppppppppppppppppblfppppuppppppppmsppppbupcbimpvppyityfcvppppdmcppppppppppppppppppsxbppppppocmxpppdghpvppppsmpobpppppopcmtypppppstaimcyphpchmvppppppppppppphpppppkppdflyocdphpppuxhppppppiophyppppwacubpppvmuutcivapppsppoitanocluspaddmacopfpdpppvluppppspppppbplyppppppppppppppppppmppppppsuvypppxpuppfqpppppppppmpppppmppppplumqpppggcpopvdupppppppbppprpppppmpppypppppppppppspppppppppppppppppppmppppppppppppppppppsfhlpppsvlyppppppppppbrpppprdypppppuppppppdoypppppppppppppppppppsmpppppvppppppsyupppppsoumyppplypppppppppsppppdsuqpphfguppppxpppjfphowlppppmoncupprsldfppuppppppppppppppppppppppppppppppujppppppppppppppppppmdppppppppppppppfppppwdvsypdlyppkppppppppppppppppupspdpmfpushplsulpppypppppppppppygppppvlpppupmgvpdpsppcjpslubyppuumppppppppppppppppmupppppyvppppppsucmpppppulcsppppcdrppppppppppppppppppppnypppygsgfcppppncypppppfsnhgppqypcalinscgfpcncpppppppppppppppppcpppppdpppppprmucpppppcrppppppppppyppppppppppppodbylppppppflpppppprucmfgppplcpruypypppppppppppppppppppopfppppppppppppppppppppppppppppppoppppppppppppppppppppypuvppybppppppppppppppppppppompyppsmppppprugppppodmppppppppppppppppppphsoppppsopppppprypbopppyfppppppppppppgpouppgomoppppphwdpppppybsdpppgprsghfowdqmcopppppppppppppppppppcubppppcfoyppppoyuhpppppsfyppppmpconcusmppfmumcppppppppppppppppppppppppppppppppppppppppppppoppprjdbvppppppppppppppppdppppprdpppdsppppppgohcpppygnbppppmypppppsdpppppfpppppppppppppppppppppmppppppflpppppppruypppppppppppppppppppppppuppmppppppspppppppuslppppplrshyppppsbpumpppppppppppppppppponppppcumppppcfpyducpcnuslpybbmkfvsrcdvppccymcdyonphoppppppombppppsonppppmpnsicupudhuvbppnhglypppnyphglyrpppppunalcosydplkulppppmdpppppdppppppppppppppp
1396  | 1865                     | ertaniocvsluuuuuuuuuuuuuuuuuuuuuuuvyupmucyoduuuuuuuuuuuuuuurvuugurdgyuuurpuupwuuuuuugiduuuuudouuuuuuumuuuuuufuuuuuozrgoyuduukgucmcdomudmuospdiwuuupmiduuumfouuuuusyuuuuuuuoscpmhhucuuuuuchdigurluchbmuuuuuuosinpmchvmpgmdrcguuuuugrmchuuuuuosucpmufwschdswuudulbuuupslhucgdduuuuuurdgyuuuuprvbluuuurcluuuuxhgglurspyuuuulascyphovdsrpuupvllxuuugduuuuyuuubuuucumomulguuurmdcvuuuurpndcuuuumosphyulvyufshpragcucychoralpcduubuvducnmuuguxncigdpulmguubmuuusguuuuuuzuuuuupvvbuuudmuuuusdgiuhgbduupdcuuuuuuuindflyuuvmfcuuuuuuvuuuuuuuguuuuucuuuuubgsuuuuuugsuumvuumspmbhuuufusuplbhuuyuvnitoclmftdlucyfquuuuupuuuubcucumuuuuuuuuuuunyuuuuuuunvtyuuutcnsuuuuuuuuuuuuuupuuuuuuupvuuuyuuuuuufyuuhuuuhpguuuulmdbunckguuuthuglyycafbsuuuuuuwsuuuuupyuuuuuuuuuxuuuuuuuuvywguuuuuudcnuyuuuusyupdfnucyluutacnsluupghwdlspafuyhuugkmuyuumocugudmduuuuuuuuusmhuuuuuulynbuuuuuuhuguuyuuuuulcymnuuuuuuualutcrsumpuunmcpyuuuuuumuuuuuuuauuuffdauuysalpmubnryuuuudunhcuuuuuussyrhpuuuuuurtsdnuuuuwuputsdyxuuyugcyyrhtmuuuuuuunguuuuusymuupmdsuvmuusuduuuuuuuuuudufcuusdghuuusgmhuuumxuuuuuuuuuuuuuuuuuuuuquuuuuuvlmuuuuuscfulyuudfuuuuuuuuuuuuguuuuupduuuuuuuuuuuuuuuuuuuulcuuuugfuvuuuudsuuuusbuuuuuuuuuuuuuuaduuuuuuuuuuuuuuuuuuuuhuuuuuxuuuuuualbhmuudvuuuuuuuuuuuuukyuuulfdvguuuuvmuuuuuuacdlucuxgxucopuuuupgoyuuuuuuuulhuuuuulvbycuumdylyfugfucosulxuvciluguuusguuuuuuuuuuuuuuuuuuuuuuguuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuduuuuuuuuuuuuuuuuuuuuuuuuuuumuuuuuumbduuuuuuuuuuuuhouuuuuuuuuuuuplauuuuvluuuuuuamhsuuuuuuuuuuuuuuuuuuuuluupuuuuuuuuufsguuuuudlusuuuuuspoxauvuumuuuuuuuuuuuuuuuluuuuuuuuuuuudluuuuuulafuuuugudglaouuuuuatmlocwvopmgzuuuuuupomvuuuuhuuuuuuuuuuuuupuuuuuhhuuuuuolmfbuudmuuuuuuguuuuuuuuuuuuuuuuuuguuuuuuuuuuuuuuuuuuuuuuuuuuufuduuuusdjuuuuuuuuuuuuudmuuuuuuuuuuucopuuuuguuuuuuulpsuuuuhpyuuuuuuuuuuuuuuuuuushyuuuugybocsuuupcsubuuliylcghybuuddvguuuuuuuuuuuuuuuuuuukowduuuowuuuuuuguuuuuuubchgxuuuuupoctmpuuuuusmpkuuuuusuuuuuuuuuuuuduuuuuusqulyuubsuquuuguhltmpyupoydtsubqlyuugdlatisbhdpmgdsypdxuuusdyuuuuuvuuuuuuuuuuuuvuuuuuuuuivuuuuumpohuuuuhgopuuuuuinocdusydpvuuubvfuuuuuuuuuuuuuuuuuuuuguuuuudouuuuumcopduuuuuuuuuuuuuuuuuuuuspuuyduuuuudcuuuuuucoguuuuuuuuuuuuupuuuuuuuuuuuuuhuuuuupsuuuuuuubsouyuuupscipyfuuvguuuuuuuuuuuuuuuuuuuuubuuuuuuluuuuuuupmuuuuuufpcbibuuuuyitpmvuuugudmcuuuuuuuuuuuuuuuuuuuuuuuuuuxcyouuuufycvuuususmpsblyuuuopcmtyuuuuustaimcyphvmhmvuuuuuuuuuuuvuhuuulukuuusluocdfuuuuuxhuuuuuuiophyuuuuwacubuuuvmuutcivauuudppoitanoclusuaddmacoufpduuuuuuuuuuuuuuuuspuuuuuuuuuuuuuuuuuuuuuuuuuumlyuuuusuvyuufxpuuuuuuuuuuuuuumuuuqumuuuuulumquupbgcpovduuuuuuuruuuupmuuuyuuuuuuuuuuuuuuuusuuuuuuuuuuuuuuuuuuumuuuuuuuuuuuuusfuuuuuhluuuusvlyuuuubruuuurdyuuuuuuuuuuuuuuuuuudoyuuuuuuuuuuuuusmuuuuuuuuuuuvuuuuuusyuuuuuusoumyuuulyuuupuuuuusuquudfguuuhwuuuujpxuufuuuhomdfuuuuosrpndcuuduuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvuuuuuuuuuuuuuuuuuulujuuuuuuuuuuuuuuuuuumduuuuumpcuufuuuuuuuuuuuuuuudguuuuluuuuuudrunhuupuuuuuuuuuuuuuuulyyguulumcuuumrfuuuuslcnvcypypuuuuuuuuuuuuuuuuuuuuuuuuuuuuupjuuuuuupyvuuuuululcsgfyuubuuuuuuuuuuuuuuupuuuuubyuuuuusguuuuunncyuuudrfsnhguuqyucalinscyvpcncyluuuupuuuuuuuuuuuuuuuuuuuuuuugupcruuuuuuuuuuuuuuuodbuuuuuuuuuluodbuufluuuuuurucmfguuulcpruyubuuuuuuuuuuuuuuugfcuuuuuuuopfuuuuuuuuuuuuuuuuduuuuuurmucpuuuduuuuuuuuuuuuuouuuuuybuvuuuuuuuuuuuuuuuuuuouuuuusmpyuuuruguuuuodmuuuuuuuuuuuuuuuuuuuhsouuuusouuuuuurypbouugyfuuuuuuuuuuuuuuouuuuumouugouhwduuuuuybsduuugprsghfowduhospuumcouuupbcuuuuuuucuuuuuucfoyuuuuoyuhuuuuusfyuuuumpconcusmpufmumcuuuuuuuuuuuuuuuupuuuuupuuuuuuuuuuuuuuuuuuuuuuuuurjduuuuuubvuuuuuuuuuuduuuuurdpuuuuuuuudsuuuuupgohbuuuygmyuucuusduuuuufuuuuuuuuuuuuuuuuuuuuumpuuuuufluuuuuupruyuuuuuuuuuuuuuuuuuuuuuuuuuumuunuuusuuuuuuuusluuuuulrshyuuuuuuuuuusbpumuuuuuuuuuuuucuuuuuoumuuucuupyducfuuuslpcnuuufvsrcdvuuuybmcdyuyhgkbuuuhouuuuupombuuuusonpuuuuunsicuuuhbumbuuuuuuuhglyruuuumunalcosyluykuluuuuduuuuuuuuuuuuduuuuuuuuuuuuuuuuuuuug
1402  | 1909                     | ertaniocvslpppkgpwppppppgidpppppumfoppuppsyppppppposcpomhppppdpppppzmcdomrpppospdiwpuupmdmipppfocmphpppgfgrmcupppdposuchphfwchcdswpppcmpoppppiuosinpmchdgpgmpppppvprvpppppdrgwkpppphgglurspyppcllascyphoudsrdscgppgppppppppppppppblppppcgpplpppprmypppppprypddlbppdsophlypupcfshprafcppymcoralpbyvlbpvdlglyppydcvypppppndcppppmcpppppppppppgpppppppplppppppcdppppppucnmppppxncigdpplmgppppppppppplpxpzppppppvpppppmdpppsppgihbudpvbpdcuqpppmpindflyppvmfcpuupppppppmftpgvmpppcdmpppusdgugxgpgscpyuppuspmnyplyfpsuplbhppppdnitoclaumvcucyfqpbhppppppppnvtypppmvfpvpppjdpbcupppppptcnspppppsthugllypppbspvppppppubcppcumpppppppppppppppppppwghppppppcubckgpxppupsycmlppnltacnspvppdhwdlppmpppphppppguppplmpypppppupppppppsmhpppxpplynblupppphugppppspamlcymnmppppvyalutcrsfyhppnmcpyppcyppppcuypppppppppppppyuspppfpnrypgkmpfnhmocugudssyrhpdpmppprtsdnppppwpputsdypppyppcayrhtmpppppppngpfblppppppppppppypppppppppppppppppmpppppppppppppppppppppuappppfdappppulpmpppdapppppppppxppppgspppppmdspdmsgmhpppplusmpppppppppdsupppppqupppppvlmpppypscfuufcldfppupgpppppppppppppyppppppppppppppppppppppppppppppvpgppppppppppppppppppppspppadpdpppppppppppppppppphulcppxpgfpppaludsppdvsbppppppppppppbhmpppdvgppppvmppppppacdlpppxgxppppppkppppppppppppplhppppplvbypplmdylfvpgfpcosulxppplgppppppcoppppppgcpppppppppppppgpppppfoypppplypppppsgpppppccilugppplppppppppppdpppppppppppppppppppppppppppmppppppmbdppppppppppppppppppppppppppplappppvlppppppamhspppppppppppppppppppplpppppphoppppfsgpppppdluppppppsopxapppplppppppppppppppplpppppuppppppdmpppppppdlppppamdglappspalatmlocwvhpmgzpspppppppppppphppppppppppppppppppppppppomvpppppppppppppppppppppppphspppppppgppppppppppppupppppgspppppolfudppdmsdjupppppppppppppppppppppppppmbpppppgcoppppplpsupppppyppppppppppppppppppppypdmpppbocsppppcsubppppplcghppshddvgphpppppfpppppppppppkowdpppowppdlppgupupslpbchliypoxmpoctmpypbppsmpkppppppppppppppgxppduppmppsqulypppsuqpvppphltmpyuppydtsubqlyupgdlatisubppmgdsuypppppppppppppppppbpofgufmppppppppppppppppppphppmppyppppppvpppppppsdyppppppdopppppppppppppppppppibhppppmpohpppmhgopppvfpinocdusyppvppppppppcopdpppdyppppppcogupppppppppppppppppppppppppphppppppxyppspppbsouyppppscipyfppvgpppppppppppppppppppppbppppppuppppsuppmppppppppcbipppppyityfcvppppdmcpppppppppppppppppppxlfbppppocmxpppdghppppbusmpompvpppopcmtypppppstaimcyphpchmvppppppspppppphpppppkppppppocdphpppuxhppppppiophyppppwacubpppvmuutcivapppdppoitanocluspaddmacopfpdpppppppvppppppppppppppppppppppppppppppppslpbyppppppppppppfqpppupppppvlupppppflyppppppppppppppbppppppppppspprpppspmpppyxpupppppppppppppppppppuvyppppumqppppmcpovdupppppppsfpppppppppppppppppppbrpppsrdyppppppppppppppppmpppppppppppppppppsmphlppppsvlyppppppppppppppppppppppppupppsppdoysuqpppfguppppppppjfpppfpppvpmdfppsyrslujpsoupppuplyppppppppppppppmypppphwppppppxpppppphowlpppmdoncvsyppfdppppfppppwdppppdlyppkppppppppppppppppupppppmfppppplsuppppypppppppppppppppppppuppupppppdpspppppslubyppuumpspdppppushpppplpppppppppppppppygppppvlpppppmgvppdrppcjpppppsdppppppppppppppygfcppmupppppyvppppppsucmpppppulcspgfccppppppppppppppppppppppnypdpppsgprmucpncypcrppfsnhgppqypcalinscyvpcncpplppppppflpppppprucmfgppplcpruypbppppppppppppppppgpppppppppodbpodbpppppppppppppppppppoppppppppppppppppppppypppppybppppopfpppppppppppppopppppsmppppprugppppodmpppppppppppppppppuvhsoppppsopppppprypbopppyfmpypppppppppppouppppmoppppphwdpppppybsdpppgprsghfowdqhospgpppppppppppppppppcppppppcfgoppppoyuhpppppsfypppompconcusmppfmmcouppppppppppppbcppppppppppppppppppppppppppppppppprjdppppppppppppppppppdppppprdppppppppppppppppppppbpppppmypppppsdpppppbvppppppppppppppppppppmppppppflppppppprsdhppyggnpppppohcpppppppppppuypppppsppppppmuslppppplrshypppppppppppppppppppppppppppcppppppumuppppppyducvpppslpybpppfvsrcdpppccsmcdyppyppppppppppppppppubpppompppppcfudnyppcnuhglynbmkpphglyrpppppunalcosydplkulpombmdppsonppppppnsicdpphbuvbppppppppppppppppppppppppppppppppppppppppppppppppuppppppppppppppppppppmpppppogrdypprppppppppppppppppppppvypppppcyodpppmfppppppprgoy

Das Skript, mit dem ich die Datenzeichenfolgen generiert habe, ist hier , falls es für jemanden nützlich ist!


Leider hängt dies bei der Verwendung des offiziellen Torschützen. Denken Sie daran, dass Sie in gewisser Weise nur 5 falsche Vermutungen anstellen. Die 6. falsche Annahme führt dazu, dass Sie sofort verlieren.
Nneonneo

@ nneonneo Ah ok, danke! Ich werde versuchen, dieses Problem zu beheben, und es löschen, wenn ich es nicht kann. In meinen manuellen Tests wird erwartet, dass die sechste falsche Schätzung ein Verlust ist, aber vielleicht habe ich etwas mit den Endbedingungen falsch gemacht.
TTTPPP

distinctUm Ihnen das Debuggen zu erleichtern, fügen Sie einige zusätzliche Informationen hinzu: Wenn das Wort angegeben wurde , war die Ausgabe Ihres Programms in Ordnung eitanogsuc, was bedeutet, dass es die Ausgabe nicht mehr gibt, selbst wenn es nur fünf Mal falsch geraten hat.
pastebin.com Schrägstrich 0mr8spkT

@ace Brilliant, danke. Das ist sehr hilfreich.
tttppp

@ace Kannst du das bitte nochmal testen? Ich habe manuell "distinct" getestet, das es jetzt an der richtigen Stelle verliert (ich habe auch "octopus" getestet, das es verliert, "ear", das es gewinnt, und "END", das es beendet). Vielen Dank!
TTTPPP

1

Die Programmiersprache D ist das Werkzeug meiner Wahl für diese Herausforderung.

Nur knapp unter dem Limit von 2.048 Bytes, obwohl es in einigen Bereichen leicht abgenutzt ist, um die Anzahl der Bytes zu verringern, bleibt all das schwere Heben perfekt lesbar. Dieser Löser ist nicht sehr gut in seiner Arbeit, und ich gehe davon aus, dass er leicht zu schlagen ist, aber dies dient nur dazu, den Ball ins Rollen zu bringen. Starte die Dinge sozusagen.

EDIT # 1 :Wie bereits erwähnt, kann der ursprüngliche Code einen schrecklichen Tod erleiden, wenn alle Vokale erschöpft sind. Da es nicht richtig funktioniert, habe ich es durch eine etwas brutalere Herangehensweise an Zufallsraten ersetzt.

EDIT # 2 : Originalcode wurde behoben und steht jetzt.

Punktzahl :

25.7; totalerr: 24,529.9 (average of 10 tests).

Wie es funktioniert

Dieser Löser ist völlig zufällig. Sogar die Zufälligkeit ist zufällig, lustige Zeiten!

Wenn das Programm Eingaben empfängt, errät es ein zufälliges Zeichen, das es noch nicht erraten hat, und sendet es an STDOUT.

Der Schätzalgorithmus funktioniert folgendermaßen:

  1. Wählen Sie zufällig eine von zwei Zeichengruppen (Konsonanten oder Vokale).
  2. Wähle zufällig einen von zwei Modi:
    • Verwenden Sie die Buchstabenhäufigkeit als Gewicht für das RNG. Es ist wahrscheinlicher, dass eine höhere Frequenz ausgewählt wird.
    • Wählen Sie ein Zeichen in einem zufälligen Index aus, ohne die Häufigkeit zu berücksichtigen.
  3. Gibt ein einzelnes Zeichen zurück, basierend auf dem in Schritt 2 ausgewählten Modus.
import std.stdio, std.random, std.array, std.math, std.algorithm;

alias double[char] Hash;
alias uniform U;

bool first = true;
Hash cons, vowel;
char[] guessed;
Mt19937 rng;

int fails;

void main()
{
    rng.seed( unpredictableSeed );

    auto get() { return stdin.readln.replace( "\r", "" ).replace( "\n", "" ); }

    string input, last;

    while( ( input = get ) != "END" )
    {
        if( first ) last = input;
        if( input == last && !first ) ++fails;

        if( fails == 6 || !input.any!( x => x == '_' ) )
        {
            fails = 0;
            last = null;
            guessed = [];
            first = true;
            continue;
        }

        stdout.writeln( guess );
        stdout.flush;

        if( !first ) last = input;
        if( first ) first = false;
    }
}

char guess()
{
    reroll:
    Hash group;
    double min, max;
    bool useWeight = U( 0, 2, rng ) == 1;

    if( guessed.filter!( c => vowel.keys.any!( x => x == c ) ).count < vowel.length && U( 0, 2, rng ) == 1 )
    {
        group = vowel;
        min = useWeight ? 2.758 : 0;
        max = useWeight ? 12.702 : 4;
    }
    else
    {
        group = cons;
        min = useWeight ? 0.074 : 0;
        max = useWeight ? 9.056 : 20;
    }

    double choice = U!( "()" )( min, max, rng );
    char chr;

    if( useWeight )
    {
        foreach( k, v; group )
            if( v < choice )
                chr = k;
    }
    else
    {
        int counter = 0;

        foreach( k, v; group )
        {
            if( counter == cast( int )choice.floor )
            {
                chr = k;
                break;
            }

            ++counter;
        }
    }

    if( guessed.any!( x => chr == x ) || chr == char.init )
        goto reroll;
    else
    {
        guessed ~= chr;
        return chr;
    }
}

K keys( K, V )( V[K] a )
{
    K[] ks;
    foreach( k, v; a )  ks ~= k;
    return ks;
}

static this()
{
    cons = [ 't': 9.056, 'n': 6.749, 's': 6.327, 'h': 6.049, 'r': 5.987, 'd': 4.253, 'l': 4.025, 'c': 2.782, 'm': 2.406, 'w': 2.360, 'f': 2.228, 'g': 2.015, 'y': 1.974, 'p': 1.929, 'b': 1.492, 'v': 0.978, 'k': 0.772, 'j': 0.153, 'x': 0.150, 'q': 0.095, 'z': 0.074 ];
    vowel = [ 'e': 12.702, 'a': 8.167, 'o': 7.507, 'i': 6.966, 'u': 2.758 ];
}

@ace Es scheint, als würde es in einer endlosen Schleife des erneuten Rollens stecken bleiben, nachdem alle Vokale erschöpft sind. Ich bin nicht sicher, warum gerade jetzt, aber bis ich das Quadrat weg habe ich eine weniger anspruchsvolle Version in bearbeitet. Ich kann oder kann nicht Vokal / Konsonant Guesser repost.
Tony Ellis

Bei Verwendung des dmd-Compilers tritt ein Fehler auf ./test.d(44): Error: cannot implicitly convert expression (uniform(0, Letters.length, rng)) of type ulong to int. Ich habe es geschafft, dies zu beheben cast(int). Nach 10 Läufen beträgt Ihre durchschnittliche Punktzahl 22,4 Wörter mit 24529,1 falschen Vermutungen. Ich werde es erneut testen, wenn Sie die fortgeschrittenere Version reparieren :) Viel Spaß
pastebin.com slash 0mr8spkT

@ace Das ist noch besser als ich gedacht hätte. Ha. Wie auch immer, der "klügere" Rätsel ist jetzt behoben, obwohl es, um ehrlich zu sein, besser funktionierte, als es kaputt war.
Tony Ellis

Was ist die Punktzahl jetzt?
Hälfte

@justhalf score = 25.7, totalerr = 24529.9 (Durchschnitt von 10 Tests)
pastebin.com slash 0mr8spkT

0

JAVASCRIPT + HTML-Lösung

<!DOCTYPE html>

<head>

    <title>Hangman Game</title>
    <meta charset="utf-8">

    <style type="text/css">

        *{

            font-family: sans-serif;
            color: teal;

        }

        #man {

            float: right;
            margin-left: 0%;
            position: absolute;
            top: 20px;
            left: 50%;

        }

    </style>

</head>

<body>

    <div>
        <h1>Welcome To Hangman!</h1>
        <h2>Your current word to guess is: <span id="word"></span></h2>
        <input type="text" name="letter" id="letter">
        <h3>You entered the letter: <span id="chosenLetter"></span></h3>
        <h3>Incorrect Letters: <span id="incorrect"></span></h3>
        <h3>Chances Left: <span id="chance"></span></h3>
        <h2>Game Status: <span id='gameStatus'>In Progress</span></h2>
        <img id='man' src="../images/hangman/white.PNG" />

    </div>

    <script type="text/javascript">

        var word = document.getElementById('word');
        var input = document.getElementById('letter');
        var displayLetter = document.getElementById('chosenLetter');
        var chanceDisplay = document.getElementById('chance');
        var gameStatus = document.getElementById('gameStatus');
        var image = document.getElementById('man');
        var incorrect = document.getElementById('incorrect');
        var list = ['apple', 'banana', 'elephant', 'fruit', 'pencil', 'boomerang', 'trophy', 'slippers', 'university', 'curtain','connection', 'grandmother', 'inflation', 'recording', 'conversation', 'king', 'reception', 'distribution', 'cigarette'];
        var imagesList = ['white.PNG','one.PNG','two.PNG','three.PNG','four.PNG','five.PNG','six.PNG','seven.PNG','eight.PNG'];
        var imagesIndex = 0;
        image.src = "../images/hangman/" + imagesList[imagesIndex];
        var currentWordIndex = Math.floor(Math.random()* list.length);
        var currentW = list[currentWordIndex];
        console.log(currentW);
        var wordLength = currentW.length;
        var chances= 8;
        chanceDisplay.textContent = chances;
        for(i = 0; i < wordLength; i++){

            var nodeDash = document.createElement('span');
            nodeDash.classList.add('dash');
            var textNode = document.createTextNode(' _ ');
            nodeDash.appendChild(textNode);
            word.append(nodeDash);

        }
        var dashes = document.getElementsByClassName('dash');

        input.addEventListener('keyup', function(){

            event.preventDefault();
            var alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
            if(event.keyCode === 13){

                var letterChosen = input.value;
                input.value = '';
                var match = 0;
                var checkLength = letterChosen.length;
                if(checkLength === 1){

                    console.log('length is correct');
                    var checkIfLetter = 0;
                    var checkIfCorrect = 0;

                    for(i = 0; i < alphabet.length; i++){

                        if(alphabet[i] == letterChosen){

                            console.log('is an alphabetic letter');
                            match += 1;
                            checkIfLetter++;
                            displayLetter.innerHTML = letterChosen;

                        } 

                    }

                    if(checkIfLetter == 0){

                        displayLetter.innerHTML = 'Not A Single Letter';

                    }

                    if(match == 1){

                        var checkIfDone = 0;

                        for(i = 0; i < (1 + currentW.length); i++){

                            if(letterChosen == currentW[i]){

                                dashes[i].textContent = ' ' + letterChosen + ' ';

                            } else{

                                checkIfCorrect ++;

                            }

                        }

                        for(i = 0; i < currentW.length; i++){

                            var temporaryCheck = ' ' + currentW[i] + ' ';

                            if(dashes[i].textContent == temporaryCheck){

                                checkIfDone++;

                            }

                        }

                        if(checkIfDone == currentW.length){

                            gameStatus.innerHTML = 'GAME ENDED: YOU WON!';
                            gameStatus.style.color = 'lightgreen';

                            for(i = 0; i < dashes.length; i++){

                                dashes[i].style.color = 'lightgreen';

                            }

                        }

                        if(!(checkIfCorrect <= currentW.length)){

                            incorrect.innerHTML += (letterChosen + ', ');
                            chances--;
                            chanceDisplay.textContent = chances;
                            imagesIndex++;
                            image.src = "../images/hangman/" + imagesList[imagesIndex];
                            if(chances == 0){

                                for(i = 0; i < dashes.length; i++){

                                    if(dashes[i].innerHTML == ' _ '){

                                        dashes[i].innerHTML = ' ' + currentW[i] + ' ';
                                        dashes[i].style.color = 'red';

                                    }

                                    gameStatus.innerHTML = 'GAME OVER: TRY AGAIN';

                                }


                            }

                        }

                    }

                } else{

                    displayLetter.innerHTML = "Not A Single Letter";

                }

            }

        });



    </script>

</body>


1
Willkommen bei PPCG! Das sieht aus wie ein Hangman-Spiel. Leider geht es bei der Frage darum, einen Hangman-Löser zu schreiben (ein Programm, das Hangman spielt, anstatt es dem Benutzer zu erlauben, zu spielen).
OOBalance
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.