Dominion Strategy Forum

Please login or register.

Login with username, password and session length
Pages: [1]

Author Topic: Reverse Polarity Challenge: A>B, but B>C>A  (Read 2934 times)

0 Members and 1 Guest are viewing this topic.

NoMoreFun

  • Mountebank
  • *****
  • Offline Offline
  • Posts: 2012
  • Respect: +2127
    • View Profile
Reverse Polarity Challenge: A>B, but B>C>A
« on: September 24, 2014, 07:17:24 am »
+2

The rock paper scissors challenge (A>B, B>C, C>A) was a success, with ephesos finding a decisive triangle of Beggar/Gardens, Double Mountebank and a Masquerade Pin.

Here's the next challenge relating to non transitive strategy: Can you find 3 strategies, A, B and C such that in a 3 player game, when it comes to the percentage of wins

Strategy A>Strategy B>Big Money
AND
Strategy B>Strategy C>Strategy A
(Or B>A>C, or C>B>A)

Strategy C also must beat 2 Big Money bots in 3 player (so it's a real strategy that can win games).

The winner is the strategy that demonstrates the most decisive shift in the balance; the highest possible score is 200 (which would be a 100:0 changing to a 0:100).
Logged

Awaclus

  • Adventurer
  • ******
  • Offline Offline
  • Posts: 11815
  • Shuffle iT Username: Awaclus
  • (´。• ω •。`)
  • Respect: +12868
    • View Profile
    • Birds of Necama
Re: Reverse Polarity Challenge: A>B, but B>C>A
« Reply #1 on: September 24, 2014, 09:20:35 am »
+2

What's the difference between A>B, but B>C>A and Rock-Paper-Scissors?
Logged
Bomb, Cannon, and many of the Gunpowder cards can strongly effect gameplay, particularly in a destructive way

The YouTube channel where I make musicDownload my band's Creative Commons albums for free

Deadlock39

  • Torturer
  • *****
  • Offline Offline
  • Posts: 1722
  • Respect: +1758
    • View Profile
Re: Reverse Polarity Challenge: A>B, but B>C>A
« Reply #2 on: September 24, 2014, 10:51:41 am »
+2

I think he is saying, that you play 3p matches.   In one of these matches, you have A, B, and BM.  In this match A wins.  In the other match you have A, B, and C. In that match, B wins more often than A.

This seems like it could be relatively easy by creating a C strategy that will steal key cards from A before it can get an engine going.  You might even be able to use the masquerade pin for A, if you can trash out all the cards in the deck to the right fast enough to pin both players, and then just play a masquerade strategy with deck C as it will disrupt the pin... or something like that. It probably needs to work regardless of seating order.

Awaclus

  • Adventurer
  • ******
  • Offline Offline
  • Posts: 11815
  • Shuffle iT Username: Awaclus
  • (´。• ω •。`)
  • Respect: +12868
    • View Profile
    • Birds of Necama
Re: Reverse Polarity Challenge: A>B, but B>C>A
« Reply #3 on: September 24, 2014, 10:57:23 am »
0

I think he is saying, that you play 3p matches.   In one of these matches, you have A, B, and BM.  In this match A wins.  In the other match you have A, B, and C. In that match, B wins more often than A.
Ooooh. Now it makes sense.
Logged
Bomb, Cannon, and many of the Gunpowder cards can strongly effect gameplay, particularly in a destructive way

The YouTube channel where I make musicDownload my band's Creative Commons albums for free

JW

  • Jester
  • *****
  • Offline Offline
  • Posts: 979
  • Shuffle iT Username: JW
  • Respect: +1792
    • View Profile
Re: Reverse Polarity Challenge: A>B, but B>C>A
« Reply #4 on: September 24, 2014, 11:14:15 am »
0

Strategies A and C can be essentially the same strategy, relying on limited components, where C is slightly better implemented.

Like A: Fool's gold with forager opening. Never trash FG with its reaction.
B: smithy Big money
C: fool's gold with forager opening, picking up one wharf. Not trashing FG.

This is hypothetical but something of this form should work.
Logged

ephesos

  • Explorer
  • *****
  • Offline Offline
  • Posts: 347
  • Shuffle iT Username: Ephesos
  • Respect: +291
    • View Profile
Re: Reverse Polarity Challenge: A>B, but B>C>A
« Reply #5 on: October 17, 2014, 11:09:28 pm »
+5

I have no way to test this, since Dominate only takes 2 players, but here's 3 strategies.
A: Standard Pin, without Quarry
B: Bishop Silver. It's a simple strategy: buy Bishop, buy Silver, trash cards for points.
C: Chapel Saboteur. Yes, that's right, I wrote a strategy built around Saboteur. And, somehow, it beats Big Money 60% of the time, which is enough for me. Basically, Chapel down to a hand of KC/KC/Saboteur/Chapel/Remodel. Saboteur their deck until it has nothing but Coppers and Estates. Then, Remodel the KC's into Provinces and the Chapel into Remodel into Gold into Province, then Remodel Province into Province until the game ends.
Wins ~60% of the time against Big Money. Big Money wins if it can deplete 7 Provinces before getting Saboteured to death, or if it depletes 3 piles(Silver, Duchy, Estate) before Chapel Saboteur can Remodel.

Again, can't test, but it's clear that C always beats A, since the Saboteur breaks the pin early and it never gets established, and B also beats C head to head, since it gets more than 18 points before it gets Saboteured. So, in a game between the three, A never gets the pin and B wins by earning more points than C.

But, A beats B head to head, since it trashes B's entire deck(which is thin to start with) and goes through and trashes Big Money's deck after that, then wins by earning all the points with Goons.

Code:
A:
Code: [Select]
#Ruthlessly executes unsuspecting bots with the KC/Goons/Masquerade pin
{
  name: 'GoldPin' # slowed down the QuarryPin so ChapelSaboteur can match it. Could probably give ChapelSaboteur Quarry, but I was worried Bishop Silver wouldn't have time to gain points
  author: 'ephesos'
  requires: ["Monument", "King's Court", "Masquerade", "Goons"]
  gainPriority: (state, my) -> [
    "King's Court" if my.countInDeck("King's Court") < 2
    "Goons" if my.countInDeck("Goons") == 0
    "Masquerade" if my.countInDeck("Masquerade") == 0
    "Gold" if my.countInDeck("King's Court") < 2 && my.countInDeck("Quarry") < 4
   
    "Gold" if my.turnsTaken >= 50 #MAKE IT STOP
    "Duchy" if my.turnsTaken >= 70
    "Estate" if my.turnsTaken >= 90
    "Copper" if my.numCardsInDeck() == 6
    "Monument" if my.countInPlay("King's Court") == 2 and my.countInPlay("Goons") == 1 and my.countInPlay("Masquerade") == 1 and my.numCardsInDeck() == 4
  ]

  trashPriority: (state, my) -> [
    "Curse"
    "Estate"
    "Copper" if my.countInHand("Goons") == 0 or my.countInHand("Copper") > 1
    "Silver" if my.countInDeck("King's Court") == 2 and my.countInDeck('Goons') == 1
    #kill anything once the pin starts
    "Gold" if my.countInDeck("King's Court") == 2 and my.countInDeck('Goons') == 1
    "Province"
    "Duchy"
    "King's Court" if my.countInDeck("King's Court") > 2 and my.countInDeck('Goons') == 1
    "Goons" if my.countInDeck("King's Court") == 2 and my.countInDeck('Goons') > 1
    "Masquerade" if my.countInDeck("King's Court") == 2 and my.countInDeck('Goons') == 1 and my.countInDeck("Masquerade") > 1
    "Beggar"
    "Gardens"
    "Quarry" if my.countInDeck("King's Court") == 2 and my.countInDeck("Goons") == 1 and (my.countInHand("Goons") == 0 or my.countInHand("Copper") > 1)
    "Mountebank"
  ]
 
  wantsToRebuild: (state, my) ->
    return 0
 
  wantsToJM: (state, my) ->
    false
 
  multipliedPriority: (state, my) -> [
    "King's Court"
    "Masquerade" if my.countInPlay("King's Court") == 1
    "Goons"
    "Monument"
    "Masquerade"
    "Chapel"
  ]
}
B:
Code: [Select]
{
  name: 'Bishop Silver'
  author: 'ephesos'
  requires: ["Bishop"]
  gainPriority: (state, my) -> [
      "Bishop"
      "Silver"
      #sometimes it's good to keep things simple
  ]
}
C:
Code: [Select]
{
  name: 'ChapelSaboteur'
  author: 'Ephesos'
  requires: ["Chapel", "Saboteur", "King's Court", "Remodel"]
  gainPriority: (state, my) -> [
    "King's Court" if my.countInDeck("King's Court") < 2 and my.turnsTaken < 45
    "Gold" if my.countInDeck("King's Court") < 2
    "Remodel" if my.countInDeck("Remodel") < 1
    "Chapel" if my.countInDeck("Chapel") < 1 and my.countInDeck("Copper") > 0
    "Saboteur" if my.countInDeck("Saboteur") < 1
    "Silver" if my.countInDeck("Silver") < 3 and my.countInDeck("Gold") < 1 and my.countInDeck("King's Court") < 2
  ]
 
  trashPriority: (state, my) -> [
      "Estate"
      "Copper" if my.countInDeck("Silver") > 1 or my.countInDeck("King's Court") > 1
      "Silver" if my.countInDeck("King's Court") > 1
      "Gold" if my.countInDeck("King's Court") > 1 and my.countInDeck("Saboteur") > 0
      null
  ]
 
  playPriority: (state, my) -> [
      "Remodel" if my.turnsTaken >= 45
      "Remodel" if my.countInHand("Estate") == 1
      "King's Court"
      "Chapel"
      "Saboteur"
      "Remodel" if my.countInHand("Estate") > 0
      "Silver"
      "Gold"
      "Copper"
      null if my.countInHand("Silver") > 0
  ]
 
  multipliedPriority: (state, my) -> [
      "King's Court"
      "Saboteur"
      "Chapel"
      null
  ]
 
  upgradePriority: (state,my) -> [
      ["Estate", "Silver"]
      ["Chapel", "Remodel"] if my.turnsTaken >= 45
      ["Remodel", "Gold"] if my.turnsTaken >= 46
      ["Gold", "Province"] if my.turnsTaken >= 47
      ["King's Court", "Province"] if my.turnsTaken >= 48 #WIN THE GAME
      ["Province", "Province"] if my.turnsTaken >= 49 #MAKE IT STOP PLEASE
      ["Copper", "Estate"]
  ]
}
« Last Edit: October 17, 2014, 11:10:45 pm by ephesos »
Logged
Pages: [1]
 

Page created in 0.043 seconds with 20 queries.