Escolar Documentos
Profissional Documentos
Cultura Documentos
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
função MovingMedian(arr) {
deixe construirArr = [];
deixe winLength = arr.shift();
deixe len = arr.length;
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
strArr.forEach(val => {
const corresponde = val.match(parsingRegExp);
chave const = correspondências[1];
const numVal = Número(correspondências[2]);
return Object.keys(resObject)
.sort()
.map(val => {
return resObject[val] ? (val + ":" + resObject[val]) : '';
})
.filter(val => {
retorno val;
})
.join(',');
}
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;
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(' ');
}
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
função HDistance(strArr) {
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
função DifferentCases(str) {
const charTest = /[a-zA-Z]/;
deixe returnString = '';
const len = str.comprimento;
const baseString = str.toLowerCase();
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
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]);
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;
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;
if (strarr[i] == strarr[i+1]) {
contagem ++;
}
senão {
var entry = contagem + strarr[i];
resarr.push(contagem + strarr[i]);
contagem = 1;
}
}
retornar resarr.join("");
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;
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
}
}
}
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
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]);
}
}
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
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
arr1 = str1.toLowerCase().split("");
arr2 = str2.toLowerCase().split("");
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;
}
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';
}
}
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);
função arrayPrep(arr2) {
arr.sort(função(a, b){
retornar a - b
});
destino = arr2.pop()
Retorno ARR2
}
}
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;
contador de devolução;
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á
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
var x = arr[i].charCodeAt(0);
}
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;
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];
}
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);
}
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
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;
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;
}
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();
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;
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;
}
}
}
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-');
}
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
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('');
}
};
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
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
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
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) {
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;
});
}
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
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));
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));
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) {
senão {
var turnos = Math.floor((num - 11) / 22) * 2;
var remain = num - (turnos * 11);
se (permanecer > 22) {
turnos++;
permanecer -= 11;
}
retornos + arr[permanecer];
}
}
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";
}
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
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;
}
senão retornar 0;
}
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;
}
}
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('-');
}
}
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;
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;
}
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]];
}
};
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 = [];
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;
str = arr.join("");
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;
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
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
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';
}
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;
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
Exemplos
Entrada: ["01111", "01101", "00011", "11110"]
Saída: 3
rastreador de função(pointsArray) {
deixe newArray = [];
pointsArray.forEach(ponto => {
if (newArray.length === 0) {
retornar;
}
rastreador(newArray);
}
}
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
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
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) : "#");
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:
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('-');
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
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, ''));
retorno verdadeiro;
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.
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;
}
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
};
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(',');
}
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
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';
}
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;
enquanto (!flag) {
contagem++;
if (searching(numArray) === true) {
contagem de retornos;
} else {
numArray = pesquisa(numArray);
}
}
}
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
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 = [];
-----------------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);
if (!hotSpots.length) {
retornar false;
}
}
retorno verdadeiro;
}
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;
}
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
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}';
}
}
}
}
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('');
}
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
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;
}
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;
-------------Ajudantes------------------------------
retorno strArr;
}
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());
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
------------------------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;
}
}
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
função MinWindowSubstring(strArr) {
let str = strArr[0];
deixe agulha = strArr[1].split('');
----------------------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;
}
}
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;
}
}
}
}
Á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;
}
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;
}
}
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);
//}
retorno res;
}
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
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);
}
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
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;
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();
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;
}
função LargestRowColumn(strArr) {
deixe altura = strArr.length;
deixe largura = strArr[0].length;
deixe ajudantes = helperMethods();
return parseInt(qualifyingSums.pop().join(''));
função helperMethods() {
retornar {
ARR: [],
convertSums(somas) {
retornar sums.map(val => {
let str = val.toString();
return str.length === 1 ? '0' + str : str;
}).map(val => {
retorno [val[0], val[1]];
});
}
}
}
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)
função EightQueens(strArr) {
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;
});
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
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';
}
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
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;
}
}
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:
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
);
}
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
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;
},
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
retornar resArr.join('');
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
função OffBinary(strArr) {
let target = parseInt(strArr[0]).toString(2);
seta = strArr[1];
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;
}
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]);
});
dicionário.slice(0,10).forEach(val => {
let regEx = novo RegExp (val[1], 'g');
resString = resString.replace(regEx, val[0]);
});
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
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;
}
}
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';
}
}
}
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);
}
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
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.
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) {
strArr = strArr.map(função(val) {
})
fazer duas novas cópias da matriz a ser usada e uma matriz vazia para manter
blocos defeituosos
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);
});
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 = [];
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á
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) {
}
}
SudokuQuadrantChecker(linha de leitura());