Пишу класс Deck
по заданию. Класс, который принимает массив кодов, каждый из которых представляет карту, такую как 3D (3 бубен), 5S (5 пик), As (пик пик), и если последняя буква, представляющая тип карты, находится в нижнем регистре, то она означает, что карта перевернута. toString()
возвращает строку данной колоды, если карты обращены вверх, она добавляется к строке, но если карта перевернута, она добавляет ** к строке так:
>>const deck1 = new Deck(["ah", "3S", "KC", "4H", "3D", "10H", "8D", "5D", "7C", "QS"]);
>>deck1.toString();
"** 3S KC 4H 3D 10H 8D 5D 7C QS"
turn(arr)
принимает необязательный массив или число и переворачивает эти карточки. Если аргумент не указан, он переворачивает каждую карту, если задан пустой массив, он ничего не меняет.
Функция, которую я пытаюсь написать, turnTop(num)
принимает int dr aws столько карт из колоды и кладет каждую перевернутую карту в обратном порядке. Итак:
>>const deck1 = new Deck(["ah", "3S", "KC", "4H", "3D", "10H", "8D", "5D", "7C", "QS"]);
>>deck1.turnTop(3);
"** ** AH 4H 3D 10H 8D 5D 7C QS" // "ah" was first, now AH is the third card
Я могу перевернуть карты, но не смог найти способ изменить порядок затронутых карт.
class Deck{
constructor(deck) {
this.deck = deck;
const digit = /\d/;
const type = /[2-9AKQJakqj]/; // Ace, King, Queen, Joker
const color = /[CDHScdhs]/;
for (let card of deck) {
if (digit.test(card.charAt(card.length - 1))) {
throw "AssertionError: invalid card";
} else if (!type.test(card.charAt(0))) {
if (card.charAt(1) !== "0") { // as not to throw an error if the card is is 10
throw "AssertionError: invalid card";
}
} else if (!color.test(card.charAt(card.length - 1))) {
throw "AssertionError: invalid card";
}
}
}
toString(){
let str = "";
for (let card of this.deck){
if (card.charAt(card.length-1) === card.charAt(card.length-1).toUpperCase()){
str += " " + card;
}
else if(card.charAt(card.length-1) === card.charAt(card.length-1).toLowerCase()){
str += " " + "**"
}
}
str = str.substring(1);
return str;
}
turn(arr){
if (arr === undefined ){
for (let i in this.deck){
if(this.deck[i].charAt(this.deck[i].length-1) === this.deck[i].charAt(this.deck[i].length-1).toUpperCase() ){
this.deck[i] = this.deck[i].toLowerCase();
}else{
this.deck[i] = this.deck[i].toUpperCase();
}
}
}else if (arr.length > 1){
for (let card of arr){
if (this.deck[card - 1] === this.deck[card - 1].toUpperCase()){
this.deck[card - 1] = this.deck[card - 1].toLowerCase();
}else{
this.deck[card - 1] = this.deck[card - 1].toUpperCase();
}
}
}else if(arr.length === 0){
return new Deck(this.deck);
}
else{
if (this.deck[arr-1] === this.deck[arr-1].toUpperCase()){
this.deck[arr-1] = this.deck[arr-1].toLowerCase();
}else{
this.deck[arr-1] = this.deck[arr-1].toUpperCase();
}
}
return new Deck(this.deck);
}
turnTop(num){
for (let i =1;i<=num;i++){
if ((this.deck[i-1] === this.deck[i-1].toUpperCase())){
this.deck[i-1] = this.deck[i-1].toLowerCase();
}else{
this.deck[i-1] = this.deck[i-1].toUpperCase();
}
}return new Deck(this.deck);
}
}