Thank you, I ended up figuring out the solution.
Hello,
At the moment I am at a loss here.
Iâve read basically the whole forum thread and I am still confused as why my long game terminates after 1162 rounds with PAT:
An excerpt from my log
P1 startdeck AH,4H,5D,6D,QC,JS,8S,2D,7D,JD,JC,6C,KS,QS,9D,2C,5S,9S,6S,8H,AD,4D,2H,2S,7S,8C
P2 startdeck 10H,4C,6H,3C,KC,JH,10C,AS,5H,KH,10S,9H,9C,8D,5C,AC,3H,4S,KD,7C,3S,QH,10D,3D,7H,QD
Current battle cards P1:AH P2: 10H
Turn:0=>AH 10H P1 WINS
P1 deck after winning battle 4H,5D,6D,QC,JS,8S,2D,7D,JD,JC,6C,KS,QS,9D,2C,5S,9S,6S,8H,AD,4D,2H,2S,7S,8C,AH,10H
Current battle cards P1:4H P2: 4C
Turn:1=>4H 4C !!!WAR!!!
P1 Wardeck 4H,5D,6D,QC
P2 Wardeck 4C,6H,3C,KC
Deck counts: 23 21
Current battle cards P1:JS P2: JH
Turn:1=>JS JH !!!WAR!!!
P1 Wardeck 4H,5D,6D,QC,JS,8S,2D,7D
P2 Wardeck 4C,6H,3C,KC,JH,10C,AS,5H
Deck counts: 19 17
Current battle cards P1:JD P2: KH
Turn:1=>JD KH P2 WINS
P2 deck after winning war 10S,9H,9C,8D,5C,AC,3H,4S,KD,7C,3S,QH,10D,3D,7H,QD,4H,5D,6D,QC,JS,8S,2D,7D,KH,4H,5D,6D,QC,JS,8S,2D,7D,JD
If I understood correctly, at the moment P2 wins above battle, the cards are added to his deck (queue-wise) like this:
[battlecardP1+3warcardsP1][battlecardP1+3warcardsP1][winningBattleCard**][battlecardP2+3warcardsP2][battlecardP2+3warcardsP2][losingBattleCard**]
** regardless the player.
As some of the posts contradicts other posts I am not sure what the correct order should be.
Anyone out there thatâs able to help me out?
Besides that: cases 7-8-9 fails me.
Whereas when I make some changes sometimes 9 will succeed and 8 keeps failing with the dreaded timeout (e.g. it crashes vscode on my local machine if I try to run it there)
Thanks in advance for any reply.
Regarding your log, which test case is it?
The long game
Bonjour ,
Si les administrateurs lâaccepte, ci-joint les commentaires de ma gestion des piles de cartes (ps: mon programme fonctionne )
Bon courage.
Hello. Iâm getting desperate.
I manage to go past a battle and 2 chain battles but 1 game 1 battle for me is 2 - 212 instead of 1 - 52
Langugage : JavaScript
Concepts:
-
I use same notation replacing J with 11, Q with 12 etc⌠A is 14. I store them as objects of {v:, n:} for tracking
-
Get 1st card of each array and
shift()
the array. In case of a war i will always use the 4-th of the array to compare so it is handy -
The war is handled through recursion:
function war(pp1, pp2, recursionCounter = 1) { //pp1 = Pile Player 1 et
let rCounter = recursionCounter;
//check if the war is possible
if (pp1.length < 4 || pp2.length < 4) {
return "PAT";
}
//war is possible
//take the 4th card, compare
let comp1 = pp1[rCounter * 4 - 1];
let comp2 = pp2[rCounter * 4 - 1];
//if same
if (comp1.v === comp2.v) {
console.error(`consecutive war ${rCounter}`);
rCounter++;
return war(pp1, pp2, rCounter);
} else {
console.error(
`war winner :${
pp1.v > pp2.v ? 1 : 2
} with counter of consequity ${rCounter}`
);
return { winner: pp1.v > pp2.v ? 1 : 2, times: rCounter };
}
}
- Then at the end of the war I assemble the winning pot. The order for it is according to the rules: first the cp1 (1st card player 1 ), followed by n cards from player 1 he used in the war, then cp2 then n cards from war from player 2:
let temp1 = p1.slice(0, warRes.times * 4);
let temp2 = p2.slice(0, warRes.times * 4);
let winPot = [cp1].concat(temp1).concat([cp2]).concat(temp2);
parseInt(warRes.winner) === 1
? (p1 = p1.concat(winPot))
: (p2 = p2.concat(winPot));
- Then the amount of cards used in the battle are deleted from the beginning of the each playerâs pile:
function erase(a, n) {
for (let i = 0; i < n; i++) {
a.shift();
}
}
...
//p1 and p2 represent initial pile. As i mentioned, the 1st card for comparison before the battle is already shifted.
erase(p1, warRes.times * 4);
erase(p2, warRes.times * 4);
In the case of 1 game 1 battle, I actually somehow have 6 individual battles.
Can somebody help me with
- Advice
- Log for card amounts after each turn for this particular case
- antidepressants (?)
- Alternative test case where there are less data?
Thanks
Can you share here the cards used in the first 30 battle(s)/war(s)? Iâll compare my results with yours.
Hello ! Thank you so much !
here are the logs:
How to read:
In a line starting with :âcomparingâ you have the cards that are compared
counter represents turns, p1, p2 represent the amount of cards that player has at the end of the turn
comparing 10 / 2
counter : 1, p1: 27, p2: 25
comparing 13 / 9
counter : 2, p1: 28, p2: 24
comparing 6 / 8
counter : 3, p1: 27, p2: 25
comparing 10 / 4
counter : 4, p1: 28, p2: 24
comparing 8 / 5
counter : 5, p1: 29, p2: 23
comparing 14 / 14
let the war begin. cards posessed : 29 / 23
war winner :2 with counter of consequuity 1
war result : {"winner":2,"times":1}
[{"v":12,"n":"Q"},{"v":3,"n":"3"},{"v":7,"n":"7"},{"v":13,"n":"K"}]
p1 b4 assembly & b4 drop : 28
p2 b4 assembly & b4 drop : 22
p1 after assembly & b4 drop : 28
p2 after assembly & b4 drop : 32
p1 after assembly & after drop : 24
p2 after assembly & after drop :28
counter : 6, p1: 24, p2: 28
comparing 9 / 4
counter : 7, p1: 25, p2: 27
comparing 2 / 6
counter : 8, p1: 24, p2: 28
comparing 11 / 6
counter : 9, p1: 25, p2: 27
comparing 13 / 12
counter : 10, p1: 26, p2: 26
comparing 3 / 9
counter : 11, p1: 25, p2: 27
comparing 2 / 10
counter : 12, p1: 24, p2: 28
comparing 12 / 4
counter : 13, p1: 25, p2: 27
comparing 14 / 11
counter : 14, p1: 26, p2: 26
comparing 11 / 6
counter : 15, p1: 27, p2: 25
comparing 7 / 3
counter : 16, p1: 28, p2: 24
comparing 13 / 8
counter : 17, p1: 29, p2: 23
comparing 10 / 3
counter : 18, p1: 30, p2: 22
comparing 4 / 7
counter : 19, p1: 29, p2: 23
comparing 14 / 9
counter : 20, p1: 30, p2: 22
comparing 5 / 8
counter : 21, p1: 29, p2: 23
comparing 5 / 2
counter : 22, p1: 30, p2: 22
comparing 10 / 6
counter : 23, p1: 31, p2: 21
comparing 2 / 8
counter : 24, p1: 30, p2: 22
comparing 13 / 14
counter : 25, p1: 29, p2: 23
comparing 9 / 12
counter : 26, p1: 28, p2: 24
comparing 10 / 3
counter : 27, p1: 29, p2: 23
comparing 4 / 7
counter : 28, p1: 28, p2: 24
comparing 8 / 13
counter : 29, p1: 27, p2: 25
comparing 5 / 14
counter : 30, p1: 26, p2: 26
Hello!
This is where things start to become wrong. Mine is comparing 13 (KD) / 2 (2D) instead of 13 / 14. KD and 2D were involved in an ordinary battle instead of a war, before they are compared in âcounter 25â. So, you may check whatâs gone wrong much earlier in the simulation (âcounter 3â and âcounter 8â).
You realy save me.
@StepBack13 Thank you soooo much!! =D I was with the same problem⌠tried three/four ways to optimize my code (changing between Lists, Queues, Arrays and Strings) without success. After seeing your comment, I realized that I also was using 10 to Jack!! I fixed the values and all the tests passed!! Thank you!!!
Thank you so much for providing me a comparison!
It took me till today to figure things outâŚand i mean reeeeeeally trying hard.
You know what it was? a battle! in the piece of code I provided earlier
if (comp1.v === comp2.v) {
console.error(`consecutive war ${rCounter}`);
rCounter++;
return war(pp1, pp2, rCounter);
} else {
console.error(
`war winner :${
pp1.v > pp2.v ? 1 : 2
} with counter of consequity ${rCounter}`
);
return { winner: pp1.v > pp2.v ? 1 : 2, times: rCounter };
}
}
pp1 and pp2 are arrays and my mind thought it were selected values in question.
DamnâŚtook me simply to export the 1 game 1 battle + my solution into VS code, establish an fs- stream to log to file and parallel print both arrays⌠Xd
Thank you for advice again))!
rules are missing important details
getting major discrepancies in results depending on how the cards are âshuffledâ into the winnerâs deck, eg:
battle winner always takes their card first
vs
battle winner always takes p1âs card first
vs
battle winner always takes lowest card first
in conjunction with
war winner takes p1 played card, then three p1 face down cards, then p2 played card, then three p2 face down cards
vs
war winner takes all p1 face up and face down cards, then all p2 face up then face down cards
vs
war winner alternates between p1 and p2 played or face down cards
vs
war winner alternates between p1 played card, p2 played card, three p1 face down cards, three p2 face down cards
etc
Continuing the discussion from War - Puzzle Discussion:
help
[Mod edit: Please avoid posting codes on the forum.]
Please avoid posting codes on the forum.
Please explain in detail what help you need.
I want help clarifying the unclear instructions regarding problem.
lets say player A has
1d
2d
and player B has
1s
3s
kd
2d
and hence they begin a war and lay down their cards, does B win since he has more cards despite losing all cards anyways after the war.
Sorry, this is my first time asking questions on this forum, I may need some help :). Thank youâŚ
No worries! Just always remember to ask specific questions when you need some help.
As for your question, the statement mentions:
If a player runs out of cards during a âwarâ (when giving up the three cards or when doing the battle), then the game ends and both players are placed equally first.
which should apply to your example case.
oh ok! So there are no regards to how much cards each player has at the end! Thank you so much!!
What I quoted above is the only special case where a player running out of cards does not lose. In normal cases, the statement mentions:
A player wins when the other player no longer has cards in their deck.
When I run the tests all of them succeed but when I submit my solution, only Long game fails. I am not sure what went wrong. Is there a way to know the exact cause of this failed test?