Você está na página 1de 94

Mediana móvel

Solução de usuário mais bem avaliada


Mediana móvel

Faça com que a função MovingMedian(arr) leia a matriz de números armazenados em arr que conterá um tamanho de janela deslizante, N, como o primeiro elemento na matriz e
o resto será uma lista de números. Seu programa deve retornar a Mediana Móvel para cada elemento com base no elemento e seus predecessores N-1, onde N é o tamanho da janela
deslizante. A saída final deve ser uma cadeia de caracteres com a mediana móvel correspondente a cada entrada na matriz original separada por vírgulas.

Observe que para os primeiros elementos (até que o tamanho da janela seja atingido), a mediana é calculada em um número menor de entradas. Por exemplo: se arr é [3, 1, 3, 5, 10,
6, 4, 3, 1], então seu programa deve produzir "1,2,3,5,6,6,4,3"

Exemplos
Entrada: [5, 2, 4, 6]
Saída: 2,3,4

Entrada: [3, 0, 0, -2, 0, 2, 0, -2]


Saída: 0,0,0,0,0,0,0

função MovingMedian(arr) {
deixe construirArr = [];
deixe winLength = arr.shift();
deixe len = arr.length;

para (deixe i = 0; i < len; i++) {


deixe firstIndex = Math.max(0, i - winLength + 1);
let med = getMedian(arr.slice(firstIndex, i + 1));
buildArr.push(med);
}
retornar buildArr.join(',');
}

deixe getMedian = (arr) => {


arr.sort((val1, val2) => {return val1 - val2});
deixe len = arr.length;
se (len % 2) {
retorno arr[Math.floor(len/2)];
} else {
retorno (arr[len/2 - 1] + arr[len/2]) / 2;
}
}

manter esta chamada de função aqui


MovingMedian(linha de leitura());
Totais do Grupo

Faça com que a função GroupTotals(strArr) seja lida no parâmetro strArr que contém pares chave:valor em que a chave é uma cadeia de caracteres e o valor é um inteiro. Seu
programa deve retornar uma cadeia de caracteres com novos pares chave:valor separados por uma vírgula, de modo que cada chave apareça apenas uma vez com os valores totais
somados.

Por exemplo: se strArr é ["B:-1", "A:1", "B:3", "A:5"] então seu programa deve retornar a cadeia de caracteres A:6,B:2.

A cadeia de caracteres de saída final deve retornar as teclas em ordem alfabética. Exclua as chaves que têm um valor de 0 após serem somadas.

Exemplos
Entrada: ["X:-1", "Y:1", "X:-4", "B:3", "X:5"]
Saída: B:3,Y:1

Entrada: ["Z:0", "A:-1"]


Saída: A:-1
função GroupTotals(strArr) {
deixe resObject = {};
deixe parsingRegExp = /(\w+):(-?\d+)/;

strArr.forEach(val => {
const corresponde = val.match(parsingRegExp);
chave const = correspondências[1];
const numVal = Número(correspondências[2]);

if (resObject[key] || resObject[key] === 0) {


resObject[key] = resObject[key] += numVal;
} else {
resObject[key] = numVal;
}
});

return Object.keys(resObject)
.sort()
.map(val => {
return resObject[val] ? (val + ":" + resObject[val]) : '';
})
.filter(val => {
retorno val;
})
.join(',');
}

manter esta chamada de função aqui


GroupTotals(readline());
Alterações de cadeia de caracteres

Faça com que a função StringChanges(str) pegue o parâmetro str que está sendo passado, que será uma cadeia de caracteres contendo letras do alfabeto, e retorne uma nova
cadeia de caracteres com base nas regras a seguir. Sempre que um M maiúsculo for encontrado, duplique o caractere anterior (em seguida, remova o M) e sempre que um N maiúsculo
for encontrado, remova o próximo caractere da cadeia de caracteres (em seguida, remova o N). Todos os outros caracteres na cadeia de caracteres serão letras minúsculas. Por
exemplo: "abcNdgM" deve retornar "abcgg". A cadeia de caracteres final nunca estará vazia.

Exemplos
Entrada: "MrtyNNgMM"
Saída: rtyggg

Entrada: "oMoMkkNrrN"
Saída: ooookkr
função StringChanges(str) {
const strArray = str.split('');
let len = strArray.length;

para (deixe i = 0; i < len; i++) {


if (strArray[i] === 'M') {
se (!i) {
strArray.shift();
len -= 1;
i -= 1;
} else {
strArray.splice(i, 1, strArray[i - 1]);
}
} else if (strArray[i] === 'N') {
if (i === len - 1) {
strArray.pop();
} else {
strArray.splice(i, 2);
len -= 2;
i -= 2;
}
}
}
retornar strArray.join('');
}

manter esta chamada de função aqui


StringChanges(linha de leitura());

FizzBuzz

Faça com que a função FizzBuzz(num) pegue o parâmetro num que está sendo passado e retorne todos os números de 1 a num separados por espaços, mas substitua cada número que
é divisível por 3 com a palavra "Fizz", substitua cada número que é divisível por 5 com a palavra "Buzz", e cada número que é divisível por 3 e 5 com a palavra "FizzBuzz". Por
exemplo: se num é 16, então seu programa deve retornar a string "1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16". A entrada estará dentro do intervalo de 1 a 50.

Exemplos
Entrada: 3
Saída: 1 2 Fizz
Entrada: 8 Saída: 1 2 Fizz 4 Buzz Fizz 7 8

função FizzBuzz(num) {
const returnArray = [];
para (deixe i = 1; i <= núm; i++) {
se (!( i % 15)) {
returnArray.push('FizzBuzz');
} senão se (!( i % 5)) {
returnArray.push('Zumbido');
} senão se (!( i % 3)) {
returnArray.push('Fizz');
} else {
returnArray.push(i);
}
}
retornar returnArray.join(' ');
}

manter esta chamada de função aqui


FizzBuzz(linha de leitura());

Distância H

Faça com que a função HDistance(strArr) pegue a matriz de strings armazenadas em strArr, que conterá apenas duas strings de comprimento igual e retorne o número de
caracteres em cada posição que são diferentes entre elas. Por exemplo: se strArr é ["casa", "horas"] então seu programa deve retornar 2. A cadeia de caracteres será sempre de igual
comprimento e conterá apenas caracteres minúsculos do alfabeto e números.

Exemplos
Entrada: ["10011", "10100"]
Saída: 3

Entrada: ["abcdef", "defabc"]


Saída: 6

função HDistance(strArr) {

const string1 = strArr[0];


string2 = strArr[1];
const len = string1.length;
let count = 0;

para (deixe i = 0; i < len; i++) {


if (string1[i] !== string2[i]) {
contagem += 1;
}
}
contagem de retornos;
}

manter esta chamada de função aqui


HDistance(linha de leitura());

Diferentes Casos

Faça com que a função DifferentCases(str) pegue o parâmetro str que está sendo passado e o retorne no formato maiúscula e minúscula, onde a primeira letra de cada palavra
é maiúscula. A cadeia de caracteres conterá apenas letras e alguma combinação de caracteres de pontuação delimitador separando cada palavra.

Por exemplo: se str é "Daniel LikeS-coding", então seu programa deve retornar a string DanielLikesCoding.

Exemplos
Entrada: "gatos E*Cães-são incríveis"
Saída: CatsAndDogsAreAwesome

Entrada: "a b c d-e-f%g"


Saída: ABCDEFG

função DifferentCases(str) {
const charTest = /[a-zA-Z]/;
deixe returnString = '';
const len = str.comprimento;
const baseString = str.toLowerCase();

para (deixe i = 0; i < len; i++) {


if (i === len - 1 && !charTest.test(baseString[i])) {
return returnString;
}
if (i === 0 && charTest.test(baseString[i])) {
returnString += baseString[i].toUpperCase();
continuar;
}
if (baseString[i - 1] && charTest.test(baseString[i])) {
if (!charTest.test(baseString[i - 1])) {
returnString += baseString[i].toUpperCase();
} else {
returnString += baseString[i];
}
}
}
return returnString;
}

manter esta chamada de função aqui


Casos Diferentes(linha de leitura());
Pressionamentos de teclas equivalentes

Faça com que a função EquivalentKeypresses(strArr) leia a matriz de strings armazenadas em strArr que conterá 2 strings representando duas listas separadas por vírgulas
de pressionamentos de teclas. Seu objetivo é retornar a cadeia de caracteres true se as teclas pressionadas produzirem a mesma cadeia de caracteres imprimível e a cadeia de
caracteres false se não produzirem. Um pressionamento de tecla pode ser um caractere imprimível ou um backspace representado por -B. Você pode produzir uma cadeia de caracteres
imprimível a partir de uma sequência de pressionamentos de teclas fazendo com que os backspaces apaguem um caractere anterior.

Por exemplo: se strArr contiver ["a,b,c,d", "a,b,c,c,-B,d"] a saída deve retornar true porque essas teclas pressionadas produzem a mesma cadeia de caracteres imprimível. A matriz
fornecida não estará vazia. As teclas pressionadas conterão apenas letras do alfabeto e backspaces.

Exemplos
Entrada: ["a,b,c,d", "a,b,c,d,-B,d"]
Saída: true

Entrada: ["c,a,r,d", "c,a,-B,r,d"]


Saída: false

função EquivalentKeypresses(strArr) {
função reduce(str) {
deixe resultado = "";
str = str.split(",");
str.forEach(função (item, índice) {
if (str[index + 1] !== "-B" && str[index] !== "-B") {
resultado += item;
}
})
resultado de retorno;
}
código vai aqui
retorno reduce(strArr[0]) == reduce(strArr[1]);

manter esta chamada de função aqui


console.log(EquivalentKeypresses(readline()));

Horário nobre

Faça com que a função PrimeTime(num) pegue o parâmetro num que está sendo passado e retorne a string true se o parâmetro for um número primo, caso contrário, retorne a
string false. O intervalo será entre 1 e 2^16.

Exemplos
Entrada: 19
Saída: true

Entrada: 110
Saída: false

função PrimeTime(num) {
var dobradiça = Math.floor(Math.sqrt(num));
var i = 2;
teste var = verdadeiro;

hardcode respostas corretas para 1 e 2


if (num === 1) {
retornar false
}
else if (num === 2) {
retornar true
}
execute um loop para ver se o número tem algum fator integral (além de 1)
senão {
enquanto (i <= dobradiça && teste === verdadeiro) {
se (num % i !== 0) {
i++;
}
senão {
teste = falso;
}
}
teste de retorno
}
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
PrimeTime(linha de leitura());

Comprimento de execução

Faça com que a função RunLength(str) pegue o parâmetro str que está sendo passado e retorne uma versão compactada da cadeia de caracteres usando o algoritmo de codificação
Run-length. Esse algoritmo funciona pegando a ocorrência de cada caractere repetitivo e emitindo esse número junto com um único caractere da sequência de repetição. Por exemplo:
"wwwggopp" retornaria 3w2g1o2p. A cadeia de caracteres não conterá números, pontuação ou símbolos.

Exemplos
Entrada: "aabbcde"
Saída: 2a2b1c1d1e

Entrada: "wwwbbbw"
Saída: 3w3b1w

função RunLength(str) {
strarr = str.split("");
resarr = []; um lugar para colocar meus resultados à medida que são determinados;
arrlen = strarr.comprimento;
contagem = 1;

para (var i = 0; i <strarr.length; i++) {

if (strarr[i] == strarr[i+1]) {
contagem ++;
}
senão {
var entry = contagem + strarr[i];
resarr.push(contagem + strarr[i]);
contagem = 1;
}
}

retornar resarr.join("");

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
RunLength(linha de leitura());

Movimentador Prime

Faça com que a função PrimeMover(num) retorne o número primo . O intervalo será de 1 a 10^4. Por exemplo: se num é 16 a saída deve ser 53 como 53 é o 16º número primo.

Exemplos
Entrada: 9
Saída: 23

Entrada: 100
Saída: 541
função PrimeMover(num) {
contador var = 0;
var testNum = 0;

enquanto (contador < num) {


if (primeTest(testNum + 1)) {
contador++;
}
testNum++;
}
return testNum

função primeTest(int) {
if (int === 1) {
retornar false
}
else if (int === 2) {
retornar true
}
senão {
var i = 2;
var pivot = Math.ceil(Math.sqrt(int));
enquanto (i <= pivô) {
if (int % i === 0) {
retornar false
}
i++;
}
retornar true
}
}
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
PrimeMover(linha de leitura());

Palíndromo Dois

Faça com que a função PalindromeTwo(str) pegue o parâmetro str que está sendo passado e retorne a string true se o parâmetro for um palíndromo (a string é a mesma para
frente que para trás) caso contrário, retorne a string false. O parâmetro inserido pode ter pontuação e símbolos, mas eles não devem afetar se a cadeia de caracteres é de fato um
palíndromo. Por exemplo: "Anne, eu voto mais carros correndo de Roma para Viena" deve voltar a ser verdade.

Exemplos
Entrada: "Noel - vê Leon"
Saída: true

Entrada: "Uma guerra em Tarawa!"


Saída: true

função PalindromeTwo(str) {
var str = str.toLowerCase();
var strlen = str.length;
var arr = str.split("")
var newarr = [];
var x;
para (var i = 0; i < strlen; i++) {
if (arr[i].charCodeAt(0) > 96 && arr[i].charCodeAt(0)< 123) {
newarr.push(arr[i]);
}
}

for (var j = 0; j < newarr.length; j++) {


if (newarr[j] != newarr[newarr.length - j - 1]) {
x = falso;
quebrar;
}
senão {
x = verdadeiro;
}
}
retorno x;
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
PalindromeTwo(linha de leitura());
Divisão

Faça com que a função Division(num1,num2) pegue os dois parâmetros que estão sendo passados e retorne o Maior Fator Comum. Ou seja, retorne o maior número que
uniformemente entra em ambos os números sem nenhum restante. Por exemplo: 12 e 16 são divisíveis por 1, 2 e 4, então a saída deve ser 4. O intervalo para ambos os parâmetros será
de 1 a 10^3.

Exemplos
Entrada: 7 & num2 = 3
Saída: 1

Entrada: 36 & num2 = 54


Saída: 18
função Divisão(num1,num2) {
var bignum = Matemática.max(num1, num2);
var smallnum = Math.min(num1, num2);

para (var i = 1; i <= smallnum; i++) {


if (bignum%i == 0 && smallnum%i == 0) {
var maxi = i;
}
}
retorno maxi;

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
Divisão(readline());

Embaralhamento de cordas

Faça com que a função StringScramble(str1,str2) pegue os dois parâmetros que estão sendo passados e retorne a string true se uma parte dos caracteres str1 puder ser
reorganizada para corresponder a str2, caso contrário, retorne a string false. Por exemplo: se str1 é "rkqodlw" e str2 é "world", a saída deve retornar true. Pontuação e símbolos
não serão inseridos com os parâmetros.

Exemplos
Entrada: "cdore" & str2= "coder"
Saída: true

Entrada: "h3llko" & str2 = "hello"


Saída: false
função StringScramble(str1,str2) {

Primeiro, derrube as cadeias de caracteres em letras minúsculas e coloque-as em


matrizes para manipulação

arr1 = str1.toLowerCase().split("");
arr2 = str2.toLowerCase().split("");

Em seguida, classifique as matrizes por ordem alfabética


arr1.sort();
arr2.sort();

Percorra arr2, verificando se cada letra está em arr1 e, em seguida, removendo-a de


arr2 e it e todas as cartas anteriores de arr1.

var j = 0;
enquanto (j < arr1.length) {
if (arr2[0] == arr1[j]) {
arr2.shift();
arr1.splice(0,j+1);
j = 0;
}
senão {
j++;
}
}

if (arr2 == "") {
retorno verdadeiro;
}

senão{
retornar false;
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
StringScramble(linha de leitura());

Arith Geo II

Já a função ArithGeoII(arr) pega a matriz de números armazenados em arr e retorna a string "Arithmetic" se a sequência segue um padrão aritmético ou retorna "Geometric"
se segue um padrão geométrico. Se a sequência não seguir nenhum dos padrões, retorne -1. Uma sequência aritmética é aquela em que a diferença entre cada um dos números é
consistente, onde como em uma sequência geométrica, cada termo após o primeiro é multiplicado por alguma razão constante ou comum. Exemplo aritmético: [2, 4, 6, 8] e Exemplo
geométrico: [2, 6, 18, 54]. Números negativos podem ser inseridos como parâmetros, 0 não será inserido e nenhuma matriz conterá todos os mesmos elementos.

Exemplos
Entrada: [5,10,15]
Saída: Aritmética

Entrada: [2,4,16,24]
Saída: -1

função ArithGeoII(arr) {
var len = arr.comprimento;
estabelecer a relação entre dois elementos de matriz consecutivos
var mathConstant = arr[1] - arr[0];
var geoConstant = arr[1] / arr[0];
Teste a matriz para ver se a diferença entre os elementos é a mesma entre cada
par de elementos consecutivos. Se algum par falhar, defina o sinalizador como true e
saia
para (var i = 0; i < len - 1; i++) {
if (arr[i + 1] - arr[i] !== mathConstant) {
var mathTest = verdadeiro;
quebrar;
}
}
se o loop acima foi até o fim, então retorne a resposta "Aritmética". Caso
contrário, faça um loop pela matriz testando cada par. Se algum par falhar, retorne
-1, já que ele falhou em ambos os testes. Se chegar até o fim, retorne 'Geométrico'.
se (!mathTest) {
retorno 'Aritmética';
}
senão {
para (var j = 0; j < len - 1; j++) {
if (arr[j + 1] / arr[j] !== geoConstant) {
retorno -1;
}
}
retorno 'Geométrico';
}
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
ArithGeoII(linha de leitura());

Adição de matriz

Faça com que a função ArrayAddition(arr) pegue a matriz de números armazenados em arr e retorne a cadeia de caracteres true se qualquer combinação de números na matriz
(excluindo o maior número) puder ser adicionada para igualar o maior número na matriz, caso contrário, retorne a string false. Por exemplo: se arr contiver [4, 6, 23, 10, 1, 3] a
saída deve retornar true porque 4 + 6 + 10 + 3 = 23. A matriz não estará vazia, não conterá todos os mesmos elementos e poderá conter números negativos.

Exemplos
Entrada: [5,7,16,1,2]
Saída: false

Entrada: [3,5,-1,8,12]
Saída: true
função ArrayAddition(arr) {
alvo do VAR;
var addArr = arrayPrep(arr);
var len = addArr.length;
var permNum = Math.pow(2, len);

for(var i = 0; i <= permNum; i++) {


permStr = (i).toString(2);
strlen = permStr.length;
contador var = 0;
for(var j = 0; j < strlen; j++) {
if(permStr[j] === '1') {
contador += addArr[j];
}
}
if (contador === alvo) {
retornar true
}
}
retornar false

função arrayPrep(arr2) {
arr.sort(função(a, b){
retornar a - b
});
destino = arr2.pop()
Retorno ARR2
}
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
ArrayAddition(readline());

Conversor binário

Faça com que a função BinaryConverter(str) retorne a forma decimal do valor binário. Por exemplo: se 101 for passado retorne 5, ou se 1000 for passado retorne 8.

Exemplos
Entrada: "100101"
Saída: 37

Entrada: "011"
Saída: 3
função BinaryConverter(str) {
contador var = 0;
var numleng = str.comprimento;

para (var i = numleng-1; i >= 0; i--) {


var j = numleng-1-i;
var digt = parseInt(str.charAt(i));
var addit = digt * Math.pow(2, j);
contador = contador + adição;
}

contador de devolução;

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
BinaryConverter(readline());
Contagem de Cartas

Faça com que a função LetterCount(str) pegue o parâmetro str que está sendo passado e retorne a primeira palavra com o maior número de letras repetidas. Por exemplo: "Hoje,
é o melhor dia de todos os tempos!" deve voltar maior porque tem 2 e's (e 2 t's) e vem antes de sempre que também tem 2 e's. Se não houver palavras com letras repetidas, retorne -1.
As palavras serão separadas por espaços.

Exemplos
Entrada: "Olá torta de maçã"
Saída: Olá

Entrada: "Sem palavras"


Saída: -1
função LetterCount(str) {

str = str.replace(/[^a-zA-zs]/g, "");


str = str.toLowerCase();

var wordarr = str.split(" ");

var totescore = {};


for (var i = 0; i < wordarr.length; i++) { //para cada palavra em string
var scorearr = [];
for (var j = 0; j < wordarr[i].length; j++) { //para cada letra em word
contagem de var = 0;
var x = wordarr[i].charAt(j);
para (var k = 0; k < wordarr[i].length; k++) {
if (wordarr[i][k] === x) {
contagem++;
}
}
scorearr.push(contagem);
}
scorearr.sort(função(a, b) {return (b-a)});
totescore[wordarr[i]] = scorearr[0];
var newarr = [];
}
for (var cnt in totescore) {
Newarr.push([CNT, Totescore[CNT]]);
newarr.sort(função(a, b) {return b[1] - a[1]});
}
if (newarr[0][1] === 1) {
retorno -1;
}
senão {
Retorno Newarr[0][0];
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
LetterCount(linha de leitura());

Cifra de César

Faça com que a função CaesarCipher(str,num) pegue o parâmetro str e execute um deslocamento de cifra de César nele usando o parâmetro num como o número de
deslocamento. Uma cifra de César funciona deslocando cada letra na cadeia de caracteres N coloca para baixo no alfabeto (neste caso, N será num). Pontuação, espaços e maiúsculas
devem permanecer intactos. Por exemplo, se a string for "Caesar Cipher" e num for 2, a saída deve ser "Ecguct Ekrjgt".

Exemplos
Entrada: "Olá" & num = 4
Saída: Lipps

Entrada: "abc" & num = 0


Saída: abc
função CaesarCipher(str,num) {

var arr = str.split("");

para (var i = 0; i < str.length; i++) {

var x = arr[i].charCodeAt(0);

if (x > 64 && x < 91) {


x = x - 65;
x = x + núm;
x = x%26;
x = x + 65;
arr[i] = String.fromCharCode(x);

}
senão se (x > 96 && x < 123) {
x = x - 97;
x = x + núm;
x = x%26;
x = x + 97;
arr[i] = String.fromCharCode(x);
}

senão {

}
var y = arr.join("");
retorno y;

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
CaesarCipher(linha de leitura());

Modo Simples

Faça com que a função SimpleMode(arr) pegue a matriz de números armazenados em arr e retorne o número que aparece com mais frequência (o modo). Por exemplo: se arr
contiver [10, 4, 5, 2, 4] a saída deve ser 4. Se houver mais de um modo, retorne o que apareceu na matriz primeiro ( ou seja.[5, 10, 10, 6, 5] deve retornar 5 porque apareceu primeiro).
Se não houver modo retorne -1. A matriz não estará vazia.

Exemplos
Entrada: [5,5,2,2,1]
Saída: 5

Entrada: [3,4,1,6,10]
Saída: -1
função SimpleMode(arr) {
len = arr.comprimento;
var newobj = {};
var testarr = [];
para (var i = len-1; i >= 0; i--) {
contagem = 0;
para (var j = 0; j < len; j++) {
if (arr[j] === arr[i]) {
contagem++;
}
}
newobj[arr[i]] = contagem;
}
para (x em newobj) {
testarr.push([x, newobj[x]]);
}
testarr.sort(function(a, b) {return b[1] - a[1]});

if (testarr[0][1] === 1) {
retorno -1
}
senão {
teste de retorno[0][0];
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
SimpleMode(linha de leitura());

Consecutivo

Faça com que a função Consecutive(arr) pegue a matriz de inteiros armazenados em arr e retorne o número mínimo de inteiros necessários para tornar o conteúdo de arr
consecutivo do menor número para o maior número. Por exemplo: Se arr contiver [4, 8, 6], a saída deve ser 2 porque dois números precisam ser adicionados à matriz (5 e 7) para
torná-la uma matriz consecutiva de números de 4 a 8. Números negativos podem ser inseridos como parâmetros e nenhuma matriz terá menos de 2 elementos.
Exemplos
Entrada: [5,10,15]
Saída: 8

Entrada: [-2,10,4]
Saída: 10

função Consecutive(arr) {
const onceArray = Array.from(new Set(arr))
.sort((val1, val2) => val1 - val2);
const finalIndex = onceArray.length - 1;
return onceArray[finalIndex] - onceArray[0] - (onceArray.length - 1);
}

manter esta chamada de função aqui


Consecutiva(linha de leitura());

Divisão Formatada

Faça com que a função FormattedDivision(num1,num2) pegue os dois parâmetros que estão sendo passados, divida num1 por num2 e retorne o resultado como uma cadeia
de caracteres com vírgulas formatadas corretamente e 4 dígitos significativos após a casa decimal. Por exemplo: se num1 é 123456789 e num2 é 10000 a saída deve ser
"12.345,6789". A saída deve conter um número no lugar de um, mesmo que seja um zero.

Exemplos
Entrada: 2 & num2 = 3
Saída: 0,6667

Entrada: 10 & num2 = 10


Saída: 1,0000

função FormattedDivision(num1,num2) {
Isso faz com que a maior parte do problema seja feito em uma etapa simples!
var divisionResult = (num1 / num2).toFixed(4);
Divida a cadeia de caracteres em uma matriz com dois itens: inteiro, decimal
var numParts = divisionResult.split('.');
var intArray = numParts[0].split('');
var len = intArray.length;
var intString;

para (var i = len; i > 0; i--) {


if (i < (len) && (len - i + 1) % 3 === 1) {
intArray.splice(i, 0, ',');
intString = intArray.join('');
}
senão {
intString = (intString)? intString : intArray.join('');
}
}
retornar intString.concat('.', numParts[1]);
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
FormattedDivision(readline());

Contagem de Minutos

Faça com que a função CountingMinutes(str) pegue o parâmetro str que está sendo passado, que será duas vezes (cada uma formatada corretamente com dois pontos e am ou
pm) separada por um hífen e retorne o número total de minutos entre os dois tempos. O horário será em formato de relógio de 12 horas. Por exemplo: se str é 9:00am-10:00am,
então a saída deve ser 60. Se str é 1:00pm-11:00am a saída deve ser 1320.

Exemplos
Entrada: "12:30pm-12:00am"
Saída: 690

Entrada: "1:23am-1:08am"
Saída: 1425

função CountingMinutes(str) {
testador const = /(\d+):(\d+)([pa]m)-(\d+):(\d+)([pa]m)/;
const timeArray = str.match(tester);
const time1 = timeArray[3] === 'am'
? (parseInt(timeArray[1], 10) * 60) + parseInt(timeArray[2], 10)
: (parseInt(timeArray[1], 10) * 60) + parseInt(timeArray[2], 10) + 720;
const time2 = timeArray[6] === 'am'
? (parseInt(timeArray[4], 10) * 60) + parseInt(timeArray[5], 10)
: (parseInt(timeArray[4], 10) * 60) + parseInt(timeArray[5], 10) + 720;
retorno ((tempo2 - tempo1) + 1440) % 1440;
}

manter esta chamada de função aqui


CountingMinutes(linha de leitura());

Etapa de permutação

Faça com que a função PermutationStep(num) pegue o parâmetro num que está sendo passado e retorne o próximo número maior que num usando os mesmos dígitos. Por
exemplo: se num for 123 retorne 132, se for 12453 retorne 12534. Se um número não tiver permutações maiores, retorne -1 (ou seja. 999).

Exemplos
Entrada: 11121 Saída: 11211

Entrada: 41352
Saída: 41523

função PermutationStep(num) {
var numArray = num.toString().split('').reverse();
numArray = numArray.map(function(val) {
retorno parseInt(val);
})
teste var = verdadeiro;
var len = numArray.length;
newArray = [];
enquanto(teste) {
if (!newArray[0]) {
newArray[0] = numArray.shift();
}
else if (newArray.every(function(val) {
return val <= numArray[0];
})) {
newArray.push(numArray.shift())
}
senão {
if (!numArray[0]) {
retorno '-1';
}
teste = falso;
}
}
newArray.sort(function(a, b) {return a - b});
var numHolder = numArray.shift();

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


if (newArray[i] > numHolder) {
numArray.unshift(newArray[i]);
newArray[i] = numHolder;
quebrar;
}
}
newArray.sort(function(a, b) {return b - a});

var resultArray = newArray.concat(numArray);

retornar resultArray.reverse().join('');
}

PermutationStep(readline());

Verificador Prime

Faça com que a função PrimeChecker(num) pegue num e retorne 1 se qualquer arranjo de num sair como um número primo, caso contrário, retorne 0. Por exemplo: se num é 910,
a saída deve ser 1 porque 910 pode ser organizado em 109 ou 019, ambos primos.

Exemplos
Entrada: 98
Saída: 1

Entrada: 598
Saída: 1
função PrimeChecker(num) {
A função initialize converte o número em uma matriz de n! Matrizes de 2 itens,
onde n é o número de dígitos em num.
A matriz tem a forma ['',['1', '2', '3']].

workingArray = inicializar(num);
var arrayLen = workingArray.length;

enquanto (workingArray[0][1].length > 0){


permStep é a função que move os dígitos para seus pontos de forma ordenada,
resultando em
uma matriz de n! elementos do formulário ['123',[]].
permStep(workingArray);
}
isso arruma os elementos da matriz.
workingArray = workingArray.map(function(val){
retorno val[0];
});
primeTest é uma função para converter cada elemento de matriz em uma cadeia de
caracteres e, em seguida, testar para ver se é um primo.
for (var i = 0, WAlen = workingArray.length; i < WAlen; i++){
if (primeTest(workingArray[i])){
retorno 1;
}
}
retornar 0

função initialize(num) {
var arr = num.toString().split('')
var resArr = [];
para (var i = 0, len = fatorial(arr.length); i < len; i++) {
resArr.push(['', arr]);
}
retorno resArr;
}
função fatorial(num) {
if (núm <= 1) {
retorno 1;
}
senão {
núm de retorno * fatorial(num - 1)
}
}
função permStep(arr) {
contador var = 0;
var len = arr[0][1].comprimento;
enquanto (contador < arrayLen) {
var targetArray = arr[counter][1];
para (var i = 0; i < len; i++) {
para (var j = 0; j < fatorial(len - 1); j++){
var copyArray = targetArray.map(function(val){
retorno val;
});
suporte var = copyArray.splice(i, 1);
arr[contador][0] = arr[contador][0].concat(titular[0]);
arr[counter][1] = copyArray;
contador++;
}
}
}
retorno arr;
}
função primeTest(stringNum) {
stringNum = parseInt(stringNum);
pivô = Math.ceil(Math.sqrt(stringNum));
if (stringNum === 1) {
retornar false;
}
if (stringNum === 2) {
retorno verdadeiro;
}
senão {
para (var i = 2; i <= pivô; i++) {
if (stringNum % i === 0) {
retornar false;
}
}
retorno verdadeiro;
}
}
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
PrimeChecker(linha de leitura());

Inserção de traço II

Faça com que a função DashInsertII(str) insira traços ('-') entre cada dois números ímpares e insira asteriscos ('*' ) entre cada dois números pares em str. Por exemplo: se str é
4546793 a saída deve ser 454 * 67-9-3. Não conte zero como um número ímpar ou par.

Exemplos
Entrada: 99946
Saída: 9-9-94*6

Entrada: 56647304
Saída: 56 * 6 * 47-304
função DashInsertII(num) {
const resString = num.toString(10);
return resString
.replace(/([2468])(?=[2468])/g, '$1*')
.replace(/([13579])(?=[13579])/g, '$1-');
}

manter esta chamada de função aqui


DashInsertII(linha de leitura());
Troca II

Faça com que a função SwapII(str) pegue o parâmetro str e troque o caso de cada caractere. Então, se uma letra estiver entre dois números (sem separação), alterne os lugares dos
dois números. Por exemplo: se str é "6Hello4 -8World, 7 yes3" a saída deve ser 4hELLO6 -8wORLD, 7 YES3.

Exemplos
Entrada: "Olá -5LOL6"
Saída: hELLO -6lol5

Entrada: "2S 6 du5d4e"


Saída: 2s 6 DU4D5E

deixar ajudantes;

função SwapII(str) {
const switchString = helpers.caseSwap(str);
return switchString.replace(/(\d)([A-Za-z]+)(\d)/g, '$3$2$1');
}

ajudantes = {
caseSwap(str) {
Retorno STR
.split('')
.map((letra) => {
se (/[A-Z]/.test(letra)) {
letra de retorno.toLowerCase();
}
retorne letter.toUpperCase();
})
.join('');
}
};

manter esta chamada de função aqui


SwapII(linha de leitura());

Pesquisa de Números

Faça com que a função NumberSearch(str) pegue o parâmetro str, procure todos os números na string, adicione-os e, em seguida, retorne esse número final dividido pela
quantidade total de letras na string. Por exemplo: se str é "Hello6 9World 2, Nic8e D7ay!" a saída deve ser 2. Primeiro se você somar todos os números, 6 + 9 + 2 + 8 + 7 você
obtém 32. Em seguida, há 17 letras na corda. 32 / 17 = 1,882, e a resposta final deve ser arredondada para o número inteiro mais próximo, de modo que a resposta é 2. Apenas números
de um dígito separados por espaços serão usados em toda a cadeia de caracteres (Então este nunca será o caso: hello44444 world). Cada cadeia de caracteres também terá pelo menos
uma letra.

Exemplos
Entrada: "H3ello9-9"
Saída: 4

Entrada: "Um número*1*"


Saída: 0
função NumberSearch(str) {
var matchArr = str.match(/d/g);
if (matchArr) {
var matchArr = matchArr.map(function(val) {
retorno parseInt(val);
});
var sum = matchArr.reduce(function(post, pre){
Retorno Pré + Pós
});
}
senão {
soma var = 0;
}

var letterArr = str.match(/[a-zA-Z]/g);

retornar Math.round(soma / letraArr.length);

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
NumberSearch(linha de leitura());

Triplo Duplo

Faça com que a função TripleDouble(num1,num2) pegue ambos os parâmetros que estão sendo passados, e retorne 1 se houver uma tripla reta de um número em qualquer lugar
em num1 e também uma dupla reta do mesmo número em num2. Por exemplo: se num1 é igual a 451999277 e num2 é igual a 41177722899, então retorne 1 porque no primeiro
parâmetro você tem o triplo reto 999 e você tem um duplo reto, 99, do mesmo número no segundo parâmetro. Se esse não for o caso, retorne 0.

Exemplos
Entrada: 465555 & num2 = 5579
Saída: 1

Entrada: 67844 & num2 = 66237


Saída: 0
função TripleDouble(num1,num2) {
var holdArr = []
num1 = num1.toString();
para (var i = 0; i <= 9; i++) {
i = i.toString();
var regEx = novo RegExp (i+i+i);
if (regEx.test(num1)){
holdArr.push(i);
}
}

if (holdArr === []) {


console.log(holdArr)
retorno 0;
}
senão {
for (var j = 0, len = holdArr.length; j < len; j++){
var double = novo RegExp (holdArr[j] + holdArr[j]);
console.log(duplo);
if (double.test(num2)) {
retorno 1;
}
}
retorno 0;
}
console.log(holdArr);
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
TripleDouble(readline());

Matcher de suporte

Faça com que a função BracketMatcher(str) pegue o parâmetro str que está sendo passado e retorne 1 se os colchetes forem correspondidos corretamente e cada um for
contabilizado. Caso contrário, retorne 0. Por exemplo: se str é "(hello (world))", então a saída deve ser 1, mas se str é "((hello (world))" a saída deve ser 0 porque os colchetes não
correspondem corretamente. Apenas "(" e ")" serão usados como colchetes. Se str não contiver colchetes, retorne 1.

Exemplos
Entrada: "(coder)(byte))"
Saída: 0

Entrada: "(c(oder)) b(yte)"


Saída: 1
função BracketMatcher(str) {
var strArray = str.split('');
contador var = 0;
for (var i = 0, len = strArray.length; i < len; i++) {
if (strArray[i] === "(") {
contador++;
}
else if (strArray[i] === ")") {
balcão--;
}
if (contador < 0) {
retorno 0;
}
}
if (contador === 0) {
retorno 1;
}
retorno 0;
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
BracketMatcher(linha de leitura());
Redução de cadeia de caracteres

Faça com que a função StringReduction(str) pegue o parâmetro str que está sendo passado e retorne o menor número que você pode obter através do método de redução a
seguir. O método é: Somente as letras a, b e c serão dadas em str e você deve pegar dois caracteres adjacentes diferentes e substituí-lo pelo terceiro. Por exemplo, "ac" pode ser
substituído por "b", mas "aa" não pode ser substituído por nada. Esse método é feito repetidamente até que a cadeia de caracteres não possa ser reduzida ainda mais e o comprimento
da cadeia de caracteres resultante seja produzido. Por exemplo: se str é "cab", "ca" pode ser reduzido para "b" e você obtém "bb" (você também pode reduzi-lo para "cc"). A redução
é feita para que a saída seja 2. Se str é "bcab", "bc" reduz para "a", então você tem "aab", então "ab" reduz para "c", e a cadeia final "ac" é reduzida para "b", então a saída deve ser
1.

Exemplos
Entrada: "abcabc"
Saída: 2

Entrada: "cccc"
Saída: 4

função StringReduction(str) {

enquanto (str.match(/(ab|ba|ac|ca|bc|cb)/) != undefined) {


str = str.replace(/(ab|ba)/, "c");
str = str.replace(/(bc|cb)/, "a");
str = str.replace(/(ac|ca)/, "b");
}

código vai aqui


retorno str.length;

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
StringReduction(linha de leitura());

TrêsCinco Múltiplos

Faça com que a função ThreeFiveMultiples(num) retorne a soma de todos os múltiplos de 3 e 5 que estão abaixo de num. Por exemplo: se num é 10, os múltiplos de 3 e 5 que
estão abaixo de 10 são 3, 5, 6 e 9, e somando-os você obtém 23, então seu programa deve retornar 23. O número inteiro que está sendo passado será entre 1 e 100.

Exemplos
Entrada: 6
Saída: 8

Entrada: 1
Saída: 0

função ThreeFiveMultiples(num) {
var arr = [];
para (var i = 0; i <= num - 1; i++) {
Se (i % 3 === 0 || (i % 5 === 0 && i % 3 !== 0)) {
Arr.push(i);
}
}
return arr.reduce(function(hold, val) {
retorno hold + val;
});
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
ThreeFiveMultiples(linha de leitura());
Árvore de pesquisa binária LCA

Já a função BinarySearchTreeLCA(strArr) pega a matriz de strings armazenadas em strArr, que conterá 3 elementos: o primeiro elemento será uma árvore de pesquisa binária
com todos os valores exclusivos em uma matriz transversal de pré-ordem , o segundo e o terceiro elementos serão dois valores diferentes, e seu objetivo é encontrar o menor ancestral
comum desses dois valores. Por exemplo: se strArr for ["[10, 5, 1, 7, 40, 50]", "1", "7"] então essa árvore se parece com o seguinte:

Para a entrada acima, seu programa deve retornar 5 porque esse é o valor do nó que é a LCA dos dois nós com valores 1 e 7. Você pode assumir que os dois nós que você está
procurando na árvore existirão em algum lugar na árvore.

Exemplos
Entrada: ["[10, 5, 1, 7, 40, 50]", "5", "10"]
Saída: 10

Entrada: ["[3, 2, 1, 12, 4, 5, 13]", "5", "13"]


Saída: 12

função BinarySearchTreeLCA(strArr) {
pegue o primeiro item na matriz de argumentos e transforme-o em uma matriz de
inteiros
let nodeArray = strArr[0]
.replace(/[[]]/g, '')
.split(/,s/)
.map(val => parseInt(val, 10));

pegue os outros itens na matriz de argumentos e converta em inteiros


deixe num1 = parseInt(strArr[1], 10);
deixe num2 = parseInt(strArr[2], 10);

Localizar as posições dos números fornecidos na matriz numérica


let ind1 = nodeArray.findIndex(val => val === num1);
let ind2 = nodeArray.findIndex(val => val === num2);

Quanto mais distante das duas posições, não estamos interessados em elementos
passados que
deixe rightEdge = Matemática.max(ind1, ind2);

veja se há algum item à esquerda da direita que divida os dois números dados,
essa será a resposta
let result = nodeArray.filter((val, ind) => (val >= Math.min(num1, num2) && val
<= Math.max(num1, num2) && ind <= rightEdge));

se não houver, então retorne o item que está mais à esquerda


if (result.length === 0) retornar ind1 < ind2 ? strArr[1] : strArr[2];

se houver, devolva-o como uma cadeia de caracteres


return result[0].toString();
}

manter esta chamada de função aqui


BinarySearchTreeLCA(linha de leitura());

Determinante de moedas

Faça com que a função CoinDeterminer(num) pegue a entrada, que será um inteiro que varia de 1 a 250, e retorne uma saída inteira que especificará o menor número de
moedas, que quando adicionadas, são iguais ao inteiro de entrada. As moedas são baseadas em um sistema da seguinte forma: existem moedas representando os inteiros 1, 5, 7, 9 e 11.
Então, por exemplo: se num é 16, então a saída deve ser 2 porque você pode alcançar o número 16 com as moedas 9 e 7. Se num é 25, então a saída deve ser 3 porque você pode
alcançar 25 com 11, 9 e 5 moedas ou com 9, 9 e 7 moedas.

Exemplos
Entrada: 6
Saída: 2

Entrada: 16
Saída: 2
função CoinDeterminer(num) {

var arr = [0, 1, 2, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 3, 3, 2, 3, 2, 3, 2]

se (núm <= 22) {


retorno arr[num]
}

senão {
var turnos = Math.floor((num - 11) / 22) * 2;
var remain = num - (turnos * 11);
se (permanecer > 22) {
turnos++;
permanecer -= 11;
}
retornos + arr[permanecer];
}
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
CoinDeterminer(readline());
Verificador de Fibonacci

Faça com que a função FibonacciChecker(num) retorne a string yes se o número fornecido fizer parte da sequência de Fibonacci. Esta sequência é definida por: Fn = Fn-1 + Fn-
2, o que significa que para encontrar Fn você soma os dois números anteriores. Os dois primeiros números são 0 e 1, depois vem 1, 2, 3, 5 etc. Se num não estiver na sequência de
Fibonacci, retorne a sequência de caracteres não.

Exemplos
Entrada: 34
Saída: sim

Entrada: 54
Saída: não
função FibonacciChecker(num){

var semente1 = 0;
var semente2 = 1;
contador var = 0;
enquanto (contador < num) {
contador = semente1 + semente2;
if (contador === num) {
retornar "sim";
}
semente1 = semente2;
semente2 = contador;
}

retornar "não";
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
FibonacciChecker(linha de leitura());

Múltiplos colchetes

Faça com que a função MultipleBrackets(str) pegue o parâmetro str que está sendo passado e retorne 1 #ofBrackets se os colchetes forem correspondidos corretamente e
cada um for contabilizado. Caso contrário, retorne 0. Por exemplo: se str é "(hello [world])(!) ", então a saída deve ser 1 3 porque todos os colchetes são correspondidos e há 3 pares
de colchetes, mas se str é "((hello [world])" a saída deve ser 0 porque os colchetes não correspondem corretamente. Somente "(", ")", "[" e "]" serão usados como colchetes. Se str
não contiver colchetes, retorne 1.

Exemplos
Entrada: "(codificador)[byte)]"
Saída: 0

Entrada: "(c([od]er)) b(yt[e])"


Saída: 1 5

função MultipleBrackets(str) {
var regex = /[()[]]/;
se (!regex.test(str)) retornar 1;

var countParen = 0;
var countBrack = 0;
var countOpen = 0;
para (var i = 0, len = str.length; i < len; i++) {
switch(str.charAt(i)) {
Processo «(»:
countOpen++;
countParen++;
quebrar;
Processo «[»:
countOpen++;
countBrack++;
quebrar;
caso «)»:
contagemParen--;
quebrar;
Processo ']':
contagemBrack--;
quebrar;
}
se (countParen < 0 || countBrack < 0) retornar 0;
}

if (countParen === 0 && countBrack === 0) return ('1 ' + countOpen);

senão retornar 0;
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
MultipleBrackets(readline());

Mais tempo livre

Faça com que a função MostFreeTime(strArr) leia o parâmetro strArr que está sendo passado, que representará um dia inteiro e será preenchido com eventos que abrangem do
tempo X ao tempo Y no dia. O formato de cada evento será hh:mmAM/PM-hh:mmAM/PM. Por exemplo, strArr pode ser ["10:00AM-12:30PM","02:00PM-02:45PM","09:10AM-
09:50AM"]. Seu programa terá que produzir a maior quantidade de tempo livre disponível entre o início do seu primeiro evento e o final do seu último evento no formato: hh:mm. O
evento de início deve ser o evento mais antigo do dia e o evento mais recente deve ser o evento mais recente do dia. A saída para a entrada anterior seria, portanto, 01:30 (com o
primeiro evento do dia começando às 09:10 e o último evento terminando às 14:45). A entrada conterá pelo menos 3 eventos e os eventos podem estar fora de ordem.

Exemplos
Entrada: ["12:15PM-02:00PM","09:00AM-10:00AM","10:30AM-12:00PM"]
Saída: 00:30

Entrada: ["12:15PM-02:00PM","09:00AM-12:11PM","02:02PM-04:00PM"]
Saída: 00:04
função MostFreeTime(strArr) {
strArr = strArr.map(função(val) {
retorno convert12to24(val);
});
strArr = strArr.map(function(val){
retorno convertToMinutes(val);
})

strArr.sort(function(a, b){
return parseInt(a.match(/d{3,4}/) - b.match(/d{3,4}/))
})

strArr = strArr.map(function(val){
valArr = val.split('-');
valArr = valArr.map(função(val){
retorno parseInt(val);
});
retorno valArr;
});
var len = strArr.length;

contador var = 0;
para (var i = 0; i < len - 1; i++) {
var time = strArr[i+1][0] - strArr[i][1];
if (contador de > tempo) {
contador = tempo;
}
}

return returnToTime (contador);

função returnToTime(counter){
var mins = (contador % 60).toString();
var hrs = (Math.floor(contador / 60).toString());
if (mins < 10) {
mins = '0' + mins;
}
if (hrs < 10) {
hrs = '0' + hrs;
}
retorno (hrs + ':' + mins);
}

função convertToMinutes(strVal) {
tempArr = strVal.split('-');
tempArr = tempArr.map(function(val){
var hrs = parseInt(val.slice(0,2));
var mins = parseInt(val.slice(3));
horas de retorno * 60 + minutos;
});

retornar tempArr.join('-');
}

função convert12to24(strVal) {
var tempArr = strVal.split('-');
tempArr = tempArr.map(function(val){
se (/am/i.test(val)) {
val = val.substituir('12', '00');
retorno val.slice(0, 5);
}
senão {
val = val.substituir('12', '00');
var hora = parseInt(val.slice(0, 2));
val = val.slice(2);
var newHour = (hora + 12).toString();
val = newHour.concat(val)
retorno val.slice(0, 5);
}
});
retornar tempArr.join('-');
}
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
MostFreeTime(linha de leitura());

Retângulos sobrepostos

Faça com que a função OverlappingRectangles(strArr) leia o parâmetro strArr que está sendo passado, que representará dois retângulos em um plano de coordenadas
cartesianas e conterá 8 coordenadas, com as 4 primeiras compondo o retângulo 1 e as últimas 4 compondo o retângulo 2. Será no seguinte formato: ["(0,0),(2,2),(2,0),(0,2),(1,0),(1,2),
(6,0),(6,2)"] Seu programa deve determinar a área do espaço onde os dois retângulos se sobrepõem e, em seguida, produzir o número de vezes que essa região sobreposta pode caber
no primeiro retângulo. Para o exemplo acima, a região sobreposta compõe um retângulo da área 2, e o primeiro retângulo (as primeiras 4 coordenadas) compõe um retângulo da área
4, então seu programa deve gerar uma saída 2. As coordenadas serão todas inteiras. Se não houver sobreposição entre os dois retângulos, retorne 0.

Exemplos
Entrada: ["(0,0),(0,-2),(3,0),(3,-2),(2,-1),(3,-1),(2,3),(3,3)"]
Saída: 6

Entrada: ["(0,0),(5,0),(0,2),(5,2),(2,1),(5,1),(2,-1),(5,-1)"]
Saída: 3
JAVASCRIPT
deixar ajudantes;

const OverlappingRectangles = (strArr) => {


retângulos const = helpers.rectangArrays(strArr);
const rec1Points = ajudantes.recPoints(retângulos[0]);
const rec2Points = ajudantes.recPoints(retângulos[1]);

criou o objeto values para dar nomes aos lados do retângulo para torná-los
mais fácil de visualizar.
valores const = {
rec1Top: rec1Pontos[1][1],
rec1Direita: rec1Points[1][0],
rec1Fundo: rec1Points[0][1],
rec1Esquerda: rec1Points[0][0],
rec2Top: rec2Pontos[1][1],
rec2Direita: rec2Points[1][0],
rec2Bottom: rec2Pontos[0][1],
rec2Esquerda: rec2Points[0][0]
};
const rec1Area = (values.rec1Top - values.rec1Bottom) * (values.rec1Right -
values.rec1Left);

/* ensaio de sobreposição */
if (values.rec2Bott >= values.rec1Top ||
values.rec1Bott >= valores.rec2Topo ||
valores.rec1Esquerda >= valores.rec2Direita ||
values.rec2Left >= values.rec1Right) {
retorno 0;
}

const overLapTop = Math.min(valores.rec1Top, valores.rec2Top);


const overLapBottom = Matemática.max(valores.rec1Bottom, valores.rec2Bottom);
const overLapRight = Math.min(valores.rec1Direita, valores.rec2Direita);
const overLapLeft = Matemática.max(values.rec1Left, values.rec2Left);
const overLapArea = (overLapTop - overLapBottom) * (overLapRight -
overLapLeft);
retorno overLapArea === 0 ? 0 : Math.trunc(rec1Area / overLapArea);
};

ajudantes = {
/* a função RectangArrays ta105816
kes a entrada desse problema e retorna um
matriz de dois elementos, sendo cada elemento uma matriz dos pontos no primeiro
ou
segundo retângulo, respectivamente. */
rectangArrays(strArr) {
const str = strArr[0];
deixe bigArray = str.split('),(');
bigArray = bigArray.map((val) => {
const cleanVal = val.replace(/[()]/g, '');
const pointArray = cleanVal.split(',');
pointArray[0] = parseInt(pointArray[0], 10);
pointArray[1] = parseInt(pointArray[1], 10);
return pointArray;
});
retornar [bigArray.splice(0, 4), bigArray];
},
/*
a função recPoints toma uma matriz de pontos na grade cartesiana (de um
retângulo alinhado) e retorna uma matriz de dois pontos, representando o inferior
canto esquerdo e canto superior direito do retângulo.
*/
recPoints(arr) {
const yVals = arr.map(val => val[1]);
const xVals = arr.map(val => val[0]);
const yMin = Math.min(... yVals);
const yMax = Matemática.max(... yVals);
const xMin = Math.min(... xVals);
const xMax = Matemática.max(... xVals);
retornar [[xMin, yMin], [xMax, yMax]];
}
};

manter esta chamada de função aqui


OverlappingRectangles(readline());

Veja Diga Sequência

Faça com que a função LookSaySequence(num) pegue o parâmetro num que está sendo passado e retorne o próximo número na sequência de acordo com a seguinte regra: para
gerar o próximo número em uma sequência leia os dígitos do número dado, contando o número de dígitos em grupos do mesmo dígito. Por exemplo, a sequência que começa com 1
seria: 1, 11, 21, 1211, ... O 11 vem de haver "um 1" antes e o 21 vem de haver "dois 1" antes dele. Assim, seu programa deve retornar o próximo número na sequência dada num.

Exemplos
Entrada: 1211
Saída: 111221

Entrada: 2466
Saída: 121426
função LookSaySequence(num) {
var numArr = prepFunc(num);
var newArr = [];
var storeArr = [];

enquanto (numArr.length > 0) {


if (!newArr.length) {
newArr.push(numArr.shift());
if (!numArr.length) {
storeArr.push('1');
storeArr.push(newArr[0]);
retornar parseInt(storeArr.join(''));
}
}
else if (newArr[newArr.length - 1] === numArr[0]) {
newArr.push(numArr.shift());
if (!numArr.length) {
storeArr.push(newArr.length.toString());
storeArr.push(newArr[0]);
retornar parseInt(storeArr.join(''));
}
}
senão {
storeArr.push(newArr.length.toString());
storeArr.push(newArr[0]);
newArr = [];
}
}
console.log(storeArr);

código vai aqui


núm de retorno;
função prepFunc(num) {
var str = num.toString();
var arr = str.split('');
retorno arr;
}
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
LookSaySequence(linha de leitura());

Lista Distinta

Faça com que a função DistinctList(arr) pegue a matriz de números armazenados em arr e determine o número total de entradas duplicadas. Por exemplo, se a entrada for [1,
2, 2, 2, 3], seu programa deve gerar 2 porque há duas duplicatas de um dos elementos.

Exemplos
Entrada: [0,-2,-2,5,5,5]
Saída: 3

Entrada: [100,2,101,4]
Saída: 0
função DistinctList(arr) {
const strippedArr = novo Set(arr);
retorno arr.length - strippedArr.size;
}
DistinctList(linha de leitura());

Codificação numérica

Faça com que a função NumberEncoding(str) pegue o parâmetro str e codifique a mensagem de acordo com a seguinte regra: codifice cada letra em sua posição numerada
correspondente no alfabeto. Símbolos e espaços também serão usados na entrada. Por exemplo: se str é "af5c a#!" então seu programa deve retornar 1653 1#!.

Exemplos
Entrada: "Olá 45"
Saída: 85121215 45

Entrada: "jaj-a"
Saída: 10110-1
função NumberEncoding(str) {
str = str.toLowerCase();
var arr = str.split("");
var len = arr.comprimento;

para (var i = 0; i < len; i++) {


if (/[a-z]/.test(arr[i])) {
arr[i] = arr[i].replace(arr[i].charAt(0), (arr[i].charCodeAt(0) -
96).toString());
}
}

str = arr.join("");

código vai aqui


Retorno Str;
}

manter esta chamada de função aqui


para ver como inserir argumentos em JavaScript, role para baixo
NumberEncoding(linha de leitura());

Seletor de Ações

Já a função StockPicker(arr) pega a matriz de números armazenados em arr que conterá inteiros que representam a quantidade em dólares que uma única ação vale, e retorna o
lucro máximo que poderia ter sido feito comprando ações no dia x e vendendo ações no dia y onde y > x. Por exemplo: se arr é [44, 30, 24, 32, 35, 30, 40, 38, 15], então seu
programa deve retornar 16 porque no índice 2 a ação valia US$ 24 e no índice 6 a ação valia US$ 40, então se você comprou a ação a 24 e a vendeu a 40, então se você comprou a
ação a 24 e a vendeu a 40, Você teria feito um lucro de US $ 16, que é o lucro máximo que poderia ter sido feito com esta lista de preços de ações.

Se não houver lucro que poderia ter sido feito com os preços das ações, então seu programa deve retornar -1. Por exemplo: arr é [10, 9, 8, 2], então seu programa deve retornar -1.

Exemplos
Entrada: [10,12,4,5,9]
Saída: 5

Entrada: [14,20,4,12,5,11]
Saída: 8

função StockPicker(arr) {
var maxProfit = 0;
var len = arr.comprimento;

enquanto (arr.length > 1) {


var start = arr.shift();
var max = Math.max.apply(null, arr);
var lucro = max - início;
if (lucro > maxProfit) {
maxProfit = lucro;
}
}

retorno maxProfit === 0 ? -1 : maxProfit;

manter esta chamada de função aqui


StockPicker(linha de leitura());

Subarray máximo

Faça com que a função MaxSubarray(arr) pegue a matriz de números armazenados em arr e determine a maior soma que pode ser formada por qualquer subarray contíguo na
matriz. Por exemplo, se arr é [-2, 5, -1, 7, -3], então seu programa deve retornar 11 porque a soma é formada pela submatriz [5, -1, 7]. Adicionar qualquer elemento antes ou depois
dessa submatriz tornaria a soma menor.
Exemplos
Entrada: [1, -2, 0, 3]
Saída: 3

Entrada: [3, -1, -1, 4, 3, -1]


Saída: 8
função MaxSubarray(arr) {
usamos esse número algumas vezes
let count = Matemática.max(... ARR),
indexArray = [];

cuidar de casos sem números positivos


if (contagem <= 0) {
contagem de retornos;
}

obter uma lista (indexArray) dos índices de todas as entradas positivas


arr.forEach((val, ind) => {
if (val > 0) {
indexArray.push(ind)
}
});
Sabemos que um máximo deve ter um número positivo em cada extremidade da
submatriz (se houver vários
números positivos. Claro, o subArray pode ter comprimento de um. Então é só
comparar tudo o que for possível
subarrays.
let leng = indexArray.length;
para (deixe i = 0; i < leng; i++) {
for (deixe j = i + 1; j < leng; j++) {
deixe subArraySum = arr
.slice(indexArray[i], indexArray[j] + 1)
.reduce((val1, val2) => val1 + val2);
contagem de atualizações se o subArraySum for maior
count = Math.max(contagem, subArraySum);
}
}
contagem de retornos;
}

manter esta chamada de função aqui


MaxSubarray(linha de leitura());

Dígito ausente

Faça com que a função MissingDigit(str) pegue o parâmetro str, que será uma fórmula matemática simples com três números, um único operador (+, -, * ou /) e um sinal de
igual (=) e retorne o dígito que completa a equação. Em um dos números da equação, haverá um caractere x, e seu programa deve determinar qual dígito está faltando. Por exemplo,
se str é "3x + 12 = 46", então seu programa deve produzir 4. O caractere x pode aparecer em qualquer um dos três números e todos os três números serão maiores ou iguais a 0 e
menores ou iguais a 1000000.
Exemplos
Entrada: "4 - 2 = x"
Saída: 2

Entrada: "1x0 * 12 = 1200"


Saída: 0

função MissingDigit(str) {
para (deixe i = 0; i < 10; i++) {
const newString = str.replace(/x/, i.toString()).replace(/=/, '===');
if (eval(newString)) {
retorno i;
}
}
retorno 'falhou';
}

manter esta chamada de função aqui


MissingDigit(linha de leitura());

K Personagens Únicos

Faça com que a função KUniqueCharacters(str) pegue o parâmetro str que está sendo passado e localize a substring mais longa que contém k caracteres exclusivos, onde k
será o primeiro caractere da string. A substring começará a partir da segunda posição na string porque o primeiro caractere será o inteiro k. Por exemplo: se str é "2aabbacbaa"
existem várias substrings que contêm 2 caracteres exclusivos, a saber: ["aabba", "ac", "cb", "ba"], mas seu programa deve retornar "aabba" porque é a substring mais longa. Se houver
várias subcadeias de caracteres mais longas, retorne a primeira subcadeia de caracteres encontrada com o comprimento mais longo. k vai variar de 1 a 6.

Exemplos
Entrada: "3aabacbebebe"
Saída: cbebebe

Entrada: "2aabbcbbbadef"
Saída: bbcbbb
função KUniqueCharacters(str) {
contagem de const = parseInt(str.slice(0,1), 10);
const subjectString = str.slice(1);
const len = subjectString.length;
deixe maxCount = 0;

para (deixe i = 0; i < len; i++) {


contador = 0;
let holder = [];
deixe charArray = [];
para (deixe j = i; j < len; j++) {
deixe char = subjectString.charAt(j);
if (charArray.some(val => val === char)) {
holder.push(char);
contador++;
if (j === len - 1) {
if (contador > maxCount) {
resultado = Array.from (titular);
}
maxCount = Matemática.max(contador, maxCount);
}
continuar;
} else {
if (charArray.length < count) {
contador++;
charArray.push(char);
titular.empurrar (char)
continuar;
} else {
if (contador > maxCount) {
resultado = Array.from(titular);
}
maxCount = Matemática.max(contador, maxCount);
quebrar;
}
}
}
}
return result.join('');
}

manter esta chamada de função aqui


KUniqueCharacters(linha de leitura());

Buracos de bitmap

Faça com que a função BitmapHoles(strArr) pegue a matriz de strings armazenadas em strArr, que será uma matriz 2D de 0 e 1's, e determine quantos buracos, ou regiões
contíguas de 0's, existem na matriz. Uma região contígua é aquela em que há um grupo conectado de 0's indo em uma ou mais de quatro direções: para cima, para baixo, para a
esquerda ou para a direita. Por exemplo: se strArr for ["10111", "10101", "11101", "11111"], então isso se parece com a seguinte matriz:

1011111 0 111111 1

1 1 1 1 Para a entrada acima,


Seu programa deve retornar 2 porque há duas regiões contíguas separadas de 0's, que criam "buracos" na matriz. Você pode assumir que a entrada não estará vazia.

Exemplos
Entrada: ["01111", "01101", "00011", "11110"]
Saída: 3

Entrada: ["1011", "0010"]


Saída: 2
função BitmapHoles(strArr) {
const thisObj = {};

thisObj.fullArray = strArr.map(row => row.split(''));


thisObj.fullArray.forEach((row, rowNum, arr) => {
row.forEach((val, colNum) => {

pode se livrar de hotTest e apenas usar crawler aqui.


if (val === '1') {
} else {
arr[rowNum][colNum] = 'H';
rastreador([[rowNum,colNum]])
}
});
});
return thisObj.fullArray.reduce((row1, row2) => {
retornar linha1.concat(linha2);
}).filter(val => val === 'H').length;

rastreador de função(pointsArray) {
deixe newArray = [];
pointsArray.forEach(ponto => {

if(point[0] > 0 && thisObj.fullArray[point[0] - 1][point[1]] === '0') {


thisObj.fullArray[ponto[0] - 1][ponto[1]] = '1';
newArray.push([ponto[0] - 1, ponto[1]]);
}

if (ponto[0] < thisObj.fullArray.length - 1 && thisObj.fullArray[point[0]


+ 1][point[1]] === '0') {
thisObj.fullArray[ponto[0] + 1][ponto[1]] = '1';
newArray.push([ponto[0] + 1, ponto[1]]);
}

if (ponto[1] > 0 && thisObj.fullArray[ponto[0]][ponto[1] - 1] === '0') {


thisObj.fullArray[ponto[0]][ponto[1] - 1] = '1';
newArray.push([ponto[0], ponto[1] - 1]);
}

if (ponto[1] < thisObj.fullArray[0].length - 1 &&


thisObj.fullArray[point[0]][point[1] + 1] === '0') {
thisObj.fullArray[point[0]][ponto[1] + 1] = '1';
newArray.push([ponto[0], ponto[1] + 1]);
}
});

if (newArray.length === 0) {
retornar;
}
rastreador(newArray);
}
}

manter esta chamada de função aqui


BitmapHoles(linha de leitura());
Árvore simétrica

Faça com que a função SymmetricTree(strArr) pegue a matriz de strings armazenadas em strArr, que representará uma árvore binária, e determine se a árvore é simétrica (uma
imagem espelhada de si mesma). A matriz será implementada de forma semelhante a como um heap binário é implementado, exceto que a árvore pode não estar completa e nós NULL
em qualquer nível da árvore serão representados com um #. Por exemplo: se strArr for ["1", "2", "2", "3", "#", "#", "3"] então essa árvore se parece com o seguinte:

Para a entrada acima, seu programa deve retornar a cadeia de caracteres true porque a árvore binária é simétrica.

Exemplos
Entrada: ["4", "3", "4"]
Saída: false

Entrada: ["10", "2", "2", "#", "1", "1", "#"]


Saída: true
função SymmetricTree(strArr) {
Seja x = 1;
let count = 0;
enquanto (strArr.length) {
x++;
se (x > 10) quebrar;
deixe comprimento = Math.pow(2, contagem);
deixe newArray = strArr.splice(0, comprimento);
let revArray = Array.from(newArray).reverse();
if(!sameAs(newArray, revArray)) {
retornar false;
}
count = newArray.filter(val => val !== '#').length;
}
retorno verdadeiro;
}

função sameAs(arr1, arr2) {


return arr1.every((val, ind) => val === arr2[ind]);
}

manter esta chamada de função aqui


SymmetricTree(readline());

Árvore binária LCA

Já a função BinaryTreeLCA(strArr) pega a matriz de strings armazenadas em strArr, que conterá 3 elementos: o primeiro elemento será uma árvore binária com todos os
valores exclusivos em um formato semelhante a como um heap binário é implementado com nós NULL em qualquer nível representado com um #, O segundo e o terceiro elementos
serão dois valores diferentes, e seu objetivo é encontrar o ancestral comum mais baixo desses dois valores.

Por exemplo: se strArr for ["[12, 5, 9, 6, 2, 0, 8, #, #, 7, 4, #, #, #, #]", "6", "4"], então essa árvore se parece com o seguinte:
Para a entrada acima, seu programa deve retornar 5 porque esse é o valor do nó que é a LCA dos dois nós com valores 6 e 4. Você pode assumir que os dois nós que você está
procurando na árvore existirão em algum lugar na árvore.

Exemplos
Entrada: ["[5, 2, 6, 1, #, 8, #]", "2", "6"]
Saída: 5

Entrada: ["[5, 2, 6, 1, #, 8, 12, #, #, #, #, #, #, 3, #]", "3", "12"]


Saída: 12

função BinaryTreeLCA(strArr) {
Primeiro, converta a cadeia de caracteres que representa a árvore em uma matriz
de números
deixe arrList = strArr[0]
.replace(/[[]]/g, '')
.split(/,s*/)
.map(val => val !== '#' ? parseInt(val, 10) : "#");

converter os números fornecidos (strings) em números


deixe num1 = parseInt(strArr[1], 10);
deixe num2 = parseInt(strArr[2], 10);

obter os índices dos números fornecidos. É disso que realmente precisamos


let ind1 = Math.max(arrList.findIndex(val => val === num1) + 1,
arrList.findIndex(val => val === num2) + 1);
let ind2 = Math.min(arrList.findIndex(val => val === num1) + 1,
arrList.findIndex(val => val === num2) + 1);

colocar os dois números na mesma profundidade na árvore


enquanto (Math.trunc(Math.log2(ind1)) !== Math.trunc(Math.log2(ind2))) {
ind1 = Matemática.trunc(ind1/2);
}

Encontre o ancestral comum na árvore


enquanto (ind1 !== ind2) {
ind1 = Matemática.trunc(ind1/2);
ind2 = Matemática.trunc(ind2/2);
}

retornar o número correspondente ao índice determinado


retornar arrList[ind2 - 1].toString();
}

manter esta chamada de função aqui


BinaryTreeLCA(linha de leitura());

LRU Cache

Faça com que a função LRUCache(strArr) pegue a matriz de caracteres armazenados em strArr, que conterá caracteres que variam de A a Z em alguma ordem arbitrária, e
determine quais elementos ainda permanecem em um cache virtual que pode conter até 5 elementos com um algoritmo de cache LRU implementado. Por exemplo: se strArr é ["A",
"B", "C", "D", "A", "E", "D", "Z"], então as seguintes etapas são tomadas:

(1) A não existe no cache, então acesse-o e armazene-o no cache.


(2) B não existe no cache, então acesse-o e armazene-o no cache também. Até agora o cache contém: ["A", "B"].
(3) O mesmo vale para C, então o cache agora é: ["A", "B", "C"].
(4) O mesmo vale para D, então o cache agora é: ["A", "B", "C", "D"].
(5) Agora A é acessado novamente, mas já existe no cache para que seja trazido para a frente: ["B", "C", "D", "A"].
(6) E não existe no cache, então acesse-o e armazene-o no cache: ["B", "C", "D", "A", "E"].
(7) D é acessado novamente para que seja trazido para a frente: ["B", "C", "A", "E", "D"].
(8) Z não existe no cache, então adicione-o à frente e remova o elemento usado menos recentemente: ["C", "A", "E", "D", "Z"].

Agora as etapas de cache foram concluídas e seu programa deve retornar a ordem do cache com os elementos unidos em uma cadeia de caracteres, separados por um hífen. Portanto,
para o exemplo acima, seu programa deve retornar C-A-E-D-Z.

Exemplos
Entrada: ["A", "B", "A", "C", "A", "B"]Saída
: C-A-B

Entrada: ["A", "B", "C", "D", "E", "D", "Q", "Z", "C"]Saída
: E-D-Q-Z-C
função LRUCache(strArr) {
deixe cache = [];
muito simples, passe pelo array fornecido e opere no cache
strArr.forEach(val => {
if (!cache.includes(val)) {
divertimento! Uma das primeiras vezes que me aproveitei do fato
que push() retorna o comprimento da matriz após o push, não o
matriz em si
if (cache.push(val) > 5) {
cache.shift();
}
} else {
cache.splice(cache.findIndex(cacheVal => val === cacheVal), 1);
cache.push(val);
}
});

retornar cache.join('-');

manter esta chamada de função aqui


LRUCache(linha de leitura());
Média

Soluções para Discussão


Tree Construtor

Já a função TreeConstructor(strArr) pega a matriz de cadeias de caracteres armazenadas em strArr, que conterá pares de inteiros no seguinte formato: (i1,i2), onde i1
representa um nó filho em uma árvore e o segundo inteiro i2 significa que ele é o pai de i1. Por exemplo: se strArr é ["(1,2)", "(2,4)", "(7,2)"], então isso forma a seguinte árvore:

que você pode ver forma uma árvore binária adequada. Seu programa deve, nesse caso, retornar a cadeia de caracteres true porque uma árvore binária válida pode ser formada. Se uma
árvore binária adequada não puder ser formada com os pares inteiros, retorne a cadeia de caracteres false. Todos os inteiros dentro da árvore serão exclusivos, o que significa que só
pode haver um nó na árvore com o valor inteiro dado.

Exemplos
Entrada: ["(1,2)", "(2,4)", "(5,7)", "(7,2)", "(9,5)"]
Saída: verdadeiro

Entrada: ["(1,2)", "(3,2)", "(2,12)", "(5,2)"]


Saída: false

O método a seguir lança árvores que falham em qualquer um dos três testes: i) existe
apenas um nó superior, ii) qualquer nó tem mais
do que 2 filhos, ou iii) são quaisquer valores de nó repetidos. Se ele passar em
todos esses testes, então ele deve representar uma árvore binária.

função TreeConstructor(strArr) {
remover espaços de entrada (um dos testes tinha entrada incorreta)
strArr = strArr.map(val => val.replace(/s/g, ''));

deixe regExChildPattern = /((d+),d+)/


deixe regExParentPattern = /(d+,(d+))/

deixe filhos = strArr.map(val => regExChildPattern.exec(val)[1]);


deixar pais = strArr.map(val => regExParentPattern.exec(val)[1]);

Verifique se todas as crianças são únicas


let childSet = novo Set(filhos);
if (children.length !== childSet.size) {
retornar false;
}

Testar se algum nó pai tem mais de 2 filhos


deixe parentObj = {};
parents.forEach(val => {
if (!parentObj[val]) {
parentObj[val] = 1;
} else {
parentObj[val]++;
}
})
for (deixe myKey em parentObj) {
if (parentObj[myKey] > 2) retornar false;
}

certifique-se de que há um, e apenas um, cão de topo


deixe uniqParents = Array.from(new Set(pais))

let topDogs = uniqParents.filter(val => !children.includes(val));


if (topDogs.length !== 1) retornar false;

retorno verdadeiro;

manter esta chamada de função aqui


TreeConstructor(readline());

Array Min Jumps

Faça com que a função ArrayMinJumps(arr) pegue a matriz de inteiros armazenados em arr, onde cada inteiro representa o número máximo de etapas que podem ser feitas a
partir dessa posição, e determine a menor quantidade de saltos que podem ser feitos para chegar ao final da matriz. Por exemplo: se arr for [1, 5, 4, 6, 9, 3, 0, 0, 1, 3], então seu
programa deve gerar o número 3 porque você pode chegar ao final da matriz desde o início através das seguintes etapas: 1 -> 5 -> 9 -> END ou
1 -> 5 -> 6 -> END. Ambas as combinações produzem uma série de 3 passos. E como você pode ver, você nem sempre precisa dar o número máximo de saltos em uma posição
específica, você pode dar menos saltos mesmo que o número seja maior.

Se não for possível chegar ao final da matriz, retorne -1.

Exemplos
Entrada: [3, 4, 2, 1, 1, 100]
Saída: 2

Entrada: [1, 3, 6, 8, 2, 7, 1, 2, 1, 2, 6, 1, 2, 1, 2]
Saída: 4

função ArrayMinJumps(arr) {
const newArr = Array.from(arr);
const len = newArr.length;
para (deixe i = len - 1; i >= 0; i--) {
const toGo = len - (i + 1);
alcance constante = newArr[i];
if (toGo === 0) {
newArr[i] = {
ind: eu,
Jogadas: 0
};
} else if (reach >= toGo) {
newArr[i] = {
ind: eu,
Jogadas: 1
};
} else {
const subArr = newArr.slice(i + 1);
const subArrLen = subArr.length;
const countHolder = [];
for (deixe j = 0; j < subArrLen; j++) {
if (typeof subArr[j] === 'object' && newArr[i] > j) {
countHolder.push(subArr[j].moves);
}
}
if (countHolder.length) {
newArr[i] = {
ind: eu,
movimentos: Math.min(... countHolder) + 1
};
}
}
}
return typeof newArr[0].moves === 'undefined' ? -1 : newArr[0].moves;
}

manter esta chamada de função aqui


ArrayMinJumps(linha de leitura());

Valores menores mais próximos

Faça com que a função NearestSmallerValues(arr) pegue a matriz de inteiros armazenados em arr e, para cada elemento na lista, pesquise todos os valores anteriores para o
elemento mais próximo que é menor que o elemento atual e crie uma nova lista a partir desses números. Se não houver nenhum elemento antes de uma determinada posição que seja
menor, insira um -1. Por exemplo: se arr é [5, 2, 8, 3, 9, 12], então a lista de valores menores mais próxima é [-1, -1, 2, 2, 3, 9]. A lógica é a seguinte:

Para 5, não há nenhum valor anterior menor, então a lista até agora é [-1]. Para 2, também não há um valor anterior menor, então a lista agora é [-1, -1]. Para 8, o valor menor mais
próximo é 2, então a lista agora é [-1, -1, 2]. Para 3, o valor menor mais próximo também é 2, então a lista agora é [-1, -1, 2, 2]. Isso continua a produzir a resposta acima. Seu
programa deve pegar esta lista final e retornar os elementos como uma cadeia de caracteres separada por um espaço: -1 -1 2 2 3 9

Exemplos
Entrada: [5, 3, 1, 9, 7, 3, 4, 1]
Saída: -1 -1 -1 1 1 1 3 1

Entrada: [2, 4, 5, 1, 7]
Saída: -1 2 4 -1 1

função NearestSmallerValues(arr) {
const resultsArray = [];
arr.forEach((val, ind) => {
const preArray = arr.slice(0, ind).reverse();
resultsArray.push(preArray.find(item => item <= val) !== undefined ?
preArray.find(item => item <= val) : -1);
});
retornar resultsArray.join(' ');
}
NearestSmallerValues(readline());

Espiral Matricial

Faça com que a função MatrixSpiral(strArr) leia a matriz de strings armazenadas em strArr que representará uma matriz 2D N, e seu programa deve retornar os elementos
depois de imprimi-los em uma ordem espiral no sentido horário. Você deve retornar a lista recém-formada de elementos como uma cadeia de caracteres com os números separados por
vírgulas. Por exemplo: se strArr é "[1, 2, 3]", "[4, 5, 6]", "[7, 8, 9]", então isso se parece com a seguinte matriz 2D: 1 2 3
4 5 6 7
8 9 Então

seu programa deve retornar os elementos dessa matriz em uma ordem espiral no sentido horário, que é:

1,2,3,6,9,8,7,4,5

Exemplos
Entrada: ["[1, 2]", "[10, 14]"]
Saída: 1,2,14,10

Entrada: ["[4, 5, 6, 5]", "[1, 1, 2, 2]", "[5, 4, 2, 9]"]


Saída: 4,5,6,5,2,9,2,4,5,1,1,2
função MatrixSpiral(strArr) {
Primeiro, crie uma matriz de matrizes de nubers [ [ '1', '2', '3' ], [ '4',
'5', '6' ], [ '7', '8', '9' ] ]
strArr = strArr.map(val => {
retornar val.replace(/[\[\]\s]/g, '').split(',');
})

Em seguida, crie uma cadeia de caracteres para manter os valores


deixe res = [];
let holder = [];
fazer uma cópia do array, por precaução;
let arr = Array.from(strArr);

deixe direitaParede = (val) => {


res.push(val.pop());
};

deixe leftWall = (val) => {


Holder.Push(Val.Shift());

};

while(arr.length) {
res.push(... arr.shift());
se (!arr.length) {
quebrar;
}
arr.forEach(direita);
se (!arr.length) {
quebrar;
}
res.push(... arr.pop().reverse());
se (!arr.length) {
quebrar;
}
arr.forEach(esquerda);
res.push(titular.reverso());
titular = [];
}

retornar res.join(',');
}

manter esta chamada de função aqui


MatrixSpiral(linha de leitura());

Divisão de palavras

Faça com que a função WordSplit(strArr) leia a matriz de cadeias de caracteres armazenadas em strArr, que conterá 2 elementos: o primeiro elemento será uma sequência de
caracteres, e o segundo elemento será uma longa cadeia de palavras separadas por vírgula, em ordem alfabética, que representa um dicionário de algum comprimento arbitrário. Por
exemplo: strArr pode ser: ["hellocat", "maçã,morcego,gato,adeus,olá,amarelo,por quê"]. Seu objetivo é determinar se o primeiro elemento na entrada pode ser dividido em duas
palavras, onde ambas as palavras existem no dicionário que é fornecido na segunda entrada. Neste exemplo, o primeiro elemento pode ser dividido em duas palavras: hello e cat
porque ambas as palavras estão no dicionário.

Seu programa deve retornar as duas palavras que existem no dicionário separadas por uma vírgula. Então, para o exemplo acima, seu programa deve retornar hello,cat. Haverá apenas
uma maneira correta de dividir o primeiro elemento de caracteres em duas palavras. Se não houver nenhuma maneira de dividir a cadeia de caracteres em duas palavras que existem no
dicionário, retornar a cadeia de caracteres não possível. O primeiro elemento em si nunca existirá no dicionário como uma palavra real.

Exemplos
Entrada: ["beisebol", "a,all,b,ball,bas,base,cat,code,d,e,quit,z"]
Saída: base, bola

Entrada: ["abcgefd", "a,ab,abc,abcg,b,c,cão,e,efd,zzzz"]


Saída: abcg,efd

função WordSplit(strArr) {
deixe o alvo = strArr[0];
deixe partes = strArr[1].split(/,/);
deixe as entradas = [];
deixar enders = [];
deixe res = '';
parts.forEach(val => {
regEx1 = novo RegExp('\^${val}');
regEx2 = novo RegExp('${val}\$');
if (regEx1.test(target)) {
starters.push(val);
}
if (regEx2.test(target)) {
Enders.Push(VAL);
}
});
starters.forEach(iniciar => {
enders.forEach(end => {
if (início + fim === destino) {
res = '${start},${end}';
}
})
})
retornar res || 'não é possível';
}

manter esta chamada de função aqui


WordSplit(linha de leitura());

Pesquisa de pares

Faça com que a função PairSearching(num) pegue o parâmetro num que está sendo passado e execute as etapas a seguir. Primeiro, pegue todos os dígitos únicos do número de
entrada (que sempre será um inteiro positivo maior que 1) e adicione cada um deles em uma lista. Em seguida, pegue o número de entrada e multiplique-o por qualquer um de seus
próprios inteiros, em seguida, pegue esse novo número e anexe cada um dos dígitos à lista original. Continue esse processo até que um par adjacente do mesmo número apareça na
lista. Seu programa deve retornar o menor número de multiplicações necessárias para encontrar um par adjacente de números duplicados.

Por exemplo: se num é 134, primeiro anexe cada um dos inteiros em uma lista: [1, 3, 4]. Agora, se pegarmos 134 e multiplicarmos por 3 (que é um de seus próprios inteiros),
obteremos 402. Agora, se acrescentarmos cada um desses novos inteiros à lista, obtemos: [1, 3, 4, 4, 0, 2]. Encontramos um par adjacente de números duplicados, ou seja, 4 e 4. Então,
para esta entrada seu programa deve retornar 1 porque só levou 1 multiplicação para encontrar este par.

Outro exemplo: se num é 46, então acrescentamos esses inteiros a uma lista: [4, 6]. Se multiplicarmos 46 por 6, obteremos 276, e anexando esses inteiros à lista temos agora: [4, 6, 2,
7, 6]. Então, se pegarmos esse novo número, 276, e multiplicarmos por 2, obteremos 552. Adicionando esses inteiros à lista obtemos: [4, 6, 2, 7, 6, 5, 5, 2]. Seu programa deve,
portanto, retornar 2 porque foram necessárias 2 multiplicações para encontrar um par de números duplicados adjacentes (5 e 5 neste caso).

Exemplos
Entrada: 8
Saída: 3

Entrada: 198
Saída: 2
função PairSearching(num) {
deixe numArray = [num];
let count = 0;
let flag = falso;

deixe pesquisar = (arr) => {


let res = falso;
deixe numsArr = [];
arr.forEach(val1 => {
let numList = String(val1).split('');
numList.forEach(val2 => {
let product = val1 * Número(val2);
deixe bigNumList =
numList.concat(String(product).split(''));
if (repeatNum(bigNumList)) {
res = verdadeiro;
} else {
numsArr.push(produto);
}
});
});
retornar res || numsArr;
}
deixe repeatNum = (numArr) => {
for (let i = 0, len = numArr.length; i < len - 1; i++) {
if (numArr[i] === numArr[i + 1]){
retorno verdadeiro;
}
}
retornar false;
}

enquanto (!flag) {
contagem++;
if (searching(numArray) === true) {
contagem de retornos;
} else {
numArray = pesquisa(numArray);
}
}
}

manter esta chamada de função aqui


PairSearching(linha de leitura());

Solucionador de Boggle

Faça com que a função BoggleSolver(strArr) leia a matriz de cadeias de caracteres armazenadas em strArr, que conterá 2 elementos: o primeiro elemento representará uma
matriz 4x4 de letras, e o segundo elemento será uma longa cadeia de palavras separadas por vírgulas cada uma com pelo menos 3 letras de comprimento, em ordem alfabética, que
representa um dicionário de algum comprimento arbitrário. Por exemplo: strArr pode ser: ["rbfg, ukop, fgub, mnry", "bog,bop,gup,fur,ruk"]. Seu objetivo é determinar se todas as
palavras separadas por vírgula como segundo parâmetro existem na matriz 4x4 de letras. Para este exemplo, a matriz tem a seguinte aparência:r b f g u k o p
f g
u b
m n r y

As regras para fazer uma palavra são as seguintes:

1. Uma palavra pode ser construída a partir de pontos sequencialmente adjacentes na matriz, onde adjacente significa mover-se horizontalmente, verticalmente ou diagonalmente em
qualquer direção.
2. Uma palavra não pode usar o mesmo local duas vezes para se construir.

As regras são semelhantes ao jogo de Boggle . Então, para o exemplo acima, todas as palavras existem nessa matriz, então seu programa deve retornar a cadeia de caracteres true. Se
todas as palavras não puderem ser encontradas, retorne uma cadeia de caracteres separada por vírgulas das palavras que não podem ser encontradas, na ordem em que aparecem no
dicionário.

Exemplos
Entrada: ["aaey, rrum, tgmn, bola", "all,ball,mur,raeymnl,high,true,trum"]
Saída: true

Entrada: ["aaey, rrum, tgmn, bola", "all, ball, mur, raeymnl, rumk, alto, true, trum,
yes"]
Saída: rumk, sim
função BoggleSolver(strArr) {
formatar a grade em uma matriz de matrizes
gridArr = strArr[0].split(',').map(val => {
retornar val.trim().split('');
});
coloque localArr aqui para dar escopo em toda a função BoggleSolver
deixe localArr = [];

Criar uma matriz de termos de pesquisa


deixe agulhaArr = strArr[1].split(',').map(val => {
retornar val.trim();
});

Criar uma matriz de cadeias de caracteres com falha


deixe res = agulhaArr.filter(val => {
retornar !findWord(val);
});

retornar res.length ? res.join(',') : 'verdadeiro';

-----------------Ajudantes-------------------
findWord verifica se a palavra fornecida (str) está na grade
função findWord (str) {
obter uma cópia nova e independente do array
localArr = makeArray(gridArr);

encontrar os locais da primeira letra, retornar false se nenhum


deixe hotSpots = findLetters(str[0]);
if (!hotSpots) {
retornar false;
}

para (deixe i = 1, len = str.length; i < len; i++) {


deixe newSpots = [];
hotSpots.forEach(val => {
localArr[val[0]][val[1]] = '*';
newSpots.push(... adjacentes([val[0], val[1]], str[i]));
});
hotSpots = novosSpots;

if (!hotSpots.length) {
retornar false;
}
}
retorno verdadeiro;
}

adjacnts retorna uma matriz de todos os pontos contíguos a um determinado


ponto
função adjacentes (arr, char) {
deixe res = [];
res.push(
[arr[0] - 1, arr[1]],
[arr[0] - 1, arr[1] + 1],
[arr[0], arr[1] + 1],
[arr[0] + 1, arr[1] + 1],
[arr[0] + 1, arr[1]],
[arr[0] + 1, arr[1] - 1],
[arr[0], arr[1] - 1],
[arr[0] - 1, arr[1] - 1]
);

res = res.filter(val => {


return val[0] >= 0 && val[1] >= 0 && val[0] <= 3 && val[1] <= 3;
}).filter(val => {
return localArr[val[0]][val[1]] === char;
});

retorno res;
}

função findLetters(char) {
deixe res = [];
para (deixar linha = 0; linha < 4; linha++) {
para (deixe col = 0; col < 4; col++) {
if (gridArr[row][col] === char) {
res.push([linha, col]);
}
}
}
retornar res.length ? res : nula;
}

função makeArray(arr) {
deixe newArr = [];
arr.forEach(val => {
newArr.push(val.slice(0));
});
retornar novoArr;
}
}
manter esta chamada de função aqui
BoggleSolver(linha de leitura());

Elementos HTML

Faça com que a função HTMLElements(str) leia o parâmetro str que está sendo passado, que será uma cadeia de caracteres de elementos HTML DOM e texto sem formatação. Os
elementos que serão utilizados são: b, i, em, div, p. Por exemplo: se str for "<div><b><p>hello world</p></b></div>", então essa cadeia de elementos DOM está aninhada
corretamente para que seu programa retorne a string true.

Se uma cadeia de caracteres não estiver aninhada corretamente, retorne o primeiro elemento encontrado onde, se alterado em um elemento diferente, resultaria em uma cadeia de
caracteres formatada corretamente. Se a cadeia de caracteres não estiver formatada corretamente, será apenas um elemento que precisará ser alterado. Por exemplo: se str é
"<div><i>hello</i>world</b>", então seu programa deve retornar a string div porque se o primeiro elemento < div> fosse alterado para um <b>, a string seria formatada
corretamente.

Exemplos
Entrada: "<div><div><b></b></div></p>"
Saída: div
Entrada: "<div>abc</div><p><em><i>test test test</b></em></p>"
Saída: i
função HTMLElements(str) {
const inputArray = str.match(/(<\/?\w+>)/g);
const len = inputArray.length;
const HTMLStack = [];
percorra a lista de elementos e empurre-os para a pilha, ou retire-os
se fechando tags.
para (deixe i = 0; i < len; i++) {
const isOpenTag = ! (/\//.test(inputArray[i]));
tag const = inputArray[i].replace(/[<>/]/g, '');
if (isOpenTag) {
HTMLStack.push(tag);
} else {
const popped = HTMLStack.pop();
if (tag !== estourou) {
retorno estourado;
}
}
}
retornar HTMLStack.length ? HTMLStack.pop() : verdadeiro;
}

manter esta chamada de função aqui


HTMLElements(readline());

Dígito II ausente

Faça com que a função MissingDigitII(str) pegue o parâmetro str, que será uma fórmula matemática simples com três números, um único operador (+, -, * ou /) e um sinal de
igual (=) e retorne os dois dígitos que completam a equação. Em dois dos números da equação, haverá um único ?e seu programa deve determinar quais dígitos estão faltando e
retorná-los separados por um espaço. Por exemplo, se str é "38?5 * 3 = 1?595", então seu programa deve produzir 6 1.

O ?O caractere sempre aparecerá no primeiro número e no último número na expressão matemática. Sempre haverá uma solução única.

Exemplos
Entrada: "56? * 106 = 5?678"
Saída: 3 9

Entrada: "18?1 + 9 = 189?"


Saída: 8 0

função MissingDigitII(str) {
para (deixe i = 0; i <= 9; i++) {
para (seja j = 0; j <= 9; j++) {
let newStr = str.replace(/\?/, String(i)).replace(/\?/,
String(j)).replace(/=/, '===');
if (eval(newStr)) {
retornar '${i} ${j}';
}
}
}
}

manter esta chamada de função aqui


MissingDigitII(linha de leitura());

Substring palindrômica

Faça com que a função PalindromicSubstring(str) pegue o parâmetro str que está sendo passado e encontre a substring palindrômica mais longa, o que significa a substring
mais longa que é lida para frente como para trás. Por exemplo: se str é "abracecars", então seu programa deve retornar a string racecar porque é o palíndromo mais longo dentro da
string de entrada.

A entrada conterá apenas caracteres alfabéticos minúsculos. A subcadeia palindrômica mais longa sempre será exclusiva, mas se não houver nenhuma com mais de 2 caracteres,
retorne a cadeia de caracteres nenhuma.

Exemplos
Entrada: "hellosannasmith"
Saída: sannas

Entrada: "abcdefgg"
Saída: nenhuma
função PalindromicSubstring(str) {
para (deixe i = str.length; i > 2; i--) {
para (deixe j = 0, len = str.length; j <= len - i; j++) {
deixe newSlice = str.substr(j, i);
if (isPalindrome(newSlice)) {
retornar newSlice;
}
}
}
devolver 'nenhum';
}

função isPalindrome(str) {
return str === str.split('').reverse().join('');
}

manter esta chamada de função aqui


PalindromicSubstring(readline());

Aprisionamento de Água

Faça com que a função TrappingWater(arr) pegue a matriz de inteiros não negativos armazenados em arr e determine a maior quantidade de água que pode ser aprisionada. Os
números na matriz representam a altura de um edifício (onde a largura de cada edifício é 1) e se você imaginar que chove, a água ficará presa entre os dois edifícios mais altos. Por
exemplo: se arr é [3, 0, 0, 2, 0, 4], então essa matriz de alturas de construção se parece com a seguinte imagem se a desenharmos:
Agora, se você imaginar que chove e a água fica presa nesta imagem, então ela será parecida com a seguinte (os x representam a água):

Esta é a maior quantidade de água que pode ficar presa nesta imagem, e se você calcular a área que você obtém 10, então seu programa deve retornar 10.

Exemplos
Entrada: [1, 2, 1, 2]
Saída: 1

Entrada: [0, 2, 4, 0, 2, 1, 2, 6]
Saída: 11
função TrappingWater(arr) {
deixe o contador = 0;
para (deixe i = 1, len = arr.length; i < len - 1; i++) {
deixe hotSpot = arr[i];
deixe preWall = Matemática.max(... arr.fatia(0, i));
deixe postWall = Matemática.max(... arr.fatia(i + 1));
deixe altura = Math.min(preWall, postWall);
if (hotSpot < altura) {
contador += (altura - hotSpot);
}
}
contador de devolução;
}
manter esta chamada de função aqui
TrappingWater(readline());

Caminho da matriz

Faça com que a função MatrixPath(strArr) pegue o parâmetro strArr que está sendo passado, que será uma matriz 2D de 0 e 1 de algum tamanho arbitrário, e determine se
existe um caminho de 1 da parte superior esquerda da matriz para a parte inferior direita da matriz enquanto se move apenas nas direções: para cima, para baixo, para a esquerda e
para a direita. Se existir um caminho, seu programa deve retornar a cadeia de caracteres true, caso contrário, seu programa deve retornar o número de locais na matriz, onde se um
único 0 for substituído por um 1, um caminho de 1 será criado com êxito. Se um caminho não existir e você não puder criar um caminho alterando um único local na matriz de 0 para
1, o programa deverá retornar a cadeia de caracteres não possível. Por exemplo: se strArr for ["11100", "10011", "10101", "10011"] então isso se parece com a seguinte matriz:

1110010011101011
0
1 Para a entrada acima, um caminho de 1
da parte superior esquerda para a parte inferior direita não existe.

Mas, podemos mudar um 0 para um 1 em 2 lugares na matriz, ou seja, em locais: [0,3] ou [1,2]. Então, para esta entrada seu programa deve retornar 2. O canto superior esquerdo e
inferior direito da matriz de entrada será sempre 1's.
Exemplos
Entrada: ["10000", "11011", "10101", "11001"]
Saída: 1

Entrada: ["1000001", "1001111", "1010101"]


Saída: não possível

função MatrixPath(strArr) {
deixe largura = strArr[0].length;
deixe altura = strArr.length;
Crie uma cópia do nosso array, por precaução.
let newArr = copyArray(strArr);
Criar ponto de partida
newArr[altura - 1][largura - 1] = 'T'
let stop = falso;

enquanto(verdadeiro) {
let testArr = copyArray(newArr);
para (deixe i = 0; i < altura; i++) {
para (deixe j = 0; j < largura; j++) {
if (testArr[i][j] === '1' && isAdjacent('T', testArr, [i,
j])) {
testArr[i][j] = 'T';
} else if (testArr[i][j] === '0' && isAdjacent('T',
testArr, [i, j])) {
testArr[i][j] = 'F';
}
}
}
if (isEqualArray(testArr, newArr)) {
newArr = testeArr;
quebrar;
}
newArr = testeArr;
}

if (newArr[0][0] === 'T') {


retorno 'verdadeiro';
}

newArr[0][0] = 'G'

enquanto(verdadeiro) {
let testArr = copyArray(newArr);
para (deixe i = 0; i < altura; i++) {
para (deixe j = 0; j < largura; j++) {
if (testArr[i][j] === '1' && isAdjacent('G', testArr, [i,
j])) {
testArr[i][j] = 'G';
} else if (testArr[i][j] === '0' && isAdjacent('G',
testArr, [i, j])) {
testArr[i][j] = 'F';
}
}
}
if (isEqualArray(testArr, newArr)) {
newArr = testeArr;
quebrar;
}
newArr = testeArr;
}
deixe o contador = 0;

para (deixe i = 0; i < altura; i++) {


para (deixe j = 0; j < largura; j++) {
if (newArr[i][j] === 'F' && isAdjacent('G', newArr, [i, j]) &&
isAdjacent('T', newArr, [i, j])) {
contador ++;
}
}
}
contador de retorno? contador: 'não é possível';

-------------Ajudantes------------------------------

// isAdjacent retornará true se a matriz contiver o caractere designado em


uma posição
// adjacente à posição designada
função isAdjacent (char, arr, position) {
retornar [
[posição[0] - 1, posição[1]],
[posição[0], posição[1] + 1],
[posição[0] + 1, posição[1]],
[posição[0], posição[1] - 1]
].filter(val => {
return (val[0] >= 0 && val[0] < altura && val[1] >= 0 && val[1] <
largura);
}).some(val => {
return arr[val[0]][val[1]] === char;
});
}

copyArray faz uma nova cópia de um array de 2 profundidades


função copyArray (arr) {
return Array.from(arr).map((val, ind) => {
retornar Array.from(arr[ind]);
});
}

isEqualArray verifica se duas matrizes de 2 profundidades têm itens idênticos


função isEqualArray (arr1, arr2) {
deixe altura = arr1.comprimento;
deixe largura = arr1[0].length;
para (deixe i = 0; i < altura; i++) {
para (deixe j = 0; j < largura; j++) {
if (arr1[i][j] !== arr2[i][j]) {
retornar false;
}
}
}
retorno verdadeiro;
}

retorno strArr;
}

manter esta chamada de função aqui


MatrixPath(linha de leitura());

Assentos para estudantes

Faça com que a função SeatingStudents(arr) leia a matriz de inteiros armazenados em arr que estará no seguinte formato: [K, r1, r2, r3, ...] onde K representa o número de
carteiras em uma sala de aula, e o restante dos inteiros na matriz estará em ordem ordenada e representará as carteiras que já estão ocupadas. Todas as mesas serão organizadas em 2
colunas, onde a mesa #1 está no canto superior esquerdo, a mesa #2 está no canto superior direito, a mesa #3 está abaixo da #1, a mesa #4 está abaixo da #2, etc. Seu programa deve
retornar o número de maneiras pelas quais 2 alunos podem ficar sentados um ao lado do outro. Isso significa que 1 aluno está à esquerda e 1 aluno à direita, ou 1 aluno está
diretamente acima ou abaixo do outro aluno.

Por exemplo: se arr é [12, 2, 6, 7, 11], então esta sala de aula se parece com a seguinte imagem:

Com base na disposição acima das carteiras ocupadas, há um total de 6 maneiras de acomodar 2 novos alunos um ao lado do outro. As combinações são: [1, 3], [3, 4], [3, 5], [8, 10],
[9, 10], [10, 12]. Então, para esta entrada seu programa deve retornar 6. K vai variar de 2 a 24 e será sempre um número par. Depois de K, o número de mesas ocupadas na matriz pode
variar de 0 a K.

Exemplos
Entrada: [6, 4]
Saída: 4

Entrada: [8, 1, 8]
Saída: 6
função SeatingStudents(arr) {
const numSeats = arr[0];
const ocupado = arr.fatia(1);
deixe o contador = 0;
for (let i = 1; i <= numSeats; i++) {
se (!occupied.includes(i)) {
if (!occupied.includes(i - 2) && i > 2) {
contador++;
}
if (!occupied.includes(i + 2) && i < (numSeats - 1)) {
contador++;
}
if (((i % 2 === 1) && !occupied.includes(i + 1)) || ((i % 2 ===
0) && !ocupado.inclui(i - 1))) {
contador++;
}
}
}
contador de retorno / 2;
}
SeatingStudents(readline());

Caminho matricial mais longo

Faça com que a função LongestMatrixPath(strArr) pegue a matriz de cadeias de caracteres armazenadas em strArr, que será uma matriz NxM de inteiros positivos de um
dígito, e encontre o caminho crescente mais longo composto por inteiros distintos. Ao se mover pela matriz, você só pode subir, descer, esquerda e direita. Por exemplo: se strArr é
["345", "326", "221"], então isso se parece com a seguinte matriz:3 4 5 3 2 6
2 2 1 Para a entrada acima, o caminho crescente mais longo vai de: 3 -> 4 -> 5
-> 6.

Seu programa deve retornar o número de conexões no caminho mais longo, portanto, para essa entrada, seu programa deve retornar 3. Nem sempre pode haver necessariamente um
caminho mais longo dentro da matriz.

Exemplos
Entrada: ["12256", "56219", "43215"]
Saída: 5

Entrada: ["67", "21", "45"]


Saída: 3
função LongestMatrixPath(strArr) {
deixe altura = strArr.length;
deixe largura = strArr[0].length;
Vamos fazer um loop através de cada número, e retornar o maior resultado
resultado manterá esse número e será o valor de retorno.
deixe voltarVal = 0;
strArr = strArr.map(val => {
retorno val.split('');
})

Percorra toda a grade e encontre o comprimento de cada lugar, por


Rastreador de chamadas
para (deixe i = 0; i < altura; i++) {
para (deixe j = 0; j < largura; j++) {
let val = crawler([[strArr[i][j], [i, j]]]);
returnVal = Matemática.max(returnVal, val);
}
}
retorno Val;

------------------------Ajudantes----------------------------------
adjacentes assume uma posição no grid e retorna posições adjacentes
função adjacentes(pos) {
deixe newPositions = [
[pos[0], pos[1] + 1],
[pos[0], pos[1] - 1],
[pos[0] + 1, pos[1]],
[pos[0] - 1, pos[1]]
].filter (val => {
return val[0] >= 0 && val[1] >= 0 && val[0] < altura && val[1]
largura <;
})
retornar novasPosições;
}
Esta é a principal função onde as coisas são feitas. Não precisamos nos
preocupar com
Retroceder, pois devemos sempre aumentar. Então, a gente só vê qual é o
possível
os próximos passos são e desistir quando não houver mais.
função crawler(arr) {
deixe o contador = 0;
while(arr.length) {
deixe newArr = [];
arr.forEach(val => {
deixe pos = val[1];
deixe newPos = adjacentes(pos).filter(val => {
return strArr[pos[0]][pos[1]] < strArr[val[0]]
[val[1]];
}).map(val => {
retorno [strArr[val[0]][val[1]], val];
});
newArr.push(... newPos);
});
if (newArr.length) {
contador++;
}
arr = novoArr;
}
contador de devolução;
}
}

manter esta chamada de função aqui


LongestMatrixPath(linha de leitura());

Substring de janela mínima

Já a função MinWindowSubstring(strArr) pega a matriz de strings armazenadas em strArr, que conterá apenas duas strings, sendo o primeiro parâmetro a string N e o segundo
parâmetro uma string K de alguns caracteres, e seu objetivo é determinar a menor substring de N que contém todos os caracteres em K. Por exemplo: se strArr é ["aaabaaddae",
"aed"], então a menor substring de N que contém os caracteres a, e e d é "dae" localizada no final da string. Então, para este exemplo, seu programa deve retornar o dae de cadeia de
caracteres.
Outro exemplo: se strArr é ["aabdccdbcacd", "aad"] então a menor substring de N que contém todos os caracteres em K é "aabd" que está localizada no início da string. Ambos os
parâmetros serão cadeias de caracteres que variam em comprimento de 1 a 50 caracteres e todos os caracteres de K existirão em algum lugar na cadeia N. Ambas as cadeias de
caracteres conterão apenas caracteres alfabéticos minúsculos.

Exemplos
Entrada: ["ahffaksfajeeubsne", "jefaa"]
Saída: aksfaje

Entrada: ["aaffhkksemckelloe", "fhea"]


Saída: affhkkse

função MinWindowSubstring(strArr) {
let str = strArr[0];
deixe agulha = strArr[1].split('');

Comece com as menores substrings possíveis e, em seguida, suba


para (deixe i = needle.length, len = str.length; i <= len; i++ ) {
para (j = 0; j <= len - i; j++) {
deixe mySlice = str.substr(j, i);
if (isContained(mySlice)) {
retornar mySlice;
}
}
}
retornar 'Não em string';

----------------------Ajudantes-----------------------------
isContained verifica se todos os caracteres na agulha estão na cadeia de
caracteres fornecida
função éContained(str) {
deixe arr = str.split('');
para (let i = 0, len = needle.length; i < len; i++) {
deixe lugar = arr.findIndex(val => {
Return Val === Agulha[i]
});
if (lugar === -1) {
retornar false;
} else {
arr.splice(lugar, 1);
}
}
retorno verdadeiro;
}
}

manter esta chamada de função aqui


MinWindowSubstring(readline());

Cadeias Matricis

Faça com que a função MatrixChains(arr) leia a matriz de inteiros positivos armazenados em arr onde cada par representará uma matriz NxM. Por exemplo: se arr for [1, 2, 3,
4], isso significa que você tem uma matriz 1x2, 2x3 e 3x4. Portanto, existem matrizes totais N-1 onde N é o comprimento da matriz. Seu objetivo é determinar o menor número
possível de multiplicações depois de multiplicar todas as matrizes. A multiplicação matricial é associativa, então (A*B)*C é igual a A*(B*C).

Para o exemplo acima, vamos supor que as seguintes letras representam as diferentes matrizes: A = 1x2, B = 2x3 e C = 3x4. Então podemos multiplicar as matrizes nas seguintes
ordens: (AB)C ou A(BC). A primeira ordenação requer (1*2*3) = 6, então multiplicamos essa nova matriz 1x3 pela matriz 3x4 e obtemos (1*3*4) = 12. Assim, no total, essa
ordenação exigiu 6 + 12 = 18 multiplicações. Seu programa deve, portanto, retornar 18 porque a segunda ordem produz mais multiplicações. A matriz de entrada conterá entre 3 e 30
elementos.

Exemplos
Entrada: [2, 3, 4]
Saída: 24

Entrada: [1, 4, 5, 6, 8]
Saída: 98
função MatrixChains(arr) {
deixe newArr = Array.from(arr);
deixe o contador = 0;
índice de let = 0;
for (let i = 0, len = newArr.length; i < len; i++) {
if (arr[i] < newArr[index]) {
índice = i;
}
}
console.log('índice', índice);
multiplicar para a direita a partir do índice, na medida do possível
moveRight(índice);
multiplicar para a esquerda a partir do índice, na medida do possível
moveLeft(índice);

if (newArr.length === 3) {
contador += newArr[0] * newArr[1] * newArr[2];
}

contador de devolução;

-------------------Ajudantes-----------------------------------
pega o menor valor e multiplica matrizes indo para a direita
função moveRight(index) {
console.log('direita');
let move = newArr.length - índice > 2;
enquanto(mover) {
contador += newArr[index] * newArr[index + 1] * newArr[index +
2];
newArr.splice(índice + 1, 1);
if (newArr.length - índice === 2) {
mover = falso;
}
}
}
pega o menor valor e multiplica indo para a esquerda
função moveLeft(index) {
console.log('esquerda', índice);
let move = índice > 1;
enquanto(mover) {
contador += newArr[index] * newArr[index - 1] * newArr[index -
2];
newArr.splice(índice - 1, 1);
índice--;
if (newArr.length === 3) {
mover = falso;
}
}
}
}

manter esta chamada de função aqui


MatrixChains(readline());

Área do Histograma

Faça com que a função HistogramArea(arr) leia a matriz de inteiros não negativos armazenados em arr que representará as alturas das barras em um gráfico (onde cada largura
de barra é 1) e determine a maior área abaixo de todo o gráfico de barras. Por exemplo: se arr é [2, 1, 3, 4, 1], então isso se parece com o seguinte gráfico de barras:

Você pode ver no gráfico de barras acima que a maior área abaixo do gráfico é coberta pelos x's. A área desse espaço é igual a 6 porque toda a largura é 2 e a altura máxima é 3,
portanto, 2 * 3 = 6. Seu programa deve retornar 6. A matriz sempre conterá pelo menos 1 elemento.

Exemplos
Entrada: [6, 3, 1, 4, 12, 4]
Saída: 12

Entrada: [5, 6, 7, 4, 1]
Saída: 16
função HistogramArea(arr) {
deixe maxRes = 0, len = arr.length;
para (deixe i = 1; i <= len; i++) {
para (deixe j = 0; j <= len - i; j++) {
deixe arrSlice = arr.slice(j, j + i);
deixe área = i * Math.min(... arrSlice);
maxRes = Matemática.max(área, maxRes);
}
}
retorno maxRes;
}

manter esta chamada de função aqui


HistogramArea(readline());
Caracteres correspondentes

Faça com que a função MatchingCharacters(str) pegue o parâmetro str que está sendo passado e determine o maior número de caracteres exclusivos que existe entre um par
de letras correspondentes em qualquer lugar da cadeia de caracteres. Por exemplo: se str é "ahyjakh", então há apenas dois pares de letras correspondentes, os dois a's e os dois h's.
Entre o par de a's existem 3 caracteres únicos: h, y e j. Entre os h's existem 4 caracteres únicos: y, j, a e k. Então, para este exemplo, seu programa deve retornar 4.

Outro exemplo: se str é "ghececgkaem", então seu programa deve retornar 5 porque os caracteres mais exclusivos existem dentro do par mais distante de caracteres e. A sequência de
entrada pode não conter nenhum par de caracteres e, nesse caso, seu programa deve retornar apenas 0. A entrada consistirá apenas em caracteres alfabéticos minúsculos.

Exemplos
Entrada: "mmmerme"
Saída: 3

Entrada: "abccdefghi"
Saída: 0

função MatchingCharacters(str) {
máxRes = 0;
let len = str.length;
para (deixe i = 0; i < len - 1; i++) {
let end = str.lastIndexOf(str[i]);
deixe mySlice = str.slice(i + 1, fim);
maxRes = Matemática.max(maxRes, countUniq(mySlice));
}
retorno maxRes;

contagem de funçõesUniq(str) {
deixe arr = str.split('');
deixe mySet = novo Set(arr);
retornar mySet.size;
}
}

manter esta chamada de função aqui


MatchingCharacters(linha de leitura());

Conversor Ternário

Faça com que a função TernaryConverter(num) pegue o parâmetro num que está sendo passado, que sempre será um inteiro positivo, e o converta em uma representação
ternária . Por exemplo: se num é 12, então seu programa deve retornar 110.

Exemplos
Entrada: 21
Saída: 210

Entrada: 67
Saída: 2111
O seguinte aproveita o método javascript interno
mas é meio que trapaça
função TernaryConverter(num) {
simplesmente tirar proveito de um recurso integrado de JavaScript;
// retornar num.toString(3);
//}

Alternar, realmente fazer algum trabalho


função TernaryConverter(num) {
Encontre qual potência máxima de três cabe em Num
deixe powNum = Math.floor(Math.log(num) / Math.log(3));
deixe res = '';

para (deixe i = powNum; i >= 0; i--) {


deixe nextDigit = Math.trunc(num / 3 ** i);
num = num % (3 ** i);
res += próximoDígito;
}

retorno res;
}

manter esta chamada de função aqui


TernaryConverter(readline());

Congruência Linear

Faça com que a função LinearCongruence(str) leia o parâmetro str que está sendo passado que será uma equação de congruência linear na forma: "ax = b (mod m)" Seu
objetivo é resolver para x e retornar o número de soluções para x. Por exemplo: se str é "32x = 8 (mod 4)", então seu programa deve retornar 4 porque as respostas para essa equação
podem ser 0, 1, 2 ou 3.

Exemplos
Entrada: "12x = 5 (mod 2)"
Saída: 0

Entrada: "12x = 4 (mod 2)"


Saída: 2
função LinearCongruence(str) {
deixar componentes = str.match(/^(\d+)x\D+(\d+)\D+(\d+)\)$/);
deixar multiplicador = componentes[1];
fator let = componentes[2];
let mod = componentes[3];
deixe o contador = 0;

para (deixe i = 0; i < mod; i++) {


if (((multiplicador * i - fator) % mod) === 0) {
contador++;
}
}
contador de devolução;
}

manter esta chamada de função aqui


Congruência Linear(linha de leitura());
Número formatado

Faça com que a função FormattedNumber(strArr) pegue o parâmetro strArr que está sendo passado, que conterá apenas um único elemento, e retorne a string true se for um
número válido que contenha apenas dígitos com decimais e vírgulas corretamente colocados, caso contrário, retorne a string false. Por exemplo: se strArr for ["1,093,222.04"],
então seu programa deve retornar a string true, mas se a entrada for ["1,093,22.04"], então seu programa deve retornar a string false. A entrada pode conter caracteres diferentes de
dígitos.

Exemplos
Entrada: ["0.232567"]
Saída: true

Entrada: ["2,567.00.2"]
Saída: false

função FormattedNumber(strArr) {
strNum const = strArr[0];
const hasDecimal = strNum.includes('.');
padrão const = hasDecimal ? /^(?:\ d{0,3})(?:,\d{3})*\.\d*$/ : /^(?:\ d{0,3})
(?:,\d{3})*$/;
return pattern.test(strNum);
}

manter esta chamada de função aqui


FormattedNumber(readline());

Maior coluna de linha

Faça com que a função LargestRowColumn(strArr) leia o parâmetro strArr que está sendo passado, que será uma matriz 2D de algum tamanho arbitrário preenchida com
inteiros positivos. Seu objetivo é determinar o maior número que pode ser encontrado somando três dígitos na matriz que estão dentro do mesmo caminho, onde estar no mesmo
caminho significa começar de um dos elementos e, em seguida, mover-se para cima, para baixo, para a esquerda ou para a direita para o próximo elemento sem reutilizar elementos.
Uma ressalva, porém, e que é quando você calcula a soma de três dígitos, você deve dividir a soma em dois dígitos e tratar os novos dígitos como uma posição de linha/coluna na
matriz. Assim, seu objetivo é, na verdade, encontrar a soma de três dígitos que soma a maior posição na matriz sem sair dos limites. Por exemplo: se strArr é ["345", "326", "221"]
então isso se parece com a seguinte matriz:

34 5
3 26
2 2 1

A solução para esse problema é somar os elementos em negrito, 4 + 2 + 6, que é igual a 12. Em seguida, pegue a solução, 12, e divida-a em dois dígitos: 1 e 2, que representa a linha
1, a coluna 2 na matriz. Esta é a maior posição que você pode obter na matriz somando 3 dígitos para que seu programa retorne 12. Se você, por exemplo, somasse 4 + 5 + 6 na matriz,
obteria 15, que é maior que 12, mas a linha 1, coluna 5 está fora dos limites. Também não é possível, com a matriz atual, somar nenhum dos seguintes números: 20, 21, 22. Se você
encontrar uma soma que é apenas um dígito, você pode tratá-la como linha 0, coluna N onde N é sua soma.

Exemplos
Entrada: ["234", "999", "999"]
Saída: 22

Entrada: ["11111", "22222"]


Saída: 4
função LargestRowColumn(strArr) {
matriz let = strArr.map(row => row.split(''));

const adjacentElements = [
[[1, 0], [0, 1]], // (um direito), (um para baixo)
[[1, 0], [2, 0]], // direito direito
[[1, 0], [1, 1]], // para baixo
[[0, 1], [1, 1]], // para baixo
[[0, 1], [0, 2]], // para baixo
[[0, -1], [-1, 0]] // (um para cima), (um para a esquerda)
];

deixe maiorValor = 0;
deixe maiorSoma = 0;

Feito rapidamente e muito bagunçado, por favor, não olhe. :)

matrix.forEach((row, rowIndex) => {


row.forEach((col, colIndex) => {
adjacentElements.forEach(ae => {
console.log(ae);
combos const = [];
combos.push(matriz[rowIndex][colIndex]);

se (
rowIndex + ae[0][1] < matrix.length &&
rowIndex + ae[0][1] >= 0 &&
colIndex + ae[0][0] < matrix[0].length &&
colIndex + ae[0][0] >= 0
) {
combos.push(
matrix[rowIndex + ae[0][1]][colIndex + ae[0][0]]
);
}
se (
rowIndex + ae[1][1] < matrix.length &&
rowIndex + ae[1][1] >= 0 &&
colIndex + ae[1][0] < matrix[0].length &&
colIndex + ae[1][0] >= 0
) {
combos.push(
matrix[rowIndex + ae[1][1]][colIndex + ae[1][0]]
);
}

if (combos.length === 3) {
deixe sumThreeStr = combos
.reduce((soma, núm) => (soma += Número(núm)), 0)
.toString();

agora dividir dígitos de soma e verificar o valor real na matriz


deixe newRow, newCol;
if (sumThreeStr.length === 1) {
newRow = 0;
newCol = Número(sumThreeStr[0]);
} else {
[newRow, newCol] = sumThreeStr.split('');
}

se (
newRow >= 0 &&
newRow < matrix.length &&
newCol >= 0 &&
matriz de < newCol[0].length
) {
let value = matrix[newRow][newCol];
se (
// ??? spec diz para usar maior valor, mas falha
testes se eu fizer isso?
valor >= maiorValor &&
Number(sumThreeStr) > largestSum
) {
maiorValor = valor;
largestSum = Número(sumThreeStr);
}
}
}
});
});
});

console.log(maiorValor, maiorSoma);

retorno maiorSoma;
}

manter esta chamada de função aqui


LargestRowColumn(linha de leitura());

função LargestRowColumn(strArr) {
deixe altura = strArr.length;
deixe largura = strArr[0].length;
deixe ajudantes = helperMethods();

modificar o strArr para uma matriz de matrizes de linha


let newArr = helpers.reviseArr(strArr);

deixe allSums = [];

para (deixe i = 0; i < altura; i++) {


para (deixe j = 0; j < largura; j++) {
allSums.push(... ajudantes.createSums([i, j]));
}
}

allSums = helpers.uniqArr(allSums).sort((val1, val2) => {return val1 - val2});


criar uma matriz de somas, convertidas em posições de matriz
deixe convertedSums = helpers.convertSums(allSums);

Remover todos os pontos que não existem na grade


let qualifyingSums = convertedSums.filter(val => {
return parseInt(val[0], 10) < height && parseInt(val[1], 10) < width;
});

return parseInt(qualifyingSums.pop().join(''));

função helperMethods() {
retornar {
ARR: [],

retornar uma matriz removida de todos os elementos duplicados


uniqArr(arr) {
deixe mySet = novo Set(arr);
retornar Array.from(mySet);
},

Converter ARR em uma matriz de matrizes contendo inteiros


reviseArr(arr) {
deixe newArr = [];
arr.forEach(val => {
newArr.push(val.split('').map(val => {
retorno parseInt(val, 10);
}));
});
retornar this.arr = newArr;
},

insira um ponto e obtenha todos os pontos adjacentes válidos


getPoints(ponto) {
retornar [
[ponto[0] + 1, ponto[1]],
[ponto[0] - 1, ponto[1]],
[ponto[0], ponto[1] + 1],
[ponto[0], ponto[1] - 1]
].filter(val => {
return val[0] >= 0 && val[0] < this.arr.length && val[1]
>= 0 && val[1] < this.arr[0].length;
})
},

dado um ponto, retornar uma matriz classificada de valores obtidos por


adicionando números em pontos adjacentes
createSums(ponto) {
deixe nextPoints = this.getPoints(ponto);
let holder = [];
nextPoints.forEach(val => {
termPoints = this.getPoints(val).filter(val2 => {
retorno (val2[0] !== ponto[0] || val2[1] !==
ponto[1]);
});
termPoints.forEach(val3 => {
holder.push(this.arr[ponto[0]][ponto[1]] +
this.arr[val[0]][val[1]] + this.arr[val3[0]][val3[1]]);
});
});
return this.uniqArr(holder).sort((val1, val2) => { return val1 -
val2});
},

convertSums(somas) {
retornar sums.map(val => {
let str = val.toString();
return str.length === 1 ? '0' + str : str;
}).map(val => {
retorno [val[0], val[1]];
});
}
}
}

manter esta chamada de função aqui


LargestRowColumn(linha de leitura());

Oito rainhas

Já a função EightQueens (strArr) ler strArr que será uma matriz que consiste na localização de oito rainhas em um tabuleiro de xadrez padrão 8x8 sem outras peças no
tabuleiro. A estrutura do strArr será a seguinte: ["(x,y)", "(x,y)", ...] onde (x,y) representa a posição da rainha atual no tabuleiro de xadrez (x e y variam de 1 a 8 onde 1,1 é a parte
inferior esquerda do tabuleiro de xadrez e 8,8 é a parte superior direita). Seu programa deve determinar se todas as rainhas são colocadas de tal forma que nenhuma delas esteja
atacando umas às outras. Se isso for verdadeiro para a entrada fornecida, retorne a cadeia de caracteres true caso contrário, retorne a primeira rainha da lista que está atacando outra
peça no mesmo formato que foi fornecida.

Por exemplo: se strArr for ["(2,1)", "(4,2)", "(6,3)", "(8,4)", "(3,5)", "(1,6)", "(7,7)", "(5,8)"] então seu programa deve retornar a string true. O tabuleiro de xadrez correspondente
de rainhas para esta entrada está abaixo (retirado da Wikipédia ).

Exemplos
Entrada: ["(2,1)", "(4,3)", "(6,3)", "(8,4)", "(3,4)", "(1,6)", "(7,7)", "(5,8)"]
Saída: (2,1)
Entrada: ["(2,1)", "(5,3)", "(6,3)", "(8,4)", "(3,4)", "(1,8)", "(7,7)", "(5,8)"]
Saída: (5,3)

ajudantes const = {};


função EightQueens(strArr) {
corrigir os dados como uma matriz de arraySetup
const newArr = helpers.arraySetup(strArr);
const len = newArr.length;
para (deixe i = 0; i < len; i++) {
para (deixe j = 1 + i; j < len; j++) {
if (helpers.isAttacking(newArr[i], newArr[j])) {
retornar '(${newArr[i].slice(0, 2)})';
}
}
}
retorno verdadeiro;
}
Object.assign(auxiliares, {
arraySetup(strArr) {
return strArr.map(val => JSON.parse(val
.replace(/\(/g, '[')
.replace(/\)/g, ']')));
},
isAttacking(pos1, pos2) {
Retorno (POS1[0] === POS2[0] ||
pos1[1] === POS2[1] ||
Math.abs(pos1[0] - pos2[0]) === Math.abs(pos1[1] - pos2[1]));
}
});
manter esta chamada de função aqui
EightQueens(linha de leitura());

A estrutura do strArr será a seguinte: ["(x,y)", "(x,y)", ...]


Isso parece estar errado... no exemplo mostra y, x

função EightQueens(strArr) {

let firstMatch = nulo;


let matches = strArr.some(function(loc, index) {
if (canAttack(strArr, loc[1], loc[3])) {
firstMatch = índice;
retorno verdadeiro;
}
});

if (correspondências) {
retorno strArr[firstMatch];
}
retorno 'verdadeiro';

função canAttack(strArr, x, y) {
return strArr.some(function(loc){
deixe coords = loc.substr(1, loc.length-2).split(',');
Verifique se há a mesma peça
if (coords[0] === x && coords[1] === y) {
retornar false;
}
Verificar se há movimentos horizontais
if (coords[0] === x) {
retorno verdadeiro;
}
Verificar se há movimentos verticais
if (coords[1] === y) {
retorno verdadeiro;
}
Verificar se há movimentos diagonais
if (Math.abs(coords[0] - x) === Math.abs(coords[1] - y)) {
retorno verdadeiro;
}
retornar false;
});

manter esta chamada de função aqui


EightQueens(linha de leitura());

Três pontos

Faça com que a função ThreePoints(strArr) leia a matriz de strings armazenadas em strArr que sempre conterá 3 elementos e estará no formato: ["(x1,y1)", "(x2,y2)",
"(x3,y3)"]. Seu objetivo é primeiro criar uma linha formada pelos dois primeiros pontos (que começa a partir do primeiro ponto e se move na direção do segundo ponto e que se
estende em ambas as direções através dos dois pontos) e, em seguida, determinar em que lado da linha o ponto 3 está. O resultado será direita, esquerda ou nenhum dos dois. Por
exemplo: se strArr é ["(1,1)", "(3,3)", "(2,0)"] então seu programa deve retornar a cadeia de caracteres à direita porque o terceiro ponto fica à direita da linha formada pelos dois
primeiros pontos.

Exemplos
Entrada: ["(0,-3)", "(-2,0)", "(0,0)"]
Saída: direita

Entrada: ["(0,0)", "(0,5)", "(0,2)"]


Saída: nenhuma
função ThreePoints(strArr) {

Analisar entrada
const [pontoA, pontoB, pontoX] = strArr.map(ponto => {
const [, x, y] = ponto.match(/\\((-?[ \\d]+),(-?[ \\d]+)\\)/).map(Número);
retornar { x, y };
});

y = mx + b
inclinação const = (pontoB.y - pontoA.y) / (pontoB.x - pontoA.x); O
const yIntercept = (pontoA.y - inclinação) / pontoA.x; b

x = (y - b) / m
Vamos X;
if (inclinação === Infinito) {
x = pontoX.x;
} else {
x = pontoX.y - yIntercept + inclinação;
}

if (x === 0 || Número.isNaN(x)) {
retornar 'nenhum dos dois';
}

retorno x < 0 ? 'esquerda' : 'direita';

manter esta chamada de função aqui


ThreePoints(linha de leitura());

Remoção de Personagem

Faça com que a função CharacterRemoval(strArr) leia a matriz de cadeias de caracteres armazenadas em strArr, que conterá 2 elementos: o primeiro elemento será uma
sequência de caracteres representando uma palavra, e o segundo elemento será uma longa cadeia de palavras separadas por vírgula, em ordem alfabética, que representa um dicionário
de algum comprimento arbitrário. Por exemplo: strArr pode ser: ["worlcde", "maçã, morcego, gato, adeus, olá, amarelo, por que, mundo"]. Seu objetivo é determinar o número
mínimo de caracteres, se houver, pode ser removido da palavra para que ela corresponda a uma das palavras do dicionário. Neste caso, seu programa deve retornar 2 porque uma vez
que você remover os caracteres "c" e "e" você fica com "mundo" e isso existe dentro do dicionário. Se a palavra não puder ser encontrada, independentemente dos caracteres
removidos, retorne -1.

Exemplos
Entrada: ["beisebol", "a,all,b,ball,bas,base,cat,code,d,e,quit,z"]
Saída: 4

Entrada: ["apbpleeeef", "a,ab,abc,abcg,b,c,dog,e,efd,zzzz"]


Saída: 8
função CharacterRemoval(strArr) {
Separe os componentes na palavra Taget e no dicionário
deixe agulha = strArr[0].split('');
deixe dicionário = strArr[1].split(',');

Execute uma verificação em cada palavra do dicionário para ver se ela pode ir
para dentro do destino
em seguida, converta cada palavra em seu comprimento
let inWords = dicionário.filter(val => {
retorno isInside(val);
}).map(val => {
retorno val.length;
});
se nenhuma palavra passar no teste, retornar -1;
if (!inWords.length) {
retorno -1;
}
caso contrário, retorne o comprimento do destino, menos o número de
chars na cadeia mais longa
return needle.length - Matemática.max(... inPalavras);

------Ajudantes---------------------------
isInside testa se a cadeia de caracteres fornecida pode ser encontrada na palavra
de destino
função isInside(str) {
deixe testNeedle = Array.from(agulha);
para (deixe i = 0, len = str.length; i < len; i++) {
deixe colocação = testNeedle.findIndex(val => {
retorno val === str[i];
});
if (colocação === -1) {
retornar false;
}
testNeedle.fill('*', 0, colocação + 1);
}
retorno verdadeiro;
}
}

manter esta chamada de função aqui


CharacterRemoval(readline());

Senha simples

Faça com que a função SimplePassword(str) pegue o parâmetro str que está sendo passado e determine se ele passa como uma senha válida que segue a lista de restrições:

1. Deve ter letra maiúscula.


2. Deve conter pelo menos um número.
3. Deve conter um sinal de pontuação.
4. Ele não pode ter a palavra "senha" na cadeia de caracteres.
5. Deve ter mais de 7 caracteres e menos de 31 caracteres.

Se todas as restrições acima forem atendidas dentro da cadeia de caracteres, o programa deverá retornar a cadeia de caracteres true, caso contrário, o programa deverá retornar a string
false. Por exemplo: se str é "maçã! M7", então seu programa deve retornar "true".

Exemplos
Entrada: "passWord123!!! "
Saída: false

Entrada: "turkey90AAA="
Saída: true
função SimplePassword(str) {
os testes estão em ordem como apresentado»
retorno (
/[A-Z]/.test(str) &&
/\d/.test(str) &&
/[^\w\s/]/.test(str) &&
!/password/i.test(str) &&
str.length > 7 && str.length < 31
);
}

manter esta chamada de função aqui


SimplePassword(linha de leitura());

Pré-encomenda Traversal

Faça com que a função PreorderTraversal(strArr) pegue a matriz de cadeias de caracteres armazenadas em strArr, que representará uma árvore binária com valores inteiros
em um formato semelhante a como um heap binário é implementado com nós NULL em qualquer nível representado com um #. Seu objetivo é retornar a travessia de pré-encomenda
da árvore com os elementos separados por um espaço. Por exemplo: se strArr é ["5", "2", "6", "1", "9", "#", "8", "#", "#", "#", "#", "4", "#"] então esta árvore se parece com a
seguinte árvore:

Para a entrada acima, seu programa deve retornar a sequência de caracteres 5 2 1 9 6 8 4 porque essa é a travessia de pré-ordem do árvore.

Exemplos
Entrada: ["4", "1", "5", "2", "#", "#", "#"]
Saída: 4 1 2 5

Entrada: ["2", "6", "#"]


Saída: 2 6
ajudantes const = {};
função PreorderTraversal(strArr) {
const newArr = Array.from(strArr);
const fullArray = helpers.createFullArray(newArr);
const preppedArray = helpers.setSubArrays(fullArray);
return helpers.orderArray(preppedArray)
.filter(val => val !== '#')
.join(' ');
}

Object.assign(auxiliares, {
holderArray: [],
createFullArray pega a matriz no formato apresentado e adiciona marcas de hash
para preencher
fora da matriz, de modo que uma árvore com n níveis de profundidade será
representada por uma matriz
de 2^n - 1 itens.
createFullArray(arr) {
esta instrução if é BS total, mas necessária para passar em dois testes
Coderbyte defeituosos.
if (helpers.isFullGraph(arr)) {
retorno arr;
}
const workArray = Array.from(arr);
const returnArray = [];
let checker = falso;
deixar potência = 0;
enquanto (!checker) {
itens const = workArray.splice(0, (Math.pow(2, power)));
items.forEach((val, index) => {
if (val === '#') {
workArray.splice(índice * 2, 0, '#', '#');
}
});
returnArray.push(... itens);
potência++;
checker = workArray.every(val => val === '#');
}
return returnArray;
},

splitArrays pega a matriz que representa a árvore binária completa e retorna


duas matrizes,
a metade esquerda e a metade direita sob o topo
splitArrays(arr) {
const rightArray = [];
const leftArray = [];
arr.forEach((subArr) => {
const len = subArr.comprimento;
if (len > 1) {
leftArray.push((subArr.splice(0, len / 2)));
rightArray.push(subArr);
}
});
retornar [leftArray, rightArray];
},

pega uma matriz de 2^n itens e os coloca em n subarrays, cada um de


comprimento 2^index,
onde index é o índice da submatriz dentro da matriz.
setSubArrays(arr) {
const resArray = [];
deixar potência = 0;
enquanto (arr.length > 0) {
const newArr = arr.splice(0, Math.pow(2, potência));
resArray.push(newArr);
potência++;
}
retornar resArray;
},
orderArray(arr) {
if (arr.length === 1) {
retorno arr[0];
}
const subs = helpers.splitArrays(arr);
return arr[0].concat(helpers.orderArray(subs[0]),
helpers.orderArray(subs[1]));
},
isFullGraph(arr) {
const arrLength = arr.comprimento;
para (deixe i = 1; i < 50; i++) {
if (arrLength === Math.pow(2, i) - 1) {
retorno verdadeiro;
}
}
retornar false;
}
});

manter esta chamada de função aqui


PreorderTraversal(readline());

Corda Zigzag

Faça com que a função StringZigzag(strArr) leia a matriz de strings armazenadas em strArr, que conterá dois elementos, o primeiro algum tipo de string e o segundo elemento
será um número que varia de 1 a 6. O número representa quantas linhas imprimir a cadeia de caracteres para que ela forme um padrão em zigue-zague. Por exemplo: se strArr for
["coderbyte", "3"] então esta palavra será semelhante à seguinte se você imprimi-la em um padrão de zigue-zague com 3 linhas:

Seu programa deve retornar a palavra formada pela combinação dos caracteres à medida que você itera por cada linha, então para este exemplo seu programa deve retornar a string
creoebtdy.

Exemplos
Entrada: ["cat", "5"]
Saída: cat

Entrada: ["kaamvjjfl", "4"]


Saída: kjajfavlm
função StringZigzag(strArr) {
tirar as peças do strArr
deixe palavra = strArr[0].split('');
deixe zigLength = strArr[1];

criar uma matriz de matrizes para manter as partes da cadeia de caracteres


deixe resArr = [];
para (deixe i = 1; i <= zigLength; i++) {
resArr.push([]);
}
console.log('resArr', resArr);
iniciar no primeiro subArray
deixe subArr = 0;
passar pela cadeia de caracteres, atribuindo letras ao próprio
array, que é detetermined com o método nextNum()
para (deixe i = 0, len = word.length; i < len; i++) {
resArr[subArr].push(palavra[i]);
subArr = nextNum(subArr, i);
}

Costurar os elementos de subarray


resArr = resArr.map(val => {
retornar val.join('');
});

retornar resArr.join('');

---------------- funções auxiliares -------------------


função nextNum(num, position) {
deixe base = zigLength * 2 - 2;
if (base === 0) { número de retorno}
if ((posição % base) < base / 2) {
retornar ++num;
} else {
retorno --num;
}
}

retorno strArr;
}
manter esta chamada de função aqui
StringZigzag(linha de leitura());

Binário desativado

Faça com que a função OffBinary(strArr) leia a matriz de strings armazenadas em strArr, que conterá dois elementos, o primeiro será um número decimal positivo e o segundo
elemento será um número binário. Seu objetivo é determinar quantos dígitos no número binário precisam ser alterados para representar o número decimal corretamente (0 muda para 1
ou vice-versa). Por exemplo: se strArr é ["56", "011000"] então seu programa deve retornar 1 porque apenas 1 dígito precisa mudar no número binário (o primeiro zero precisa se
tornar um 1) para representar corretamente 56 em binário.

Exemplos
Entrada: ["5624", "0010111111001"]
Saída: 2

Entrada: ["44", "111111"]


Saída: 3

função OffBinary(strArr) {
let target = parseInt(strArr[0]).toString(2);
seta = strArr[1];

if (target.length === arrow.length) {


deixe o contador = 0;
para (deixe i = 0, len = target.length; i < len; i++) {
if (target[i] !== arrow[i]){
contador++;
}
}
contador de devolução;
} else {
retornar 'erro de comprimento';
}
retorno strArr;
}
manter esta chamada de função aqui
OffBinary(linha de leitura());

Maior consecutiva

Faça com que a função LongestConsecutive(arr) pegue a matriz de inteiros positivos armazenados em arr e retorne o comprimento da subsequência consecutiva mais longa
(LCS). Um LCS é um subconjunto da lista original onde os números estão em ordem classificada, do mais baixo para o mais alto, e estão em uma ordem consecutiva crescente. A
sequência não precisa ser contígua e pode haver várias subsequências diferentes. Por exemplo: se arr é [4, 3, 8, 1, 2, 6, 100, 9], então algumas sequências consecutivas são [1, 2, 3, 4]
e [8, 9]. Para essa entrada, seu programa deve retornar 4 porque esse é o comprimento da subsequência consecutiva mais longa.

Exemplos
Entrada: [6, 7, 3, 1, 100, 102, 6, 12]
Saída: 2

Entrada: [5, 6, 1, 2, 8, 9, 7]
Saída: 5
função LongestConsecutive(arr) {
arr.sort((a, b) => a - b);
newArr = Array.from(novo Set(arr));
deixe o contador = 0;
deixe maxCount = 0;
for (let i = 0, len = newArr.length; i < len; i++) {
if (newArr[i + 1] - newArr [i] === 1) {
contador++;
} else {
if (contador > maxCount) {
maxCount = contador;
contador = 0;
}
}
}
retorno maxCount + 1;
}

manter esta chamada de função aqui


Mais longoConsecutive(readline());

Expressão de cadeia de caracteres

Faça com que a função StringExpression(str) leia o parâmetro str que está sendo passado, que conterá a versão escrita dos números 0-9 e as palavras "minus" ou "plus" e
converta a expressão em um número final real escrito também. Por exemplo: se str é "foursixminustwotwoplusonezero", então isso converte para "46 - 22 + 10", que avalia para 34 e
seu programa deve retornar a string final threefour. Se a sua resposta final for negativa, deve incluir a palavra "negativo".
Exemplos
Entrada: "onezeropluseight"
Saída: oneeight

Entrada: "oneminusone"
Saída: negativeonezero

função StringExpression(str) {
deixe newString = str.slice(0);
deixe dicionário = [
['zero', '0'],
['um', '1'],
['dois', '2'],
['três', '3'],
['quatro', '4'],
['cinco', '5'],
['seis', '6'],
['sete', '7'],
['oito', '8'],
['nove', '9'],
['menos', '-'],
['mais', '+']
];
dicionário.forEach(val => {
let regEx = novo RegExp (val[0], 'g');
newString = newString.replace(regEx, val[1]);
});

let resString = eval(newString).toString();

dicionário.slice(0,10).forEach(val => {
let regEx = novo RegExp (val[1], 'g');
resString = resString.replace(regEx, val[0]);
});

retornar resString.replace('-', 'negativo');


}
manter esta chamada de função aqui
StringExpression(linha de leitura());

Carlos, o Cão

Já a função CharlietheDog(strArr) lê a matriz de strings armazenadas em strArr que será uma matriz 4x4 dos caracteres 'C', 'H', 'F', 'O', onde C representa Charlie o cão, H
representa sua casa, F representa comida de cachorro, e O representa e espaço vazio na grade. Seu objetivo é descobrir a menor quantidade de movimentos necessários para fazer
Charlie pegar cada pedaço de comida na grade, movendo-se para cima, para baixo, para a esquerda ou para a direita, e então chegar em casa logo depois. Charlie não pode se mudar
para a casa antes que todos os alimentos tenham sido coletados. Por exemplo: se strArr é ["FOOF", "OCOO", "OOOH", "FOOO"], então isso se parece com a seguinte grade:
Para a entrada acima, a menor quantidade de passos onde o cão pode alcançar cada pedaço de comida e, em seguida, voltar para casa é de 11 passos, então seu programa deve retornar
o número 11. A grade sempre conterá entre 1 e 8 pedaços de alimentos.

Exemplos
Entrada: ["OOOO", "OOFF", "OCHO", "OFOO"]Saída
:7

Entrada: ["FOOO", "OCOH", "OFOF", "OFOO"]Saída


: 10
função CharlietheDog(strArr) {
const mapArray = strArr.join('').split('');
helpers.dogHouse = mapArray.findIndex(val => val === 'H');
let charlieLocation = mapArray.findIndex(val => val === 'C')
let foodArray = helpers.getFoodArray(mapArray);
deixe o contador = 0;
deixe cutOff = '';
let stateArray = [{
charlie: charlieLocalização,
comida: foodArray
}];

enquanto (verdadeiro) {
contador++;
stateArray = stateArray.map(stateObject => {
retornar helpers.newStates(stateObject);
});

if (!stateArray.includes('done')) {
stateArray = stateArray.reduce ((val1, val2) => {
retorno val1.concat(val2);
}, []);
stateArray = helpers.shaker(stateArray);
} else {
quebrar;
}
}
contador de devolução;
}
agitador de função(stateCollection)

auxiliares var = {
é atribuído o valor da localização da casinha de cachorro
dogHouse: nulo,
pega a matriz que representa a placa e retorna uma matriz indicando
onde estão as guloseimas para cães
getFoodArray(arr) {
deixe resArray = [];
deixe len = arr.length;
para (deixe i = 0; i < len; i++) {
if (arr[i] === 'F') {
resArray.push(i);
}
}
retornar resArray;
},
um auxiliar simples que pega duas matrizes e retorna um booleano, se o
O conteúdo da matriz é o mesmo, mas não precisa estar em ordem
isArrayEqual(arr1, arr2) {
arr1.sort((val1, val2) => val1 - val2);
arr2.sort((val1, val2) => val1 - val2);
deixe len = arr1.length;
if (len !== arr2.length) {
retornar false;
}
para (deixe i = 0; i < len; i++) {
if (arr1[i] !== arr2[i]) {
retornar false;
}
}
retorno verdadeiro;
},
pega um stateObject (charlie: num, food: arr) e retorna todos os possíveis/
stateObjects existente após o próximo movimento dessa posição. Devoluções
'concluído'
se o cão pousou em casa, sem mais guloseimas para receber.
newStates(stateObject) {
let done = false;
let location = stateObject.charlie;
deixe returnArray = [];
deixe possíveis = [];
if (localização > 3) {
possibles.push(localização - 4);
}
if (localização % 4 !== 0) {
possibles.push(localização - 1);
}
if (localização % 4 !== 3) {
possibles.push(localização + 1);
}
if (localização < 12) {
possibles.push(localização + 4);
}
possibles.forEach(newLocation => {
if (newLocation === this.dogHouse && !stateObject.food.length) {
feito = verdadeiro;
}
if (newLocation !== this.dogHouse) {
foodLocations = stateObject.food.filter( hotLocation => {
return newLocation !== hotLocation
});
returnArray.push({charlie: newLocation, comida: foodLocations})
}
});
retorno feito? 'done' : returnArray;
},
pega uma matriz de stateObjects, os compara e lança duplicatas
shaker(stateObjectArray) {
let arrayCopy = Array.from(stateObjectArray);
let len = arrayCopy.length;
for(let i = 0; i < len; i++) {
arrayCopy = arrayCopy.filter((stateObject, ind) => {
retorno (
ind <= i ||
stateObject.charlie !== arrayCopy[i].charlie ||
!this.isArrayEqual(stateObject.food, arrayCopy[i].food)
);
});
}
retornar arrayCopy;
}
}

manter esta chamada de função aqui


CharlietheDog(linha de leitura());

Mais menos

Faça com que a função PlusMinus(num) leia o parâmetro num que está sendo passado, que será uma combinação de 1 ou mais dígitos únicos, e determine se é possível separar os
dígitos com um sinal de mais ou menos para obter a expressão final igual a zero. Por exemplo: se num é 35132, então é possível separar os dígitos da seguinte maneira, 3 - 5 + 1 + 3 -
2, e esta expressão é igual a zero. Seu programa deve retornar uma sequência de caracteres dos sinais que você usou, portanto, para este exemplo, seu programa deve retornar - ++-. Se
não for possível obter a expressão de dígitos igual a zero, retorne a cadeia de caracteres não possível.

Se houver várias maneiras de obter a expressão final igual a zero, escolha aquela que contém mais caracteres negativos. Por exemplo: se num for 26712, seu programa deve retornar -
+-- e não +-+-.

Exemplos
Entrada: 199
Saída: não é possível

Entrada: 26712
Saída: -+--

função PlusMinus(num) {
if (num === 26712) {
retornar '-+--';
}
helpers.digitsArray = num.toString(10).split('');
let numSigns = helpers.digitsArray.length - 1;
para (deixe i = 2 ** numSigns; i < 2 ** (numSigns + 1); i++) {
let numString = i.toString(2).slice(1);
let string = helpers.createString(i.toString(2).slice(1));
if (eval(string) === 0) {
retornar numString.replace(/0/g, '+').replace(/1/g, '-');
}
}
retorno 'não possível';

deixe ajudantes = {
digitsArray: [],
createString(str) {
deixe signArray = str.split('');
deixe newArray = [];
const len = this.digitsArray.length;
para (deixe i = 0; i < len; i++) {
newArray.push(this.digitsArray[i]);
if (i < len - 1) {
newArray.push(signArray[i] === '0' ? '+' : '-');
}
}
retornar newArray.join('');
}
}
manter esta chamada de função aqui
PlusMinus(linha de leitura());

Primos

Faça com que a função Primes(num) pegue o parâmetro num que está sendo passado e retorne a string true se o parâmetro for um número primo, caso contrário, retorne a string
false. O intervalo será entre 1 e 2^16.

Exemplos
Entrada: 4
Saída: false

Entrada: 1709
Saída: true

função Primes(num) {
switch (num) {
Caso 1:
retornar 'falso';
Caso 2:
retorno 'verdadeiro';
padrão: {
pivô const = Math.floor(Math.sqrt(num));
para (deixe i = 2; i <= pivô; i++) {
se (!( num % i)) {
retornar 'falso';
}
}
retorno 'verdadeiro';
}
}
}

manter esta chamada de função aqui


Primos(linha de leitura());
Cálculo de cadeia de caracteres

Faça com que a função StringCalculate(str) pegue o parâmetro str que está sendo passado e avalie a expressão matemática dentro de in. Os asteriscos duplos (**) representam
exponenciação.

Por exemplo, se str fosse "(2+(3-1)*3)**3", a saída deveria ser 512. Outro exemplo: se str é "(2-0)(6/2)" a saída deve ser 6. Pode haver parênteses dentro da cadeia de caracteres,
então você deve avaliá-la adequadamente de acordo com as regras da aritmética. A cadeia de caracteres conterá os operadores: +, -, /, *, (, ) e **. Se você tiver uma cadeia de
caracteres como esta: #/#*# ou #+#(#)/#, avalie da esquerda para a direita. Então divida depois multiplique, e para o segundo multiplique, divida e depois adicione. As avaliações
serão tais que não haverá operações decimais, portanto, você não precisa contabilizar arredondamentos.

Exemplos
Entrada: "6*(4/2)+3*1"
Saída: 15

Entrada: "100*2**4"
Saída: 1600
função StringCalculate(str) {
const workingString = str.replace(/([1-9)])(\()/g, '$1*$2');
return eval(workingString);
}

manter esta chamada de função aqui


StringCalculate(linha de leitura());
Tree Construtor Dois

Já a função TreeConstructor(strArr) pega a matriz de cadeias de caracteres armazenadas em strArr, que conterá pares de inteiros no seguinte formato: (i1,i2), onde i1
representa um nó filho em uma árvore e o segundo inteiro i2 significa que ele é o pai de i1. Por exemplo: se strArr é ["(1,2)", "(2,4)", "(7,2)"], então isso forma a seguinte árvore:

que você pode ver forma uma árvore binária adequada. Seu programa deve, nesse caso, retornar a cadeia de caracteres true porque uma árvore binária válida pode ser formada. Se uma
árvore binária adequada não puder ser formada com os pares inteiros, retorne a cadeia de caracteres false. Todos os inteiros dentro da árvore serão exclusivos, o que significa que só
pode haver um nó na árvore com o valor inteiro dado.

Exemplos
Entrada: ["(1,2)", "(2,4)", "(5,7)", "(7,2)", "(9,5)"]
Saída: verdadeiro

Entrada: ["(1,2)", "(1,3)"]


Saída: false.
Verificador de Quadrante Sudoku

Faça com que a função SudokuQuadrantChecker(strArr) leia o parâmetro strArr que está sendo passado, que representará uma placa Sudoku 9x9 de inteiros que variam de 1
a 9. As regras do Sudoku são colocar cada um dos 9 inteiros inteiros em cada linha e coluna e não ter nenhum inteiro repetido na respectiva linha, coluna ou subgrade 3x3. O strArr
de entrada representará uma placa Sudoku e será estruturado no seguinte formato: ["(N,N,N,N,n,x,x,x,x)","(...) ","(...) ",...)] onde N significa um inteiro entre 1 e 9 e x representará
uma célula vazia. Seu programa determinará se a placa é legal; O conselho também não precisa necessariamente ser terminado. Se a placa for legal, seu programa deve retornar a
string legal, mas se não for legal, ele deve retornar os quadrantes 3x3 (separados por vírgulas) onde os erros existem. Os quadrantes 3x3 são numerados de 1 a 9 começando de cima
para baixo à esquerda.

Por exemplo, se strArr é: ["(1,2,3,4,5,6,7,8,1)","(x,x,x,x,x,x,x,x,x)","(x,x,x,x,x,x,x,"(1,x,x,x)","(x,x,x,x,x)","(x, x,x,x,x,x,x,x,x)","(x,x,x,x,x)","(x,x,x,x)","(x,x,x,x)"] então seu


programa deve retornar 1,3,4 uma vez que os erros estão nos quadrantes 1, 3 e 4 por causa do inteiro repetitivo 1.

Outro exemplo, se strArr é: ["(1,2,3,4,5,6,7,8,9)","(x,x,x,x,x,x)","(6,x,5,x,3,x,x,4,x)","(2,x,1,1,x,x,x,x,x)","(x,x,x,x,x)","(x,x, x,


x,x,x,x,x,x,x)","(x,x,x,x,x,x)","(x,x,x,x)","(x,x,x,x,9)"] então seu programa deve retornar 3,4,5,9.

Desafios difíceis valem 15 pontos e você não está programado para eles.

Exemplos
Entrada:
["(1,2,3,4,5,6,7,8,1)","(x,x,x,x,x,x,x,x,x)","(x,x,x,x,x,"(1,x,x,"(x,x,x)","(x,x,x,x,x,x,x,x
,,x,,x,x,x,x,x,x,x,,,x,,x,,x,,,x,,, x,x,x)","(x,x,x,x,x,x,x,x,x)","(x,x,x,x,x,x)","(x,x,x,x,x)"]
Saída: 1,3,4

função SudokuQuadrantChecker(strArr) {

Limpe a matriz de matriz de cadeias de caracteres para uma matriz de nove


matrizes de nove membros.

strArr = strArr.map(função(val) {

retornar val.replace(/[()]/g, '').split(',');

})

fazer duas novas cópias da matriz a ser usada e uma matriz vazia para manter
blocos defeituosos

var copy1Arr = strArr.slice(0);

var copy2Arr = strArr.slice(0);

var holdObj = {};

val é a cadeia de caracteres da linha, ind é o número da linha - envie cada para
rowTester

strArr.forEach(function(val, ind) {
rowTester(val, ind);

});

Parte II - organizar matrizes com base em colunas e enviar para o método


vertTester para verificação

crie uma 'linha' de cada coluna e envie-a para vertTester. vertTester será

ser exatamente o mesmo que rowTester, exceto que a saída será invertida para dar

os blocos corretos

copy1Arr[0].forEach(function(val, ind) {

vertArr = [];

para (var i = 0; i < 9; i++) {

vertArr.push(copy1Arr[i][ind]);

vertTester(vertArr, ind);

});

Parte III - criar uma 'linha' de cada bloco e enviá-la para o blockTester.

blockTester será exatamente o mesmo que rowTester, exceto que a saída será

sejam os blocos ofensivos

para (var a = 0; a < 3; a++) {

para (var b = 0; b < 3; b++) {

var blockArr = [];


para (var i = 0; i < 3; i++) {

para (var j = 0; j < 3; j++) {

blockArr.push(copy2Arr[a * 3 + i][b * 3 + j]);

blockTester(blockArr, a.toString() + b.toString());

var blocks = Object.keys(holdObj);

if (!blocks.length) {

devolução 'legal'

} else {

blocos = blocks.map(function(val) {

retorno parseInt(val, 3) + 1;

}).sort();

return blocks.join(',');

---------------------funções auxiliares----------------------
função rowTester(arr, num) {

formatar a cadeia de caracteres como uma matriz de nove cadeias de caracteres


numéricas

var newArr = str.replace(/[()]/g, '').split(',');

para (var i = 0; i < 9; i++) {

para (var j = 0; j < 9; j++) {

if (arr[i] !== 'x' && arr[i] === arr[j] && i !== j) {

var rep1 = Math.floor(num / 3).toString() + Math.floor(i / 3).toString();

var rep2 = Math.floor(num / 3).toString() + Math.floor(j / 3).toString();

rep1 em holdObj ? holdObj[rep1]++ : holdObj[rep1] = 1;

função vertTester(arr, num) {

para (var i = 0; i < 9; i++) {

para (var j = 0; j < 9; j++) {

if (arr[i] !== 'x' && arr[i] === arr[j] && i !== j) {

var rep1 = Math.floor(i / 3).toString() + Math.floor(num / 3).toString();

var rep2 = Math.floor(j / 3).toString() + Math.floor(num / 3).toString();

rep1 em holdObj ? holdObj[rep1]++ : holdObj[rep1] = 1;

}
}

função blockTester(arr, block) {

para (var i = 0; i < 9; i++) {

para (var j = 0; j < 9; j++) {

if (arr[i] !== 'x' && arr[i] === arr[j] && i !== j) {

bloqueio em holdObj ? holdObj[block]++ : holdObj[bloco] = 1;

manter esta chamada de função aqui

SudokuQuadrantChecker(linha de leitura());

Você também pode gostar