글쓴이 보관물: μ†Œμž₯ 마

λ°”μœ„, 쒅이, κ°€μœ„, λ„λ§ˆλ±€, 슀팍 ν† λ„ˆλ¨ΌνŠΈ 0036.26 ms

κ°€μž₯ 졜근 리더 λ³΄λ“œ @ 2014-08-02 12:00

| Pos # | Author               | Name                    | Language   | Score | Win   | Draw  | Loss  | Avg. Dec. Time |
+-------+----------------------+-------------------------+------------+-------+-------+-------+-------+----------------+
| 1st   | Emil                 | Pony                    | Python2    | 064   | 064   | 000   | 005   | 0026.87 ms     |
| 2nd   | Roy van Rijn         | Gazzr                   | Java       | 062   | 062   | 001   | 006   | 0067.30 ms     |
| 2nd   | Emil                 | Dienstag                | Python2    | 062   | 062   | 001   | 006   | 0022.19 ms     |
| 4th   | ovenror              | TobiasFuenke            | Python2    | 061   | 061   | 001   | 007   | 0026.89 ms     |
| 5th   | PhiNotPi             | BayesianBot             | Perl       | 060   | 060   | 000   | 009   | 0009.27 ms     |
| 6th   | Claudiu              | SuperMarkov             | Python2    | 058   | 058   | 001   | 010   | 0026.77 ms     |
| 7th   | histocrat            | Alternator              | Ruby       | 057   | 057   | 001   | 011   | 0038.53 ms     |
| 8th   | histocrat            | LeonardShelby           | Ruby       | 053   | 053   | 000   | 016   | 0038.55 ms     |
| 9th   | Stretch Maniac       | SmarterBot              | Java       | 051   | 051   | 002   | 016   | 0070.02 ms     |
| 9th   | Martin BΓΌttner       | Markov                  | Ruby       | 051   | 051   | 003   | 015   | 0038.45 ms     |
| 11th  | histocrat            | BartBot                 | Ruby       | 049   | 049   | 001   | 019   | 0038.54 ms     |
| 11th  | kaine                | ExcitingishBot          | Java       | 049   | 049   | 001   | 019   | 0065.87 ms     |
| 13th  | Thaylon              | UniformBot              | Ruby       | 047   | 047   | 001   | 021   | 0038.61 ms     |
| 14th  | Carlos Martinez      | EasyGame                | Java       | 046   | 046   | 002   | 021   | 0066.44 ms     |
| 15th  | Stretch Maniac       | SmartBot                | Java       | 045   | 045   | 001   | 023   | 0068.65 ms     |
| 16th  | Docopoper            | RoboticOboeBotOboeTuner | Python2    | 044   | 044   | 000   | 025   | 0156.55 ms     |
| 17th  | Qwix                 | Analyst                 | Java       | 043   | 043   | 001   | 025   | 0069.06 ms     |
| 18th  | histocrat            | Analogizer              | Ruby       | 042   | 042   | 000   | 027   | 0038.58 ms     |
| 18th  | Thaylon              | Naan                    | Ruby       | 042   | 042   | 004   | 023   | 0038.48 ms     |
| 20th  | Thaylon              | NitPicker               | Ruby       | 041   | 041   | 000   | 028   | 0046.21 ms     |
| 20th  | bitpwner             | AlgorithmBot            | Python2    | 041   | 041   | 001   | 027   | 0025.34 ms     |
| 22nd  | histocrat            | WereVulcan              | Ruby       | 040   | 040   | 003   | 026   | 0038.41 ms     |
| 22nd  | Ourous               | QQ                      | Cobra      | 040   | 040   | 003   | 026   | 0089.33 ms     |
| 24th  | Stranjyr             | RelaxedBot              | Python2    | 039   | 039   | 001   | 029   | 0025.40 ms     |
| 25th  | JoshDM               | SelfLoathingBot         | Java       | 038   | 038   | 001   | 030   | 0068.75 ms     |
| 25th  | Ourous               | Q                       | Cobra      | 038   | 038   | 001   | 030   | 0094.04 ms     |
| 25th  | Ourous               | DejaQ                   | Cobra      | 038   | 038   | 001   | 030   | 0078.31 ms     |
| 28th  | Luis Mars            | Botzinga                | Java       | 037   | 037   | 002   | 030   | 0066.36 ms     |
| 29th  | kaine                | BoringBot               | Java       | 035   | 035   | 000   | 034   | 0066.16 ms     |
| 29th  | Docopoper            | OboeBeater              | Python2    | 035   | 035   | 002   | 032   | 0021.92 ms     |
| 29th  | Thaylon              | NaanViolence            | Ruby       | 035   | 035   | 003   | 031   | 0038.46 ms     |
| 32nd  | Martin BΓΌttner       | SlowLizard              | Ruby       | 034   | 034   | 004   | 031   | 0038.32 ms     |
| 33rd  | Kyle Kanos           | ViolentBot              | Python3    | 033   | 033   | 001   | 035   | 0032.42 ms     |
| 34th  | HuddleWolf           | HuddleWolfTheConqueror  | .NET       | 032   | 032   | 001   | 036   | 0029.86 ms     |
| 34th  | Milo                 | DogeBotv2               | Java       | 032   | 032   | 000   | 037   | 0066.74 ms     |
| 34th  | Timmy                | DynamicBot              | Python3    | 032   | 032   | 001   | 036   | 0036.81 ms     |
| 34th  | mccannf              | YAARBot                 | JS         | 032   | 032   | 002   | 035   | 0100.12 ms     |
| 38th  | Stranjyr             | ToddlerProof            | Java       | 031   | 031   | 010   | 028   | 0066.10 ms     |
| 38th  | NonFunctional User2..| IHaveNoIdeaWhatImDoing  | Lisp       | 031   | 031   | 002   | 036   | 0036.26 ms     |
| 38th  | john smith           | RAMBOBot                | PHP        | 031   | 031   | 002   | 036   | 0014.53 ms     |
| 41st  | EoinC                | SimpleRandomBot         | .NET       | 030   | 030   | 005   | 034   | 0015.68 ms     |
| 41st  | Martin BΓΌttner       | FairBot                 | Ruby       | 030   | 030   | 006   | 033   | 0038.23 ms     |
| 41st  | Docopoper            | OboeOboeBeater          | Python2    | 030   | 030   | 006   | 033   | 0021.93 ms     |
| 44th  | undergroundmonorail  | TheGamblersBrother      | Python2    | 029   | 029   | 000   | 040   | 0025.55 ms     |
| 45th  | DrJPepper            | MonadBot                | Haskel     | 028   | 028   | 002   | 039   | 0008.23 ms     |
| 46th  | Josef E.             | OneBehind               | Java       | 027   | 027   | 007   | 035   | 0065.87 ms     |
| 47th  | Ourous               | GitGudBot               | Cobra      | 025   | 025   | 001   | 043   | 0053.35 ms     |
| 48th  | ProgramFOX           | Echo                    | .NET       | 024   | 024   | 004   | 041   | 0014.81 ms     |
| 48th  | JoshDM               | SelfHatingBot           | Java       | 024   | 024   | 005   | 040   | 0068.88 ms     |
| 48th  | Trimsty              | Herpetologist           | Python3    | 024   | 024   | 002   | 043   | 0036.93 ms     |
| 51st  | Milo                 | DogeBot                 | Java       | 022   | 022   | 001   | 046   | 0067.86 ms     |
| 51st  | William Barbosa      | StarWarsFan             | Ruby       | 022   | 022   | 002   | 045   | 0038.48 ms     |
| 51st  | Martin BΓΌttner       | ConservativeBot         | Ruby       | 022   | 022   | 001   | 046   | 0038.25 ms     |
| 51st  | killmous             | MAWBRBot                | Perl       | 022   | 022   | 000   | 047   | 0016.30 ms     |
| 55th  | Mikey Mouse          | LizardsRule             | .NET       | 020   | 020   | 007   | 042   | 0015.10 ms     |
| 55th  | ja72                 | BlindForesight          | .NET       | 020   | 020   | 001   | 048   | 0024.05 ms     |
| 57th  | robotik              | Evolver                 | Lua        | 019   | 019   | 001   | 049   | 0008.19 ms     |
| 58th  | Kyle Kanos           | LexicographicBot        | Python3    | 018   | 018   | 003   | 048   | 0036.93 ms     |
| 58th  | William Barbosa      | BarneyStinson           | Lua        | 018   | 018   | 005   | 046   | 0005.11 ms     |
| 60th  | Dr R Dizzle          | BartSimpson             | Ruby       | 017   | 017   | 001   | 051   | 0038.22 ms     |
| 60th  | jmite                | IocainePowder           | Ruby       | 017   | 017   | 003   | 049   | 0038.50 ms     |
| 60th  | ArcticanAudio        | SpockOrRock             | PHP        | 017   | 017   | 001   | 051   | 0014.19 ms     |
| 60th  | Dr R Dizzle          | BetterLisaSimpson       | Ruby       | 017   | 017   | 000   | 052   | 0038.23 ms     |
| 64th  | Dr R Dizzle          | LisaSimpson             | Ruby       | 016   | 016   | 002   | 051   | 0038.29 ms     |
| 65th  | Martin BΓΌttner       | Vulcan                  | Ruby       | 015   | 015   | 001   | 053   | 0038.26 ms     |
| 65th  | Dr R Dizzle          | Khaleesi                | Ruby       | 015   | 015   | 005   | 049   | 0038.29 ms     |
| 67th  | Dr R Dizzle          | EdwardScissorHands      | Ruby       | 014   | 014   | 002   | 053   | 0038.21 ms     |
| 67th  | undergroundmonorail  | TheGambler              | Python2    | 014   | 014   | 002   | 053   | 0025.47 ms     |
| 69th  | cipher               | LemmingBot              | Python2    | 011   | 011   | 002   | 056   | 0025.29 ms     |
| 70th  | Docopoper            | ConcessionBot           | Python2    | 007   | 007   | 000   | 062   | 0141.31 ms     |
+-------+----------------------+-------------------------+------------+-------+-------+-------+-------+----------------+
Total Players: 70
Total Matches Completed: 2415
Total Tourney Time: 06:00:51.6877573

ν† λ„ˆλ¨ΌνŠΈ λ…ΈνŠΈ

  • μš°ν›„ 70 봇
  • Emil은 μ—¬μ „νžˆ ​​KOTH Pony이며 그의 μƒˆλ‘œμš΄ 봇 Dienstag은 3 μœ„λ₯Ό μ°¨μ§€ν•©λ‹ˆλ‹€.
  • λ‘œμ΄μ—κ²Œ Gazzr봇 으둜 2 μœ„λ‘œ λ›°μ–΄ λ“€μ–΄ μ€€ 것을 μΆ•ν•˜ν•©λ‹ˆλ‹€
  • William Barbosa, λ΄‡μœΌλ‘œ Quick Draw 상 μˆ˜μƒBarneyStinson
  • 그리고 Slow Poke 상은 그의 λ‘œλ΄‡ R.O.B.O.Tκ³Ό Concessionbotν•Έλ“œ λ‹Ή> 140ms 인 Docopoperμ—κ²Œ μˆ˜μ—¬λ©λ‹ˆλ‹€.

  • μ‚¬μš© κ°€λŠ₯ν•œ 둜그 : https://github.com/eoincampbell/big-bang-game/blob/master/tourneys/Tournament-2014-08-01-23-24-00.zip?raw=true

μ œμ™Έ 된 봇

  • BashRocksBot-cygwin bash 슀크립트λ₯Ό μ‹€ν–‰ν•˜λŠ” .netμ—λŠ” μ—¬μ „νžˆ 기쁨이 μ—†μŠ΅λ‹ˆλ‹€.
  • CounterPreferenceBot-버그 μˆ˜μ • λŒ€κΈ° 쀑
  • RandomlyWeighted-버그 μˆ˜μ •μ„ κΈ°λ‹€λ¦¬λŠ” 쀑
  • CasinoShakespeare-인터넷 연결이 ν•„μš”ν•˜λ―€λ‘œ μ œμ™Έ

μ›λž˜ κ²Œμ‹œ 된 질문

당신은 λ°”μœ„, 쒅이, κ°€μœ„, λ„λ§ˆλ±€, 슀팍의 κ°€μž₯ μ„œμ‚¬μ‹œ λŒ€κ²° μ „νˆ¬λ₯Ό μœ„ν•΄ 친ꡬ μ§‘μœΌλ‘œ λŒμ•„ μ™”μŠ΅λ‹ˆλ‹€. μ§„μ •ν•œ BigBang κ΄΄μƒν•œ μŠ€νƒ€μΌμ—μ„œλŠ” μ–΄λ–€ μ„ μˆ˜λ„ 슀슀둜 κ²½κΈ°λ₯Όν•˜μ§€ μ•Šμ§€λ§Œ λŒ€μ‹  μ½˜μ†” 봇을 λ§Œλ“€μ–΄ λƒˆμŠ΅λ‹ˆλ‹€. USB ν‚€λ₯Ό κΊΌλ‚΄μ„œ μ •λ³΅μž μ—κ²Œ λ„˜κ²¨ λŒ€κ²°μ— ν¬ν•¨μ‹œν‚΅λ‹ˆλ‹€. νŽ˜λ‹ˆ 슀 oon. λ˜λŠ” ν•˜μ›Œλ“œκ°€ κΈ°μ ˆν–ˆμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” μ—¬κΈ° λ ˆλ„ˆλ“œμ˜ μ•„νŒŒνŠΈμ—μ„œ νŒλ‹¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ·œμΉ™

ν‘œμ€€ λ°”μœ„, 쒅이, κ°€μœ„, λ„λ§ˆλ±€, 슀팍 κ·œμΉ™μ΄ μ μš©λ©λ‹ˆλ‹€.

  • κ°€μœ„ 잘라 쒅이
  • 쒅이 컀버 락
  • λ°”μœ„λŠ” λ„λ§ˆλ±€μ„ 뢄쇄
  • λ„λ§ˆλ±€ 독
  • 슀팍슀 β€‹β€‹κ°€μœ„
  • κ°€μœ„λŠ” λ„λ§ˆλ±€μ„ ν•΄λ…ν•©λ‹ˆλ‹€
  • λ„λ§ˆλ±€μ€ 쒅이λ₯Ό λ¨ΉλŠ”λ‹€
  • μŠ€νŒμ€ 쒅이λ₯Ό λ°˜μ¦ν•œλ‹€
  • μŠ€νŒμ€ λ°”μœ„λ₯Ό κΈ°ν™”μ‹œν‚¨λ‹€
  • κ°€μœ„ 뢄쇄기

RPSLV κ·œμΉ™

각 ν”Œλ ˆμ΄μ–΄μ˜ 봇은 ν† λ„ˆλ¨ΌνŠΈμ—μ„œ μ„œλ‘œ λ‹€λ₯Έ 봇과 ν•˜λ‚˜μ˜ κ²½κΈ° λ₯Όν•©λ‹ˆλ‹€.

각 κ²½κΈ°λŠ” 100 회 반볡 된 RPSLV κ²Œμž„μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

각 κ²½κΈ°κ°€ λλ‚˜λ©΄ 100 점 λ§Œμ μ— κ°€μž₯ λ§Žμ€ κ²Œμž„ / ν•Έλ“œλ₯Ό 얻은 μ„ μˆ˜κ°€ μŠΉμžκ°€λ©λ‹ˆλ‹€.

κ²½κΈ°μ—μ„œ 이기면 리그 ν…Œμ΄λΈ”μ—μ„œ 1 μ μ„λ°›μŠ΅λ‹ˆλ‹€. λ“œλ‘œμš° 맀치의 결과둜 μ–΄λŠ ν”Œλ ˆμ΄μ–΄λ„ 점수λ₯Ό μ–»μ§€ λͺ»ν•©λ‹ˆλ‹€.

봇 μš”κ΅¬ 사항

봇은 λͺ…λ Ή μ€„μ—μ„œ μ‹€ν–‰ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

Sheldor의 * nix λ°•μŠ€κ°€ μ£½μ—ˆμœΌλ―€λ‘œ Windows 8 Gaming Laptopμ—μ„œ μ‹€ν–‰ν•˜λ―€λ‘œ 제곡된 μ†”λ£¨μ…˜μ΄ Windowsμ—μ„œ 싀행될 수 μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. SheldorλŠ” μ†”λ£¨μ…˜μ„ μ‹€ν–‰ν•  수 μžˆλ„λ‘ ν•„μš”ν•œ λŸ°νƒ€μž„μ„ μ΄μœ μ—†μ΄ μ„€μΉ˜ν•˜λ„λ‘ 기꺼이 μ œμ•ˆν–ˆμŠ΅λ‹ˆλ‹€. (.NET, Java, Php, Python, Ruby, Powershell …)

μž…λ ₯

각 경기의 첫 κ²½κΈ°μ—μ„œλŠ” 봇에 μΈμˆ˜κ°€ μ œκ³΅λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 각 경기의 각 후속 κ²Œμž„μ—μ„œ :-Arg1은이 κ²½κΈ°μ—μ„œ 봇 ν•Έλ“œ / κ²°μ •μ˜ 이λ ₯을 ν¬ν•¨ν•©λ‹ˆλ‹€. -Arg2λŠ”μ΄ κ²½κΈ°μ—μ„œ μƒλŒ€ ν•Έλ“œ / κ²°μ •μ˜ 이λ ₯을 ν¬ν•¨ν•©λ‹ˆλ‹€.

μ—­μ‚¬λŠ” μ—°μ£Ό ν•  μˆ˜μžˆλŠ” 손을 λ‚˜νƒ€λ‚΄λŠ” 일련의 단일 λŒ€λ¬Έμžλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€.

 | R | Rock     |
 | P | Paper    |
 | S | Scissors |
 | L | Lizard   |
 | V | Spock    |

예 :

  • κ²Œμž„ 1 : MyBot.exe
  • κ²Œμž„ 2 : MyBot.exe SV
  • κ²Œμž„ 3 : MyBot.exe SS VL
  • κ²Œμž„ 4 : MyBot.exe SSR VLS

μ‚°μΆœ

봇은 각 κ²Œμž„μ˜ β€œμ†β€μ„ λ‚˜νƒ€λ‚΄λŠ” 단일 문자 응닡을 μž‘μ„±ν•΄μ•Όν•©λ‹ˆλ‹€. κ²°κ³ΌλŠ” STDOUT에 기둝되고 봇은 μ’…λ£Œν•΄μ•Όν•©λ‹ˆλ‹€. μœ νš¨ν•œ 단일 λŒ€λ¬ΈμžλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 | R | Rock     |
 | P | Paper    |
 | S | Scissors |
 | L | Lizard   |
 | V | Spock    |

봇이 μœ νš¨ν•œ ν•Έλ“œλ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” 경우 (예 : μœ„μ˜ 5 개의 단일 λŒ€λ¬Έμž 쀑 ν•˜λ‚˜), ν•΄λ‹Ή ν•Έλ“œλ₯Ό μžλ™μœΌλ‘œ λͺ°μ•„ λ‚΄κ³  κ²½κΈ°λŠ” κ³„μ†λ©λ‹ˆλ‹€.

두 봇이 λͺ¨λ‘ μœ νš¨ν•œ ν•Έλ“œλ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠμœΌλ©΄ κ²Œμž„μ€ λ¬΄μŠΉλΆ€λ‘œ κ°„μ£Όλ˜λ©° κ²½κΈ°λŠ” κ³„μ†λ©λ‹ˆλ‹€.

κ²½κΈ° ν˜•μ‹

제좜 된 각 봇은 ν† λ„ˆλ¨ΌνŠΈμ—μ„œ μ„œλ‘œ λ‹€λ₯Έ 봇과 ν•˜λ‚˜μ˜ κ²½κΈ°λ₯Όν•©λ‹ˆλ‹€.

각 κ²½κΈ°λŠ” μ •ν™•νžˆ 100 κ²Œμž„ μ§€μ†λ©λ‹ˆλ‹€.

μ‹œν•©μ€ 읡λͺ…μœΌλ‘œ μ§„ν–‰λ˜λ©°, μƒλŒ€ν•˜λŠ” νŠΉμ • 봇에 λŒ€ν•œ κ³ κΈ‰ 지식은 μ—†μ§€λ§Œ ν˜„μž¬ μ‹œν•© κΈ°λ‘μ—μ„œ μžμ‹ μ˜ μ˜μ‚¬ κ²°μ •μ—μ„œ 얻을 μˆ˜μžˆλŠ” λͺ¨λ“  정보λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒλŒ€. νŒ¨ν„΄ / νœ΄λ¦¬μŠ€ν‹± 등을 κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ 이전 κ²Œμž„μ˜ 기둝을 좔적 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€ (μ•„λž˜ κ·œμΉ™ μ°Έμ‘°).

단일 κ²Œμž„ λ™μ•ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 엔진은 봇과 μƒλŒ€ 봇을 100 밀리 초 κ°„κ²©μœΌλ‘œ μ‹€ν–‰ ν•œ λ‹€μŒ λ™μΌν•œ μ–Έμ–΄ / λŸ°νƒ€μž„μ—μ„œ PRNG μΆ©λŒμ„ ν”Όν•˜κΈ° μœ„ν•΄ κ²°κ³Όλ₯Ό λΉ„κ΅ν•©λ‹ˆλ‹€. (이것은 μ‹€μ œλ‘œ ν…ŒμŠ€νŠΈ 쀑에 λ‚˜μ—κ²Œ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€).

심사 및 μ œμ•½

μ •λ³΅μž Sheldor의 λͺ¨μŠ΅μœΌλ‘œ Sheldon Cooper λ°•μ‚¬λŠ” ν† λ„ˆλ¨ΌνŠΈ μš΄μ˜μ„ κ°λ…ν•˜κΈ° μœ„ν•΄ μΉœμ ˆν•˜κ²Œ μ œμ•ˆν–ˆμŠ΅λ‹ˆλ‹€. μ •λ³΅μž μ‰˜λ”λŠ” κ³΅μ •ν•˜κ³  κ°λ…μžμž…λ‹ˆλ‹€ (주둜). Sheldor의 λͺ¨λ“  결정은 μ΅œμ’… κ²°μ •μž…λ‹ˆλ‹€.

κ²Œμž„μ€ κ³΅μ •ν•˜κ³  μ μ ˆν•œ λ°©μ‹μœΌλ‘œ μˆ˜ν–‰λ©λ‹ˆλ‹€.

  • 봇 슀크립트 / ν”„λ‘œκ·Έλž¨μ€ ν•˜μœ„ 폴더 μ•„λž˜ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 엔진에 μ €μž₯λ©λ‹ˆλ‹€. Players\[YourBotName]\
  • ν•˜μœ„ 폴더 Players\[YourBotName]\dataλ₯Ό μ‚¬μš©ν•˜μ—¬ 진행쀑인 ν˜„μž¬ ν† λ„ˆλ¨ΌνŠΈμ˜ 데이터 λ˜λŠ” κ²Œμž„ 기둝을 기둝 ν•  수 μžˆμŠ΅λ‹ˆλ‹€ . 데이터 λ””λ ‰ν† λ¦¬λŠ” ν† λ„ˆλ¨ΌνŠΈκ°€ μ‹œμž‘λ  λ•Œλ§ˆλ‹€ μ œκ±°λ©λ‹ˆλ‹€.
  • ν† λ„ˆλ¨ΌνŠΈμ—μ„œ λ‹€λ₯Έ ν”Œλ ˆμ΄μ–΄μ˜ ν”Œλ ˆμ΄μ–΄ 디렉토리에 μ•‘μ„ΈμŠ€ ν•  수 μ—†μŠ΅λ‹ˆλ‹€
  • 봇은 λ‹€λ₯Έ νŠΉμ • 봇 λ™μž‘μ„ λŒ€μƒμœΌλ‘œν•˜λŠ” νŠΉμ • μ½”λ“œλ₯Ό κ°€μ§ˆ 수 μ—†μŠ΅λ‹ˆλ‹€
  • 각 ν”Œλ ˆμ΄μ–΄λŠ” μ„œλ‘œ μƒν˜Έ μž‘μš©ν•˜κ±°λ‚˜ 도와주지 μ•ŠλŠ” ν•œ λ‘˜ μ΄μƒμ˜ 봇을 μ œμΆœν•˜μ—¬ ν”Œλ ˆμ΄ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŽΈμ§‘-μΆ”κ°€ μ œμ•½

  • 상싀에 λŒ€ν•΄μ„œλŠ” μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 봇은 5 개의 μœ νš¨ν•œ ν•Έλ“œ 쀑 ν•˜λ‚˜λ₯Ό ν”Œλ ˆμ΄ν•΄μ•Όν•©λ‹ˆλ‹€. ν† λ„ˆλ¨ΌνŠΈ μ™ΈλΆ€μ˜ 각 봇을 λ¬΄μž‘μœ„ λ°μ΄ν„°λ‘œ ν…ŒμŠ€νŠΈν•˜μ—¬ λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. 였λ₯˜ (예 : 였λ₯˜λ₯Ό μžƒμ–΄λ²„λ¦°)λ₯Ό λ˜μ§€λŠ” 봇은 버그가 μˆ˜μ • 될 λ•ŒκΉŒμ§€ ν† λ„ˆλ¨ΌνŠΈμ—μ„œ μ œμ™Έλ©λ‹ˆλ‹€.
  • 봇은 행동이 κ°„κ²°ν•˜κ²Œ λ‹€λ₯Έ ν•œ νŒŒμƒμ  일 수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄ 봇과 μ •ν™•νžˆ λ™μΌν•œ λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ” 봇 (λ‹€λ₯Έ μ–Έμ–΄ 포함)은 싀격 μ²˜λ¦¬λ©λ‹ˆλ‹€.
  • λ‹€μŒμ— λŒ€ν•œ 슀팸 봇이 이미 μžˆμœΌλ―€λ‘œ λ‹€μ‹œ μ œμΆœν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.
    • 락-λ°”νŠΈ μ‹¬μŠ¨
    • 쒅이-LisaSimpson
    • κ°€μœ„-EdwardScissoror
    • 슀팍-벌컨
    • λ„λ§ˆλ±€-μΉΌλ¦¬μ‹œ
    • μ˜μ‚¬ 랜덀-SimpleRandomBot 및 FairBot
    • μŠˆλ„ 랜덀 RPS-보수적 인 봇
    • μŠˆλ„ 랜덀 LV-λ°”λ‹ˆ μŠ€ν‹΄ 슨
  • 봇은 타사 μ„œλΉ„μŠ€ λ˜λŠ” μ›Ή λ¦¬μ†ŒμŠ€ (λ˜λŠ” 경기의 속도 / μ˜μ‚¬ κ²°μ • μ‹œκ°„μ„ 크게 λŠλ¦¬κ²Œν•˜λŠ” 기타)λ₯Ό 뢈러 λ‚Ό 수 μ—†μŠ΅λ‹ˆλ‹€. CasinoShakespeare이 μ œμ•½ 쑰건이 μΆ”κ°€λ˜κΈ° 전에 봇이 제좜 된 μœ μΌν•œ μ˜ˆμ™Έμž…λ‹ˆλ‹€.

더 λ§Žμ€ 봇이 μ œμΆœλ¨μ— 따라, SheldorλŠ” ν† λ„ˆλ¨ΌνŠΈ κ²°κ³Όλ₯Ό μ΅œλŒ€ν•œ 자주 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ / μ œμ–΄ ν”„λ‘œκ·Έλž¨

각 봇에 λŒ€ν•œ μ†ŒμŠ€ μ½”λ“œμ™€ ν•¨κ»˜ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ ν”„λ‘œκ·Έλž¨μ€ githubμ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€.

https://github.com/eoincampbell/big-bang-game

제좜 μ„ΈλΆ€ 사항

μ œμΆœλ¬Όμ—λŠ” λ‹€μŒμ΄ ν¬ν•¨λ˜μ–΄μ•Όν•©λ‹ˆλ‹€.

  • λ‹Ήμ‹ μ˜ 봇 이름
  • κ·€ν•˜μ˜ μ½”λ“œ
  • 에 λͺ…λ Ή
    • μ‰˜μ—μ„œ 봇을 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.
    • 루비 myBot.rb
    • python3 myBot.py
    • λ˜λŠ”
    • λ¨Όμ € λ‘˜ λ‹€ 컴파일 ν•œ λ‹€μŒ μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€. 예 :
    • csc.exe MyBot.cs
    • MyBot.exe

μƒ˜ν”Œ 제좜

BotName: SimpleRandomBot
Compile: "C:\Program Files (x86)\MSBuild\12.0\Bin\csc.exe" SimpleRandomBot.cs
Run:     SimpleRandomBot [Arg1] [Arg2]

μ•”ν˜Έ:

using System;
public class SimpleRandomBot
{
    public static void Main(string[] args)
    {
        var s = new[] { "R", "P", "S", "L", "V" };
        if (args.Length == 0)
        {
            Console.WriteLine("V"); //always start with spock
            return;
        }
        char[] myPreviousPlays = args[0].ToCharArray();
        char[] oppPreviousPlays = args[1].ToCharArray();
        Random r = new Random();
        int next = r.Next(0, 5);
        Console.WriteLine(s[next]);
    }
}

μ„€λͺ…

질문이 μžˆμœΌμ‹œλ©΄ μ•„λž˜ μ˜κ²¬μ— λ¬Έμ˜ν•˜μ‹­μ‹œμ˜€.



λ‹΅λ³€

μ‘°λž‘λ§ (Python 2)

이것은 Udacity 온라인 μˆ˜μ—… 이 끝날 λ•Œ ν”„λ‘œκ·Έλž˜λ° 도전을 μœ„ν•΄ μ–Όλ§ˆ 전에 μ“΄ λ°”μœ„ 쒅이 κ°€μœ„ 봇을 κΈ°λ°˜μœΌλ‘œν•©λ‹ˆλ‹€ . Spockκ³Ό λ„λ§ˆλ±€μ„ ν¬ν•¨ν•˜λ„λ‘ λ³€κ²½ν•˜κ³  κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€.

이 ν”„λ‘œκ·Έλž¨μ—λŠ” 11 κ°€μ§€ κ°„λ‹¨ν•œ μ „λž΅μ΄ 있으며 각각 5 κ°€μ§€ λ³€ν˜•μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ§ˆμ§€λ§‰ λΌμš΄λ“œμ—μ„œ μ–Όλ§ˆλ‚˜ 잘 μˆ˜ν–‰ν–ˆλŠ”μ§€μ— 따라 이듀 μ€‘μ—μ„œ μ„ νƒν•©λ‹ˆλ‹€.

λ‚˜λŠ” 더 κ°•ν•œ μƒλŒ€μ— λŒ€ν•΄ λ¬΄μž‘μœ„λ‘œ μž¬μƒλ˜λŠ” λŒ€μ²΄ μ „λž΅μ„ μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€. 더 μž¬λ―Έμžˆμ„ 것 κ°™μ•„μš”.

import sys

# just play Spock for the first two rounds
if len(sys.argv)<2 or len(sys.argv[1])<2: print 'V'; sys.exit()

# initialize and translate moves to numbers for better handling:
my_moves, opp_moves = sys.argv[1], sys.argv[2]
moves = ('R', 'P', 'S', 'V', 'L')   
history = zip([moves.index(i) for i in my_moves],
              [moves.index(i) for i in opp_moves])

# predict possible next moves based on history
def prediction(hist):
    N = len(hist)    

    # find longest match of the preceding moves in the earlier history
    cand_m = cand_o = cand_b = range(N-1)
    for l in xrange(1,min(N, 20)):
        ref = hist[N-l]
        cand_m = ([c for c in cand_m if c>=l and hist[c-l+1][0]==ref[0]]
                  or cand_m[-1:])
        cand_o = ([c for c in cand_o if c>=l and hist[c-l+1][1]==ref[1]]
                  or cand_o[-1:])
        cand_b = ([c for c in cand_b if c>=l and hist[c-l+1]==ref]
                  or cand_b[-1:])

    # analyze which moves were used how often
    freq_m, freq_o = [0]*5, [0]*5
    for m in hist:
        freq_m[m[0]] += 1
        freq_o[m[1]] += 1

    # return predictions
    return ([hist[-i][p] for i in 1,2 for p in 0,1]+   # repeat last moves
            [hist[cand_m[-1]+1][0],     # history matching of my own moves
             hist[cand_o[-1]+1][1],     # history matching of opponent's moves
             hist[cand_b[-1]+1][0],     # history matching of both
             hist[cand_b[-1]+1][1],
             freq_m.index(max(freq_m)), # my most frequent move
             freq_o.index(max(freq_o)), # opponent's most frequent move
             0])                        # good old rock (and friends)


# what would have been predicted in the last rounds?
pred_hist = [prediction(history[:i]) for i in xrange(2,len(history)+1)]

# how would the different predictions have scored?
n_pred = len(pred_hist[0])
scores = [[0]*5 for i in xrange(n_pred)]
for pred, real in zip(pred_hist[:-1], history[2:]):
    for i in xrange(n_pred):
        scores[i][(real[1]-pred[i]+1)%5] += 1
        scores[i][(real[1]-pred[i]+3)%5] += 1
        scores[i][(real[1]-pred[i]+2)%5] -= 1
        scores[i][(real[1]-pred[i]+4)%5] -= 1

# return best counter move
best_scores = [list(max(enumerate(s), key=lambda x: x[1])) for s in scores]
best_scores[-1][1] *= 1.001   # bias towards the simplest strategy    
if best_scores[-1][1]<0.4*len(history): best_scores[-1][1] *= 1.4
strat, (shift, score) = max(enumerate(best_scores), key=lambda x: x[1][1])
print moves[(pred_hist[-1][strat]+shift)%5]

λ‹€μŒμœΌλ‘œ μ‹€ν–‰ :

python Pony.py

νŽΈμ§‘ : λ‚˜λŠ” ν™•μ‹€ν•˜μ§€ μ•Šμ€ 경우 κ°€μž₯ κ°„λ‹¨ν•œ μ „λž΅ (즉, 항상 같은 μ›€μ§μž„μ„ 취함)에 νŽΈκ²¬μ„ 두어 μ‚¬μ†Œν•œ λ³€κ²½μ„κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 이것은 ConservativeBotκ³Ό 같은 봇과 같은 κ³³μ—μ„œ μ§€λ‚˜μΉ˜κ²Œ λ³΅μž‘ν•œ νŒ¨ν„΄μ„ μ°Ύμ§€ μ•Šλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

μ°Έκ³  :이 봇이 λ‹€λ₯Έ 봇 Dienstag 에 λŒ€ν•œ κ²Œμ‹œλ¬Όμ—μ„œ μ‚¬μš©ν•˜λŠ” κΈ°λ³Έ 기둝 일치 μ „λž΅μ„ μ„€λͺ…ν•˜λ €κ³ ν–ˆμŠ΅λ‹ˆλ‹€ .


λ‹΅λ³€

마λ₯΄μ½”ν”„, 루비

μƒλŒ€λ°©μ˜ λ§ˆμ§€λ§‰ 두 μ›€μ§μž„μ„λ³΄κ³  κ°€λŠ₯ν•œ (그리고 κ°€μž₯ κ°€λŠ₯성이 높은) 후속 쑰치λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€. λ§Œμ•½ 쑰합이 이전에 μ„ νƒλ˜μ§€ μ•Šμ•˜λ‹€λ©΄, κ·ΈλŠ” μƒλŒ€λ°©μ˜ λͺ¨λ“  μ›€μ§μž„ (μ§€κΈˆκΉŒμ§€)을 λŒ€μ‹  μ‚¬μš©ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ κ°€λŠ₯ν•œ λͺ¨λ“  응닡을 μˆ˜μ§‘ν•˜κ³  μž„μ˜μ˜ 응닡을 μ„ νƒν•©λ‹ˆλ‹€.

responses = {
  'R' => ['P', 'V'],
  'P' => ['S', 'L'],
  'S' => ['R', 'V'],
  'L' => ['S', 'R'],
  'V' => ['P', 'L']
}

if ARGV.length == 0 || (history = ARGV[1]).length < 3
    choices = ['R','P','S','L','V']
else
    markov = Hash.new []
    history.chars.each_cons(3) { |chars| markov[chars[0..1].join] += [chars[2]] }

    choices = []
    likely_moves = markov.key?(history[-2,2]) ? markov[history[-2,2]] : history.chars
    likely_moves.each { |move| choices += responses[move] }
end

puts choices.sample

λ‹€μŒκ³Ό 같이 μ‹€ν–‰

markov.rb

λ‹΅λ³€

보수적 인 봇, 루비

μƒˆλ‘œμš΄ 것은 λ‚˜μœ κ²ƒμž…λ‹ˆλ‹€.

puts ['R','P','S'].sample

λ‹€μŒκ³Ό 같이 μ‹€ν–‰

ruby conservative.rb

λ‹΅λ³€

μŠ€νƒ€ μ›Œμ¦ˆ 팬-루비

슀크λ₯˜, 슀팍

puts ['R','P','L','S'].sample

λ‹€μŒκ³Ό 같이 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

ruby starwarsfan.rb

λ‹΅λ³€

λ°”λ‹ˆ μŠ€ν‹΄ 슨-루아

λ‚˜λŠ” 단 ν•˜λ‚˜μ˜ κ·œμΉ™μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€ : μƒˆλ‘œμš΄ 것이 항상 μ’‹μŠ΅λ‹ˆλ‹€. 였래된 μ‘° μΌ„ 포 λ˜λŠ” 당신이 λΆ€λ₯΄λŠ” 것을 μ‘°μ΄μ‹­μ‹œμ˜€.

math.randomseed(os.time())
print(math.random() > 0.5 and "V" or "L")

λ‹€μŒκ³Ό 같이 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

lua legenwaitforitdary.lua

λ‹΅λ³€

보링 봇 (μžλ°”)

κ·ΈλŠ” λͺ¨λ“  μ‚¬λžŒμ΄ 항상 같은 κ²ƒμ„ν•˜κ³  그에 따라 κ³„νšν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. κ·ΈλŠ” 일반적으둜 κ΄€κ³„μ—μ„œ λ°”μœ„λ₯Ό κ³¨λΌλƒ…λ‹ˆλ‹€.

public class BoringBot
{
    public static void main(String[] args)
    {
        int Rock=0;
        int Paper=0;
        int Scissors=0;
        int Lizard=0;
        int Spock=0;

        if (args.length == 0)
        {
            System.out.print("P");
            return;
        }

        char[] oppPreviousPlays = args[1].toCharArray();

        for (int j=0; j<oppPreviousPlays.length; j++) {
            switch(oppPreviousPlays[j]){
                case 'R': Rock++; break;
                case 'P': Paper++; break;
                case 'S': Scissors++; break;
                case 'L': Lizard++; break;
                case 'V': Spock++;
            }
        }

        int Best = Math.max(Math.max(Lizard+Scissors-Spock-Paper,
                                     Rock+Spock-Lizard-Scissors),
                            Math.max(Math.max(Paper+Lizard-Spock-Rock,
                                              Paper+Spock-Rock-Scissors),
                                     Rock+Scissors-Paper-Lizard));

        if (Best== Lizard+Scissors-Spock-Paper){
            System.out.print("R"); return;
        } else if (Best== Rock+Spock-Lizard-Scissors){
            System.out.print("P"); return;
        } else if (Best== Paper+Lizard-Spock-Rock){
            System.out.print("S"); return;
        } else if(Best== Paper+Spock-Rock-Scissors){
            System.out.print("L"); return;
        } else {
            System.out.print("V"); return;
        }
    }
}

λ‹΅λ³€

IocainePowder, 루비

RPS μ „λž΅μ„ 기반으둜 ν•©λ‹ˆλ‹€ . 봇은 Markov 봇과 λ™μΌν•œ 좔츑을 μ„ νƒν•˜μ§€λ§Œ μƒλŒ€λ°©μ΄ μ„ νƒν•˜λ €λŠ” ν•­λͺ©μ„ μΆ”μΈ‘ν–ˆλ‹€κ³  κ°€μ •ν•˜κ³  그에 따라 이길 μˆ˜μžˆλŠ” μ›€μ§μž„μ„ μ„ νƒν•©λ‹ˆλ‹€.

링크 된 μ „λž΅μ˜ κΈ°λ³Έ 아이디어λ₯Ό μžμ„Ένžˆ μ μš©ν•˜μ§€ μ•Šκ³  방금 μ‘°μ •ν–ˆμŠ΅λ‹ˆλ‹€.

responses = {
  'R' => ['P', 'V'],
  'P' => ['S', 'L'],
  'S' => ['R', 'V'],
  'L' => ['S', 'R'],
  'V' => ['P', 'L']
}

if ARGV.length == 0 || (history = ARGV[1]).length < 3
    choices = ['R','P','S','L','V']
else
    markov = Hash.new []
    history.chars.each_cons(3) { |chars| markov[chars[0..1].join] += [chars[2]] }

    choices = []
    likely_moves = markov.key?(history[-2,2]) ? markov[history[-2,2]] : history.chars
    likely_moves.each { |move| choices += responses[move] }
end

myChoice = choices.sample
theirChoice = responses[myChoice].sample
actualChoice = responses[theirChoice].sample
puts actualChoice

λ‹€μŒκ³Ό 같이 μ‹€ν–‰

iocaine.rb