Anda di halaman 1dari 94

Media bergerak

Solusi Pengguna Teratas


Media bergerak

Memiliki fungsi MovingMedian( arr ) membaca larik angka yang disimpan dalam arr yang akan berisi ukuran jendela geser, N, sebagai elemen pertama dalam larik dan sisanya
akan berupa daftar angka. Program Anda harus mengembalikan Median Bergerak untuk setiap elemen berdasarkan elemen dan pendahulunya N-1, di mana N adalah ukuran jendela
geser. Keluaran akhir harus berupa string dengan median bergerak yang sesuai dengan setiap entri dalam larik asli yang dipisahkan dengan koma.

Perhatikan bahwa untuk beberapa elemen pertama (sampai ukuran jendela tercapai), median dihitung pada jumlah entri yang lebih kecil. Sebagai contoh: jika arr adalah [3, 1, 3, 5,
10, 6, 4, 3, 1] maka program Anda akan menghasilkan "1,2,3,5,6,6,4,3"

Contoh
Masukan: [5, 2, 4, 6]
Keluaran: 2,3,4

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


Keluaran: 0,0,0,0,0,0,0

function MovingMedian(arr) {
biarkan buildArr = [];
biarkan winLength = arr.shift();
biarkan len = arr.panjang;

for (biarkan i = 0; i < len; i++) {


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

biarkan getMedian = (arr) => {


arr.sort((val1, val2) => {return val1 - val2});
biarkan len = arr.panjang;
jika (len % 2) {
return arr[Math.floor(len/2)];
} kalau tidak {
kembali (arr[len/2 - 1] + arr[len/2]) / 2;
}
}

// pertahankan panggilan fungsi ini di sini


MovingMedian(readline());
Total Grup

Buat fungsi GroupTotals( strArr ) baca di parameter strArr yang berisi pasangan kunci:nilai di mana kuncinya adalah string dan nilainya adalah bilangan bulat. Program
Anda harus mengembalikan sebuah string dengan key baru: pasangan nilai yang dipisahkan oleh koma sedemikian rupa sehingga setiap kunci hanya muncul sekali dengan nilai total
yang dijumlahkan.

Sebagai contoh: jika strArr adalah ["B:-1", "A:1", "B:3", "A:5"] maka program Anda harus mengembalikan string A:6,B:2 .

String hasil akhir Anda harus mengembalikan kunci dalam urutan abjad. Kecualikan kunci yang memiliki nilai 0 setelah dijumlahkan.

Contoh
Masukan: ["X:-1", "Y:1", "X:-4", "B:3", "X:5"]
Keluaran: B:3,Y:1

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


Keluaran: J:-1
function GroupTotals(strArr) {
biarkan resObject = {};
biarkan parsingRegExp = /(\w+):(-?\d+)/;

strArr.forEach(val => {
pertandingan const = val.match(parsingRegExp);
kunci const = cocok[1];
const numVal = Angka(cocok[2]);

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


resObject[kunci] = resObject[kunci] += numVal;
} kalau tidak {
resObject[kunci] = numVal;
}
});

kembalikan Object.keys(resObject)
.menyortir()
.map(val => {
kembalikan resObject[val] ? (val + ":" + resObject[val]) : '';
})
.filter(val => {
nilai kembali;
})
.bergabung(',');
}

// pertahankan panggilan fungsi ini di sini


GroupTotals(readline());
Perubahan Tali

Mintalah fungsi StringChanges( str ) mengambil parameter str yang diteruskan, yang akan berupa string yang berisi huruf dari alfabet, dan mengembalikan string baru
berdasarkan aturan berikut. Setiap kali huruf kapital M ditemukan, duplikat karakter sebelumnya (lalu hapus M), dan setiap kali huruf kapital N ditemukan, hapus karakter berikutnya
dari string (lalu hapus N). Semua karakter lain dalam string akan berupa huruf kecil. Misalnya: "abcNdgM" harus mengembalikan "abcgg". String terakhir tidak akan pernah kosong.

Contoh
Masukan: "MrtyNNgMM"
Keluaran: rtyggg

Masukan: "oMoMkkNrrN"
Keluaran: ooookkr
fungsi StringChanges(str) {
const strArray = str.split('');
biarkan len = strArray.panjang;

for (biarkan i = 0; i < len; i++) {


if (strArray[i] === 'M') {
jika saya) {
strArray.shift();
len -= 1;
saya -= 1;
} kalau tidak {
strArray.splice(i, 1, strArray[i - 1]);
}
} else if (strArray[i] === 'N') {
jika (i === len - 1) {
strArray.pop();
} kalau tidak {
strArray.splice(i, 2);
len -= 2;
saya -= 2;
}
}
}
return strArray.join('');
}

// pertahankan panggilan fungsi ini di sini


StringChanges(readline());

FizzBuzz

Miliki fungsi FizzBuzz( num ) ambil parameter num yang diteruskan dan kembalikan semua angka dari 1 ke num yang dipisahkan oleh spasi, tetapi ganti setiap angka yang habis
dibagi 3 dengan kata "Fizz", ganti setiap angka yang habis dibagi 5 dengan kata "Buzz", dan setiap angka yang habis dibagi 3 dan 5 dengan kata "FizzBuzz". Misalnya: jika num
adalah 16, maka program Anda harus mengembalikan string "1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16". Input akan berada dalam kisaran 1 - 50.

Contoh
Masukan: 3
Output: 1 2 Fizz
Masukan: 8
Output: 1 2 Fizz 4 Buzz Fizz 7 8
function FizzBuzz(bil) {
const returnArray = [];
for (biarkan i = 1; i <= num; i++) {
jika (!(i % 15)) {
returnArray.push('FizzBuzz');
} lain jika (!(i % 5)) {
returnArray.push('Buzz');
} lain jika (!(i % 3)) {
returnArray.push('Fizz');
} kalau tidak {
returnArray.push(i);
}
}
return returnArray.join(' ');
}

// pertahankan panggilan fungsi ini di sini


FizzBuzz(garis baca());

Jarak H

Memiliki fungsi HDistance( strArr ) mengambil larik string yang disimpan di strArr , yang hanya akan berisi dua string dengan panjang yang sama dan mengembalikan
jumlah karakter pada setiap posisi yang berbeda di antara keduanya. Sebagai contoh: jika strArr adalah ["house", "hours"] maka program Anda harus mengembalikan 2 . String akan
selalu memiliki panjang yang sama dan hanya berisi karakter huruf kecil dari alfabet dan angka.

Contoh
Masukan: ["10011", "10100"]
Keluaran: 3

Masukan: ["abcdef", "defabc"]


Keluaran: 6

function HDistance(strArr) {

const string1 = strArr[0];


const string2 = strArr[1];
const len = string1.panjang;
biarkan hitung = 0;

for (biarkan i = 0; i < len; i++) {


if (string1[i] !== string2[i]) {
hitung += 1;
}
}
jumlah pengembalian;
}

// pertahankan panggilan fungsi ini di sini


HDistance(readline());

Kasus yang berbeda

Memiliki fungsi DifferentCases( str ) ambil parameter str yang diteruskan dan kembalikan dalam format huruf besar unta di mana huruf pertama dari setiap kata
dikapitalisasi. String hanya akan berisi huruf dan beberapa kombinasi karakter tanda baca pembatas yang memisahkan setiap kata.

Sebagai contoh: jika str adalah "Daniel LikeS-coding" maka program Anda harus mengembalikan string DanielLikesCoding .

Contoh
Input: "kucing DAN * Anjing-aneh"
Keluaran: KucingDanAnjingLuar Biasa

Masukan: "abc def%g"


Keluaran: ABCDEFG

function DifferentCases(str) {
const charTest = /[a-zA-Z]/;
biarkan returnString = '';
const len = str.panjang;
const baseString = str.toLowerCase();

for (biarkan i = 0; i < len; i++) {


if (i === len - 1 && !charTest.test(baseString[i])) {
kembali returnString;
}
jika (i === 0 && charTest.test(baseString[i])) {
returnString += baseString[i].toUpperCase();
melanjutkan;
}
if (baseString[i - 1] && charTest.test(baseString[i])) {
if (!charTest.test(baseString[i - 1])) {
returnString += baseString[i].toUpperCase();
} kalau tidak {
returnString += baseString[i];
}
}
}
kembali returnString;
}

// pertahankan panggilan fungsi ini di sini


Kasus Berbeda(readline());
Keypress Setara

Buat fungsi EquivalentKeypresses( strArr ) membaca larik string yang disimpan di strArr yang akan berisi 2 string yang mewakili dua daftar penekanan tombol yang
dipisahkan koma. Tujuan Anda adalah mengembalikan string benar jika penekanan tombol menghasilkan string yang dapat dicetak yang sama dan string salah jika tidak. Penekanan
tombol dapat berupa karakter yang dapat dicetak atau backspace yang diwakili oleh -B . Anda dapat menghasilkan string yang dapat dicetak dari string penekanan tombol seperti itu
dengan membuat spasi mundur menghapus satu karakter sebelumnya.

Sebagai contoh: jika strArr berisi ["a,b,c,d", "a,b,c,c,-B,d"] output harus mengembalikan nilai true karena penekanan tombol tersebut menghasilkan string yang dapat dicetak yang
sama. Array yang diberikan tidak akan kosong. Penekanan tombol hanya akan berisi huruf dari alfabet dan spasi mundur.

Contoh
Masukan: ["a,b,c,d", "a,b,c,d,-B,d"]
Keluaran: benar

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


Keluaran: salah

function EquivalentKeypresses(strArr) {
fungsi kurangi(str) {
biarkan hasil = "";
str = str.split(",");
str.forEach(fungsi (item, indeks) {
if (str[indeks + 1] !== "-B" && str[indeks] !== "-B") {
hasil += barang;
}
})
mengembalikan hasil;
}
// kode di sini
kembali kurangi(strArr[0]) == kurangi(strArr[1]);

// pertahankan panggilan fungsi ini di sini


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

Jam tayang utama

Minta fungsi PrimeTime( num ) ambil parameter num yang diteruskan dan kembalikan string true jika parameternya adalah bilangan prima, jika tidak, kembalikan string false .
Kisarannya antara 1 dan 2^16.

Contoh
Masukan: 19
Keluaran: benar

Masukan: 110
Keluaran: salah

fungsi PrimeTime(bil) {
var engsel = Math.floor(Math.sqrt(num));
var i = 2;
uji var = benar;

//hardcode jawaban yang benar untuk 1 dan 2


jika (bil === 1) {
kembali salah
}
lain jika (num === 2) {
kembali benar
}
// jalankan loop untuk melihat apakah angka tersebut memiliki faktor integral
(selain 1)
kalau tidak {
while (i <= engsel && tes === benar) {
jika (bil % i !== 0) {
saya++;
}
kalau tidak {
tes = salah;
}
}
tes kembali
}
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
PrimeTime(readline());

Jalankan Panjang

Minta fungsi RunLength( str ) ambil parameter str yang diteruskan dan kembalikan versi terkompresi dari string menggunakan algoritma pengkodean Run-length. Algoritma ini
bekerja dengan mengambil kejadian dari setiap karakter yang berulang dan mengeluarkan angka tersebut bersama dengan satu karakter dari urutan yang berulang. Misalnya:
"wwwggopp" akan mengembalikan 3w2g1o2p . String tidak akan berisi angka, tanda baca, atau simbol apa pun.

Contoh
Masukan: "aabbcde"
Keluaran: 2a2b1c1d1e

Masukan: "wwwbbbw"
Keluaran: 3w3b1w

fungsi RunLength(str) {
strarr = str.split("");
resarr = []; // tempat untuk menempatkan hasil saya sebagaimana ditentukan;
arrlen = strarr.panjang;
hitungan = 1;

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

if (strarr[i] == strarr[i+1]) {
hitung ++;
}
kalau tidak {
var entri = hitung + strarr[i];
resarr.push(hitung + strarr[i]);
hitungan = 1;
}
}

return resarr.join("");

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
RunLength(readline());

Penggerak utama

Buat fungsi PrimeMover( num ) mengembalikan bilangan prima ke- num . Kisarannya adalah dari 1 hingga 10^4. Sebagai contoh: jika num adalah 16, hasilnya harus 53 karena 53
adalah bilangan prima ke-16.

Contoh
Masukan: 9
Keluaran: 23

Masukan: 100
Keluaran: 541
fungsi PrimeMover(bil) {
penghitung var = 0;
var AngkaUji = 0;

while (penghitung < num) {


if (primeTest(testNum + 1)) {
penghitung++;
}
testNum++;
}
mengembalikan testNum

fungsi primeTest(int) {
jika (int === 1) {
kembali salah
}
lain jika (int === 2) {
kembali benar
}
kalau tidak {
var i = 2;
var pivot = Math.ceil(Math.sqrt(int));
while (i <= pivot) {
jika (int % i === 0) {
kembali salah
}
saya++;
}
kembali benar
}
}
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
PrimeMover(readline());

Palindrom Dua

Miliki fungsi PalindromeTwo( str ) ambil parameter str yang diteruskan dan kembalikan string true jika parameternya adalah palindrome, (stringnya maju sama seperti
mundur) jika tidak, kembalikan string false . Parameter yang dimasukkan mungkin memiliki tanda baca dan simbol, tetapi tidak boleh memengaruhi apakah string tersebut benar-benar
palindrom. Misalnya: "Anne, saya memilih lebih banyak mobil balap Roma-ke-Wina" harus mengembalikan nilai true .

Contoh
Input: "Noel - lihat Leon"
Keluaran: benar

Masukan: "Perang di Tarawa!"


Keluaran: benar

function PalindromeTwo(str) {
var str = str.toLowerCase();
var strlen = str.panjang;
var arr = str.split("")
var newarr = [];
var x;
untuk (var i = 0; i < strlen; i++) {
if (arr[i].charCodeAt(0) > 96 && arr[i].charCodeAt(0)< 123) {
newarr.push(arr[i]);
}
}

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


if (newarr[j] != newarr[newarr.panjang - j - 1]) {
x = salah;
merusak;
}
kalau tidak {
x = benar;
}
}
kembali x;
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
PalindromeTwo(readline());

Divisi

Apakah fungsi Division( num1 , num2 ) mengambil kedua parameter yang diteruskan dan mengembalikan Faktor Persekutuan Terbesar . Artinya, kembalikan angka terbesar
yang masuk ke kedua angka tanpa sisa. Contoh: 12 dan 16 keduanya habis dibagi 1, 2, dan 4 jadi hasilnya harus 4. Kisaran untuk kedua parameter adalah dari 1 hingga 10^3.

Contoh
Masukan: 7 & num2 = 3
Keluaran: 1

Masukan: 36 & num2 = 54


Keluaran: 18
fungsi Pembagian(bil1,bil2) {
var bignum = Math.max(bil1, num2);
var bilangan kecil = Math.min(bil1, bilangan2);

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


jika (jumlah besar%i == 0 && jumlah kecil%i == 0) {
var maxi = i;
}
}
kembali maxi;

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
Divisi(readline());

Perebutan Tali

Mintalah fungsi StringScramble( str1 , str2 ) ambil kedua parameter yang diteruskan dan kembalikan string true jika sebagian dari karakter str1 dapat diatur ulang agar
cocok dengan str2 , jika tidak, kembalikan string false . Sebagai contoh: jika str1 adalah "rkqodlw" dan str2 adalah "world", hasilnya harus mengembalikan true . Tanda baca
dan simbol tidak akan dimasukkan dengan parameter.

Contoh
Masukan: "cdore" & str2= "coder"
Keluaran: benar

Masukan: "h3llko" & str2 = "halo"


Keluaran: salah
fungsi StringScramble(str1,str2) {

// pertama, ketuk string ke huruf kecil dan letakkan di array untuk manipulasi

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

// selanjutnya, urutkan array berdasarkan urutan abjad


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

// loop melalui arr2, periksa untuk melihat apakah setiap huruf ada di arr1, lalu
hapus dari
//arr2 dan itu dan semua huruf sebelumnya dari arr1.

var j = 0;
while (j < arr1.panjang) {
jika (arr2[0] == arr1[j]) {
arr2.shift();
arr1.splice(0,j+1);
j = 0;
}
kalau tidak {
j++;
}
}

jika (arr2 == "") {


kembali benar;
}

kalau tidak{
kembali salah;
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
StringScramble(readline());

Arith Geo II

Miliki fungsi ArithGeoII( arr ) ambil larik angka yang disimpan di arr dan kembalikan string "Aritmatika" jika urutannya mengikuti pola aritmatika atau kembalikan
"Geometris" jika mengikuti pola geometris. Jika urutan tidak mengikuti salah satu pola, kembalikan -1 . Barisan aritmatika adalah barisan yang selisih antara setiap bilangan tetap,
sedangkan dalam barisan geometri, setiap suku setelah suku pertama dikalikan dengan rasio konstan atau umum. Contoh aritmatika: [2, 4, 6, 8] dan Contoh geometri: [2, 6, 18, 54].
Angka negatif dapat dimasukkan sebagai parameter, 0 tidak akan dimasukkan, dan tidak ada larik yang berisi semua elemen yang sama.

Contoh
Masukan: [5,10,15]
Keluaran: Aritmatika

Masukan: [2,4,16,24]
Keluaran: -1

function ArithGeoII(arr) {
var len = arr.panjang;
//membangun hubungan antara dua elemen array yang berurutan
var matematikaConstant = arr[1] - arr[0];
var geoConstant = arr[1] / arr[0];
// uji array untuk melihat apakah perbedaan antar elemen sama antara setiap
pasang elemen yang berurutan. Jika ada pasangan yang gagal, setel bendera ke true
dan keluar
untuk (var i = 0; i < len - 1; i++) {
if (arr[i + 1] - arr[i] !== matematikaConstant) {
var MathTest = true;
merusak;
}
}
// jika loop di atas berhasil, maka kembalikan jawaban "Aritmatika." Jika tidak,
maka ulangi array yang menguji setiap pasangan. Jika ada pasangan yang gagal,
kembalikan -1 karena telah gagal dalam kedua tes. Jika berhasil, kembalikan
'Geometris.'
if (!mathTest) {
mengembalikan 'Aritmatika';
}
kalau tidak {
untuk (var j = 0; j < len - 1; j++) {
if (arr[j + 1] / arr[j] !== geoConstant) {
kembali -1;
}
}
kembali 'Geometris';
}
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
ArithGeoII(garis baca());

Penambahan Larik

Miliki fungsi ArrayAddition( arr ) ambil larik angka yang disimpan dalam arr dan kembalikan string benar jika ada kombinasi angka dalam larik (tidak termasuk angka
terbesar) dapat ditambahkan hingga sama dengan angka terbesar dalam larik, jika tidak kembalikan string salah . Sebagai contoh: jika arr berisi [4, 6, 23, 10, 1, 3] hasilnya harus
benar karena 4 + 6 + 10 + 3 = 23. Larik tidak akan kosong, tidak akan berisi semua elemen yang sama, dan mungkin berisi angka negatif.

Contoh
Masukan: [5,7,16,1,2]
Keluaran: salah

Masukan: [3,5,-1,8,12]
Keluaran: benar
function ArrayAddition(arr) {
target var;
var addArr = arrayPrep(arr);
var len = addArr.panjang;
var permNum = Math.pow(2, len);

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


permStr = (i).toString(2);
strlen = permStr.panjang;
penghitung var = 0;
untuk(var j = 0; j < strlen; j++) {
jika(permStr[j] === '1') {
penghitung += addArr[j];
}
}
if (penghitung === target) {
kembali benar
}
}
kembali salah

fungsi arrayPrep(arr2) {
arr.sort(fungsi(a, b){
kembali a - b
});
target = arr2.pop()
kembali arr2
}
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
ArrayAddition(readline());

Konverter Biner

Memiliki fungsi BinaryConverter( str ) mengembalikan bentuk desimal dari nilai biner. Misalnya: jika 101 diteruskan, kembalikan 5 , atau jika 1000 diteruskan, kembalikan
8.

Contoh
Masukan: "100101"
Keluaran: 37

Masukan: "011"
Keluaran: 3
fungsi BinaryConverter(str) {
penghitung var = 0;
var numleng = str.panjang;

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


var j = numleng-1-i;
var digt = parseInt(str.charAt(i));
var addit = digt * Math.pow(2, j);
penghitung = penghitung + tambah;
}

loket pengembalian;

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
BinaryConverter(readline());
Jumlah Surat

Mintalah fungsi LetterCount( str ) ambil parameter str yang diteruskan dan kembalikan kata pertama dengan jumlah huruf berulang terbanyak. Misalnya: "Hari ini, adalah
hari terbesar yang pernah ada!" harus mengembalikan terbesar karena memiliki 2 e (dan 2 t) dan datang sebelumnya yang juga memiliki 2 e. Jika tidak ada kata dengan huruf
berulang, kembalikan -1 . Kata-kata akan dipisahkan oleh spasi.

Contoh
Input: "Halo pai apel"
Keluaran: Halo

Masukan: "Tidak ada kata"


Keluaran: -1
function Jumlah Huruf(str) {

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


str = str.toLowerCase();

var wordarr = str.split(" ");

var totescore = {};


for (var i = 0; i < wordarr.length; i++) { //untuk setiap kata dalam string
var scorearr = [];
for (var j = 0; j < wordarr[i].length; j++) {//untuk setiap huruf dalam kata
jumlah var = 0;
var x = wordarr[i].charAt(j);
for (var k = 0; k < wordarr[i].length; k++) {
if (kataarr[i][k] === x) {
hitung++;
}
}
scorearr.push(hitung);
}
scorearr.sort(function(a, b) {return (ba)});
totescore[kataarr[i]] = skorarr[0];
var newarr = [];
}
for (var cnt di totescore) {
newarr.push([cnt, totescore[cnt]]);
newarr.sort(function(a, b) {return b[1] - a[1]});
}
if (baru[0][1] === 1) {
kembali -1;
}
kalau tidak {
return newarr[0][0];
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
LetterCount(readline());

Sandi Caesar

Miliki fungsi CaesarCipher( str , num ) ambil parameter str dan lakukan pergeseran Caesar Cipher di atasnya menggunakan parameter num sebagai angka penggeser. Cipher
Caesar bekerja dengan menggeser setiap huruf dalam string N menempatkan ke bawah dalam alfabet (dalam hal ini N akan menjadi num ). Tanda baca, spasi, dan kapitalisasi harus
tetap utuh. Misalnya jika stringnya adalah "Caesar Cipher" dan num adalah 2 , hasilnya harus "Ecguct Ekrjgt".

Contoh
Masukan: "Halo" & num = 4
Keluaran: Lipps

Masukan: "abc" & num = 0


Keluaran: abc
function CaesarCipher(str,num) {

var arr = str.split("");

for (var i = 0; i < str.panjang; i++) {

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

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


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

}
lain jika (x > 96 && x < 123) {
x = x - 97;
x = x + angka;
x = x%26;
x = x + 97;
arr[i] = String.fromCharCode(x);
}

kalau tidak {

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

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript, gulir ke bawah
CaesarCipher(readline());

Modus Sederhana

Miliki fungsi SimpleMode( arr ) ambil larik angka yang disimpan di arr dan kembalikan angka yang paling sering muncul (mode). Misalnya: jika arr berisi [10, 4, 5, 2, 4]
hasilnya harus 4 . Jika ada lebih dari satu mode, kembalikan yang pertama kali muncul di array ( mis. [5, 10, 10, 6, 5] harus mengembalikan 5 karena muncul pertama kali). Jika tidak
ada mode, kembalikan -1 . Larik tidak akan kosong.

Contoh
Masukan: [5,5,2,2,1]
Keluaran: 5

Masukan: [3,4,1,6,10]
Keluaran: -1
function SimpleMode(arr) {
len = arr.panjang;
var newobj = {};
var testarr = [];
for (var i = len-1; i >= 0; i--) {
hitungan = 0;
untuk (var j = 0; j < len; j++) {
jika (arr[j] === arr[i]) {
hitung++;
}
}
newobj[arr[i]] = hitung;
}
untuk (x dalam objek baru) {
testarr.push([x, objek baru[x]]);
}
testarr.sort(fungsi(a, b) {kembalikan b[1] - a[1]});

if (testarr[0][1] === 1) {
kembali -1
}
kalau tidak {
return testarr[0][0];
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
SimpleMode(readline());

Berurutan

Miliki fungsi Consecutive( arr ) ambil larik bilangan bulat yang disimpan di arr dan kembalikan jumlah bilangan bulat minimum yang diperlukan untuk membuat isi arr
berurutan dari angka terendah ke angka tertinggi. Sebagai contoh: Jika arr berisi [4, 8, 6] maka hasilnya harus 2 karena dua angka perlu ditambahkan ke array (5 dan 7) untuk
membuatnya menjadi array angka berurutan dari 4 hingga 8 . Angka negatif dapat dimasukkan sebagai parameter dan tidak ada array yang memiliki kurang dari 2 elemen.
Contoh
Masukan: [5,10,15]
Keluaran: 8

Masukan: [-2,10,4]
Keluaran: 10

fungsi Berturut-turut(arr) {
const onceArray = Array.from(new Set(arr))
.sort((val1, val2) => val1 - val2);
const finalIndex = sekaliArray.panjang - 1;
return onceArray[finalIndex] - onceArray[0] - (onceArray.length - 1);
}

// pertahankan panggilan fungsi ini di sini


Berturut-turut(readline());

Divisi Terformat

Minta fungsi FormattedDivision( num1 , num2 ) ambil kedua parameter yang diteruskan, bagi num1 dengan num2 , dan kembalikan hasilnya sebagai string dengan koma
yang diformat dengan benar dan 4 angka signifikan setelah tempat desimal. Misalnya: jika num1 adalah 123456789 dan num2 adalah 10000 , hasilnya harus "12,345.6789" .
Outputnya harus berisi angka di tempat satu meskipun itu adalah nol.

Contoh
Masukan: 2 & num2 = 3
Keluaran: 0,6667

Masukan: 10 & num2 = 10


Keluaran: 1,0000

fungsi Pembagian Terformat(num1,num2) {


// ini menyelesaikan sebagian besar masalah dalam satu langkah sederhana!
var hasil pembagian = (num1 / num2).toFixed(4);
// pisahkan string menjadi array dengan dua item: integer, desimal
var numParts = pembagianResult.split('.');
var intArray = numParts[0].split('');
var len = intArray.panjang;
var intString;

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


jika (i < (len) && (len - i + 1) % 3 === 1) {
intArray.splice(i, 0, ',');
intString = intArray.join('');
}
kalau tidak {
intString = (intString)? intString : intArray.join('');
}
}
return intString.concat('.', numParts[1]);
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
FormattedDivision(readline());

Menghitung Menit

Miliki fungsi CountingMinutes( str ) ambil parameter str yang akan diteruskan dua kali (masing-masing diformat dengan benar dengan tanda titik dua dan am atau pm)
dipisahkan oleh tanda hubung dan kembalikan jumlah total menit di antara dua waktu tersebut. Waktu akan menggunakan format jam 12 jam. Misalnya: jika str adalah 9:00-10:00
maka hasilnya harus 60 . Jika str adalah 13:00-11:00, hasilnya harus 1320 .

Contoh
Masukan: "12:30 siang-12:00 pagi"
Keluaran: 690

Masukan: "01:23-01:08"
Keluaran: 1425

function CountingMinutes(str) {
const penguji = /(\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;
pengembalian ((waktu2 - waktu1) + 1440) % 1440;
}

// pertahankan panggilan fungsi ini di sini


CountingMinutes(readline());

Langkah Permutasi

Minta fungsi PermutationStep( num ) ambil parameter num yang diteruskan dan kembalikan angka berikutnya yang lebih besar dari num menggunakan digit yang sama.
Misalnya: jika num adalah 123 kembalikan 132 , jika 12453 kembalikan 12534 . Jika suatu angka tidak memiliki permutasi yang lebih besar, kembalikan -1 ( mis. 999).

Contoh
Masukan: 11121
Keluaran: 11211

Masukan: 41352
Keluaran: 41523

function PermutationStep(num) {
var numArray = num.toString().split('').reverse();
numArray = numArray.peta(fungsi(val) {
return parseInt(val);
})
uji var = benar;
var len = numArray.panjang;
newArray = [];
while(tes) {
if (!arraybaru[0]) {
newArray[0] = numArray.shift();
}
lain jika (newArray.every(function(val) {
return val <= numArray[0];
})) {
newArray.push(numArray.shift())
}
kalau tidak {
jika (!numArray[0]) {
kembali '-1';
}
tes = salah;
}
}
newArray.sort(function(a, b) {return a - b});
var numHolder = numArray.shift();

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


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

var resultArray = newArray.concat(numArray);

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

PermutationStep(readline());

Pemeriksa Utama

Miliki fungsi PrimeChecker( num ) ambil num dan kembalikan 1 jika ada susunan num yang keluar menjadi bilangan prima, jika tidak kembalikan 0 . Contoh: jika num adalah
910, keluarannya harus 1 karena 910 dapat disusun menjadi 109 atau 019, keduanya adalah bilangan prima.

Contoh
Masukan: 98
Keluaran: 1

Masukan: 598
Keluaran: 1
fungsi PrimeChecker(num) {
//fungsi inisialisasi mengubah angka menjadi array n! Array 2-item, di mana n
adalah jumlah digit dalam num.
//Array memiliki bentuk ['',['1', '2', '3']].

workingArray = initialize(num);
var arrayLen = workingArray.panjang;

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


//permStep adalah fungsi yang memindahkan digit ke tempatnya secara berurutan,
menghasilkan
// larik n! elemen bentuk ['123',[]].
permStep(WorkArray);
}
//ini merapikan elemen array.
workingArray = workingArray.map(function(val){
kembali nilai[0];
});
//primeTest adalah fungsi untuk mengubah setiap elemen array menjadi string, lalu
menguji untuk melihat apakah itu bilangan prima.
for (var i = 0, WAlen = workingArray.length; i < WAlen; i++){
jika (primeTest(workingArray[i])){
kembali 1;
}
}
kembali 0

fungsi menginisialisasi(num) {
var arr = num.toString().split('')
var reArr = [];
for (var i = 0, len = factorial(arr.length); i < len; i++) {
resArr.push(['', arr]);
}
kembali reArr;
}
fungsi faktorial(bil) {
jika (bil <= 1) {
kembali 1;
}
kalau tidak {
mengembalikan num * faktorial (num - 1)
}
}
function permStep(arr) {
penghitung var = 0;
var len = arr[0][1].panjang;
while (penghitung < arrayLen) {
var targetArray = arr[penghitung][1];
untuk (var i = 0; i < len; i++) {
untuk (var j = 0; j < faktorial(len - 1); j++){
var copyArray = targetArray.map(function(val){
nilai kembali;
});
var pemegang = copyArray.splice(i, 1);
arr[penghitung][0] = arr[penghitung][0].concat(pemegang[0]);
arr[penghitung][1] = salinArray;
penghitung++;
}
}
}
kembali arr;
}
fungsi primeTest(stringNum) {
stringNum = parseInt(stringNum);
pivot = Math.ceil(Math.sqrt(stringNum));
jika (stringNum === 1) {
kembali salah;
}
jika (stringNum === 2) {
kembali benar;
}
kalau tidak {
for (var i = 2; i <= pivot; i++) {
jika (stringNum % i === 0) {
kembali salah;
}
}
kembali benar;
}
}
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
PrimeChecker(readline());

Sisipkan Dasbor II

Miliki fungsi DashInsertII( str ) sisipkan tanda hubung ('-') di antara masing-masing dua angka ganjil dan sisipkan tanda bintang ('*') di antara masing-masing dua angka
genap di str . Misalnya: jika str adalah 4546793, hasilnya harus 454*67-9-3 . Jangan menghitung nol sebagai angka ganjil atau genap.

Contoh
Masukan: 99946
Keluaran: 9-9-94*6

Masukan: 56647304
Keluaran: 56*6*47-304
fungsi DashInsertII(num) {
const reString = num.toString(10);
mengembalikan reString
.ganti(/([2468])(?=[2468])/g, '$1*')
.ganti(/([13579])(?=[13579])/g, '$1-');
}

// pertahankan panggilan fungsi ini di sini


DashInsertII(readline());
Tukar II

Miliki fungsi SwapII( str ) ambil parameter str dan tukar case dari setiap karakter. Kemudian, jika sebuah huruf berada di antara dua angka (tanpa pemisahan), ganti tempat
kedua angka tersebut. Sebagai contoh: jika str adalah "6Hello4 -8World, 7 yes3" hasilnya harus 4hELLO6 -8wORLD, 7 YES3 .

Contoh
Masukan: "Halo -5LOL6"
Keluaran: HALO -6lol5

Masukan: "2S 6 du5d4e"


Keluaran: 2s 6 DU4D5E

biarkan pembantu;

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

pembantu = {
caseSwap(str) {
kembali str
.membelah('')
.map((huruf) => {
if (/[AZ]/.test(huruf)) {
return letter.toLowerCase();
}
return letter.toUpperCase();
})
.bergabung('');
}
};

// pertahankan panggilan fungsi ini di sini


Tukar II(garis baca());

Pencarian Nomor

Minta fungsi NumberSearch( str ) ambil parameter str , cari semua angka dalam string, jumlahkan semuanya, lalu kembalikan angka akhir dibagi dengan jumlah total huruf
dalam string. Sebagai contoh: jika str adalah "Hello6 9World 2, Nic8e D7ay!" outputnya harus 2 . Pertama jika Anda menjumlahkan semua angka, 6 + 9 + 2 + 8 + 7 Anda
mendapatkan 32. Lalu ada 17 huruf dalam string. 32 / 17 = 1,882, dan jawaban akhirnya harus dibulatkan ke bilangan bulat terdekat, jadi jawabannya adalah 2. Hanya angka satu digit
yang dipisahkan oleh spasi yang akan digunakan di seluruh string (Jadi ini tidak akan pernah terjadi: dunia hello44444). Setiap string juga akan memiliki setidaknya satu huruf.

Contoh
Masukan: "H3ello9-9"
Keluaran: 4

Masukan: "Satu Angka*1*"


Keluaran: 0
function NumberSearch(str) {
var matchArr = str.match(/d/g);
jika (matchArr) {
var matchArr = matchArr.map(function(val) {
return parseInt(val);
});
var sum = matchArr.reduce(function(post, pre){
kembali pra + posting
});
}
kalau tidak {
jumlah var = 0;
}

var hurufArr = str.cocok(/[a-zA-Z]/g);

return Math.round(sum / letterArr.length);

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
NumberSearch(readline());

Tiga Ganda

Miliki fungsi TripleDouble( num1 , num2 ) ambil kedua parameter yang diteruskan, dan kembalikan 1 jika ada triple lurus dari angka di sembarang tempat di num1 dan juga
double lurus dari angka yang sama di num2 . Misalnya: jika num1 sama dengan 451999277 dan num2 sama dengan 41177722899 , maka kembalikan 1 karena pada parameter
pertama Anda memiliki triple lurus 999 dan Anda memiliki double lurus, 99 , dari angka yang sama pada parameter kedua. Jika tidak demikian, kembalikan 0 .

Contoh
Masukan: 465555 & num2 = 5579
Keluaran: 1

Masukan: 67844 & num2 = 66237


Keluaran: 0
fungsi TripleDouble(num1,num2) {
var holdArr = []
num1 = num1.toString();
untuk (var i = 0; i <= 9; i++) {
i = i.toString();
var regEx = RegExp baru (i+i+i);
jika (regEx.test(num1)){
holdArr.push(i);
}
}

if (holdArr === []) {


console.log(holdArr)
kembali 0;
}
kalau tidak {
untuk (var j = 0, len = holdArr.panjang; j < len; j++){
var double = RegExp baru (holdArr[j] + holdArr[j]);
konsol.log(ganda);
if (double.test(num2)) {
kembali 1;
}
}
kembali 0;
}
console.log(holdArr);
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
TripleDouble(garis baca());

Pencocokan Braket

Minta fungsi BracketMatcher( str ) ambil parameter str yang diteruskan dan kembalikan 1 jika tanda kurung dicocokkan dengan benar dan masing-masing diperhitungkan.
Jika tidak, kembalikan 0 . Sebagai contoh: jika str adalah "(halo (dunia))", maka keluarannya harus 1 , tetapi jika str adalah "((halo (dunia))" keluarannya harus 0 karena tanda
kurung tidak cocok dengan benar. Hanya "(" dan ")" yang akan digunakan sebagai tanda kurung. Jika str tidak berisi tanda kurung, kembalikan 1 .

Contoh
Masukan: "(coder)(byte))"
Keluaran: 0

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


Keluaran: 1
function BracketMatcher(str) {
var strArray = str.split('');
penghitung var = 0;
untuk (var i = 0, len = strArray.panjang; i < len; i++) {
jika (strArray[i] === "(") {
penghitung++;
}
lain jika (strArray[i] === ")") {
menangkal--;
}
if (penghitung < 0) {
kembali 0;
}
}
if (penghitung === 0) {
kembali 1;
}
kembali 0;
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
BracketMatcher(readline());
Pengurangan Tali

Mintalah fungsi StringReduction( str ) ambil parameter str yang diteruskan dan kembalikan angka terkecil yang bisa Anda dapatkan melalui metode reduksi berikut.
Caranya adalah: Hanya huruf a, b, dan c yang akan diberikan di str dan Anda harus mengambil dua karakter yang berdekatan dan menggantinya dengan yang ketiga. Misalnya "ac"
bisa diganti dengan "b" tapi "aa" tidak bisa diganti dengan apapun. Metode ini dilakukan berulang kali hingga string tidak dapat direduksi lagi, dan panjang string yang dihasilkan
akan dikeluarkan. Misalnya: jika str adalah "cab", "ca" dapat dikurangi menjadi "b" dan Anda mendapatkan "bb" (Anda juga dapat menguranginya menjadi "cc"). Pengurangan
dilakukan sehingga output harus 2 . Jika str adalah "bcab", "bc" direduksi menjadi "a", jadi Anda memiliki "aab", lalu "ab" direduksi menjadi "c", dan string terakhir "ac" direduksi
menjadi "b" sehingga hasilnya harus menjadi 1 .

Contoh
Masukan: "abcabc"
Keluaran: 2

Masukan: "cccc"
Keluaran: 4

function StringReduction(str) {

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


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

// kode di sini
return str.panjang;

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
StringReduction(readline());

Tiga Lima Kelipatan

Memiliki fungsi ThreeFiveMultiples( num ) mengembalikan jumlah semua kelipatan 3 dan 5 yang berada di bawah num . Misalnya: jika num adalah 10, kelipatan dari 3 dan 5
yang berada di bawah 10 adalah 3, 5, 6, dan 9, dan menjumlahkannya Anda mendapatkan 23, jadi program Anda harus mengembalikan 23 . Bilangan bulat yang diteruskan akan antara
1 dan 100.

Contoh
Masukan: 6
Keluaran: 8

Masukan: 1
Keluaran: 0

function ThreeFiveMultiples(num) {
var arr = [];
untuk (var i = 0; i <= num - 1; i++) {
jika (i % 3 === 0 || (i % 5 === 0 && i % 3 !== 0)) {
arr.push(i);
}
}
return arr.reduce(function(hold, val) {
tahan kembali + val;
});
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
ThreeFiveMultiples(readline());
Pohon Pencarian Biner LCA

Miliki fungsi BinarySearchTreeLCA( strArr ) ambil array string yang disimpan di strArr , yang akan berisi 3 elemen: elemen pertama akan menjadi pohon pencarian biner
dengan semua nilai unik dalam array traversal preorder , elemen kedua dan ketiga akan menjadi dua berbeda nilai, dan tujuan Anda adalah menemukan leluhur bersama terendah dari
kedua nilai ini. Sebagai contoh: jika strArr adalah ["[10, 5, 1, 7, 40, 50]", "1", "7"] maka pohon ini akan terlihat seperti berikut:

Untuk input di atas, program Anda harus mengembalikan 5 karena itu adalah nilai node yang merupakan LCA dari dua node dengan nilai 1 dan 7. Anda dapat menganggap dua node
yang Anda cari di pohon akan ada di suatu tempat di pohon.

Contoh
Masukan: ["[10, 5, 1, 7, 40, 50]", "5", "10"]
Keluaran: 10

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


Keluaran: 12

fungsi BinarySearchTreeLCA(strArr) {
// ambil item pertama dalam larik argumen dan ubah menjadi larik bilangan bulat
biarkan nodeArray = strArr[0]
.ganti(/[[]]/g, '')
.split(/,s/)
.map(val => parseInt(val, 10));

// ambil item lain dalam array argumen dan ubah menjadi bilangan bulat
biarkan num1 = parseInt(strArr[1], 10);
biarkan num2 = parseInt(strArr[2], 10);

// temukan posisi angka yang diberikan dalam larik angka


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

//tentukan yang terjauh dari dua posisi, kita tidak tertarik dengan elemen yang
melewatinya
biarkan tepi kanan = Math.max(ind1, ind2);

// lihat apakah ada item di sebelah kiri tepi kanan yang membagi dua angka yang
diberikan, itulah jawabannya
biarkan hasil = nodeArray.filter((val, ind) => (val >= Math.min(num1, num2) &&
val <= Math.max(num1, num2) && ind <= rightEdge));

//jika tidak ada, kembalikan item yang paling kiri


jika (hasil.panjang === 0) kembalikan ind1 < ind2 ? strArr[1] : strArr[2];

//jika ada, maka kembalikan sebagai string


kembalikan hasil[0].toString();
}
// pertahankan panggilan fungsi ini di sini
BinarySearchTreeLCA(readline());

Penentu Koin

Miliki fungsi CoinDeterminer( num ) ambil input, yang akan menjadi bilangan bulat mulai dari 1 hingga 250, dan kembalikan keluaran bilangan bulat yang akan menentukan
jumlah koin paling sedikit , yang bila ditambahkan, sama dengan bilangan bulat masukan. Koin didasarkan pada sistem sebagai berikut: ada koin yang mewakili bilangan bulat 1, 5,
7, 9, dan 11. Jadi misalnya: jika num adalah 16, maka keluarannya harus 2 karena Anda dapat mencapai angka 16 dengan koin 9 dan 7. Jika num adalah 25, maka hasilnya harus 3
karena Anda dapat mencapai 25 dengan 11, 9, dan 5 koin atau dengan 9, 9, dan 7 koin.

Contoh
Masukan: 6
Keluaran: 2

Masukan: 16
Keluaran: 2
function CoinDeterminer(num) {

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

jika (bil <= 22) {


kembali arr[num]
}

kalau tidak {
var ternyata = Math.floor((num - 11) / 22) * 2;
var tetap = num - (ternyata * 11);
if (tetap > 22) {
ternyata++;
tetap -= 11;
}
kembali belokan + arr[tetap];
}
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
CoinDeterminer(readline());
Pemeriksa Fibonacci

Miliki fungsi FibonacciChecker( num ) mengembalikan string ya jika angka yang diberikan adalah bagian dari deret Fibonacci. Barisan ini didefinisikan dengan: Fn = Fn-1 +
Fn-2, artinya untuk mencari Fn Anda menjumlahkan dua angka sebelumnya. Dua angka pertama adalah 0 dan 1, kemudian muncul 1, 2, 3, 5 dst. Jika num tidak ada dalam deret
Fibonacci, kembalikan string no .

Contoh
Masukan: 34
Keluaran: ya

Masukan: 54
Keluaran: tidak
function FibonacciChecker(num){

var seed1 = 0;
var seed2 = 1;
penghitung var = 0;
while (penghitung < num) {
penghitung = benih1 + benih2;
if (penghitung === num) {
kembali "ya";
}
benih1 = benih2;
seed2 = penghitung;
}

kembali "tidak";
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
FibonacciChecker(readline());

Banyak Kurung

Minta fungsi MultipleBrackets( str ) ambil parameter str yang diteruskan dan kembalikan 1 #ofBrackets jika tanda kurung dicocokkan dengan benar dan masing-masing
diperhitungkan. Jika tidak, kembalikan 0 . Contoh: jika str adalah "(halo [dunia])(!)", maka hasilnya harus 1 3 karena semua tanda kurung cocok dan ada 3 pasang tanda kurung,
tetapi jika str adalah "((halo [dunia]] )" hasilnya harus 0 karena tanda kurung tidak cocok dengan benar. Hanya "(", ")", "[", dan "]" yang akan digunakan sebagai tanda kurung. Jika
str tidak berisi tanda kurung, kembalikan 1 .

Contoh
Masukan: "(coder)[bita)]"
Keluaran: 0

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


Keluaran: 1 5

function MultipleBrackets(str) {
var regex = /[()[]]/;
if (!regex.test(str)) return 1;

var countParen = 0;
var countBrack = 0;
var countBuka = 0;
for (var i = 0, len = str.panjang; i < len; i++) {
beralih(str.charAt(i)) {
kasus '(':
countOpen++;
countParen++;
merusak;
kasus '[':
countOpen++;
countBrack++;
merusak;
kasus ')':
countParen--;
merusak;
kasus ']':
countBrack--;
merusak;
}
if (countParen < 0 || countBrack < 0) return 0;
}

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

selain itu kembalikan 0;


}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
MultipleBrackets(readline());

Waktu Bebas Paling Banyak

Atur fungsi MostFreeTime( strArr ) untuk membaca parameter strArr yang akan mewakili satu hari penuh dan akan diisi dengan peristiwa yang berlangsung dari waktu X ke
waktu Y dalam sehari. Format setiap acara adalah hh:mmAM/PM-hh:mmAM/PM . Misalnya, strArr mungkin ["10:00AM-12:30PM","02:00PM-02:45","09:10AM-09:50AM"].
Program Anda harus mengeluarkan jumlah waktu luang terlama yang tersedia antara awal acara pertama dan akhir acara terakhir Anda dalam format: hh:mm . Acara awal harus
menjadi acara paling awal di hari itu dan acara terbaru harus menjadi acara terbaru di hari itu. Keluaran untuk masukan sebelumnya akan menjadi 01:30 (dengan peristiwa paling awal
pada hari itu mulai pukul 09:10 dan peristiwa terakhir berakhir pada 14:45 ). Masukan akan berisi setidaknya 3 acara dan acara tersebut mungkin tidak berurutan.

Contoh
Masukan: ["12:15-14:00", "09:00-10:00", "10:30-12:00"]
Keluar: 00:30

Masukan: ["12:15PM-02:00PM","09:00AM-12:11","02:02PM-16:00"]
Keluar: 00:04
function MostFreeTime(strArr) {
strArr = strArr.peta(fungsi(val) {
kembali convert12to24(val);
});
strArr = strArr.peta(fungsi(val){
kembali convertToMinutes(val);
})

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

strArr = strArr.peta(fungsi(val){
valArr = val.split('-');
valArr = valArr.peta(fungsi(val){
return parseInt(val);
});
kembalikan valArr;
});
var len = strArr.panjang;

penghitung var = 0;
untuk (var i = 0; i < len - 1; i++) {
var waktu = strArr[i+1][0] - strArr[i][1];
if (waktu > penghitung) {
penghitung = waktu;
}
}

kembali returnToTime(counter);

fungsi returnToTime(penghitung){
var menit = (penghitung % 60).toString();
var jam = (Math.floor(counter / 60).toString());
jika (menit < 10) {
menit = '0' + menit;
}
jika (jam < 10) {
jam = '0' + jam;
}
kembali (jam + ':' + menit);
}

fungsi convertToMinutes(strVal) {
tempArr = strVal.split('-');
tempArr = tempArr.peta(fungsi(val){
var jam = parseInt(val.slice(0,2));
var menit = parseInt(val.slice(3));
kembali jam * 60 + menit;
});

return tempArr.join('-');
}

fungsi convert12to24(strVal) {
var tempArr = strVal.split('-');
tempArr = tempArr.peta(fungsi(val){
if (/am/i.test(val)) {
val = val.ganti('12', '00');
return val.slice(0, 5);
}
kalau tidak {
val = val.ganti('12', '00');
var jam = parseInt(val.slice(0, 2));
val = val.slice(2);
var newHour = (jam + 12).toString();
val = newHour.concat(val)
return val.slice(0, 5);
}
});
return tempArr.join('-');
}
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
Waktu Senggang(readline());

Persegi Panjang Tumpang Tindih

Atur fungsi OverlappingRectangles( strArr ) untuk membaca parameter strArr yang akan mewakili dua persegi panjang pada bidang koordinat Cartesian dan akan berisi
8 koordinat dengan 4 koordinat pertama membentuk persegi panjang 1 dan 4 terakhir membentuk persegi panjang 2. Itu akan dalam format berikut: ["(0,0),(2,2),(2,0),(0,2),(1,0),(1,2),
(6,0 ),(6,2)"] Program Anda harus menentukan luas ruang di mana dua persegi panjang tumpang tindih, dan kemudian menampilkan berapa kali wilayah yang tumpang tindih ini dapat
masuk ke dalam persegi panjang pertama . Untuk contoh di atas, wilayah yang tumpang tindih membentuk persegi panjang dengan luas 2, dan persegi panjang pertama (4 koordinat
pertama) membentuk persegi panjang dengan luas 4, sehingga program Anda harus menampilkan 2 . Semua koordinat akan berupa bilangan bulat. Jika tidak ada tumpang tindih antara
dua persegi panjang, kembalikan 0.

Contoh
Masukan: ["(0,0),(0,-2),(3,0),(3,-2),(2,-1),(3,-1),(2,3), (3,3)"]
Keluaran: 6

Masukan: ["(0,0),(5,0),(0,2),(5,2),(2,1),(5,1),(2,-1),(5, -1)"]


Keluaran: 3
JAVASCRIPT
biarkan pembantu;

const OverlappingRectangles = (strArr) => {


const persegi panjang = helpers.rectangArrays(strArr);
const rec1Points = helpers.recPoints(persegi panjang[0]);
const rec2Points = helpers.recPoints(persegi panjang[1]);

// membuat objek nilai untuk memberi nama pada sisi persegi panjang untuk
membuatnya
// lebih mudah divisualisasikan.
nilai const = {
rec1Top: rec1Points[1][1],
rec1Right: rec1Points[1][0],
rec1Bawah: rec1Points[0][1],
rec1Left: rec1Points[0][0],
rec2Top: rec2Points[1][1],
rec2Right: rec2Points[1][0],
rec2Bawah: rec2Points[0][1],
rec2Left: rec2Points[0][0]
};
const rec1Area = (nilai.rec1Atas - nilai.rec1Bawah) * (nilai.rec1Kanan -
nilai.rec1Left);

/* uji tumpang tindih */


jika (nilai.rec2Bott >= nilai.rec1Top ||
nilai.rec1Bott >= nilai.rec2Top ||
nilai.rec1Left >= nilai.rec2Right ||
nilai.rec2Left >= nilai.rec1Right) {
kembali 0;
}

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


const overLapBottom = Math.max(values.rec1Bottom, values.rec2Bottom);
const overLapRight = Math.min(nilai.rec1Right, nilai.rec2Right);
const overLapLeft = Math.max(nilai.rec1Left, nilai.rec2Left);
const overLapArea = (overLapTop - overLapBottom) * (overLapRight -
overLapLeft);
kembalikan overLapArea === 0 ? 0 : Math.trunc(rec1Area / overLapArea);
};

pembantu = {
/* fungsi RectangArrays ta105816
kes input dari masalah ini dan mengembalikan a
larik dua elemen, setiap elemen menjadi larik dari titik-titik di baris pertama
atau
persegi panjang kedua, masing-masing. */
rectangArrays(strArr) {
const str = strArr[0];
biarkan bigArray = str.split('),(');
bigArray = bigArray.peta((val) => {
const cleanVal = val.replace(/[()]/g, '');
const pointArray = cleanVal.split(',');
pointArray[0] = parseInt(pointArray[0], 10);
pointArray[1] = parseInt(pointArray[1], 10);
kembalikan array titik;
});
return [bigArray.splice(0, 4), bigArray];
},
/*
fungsi recPoints mengambil larik titik pada kisi kartesius (dari sebuah
persegi panjang yang disejajarkan) dan mengembalikan larik dua titik, yang
mewakili yang lebih rendah
sudut kiri dan sudut kanan atas persegi panjang.
*/
recPoints(arr) {
const yVals = arr.map(val => val[1]);
const xVals = arr.map(val => val[0]);
const yMin = Math.min(...yVals);
const yMax = Math.max(...yVals);
const xMin = Math.min(...xVals);
const xMax = Math.max(...xVals);
kembalikan [[xMin, yMin], [xMax, yMax]];
}
};

// pertahankan panggilan fungsi ini di sini


Persegi Panjang Tumpang Tindih(readline());

Lihat Katakan Urutan

Mintalah fungsi LookSaySequence( num ) ambil parameter num yang diteruskan dan kembalikan angka berikutnya dalam urutan sesuai dengan aturan berikut: untuk
menghasilkan angka berikutnya dalam urutan, baca digit dari angka yang diberikan, hitung jumlah digit dalam kelompok dengan angka yang sama. Misalnya, barisan yang dimulai
dengan 1 adalah: 1, 11, 21, 1211, ... Angka 11 berasal dari "satu 1" sebelum itu dan 21 berasal dari "dua 1" sebelumnya. Jadi program Anda harus mengembalikan nomor berikutnya
dalam urutan yang diberikan num .

Contoh
Masukan: 1211
Keluaran: 111221

Masukan: 2466
Keluaran: 121426
fungsi LookSaySequence(num) {
var numArr = prepFunc(bil);
var newArr = [];
var storeArr = [];

while (numArr.panjang > 0) {


if (!newArr.length) {
newArr.push(numArr.shift());
if (!numArr.panjang) {
storeArr.push('1');
storeArr.push(newArr[0]);
return parseInt(storeArr.join(''));
}
}
lain jika (newArr[newArr.length - 1] === numArr[0]) {
newArr.push(numArr.shift());
if (!numArr.panjang) {
storeArr.push(newArr.length.toString());
storeArr.push(newArr[0]);
return parseInt(storeArr.join(''));
}
}
kalau tidak {
storeArr.push(newArr.length.toString());
storeArr.push(newArr[0]);
newArr = [];
}
}
console.log(storeArr);

// kode di sini
nomor kembali;
fungsi prepFunc(num) {
var str = num.toString();
var arr = str.split('');
kembali arr;
}
}

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
LookSaySequence(readline());

Daftar Berbeda

Mintalah fungsi DistinctList( arr ) ambil larik angka yang disimpan di arr dan tentukan jumlah total entri duplikat. Misalnya jika masukannya adalah [1, 2, 2, 2, 3] maka
program Anda harus mengeluarkan 2 karena ada dua duplikat dari salah satu elemen.

Contoh
Masukan: [0,-2,-2,5,5,5]
Keluaran: 3

Masukan: [100,2,101,4]
Keluaran: 0
function DistinctList(arr) {
const strippedArr = new Set(arr);
return arr.length - strippedArr.size;
}
DistinctList(readline());

Pengkodean Angka

Memiliki fungsi NumberEncoding( str ) mengambil parameter str dan menyandikan pesan sesuai dengan aturan berikut: menyandikan setiap huruf ke posisi bernomor yang
sesuai dalam alfabet. Simbol dan spasi juga akan digunakan dalam input. Misalnya: jika str adalah "af5c a#!" maka program Anda harus mengembalikan 1653 1#! .

Contoh
Masukan: "halo 45"
Keluaran: 85121215 45

Masukan: "jaj-a"
Keluaran: 10110-1
fungsi NumberEncoding(str) {
str = str.toLowerCase();
var arr = str.split("");
var len = arr.panjang;

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


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

str = arr.join("");
// kode di sini
kembali str;

// pertahankan panggilan fungsi ini di sini


// untuk melihat cara memasukkan argumen dalam JavaScript gulir ke bawah
NumberEncoding(readline());

Pemilih Saham

Miliki fungsi StockPicker( arr ) mengambil larik angka yang disimpan dalam arr yang akan berisi bilangan bulat yang mewakili jumlah dalam dolar yang bernilai satu saham,
dan mengembalikan keuntungan maksimum yang dapat diperoleh dengan membeli saham pada hari x dan menjual saham pada hari y dimana y > x . Sebagai contoh: jika arr adalah
[44, 30, 24, 32, 35, 30, 40, 38, 15] maka program Anda harus mengembalikan 16 karena pada indeks 2 saham bernilai $24 dan pada indeks 6 saham bernilai $40 , jadi jika Anda
membeli saham tersebut pada harga 24 dan menjualnya pada harga 40, Anda akan memperoleh keuntungan sebesar $16, yang merupakan keuntungan maksimum yang dapat diperoleh
dengan daftar harga saham ini.

Jika tidak ada keuntungan yang dapat diperoleh dengan harga saham, maka program Anda harus mengembalikan -1 . Misalnya: arr adalah [10, 9, 8, 2] maka program Anda harus
mengembalikan -1 .

Contoh
Masukan: [10,12,4,5,9]
Keluaran: 5

Masukan: [14,20,4,12,5,11]
Keluaran: 8

function StockPicker(arr) {
var maksUntung = 0;
var len = arr.panjang;

while (arr.panjang > 1) {


var mulai = arr.shift();
var max = Math.max.apply(null, arr);
var untung = maks - mulai;
if (laba > untung maksimal) {
keuntunganmaksimal = keuntungan;
}
}

kembalikan keuntungan maksimal=== 0 ? -1 : keuntungan maksimal;

// pertahankan panggilan fungsi ini di sini


StockPicker(readline());

Max Subarray

Miliki fungsi MaxSubarray( arr ) ambil larik angka yang disimpan dalam arr dan tentukan jumlah terbesar yang dapat dibentuk oleh subarray yang berdekatan dalam larik.
Misalnya, jika arr adalah [-2, 5, -1, 7, -3] maka program Anda harus mengembalikan 11 karena jumlahnya dibentuk oleh subarray [5, -1, 7]. Menambahkan elemen apa pun sebelum
atau sesudah subarray ini akan membuat jumlahnya lebih kecil.
Contoh
Masukan: [1, -2, 0, 3]
Keluaran: 3

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


Keluaran: 8
fungsi MaxSubarray(arr) {
// kami menggunakan nomor ini beberapa kali
biarkan menghitung = Math.max(...arr),
indexArray = [];

// urus kasus tanpa angka positif


if (hitung <= 0) {
jumlah pengembalian;
}

// dapatkan daftar (indexArray) dari indeks semua entri positif


arr.forEach((val, ind) => {
jika (val > 0) {
indexArray.push(ind)
}
});
// kita tahu bahwa maksimum harus memiliki angka positif di setiap ujung subarray
(jika ada beberapa
// bilangan positif. Tentu saja, subArray bisa memiliki panjang satu. Jadi
bandingkan saja semua kemungkinan
//subarray.
biarkan leng = indexArray.panjang;
for (biarkan i = 0; i < leng; i++) {
for (biarkan j = i + 1; j < leng; j++) {
biarkan subArraySum = arr
.slice(indexArray[i], indexArray[j] + 1)
.mengurangi((val1, val2) => val1 + val2);
// perbarui jumlah jika subArraySum lebih besar
hitung = Math.max(hitung, subArraySum);
}
}
jumlah pengembalian;
}

// pertahankan panggilan fungsi ini di sini


MaxSubarray(garis baca());

Angka Hilang

Miliki fungsi MissingDigit( str ) ambil parameter str , yang akan menjadi rumus matematika sederhana dengan tiga angka, operator tunggal (+, -, *, atau /) dan tanda sama
dengan (=) dan kembalikan digit yang melengkapi persamaan. Di salah satu angka dalam persamaan, akan ada karakter x , dan program Anda harus menentukan digit mana yang
hilang. Misalnya, jika str adalah "3x + 12 = 46" maka program Anda akan menampilkan 4 . Karakter x dapat muncul di salah satu dari tiga angka dan ketiga angka tersebut akan
lebih besar dari atau sama dengan 0 dan kurang dari atau sama dengan 1000000.
Contoh
Masukan: "4 - 2 = x"
Keluaran: 2

Masukan: "1x0 * 12 = 1200"


Keluaran: 0

fungsi Angka yang Hilang(str) {


for (biarkan i = 0; i < 10; i++) {
const StringBaru = str.replace(/x/, i.toString()).replace(/=/, '===');
if (eval(newString)) {
kembalikan saya;
}
}
kembali 'gagal';
}

// pertahankan panggilan fungsi ini di sini


MissingDigit(readline());

K Karakter Unik

Miliki fungsi KUniqueCharacters( str ) ambil parameter str yang diteruskan dan temukan substring terpanjang yang berisi k karakter unik, di mana k akan menjadi karakter
pertama dari string. Substring akan dimulai dari posisi kedua dalam string karena karakter pertama adalah bilangan bulat k . Misal: jika str adalah "2aabbacbaa" ada beberapa
substring yang semuanya berisi 2 karakter unik, yaitu: ["aabba", "ac", "cb", "ba"], tetapi program Anda harus mengembalikan "aabba" karena adalah substring terpanjang. Jika ada
beberapa substring terpanjang, maka kembalikan substring pertama yang ditemukan dengan panjang terpanjang. k akan berkisar dari 1 sampai 6.

Contoh
Masukan: "3aabacbebebe"
Keluaran: cbebebe

Masukan: "2aabbcbbbadef"
Keluaran: bbcbb
function KUniqueCharacters(str) {
const jumlah = parseInt(str.slice(0,1), 10);
cons subjectString = str.slice(1);
const len = subjectString.length;
biarkan maxCount = 0;

for (biarkan i = 0; i < len; i++) {


penghitung = 0;
biarkan pemegang = [];
biarkan charArray = [];
for (biarkan j = i; j < len; j++) {
biarkan char = subjectString.charAt(j);
if (charArray.some(val => val === char)) {
pemegang.push(char);
penghitung++;
jika (j === len - 1) {
if (penghitung > maxCount) {
hasil = Array.dari (pemegang);
}
maxCount = Math.max(counter, maxCount);
}
melanjutkan;
} kalau tidak {
if (charArray.panjang < hitungan) {
penghitung++;
charArray.push(char);
pemegang.push(char)
melanjutkan;
} kalau tidak {
if (penghitung > maxCount) {
hasil = Array.dari(pemegang);
}
maxCount = Math.max(counter, maxCount);
merusak;
}
}
}
}
kembali result.join('');
}

// pertahankan panggilan fungsi ini di sini


KUniqueCharacters(readline());

Lubang Bitmap

Miliki fungsi BitmapHoles( strArr ) ambil larik string yang disimpan di strArr , yang akan menjadi matriks 2D dari 0 dan 1, dan tentukan berapa banyak lubang, atau
wilayah yang berdekatan dari 0, yang ada dalam matriks. Wilayah yang bersebelahan adalah wilayah di mana ada grup 0 yang terhubung menuju satu atau lebih dari empat arah: atas,
bawah, kiri, atau kanan. Sebagai contoh: jika strArr adalah ["10111", "10101", "11101", "11111"], maka ini akan terlihat seperti matriks berikut:

101 1 1
10101
1 1 101
1 1 1 1 1

Untuk masukan di atas, program Anda harus mengembalikan 2 karena ada dua daerah bersebelahan yang terpisah dari 0, yang membuat "lubang" dalam matriks. Anda dapat
menganggap input tidak akan kosong.

Contoh
Masukan: ["01111", "01101", "00011", "11110"]
Keluaran: 3

Masukan: ["1011", "0010"]


Keluaran: 2
function BitmapHoles(strArr) {
const thisObj = {};

thisObj.fullArray = strArr.peta(baris => baris.split(''));


thisObj.fullArray.forEach((baris, barisNum, arr) => {
baris.untukEach((val, colNum) => {

// dapat menghilangkan hotTest dan cukup gunakan perayap di sini.


if (val === '1') {
} kalau tidak {
arr[Jumlahbaris][JumlahKolom] = 'H';
crawler([[rowNum,colNum]])
}
});
});
kembalikan thisObj.fullArray.reduce((baris1, baris2) => {
kembali baris1.concat(baris2);
}).filter(val => val === 'H').panjang;

perayap fungsi (pointsArray) {


biarkan newArray = [];
pointsArray.forEach(point => {

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


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

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


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

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


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

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


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

if (BaruArray.panjang === 0) {
kembali;
}
crawler(BaruArray);
}
}

// pertahankan panggilan fungsi ini di sini


BitmapHoles(readline());
Pohon Simetris

Miliki fungsi SymmetricTree( strArr ) ambil larik string yang disimpan di strArr , yang akan mewakili pohon biner, dan tentukan apakah pohon itu simetris (gambar cermin
dari dirinya sendiri). Larik akan diimplementasikan mirip dengan bagaimana tumpukan biner diimplementasikan, kecuali pohonnya mungkin tidak lengkap dan node NULL pada
tingkat pohon mana pun akan diwakili dengan # . Sebagai contoh: jika strArr adalah ["1", "2", "2", "3", "#", "#", "3"] maka pohon ini akan terlihat seperti berikut:

Untuk input di atas, program Anda harus mengembalikan string yang benar karena pohon binernya simetris.

Contoh
Masukan: ["4", "3", "4"]
Keluaran: salah

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


Keluaran: benar
function SymmetricTree(strArr) {
misalkan x = 1;
biarkan hitung = 0;
while (strArr.panjang) {
x++;
jika (x > 10) pecah;
biarkan panjang = Math.pow(2, hitung);
biarkan newArray = strArr.splice(0, panjang);
biarkan revArray = Array.from(newArray).reverse();
if(!sameAs(newArray, revArray)) {
kembali salah;
}
count = newArray.filter(val => val !== '#').panjang;
}
kembali benar;
}

fungsi sameAs(arr1, arr2) {


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

// pertahankan panggilan fungsi ini di sini


SymmetricTree(readline());

LCA Pohon Biner

Miliki fungsi BinaryTreeLCA( strArr ) ambil array string yang disimpan di strArr , yang akan berisi 3 elemen: elemen pertama akan menjadi pohon biner dengan semua nilai
unik dalam format yang mirip dengan bagaimana tumpukan biner diimplementasikan dengan node NULL di mana saja level diwakili dengan # , elemen kedua dan ketiga akan menjadi
dua nilai yang berbeda, dan tujuan Anda adalah menemukan nenek moyang terendah dari kedua nilai ini.

Misalnya: jika strArr adalah ["[12, 5, 9, 6, 2, 0, 8, #, #, 7, 4, #, #, #, #]", "6", "4"] maka pohon ini terlihat seperti berikut:
Untuk input di atas, program Anda harus mengembalikan 5 karena itu adalah nilai node yang merupakan LCA dari dua node dengan nilai 6 dan 4. Anda dapat menganggap dua node
yang Anda cari di pohon akan ada di suatu tempat di pohon.

Contoh
Masukan: ["[5, 2, 6, 1, #, 8, #]", "2", "6"]
Keluaran: 5

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


Keluaran: 12

fungsi BinaryTreeLCA(strArr) {
//pertama, ubah string yang mewakili pohon menjadi array angka
biarkan arrList = strArr[0]
.ganti(/[[]]/g, '')
.split(/,s*/)
.map(val => val !== '#' ? parseInt(val, 10) : "#");

//ubah angka yang diberikan (string) menjadi angka


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

// dapatkan indeks dari angka yang diberikan. Inilah yang benar-benar kita
butuhkan
biarkan ind1 = Math.max(arrList.findIndex(val => val === num1) + 1,
arrList.findIndex(val => val === num2) + 1);
biarkan ind2 = Math.min(arrList.findIndex(val => val === num1) + 1,
arrList.findIndex(val => val === num2) + 1);

// dapatkan dua angka ke kedalaman yang sama di pohon


while (Math.trunc(Math.log2(ind1)) !== Math.trunc(Math.log2(ind2))) {
ind1 = Math.trunc(ind1 / 2);
}

// temukan leluhur bersama di pohon


while (ind1 !== ind2) {
ind1 = Math.trunc(ind1 / 2);
ind2 = Math.trunc(ind2 / 2);
}

// kembalikan nomor yang sesuai dengan indeks yang ditentukan


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

// pertahankan panggilan fungsi ini di sini


BinaryTreeLCA(readline());

Cache LRU

Miliki fungsi LRUCache( strArr ) ambil larik karakter yang disimpan di strArr , yang akan berisi karakter mulai dari A hingga Z dalam beberapa urutan arbitrer, dan tentukan
elemen apa yang masih tersisa dalam cache virtual yang dapat menampung hingga 5 elemen dengan LRU algoritma cache diimplementasikan. Misalnya: jika strArr adalah ["A",
"B", "C", "D", "A", "E", "D", "Z"], maka langkah-langkah berikut diambil:

(1) A tidak ada di cache, jadi akses dan simpan di cache.


(2) B tidak ada di cache, jadi akses dan simpan juga di cache. Sejauh ini cache berisi: ["A", "B"].
(3) Hal yang sama berlaku untuk C, jadi cache sekarang: ["A", "B", "C"].
(4) Hal yang sama berlaku untuk D, jadi cache sekarang: ["A", "B", "C", "D"].
(5) Sekarang A diakses lagi, tetapi sudah ada di cache sehingga dibawa ke depan: ["B", "C", "D", "A"].
(6) E tidak ada di cache, jadi akses dan simpan di cache: ["B", "C", "D", "A", "E"].
(7) D diakses lagi sehingga dibawa ke depan: ["B", "C", "A", "E", "D"].
(8) Z tidak ada di cache jadi tambahkan ke depan dan hapus elemen yang terakhir digunakan: ["C", "A", "E", "D", "Z"].

Sekarang langkah-langkah caching telah selesai dan program Anda harus mengembalikan urutan cache dengan elemen-elemen yang digabungkan menjadi string, dipisahkan dengan
tanda hubung. Oleh karena itu, untuk contoh di atas, program Anda harus mengembalikan CAEDZ .

Contoh
Masukan: ["A", "B", "A", "C", "A", "B"]
Keluaran: KAB

Masukan: ["A", "B", "C", "D", "E", "D", "Q", "Z", "C"]
Keluaran: EDQZC
function LRUCache(strArr) {
biarkan cache = [];
// sangat sederhana, telusuri array yang diberikan dan operasikan pada cache
strArr.forEach(val => {
if (!cache.includes(val)) {
//seru! Salah satu kali pertama saya pernah mengambil keuntungan dari
fakta
// bahwa push() mengembalikan panjang array setelah push, bukan
//array itu sendiri
if (cache.push(val) > 5) {
cache.shift();
}
} kalau tidak {
cache.splice(cache.findIndex(cacheVal => val === cacheVal), 1);
cache.push(val);
}
});

kembalikan cache.join('-');

// pertahankan panggilan fungsi ini di sini


LRUCache(readline());
sedang

Diskusi Solusi
Pembuat Pohon

Memiliki fungsi TreeConstructor( strArr ) mengambil array string yang disimpan dalam strArr , yang akan berisi pasangan bilangan bulat dalam format berikut: (i1,i2) , di
mana i1 mewakili simpul anak dalam pohon dan bilangan bulat kedua i2 menandakan bahwa itu adalah induk dari i1 . Sebagai contoh: jika strArr adalah ["(1,2)", "(2,4)", "(7,2)"],
maka ini membentuk pohon berikut:

yang dapat Anda lihat membentuk pohon biner yang tepat. Program Anda harus, dalam hal ini, mengembalikan string yang benar karena pohon biner yang valid dapat dibentuk. Jika
pohon biner yang tepat tidak dapat dibentuk dengan pasangan bilangan bulat, maka kembalikan string false . Semua bilangan bulat di dalam pohon akan menjadi unik, yang berarti
hanya ada satu simpul di pohon dengan nilai bilangan bulat yang diberikan.

Contoh
Masukan: ["(1,2)", "(2,4)", "(5,7)", "(7,2)", "(9,5)"]
Keluaran: benar

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


Keluaran: salah

//metode berikut mengeluarkan pohon yang gagal dalam salah satu dari tiga pengujian:
i) apakah hanya ada satu simpul teratas, ii) apakah ada simpul yang memiliki lebih
banyak
// dari 2 anak, atau iii) adalah nilai simpul apa pun yang diulang. Jika lulus semua
tes ini, maka itu harus mewakili pohon biner.

function TreeConstructor(strArr) {
// hapus spasi dari input (salah satu tes memiliki input yang buruk)
strArr = strArr.map(val => val.replace(/s/g, ''));

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


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

biarkan anak = strArr.map(val => regExChildPattern.exec(val)[1]);


biarkan orang tua = strArr.map(val => regExParentPattern.exec(val)[1]);

//periksa untuk memastikan semua turunan unik


biarkan childSet = Set baru (anak-anak);
if (children.length !== childSet.size) {
kembali salah;
}
// uji apakah ada simpul induk yang memiliki lebih dari 2 anak
biarkan parentObj = {};
orang tua.untukEach(val => {
if (!parentObj[val]) {
parentObj[val] = 1;
} kalau tidak {
parentObj[val]++;
}
})
untuk (biarkan myKey di parentObj) {
if (parentObj[myKey] > 2) return false;
}

//pastikan ada satu, dan hanya satu, top dog


biarkan uniqParents = Array.from(set baru(orang tua))

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


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

kembali benar;

// pertahankan panggilan fungsi ini di sini


TreeConstructor(readline());

Array Min Melompat

Mintalah fungsi ArrayMinJumps( arr ) ambil larik bilangan bulat yang disimpan di arr , di mana setiap bilangan bulat mewakili jumlah langkah maksimum yang dapat
dilakukan dari posisi itu, dan tentukan jumlah lompatan paling sedikit yang dapat dilakukan untuk mencapai akhir Himpunan. Sebagai contoh: jika arr adalah [1, 5, 4, 6, 9, 3, 0, 0, 1,
3] maka program Anda harus menampilkan angka 3 karena Anda dapat mencapai akhir array dari awal melalui berikut ini langkah-langkah: 1 -> 5 -> 9 -> AKHIR atau
1 -> 5 -> 6 -> AKHIR. Kedua kombinasi ini menghasilkan rangkaian 3 langkah. Dan seperti yang Anda lihat, Anda tidak selalu harus mengambil jumlah lompatan maksimum pada
posisi tertentu, Anda dapat melakukan lebih sedikit lompatan meskipun jumlahnya lebih tinggi.

Jika tidak mungkin mencapai akhir array, kembalikan -1 .

Contoh
Masukan: [3, 4, 2, 1, 1, 100]
Keluaran: 2

Masukan: [1, 3, 6, 8, 2, 7, 1, 2, 1, 2, 6, 1, 2, 1, 2]
Keluaran: 4

function ArrayMinJumps(arr) {
constArrBaru = Array.dari(arr);
const len = newArr.panjang;
for (biarkan i = len - 1; i >= 0; i--) {
const toGo = len - (i + 1);
jangkauan const = newArr[i];
jika (untuk Pergi === 0) {
newArr[i] = {
ind: saya,
bergerak: 0
};
} else if (reach >= toGo) {
newArr[i] = {
ind: saya,
bergerak: 1
};
} kalau tidak {
const subArr = newArr.slice(i + 1);
const subArrLen = subArr.panjang;
const countHolder = [];
for (biarkan j = 0; j < subArrLen; j++) {
if (typeof subArr[j] === 'objek' && newArr[i] > j) {
countHolder.push(subArr[j].bergerak);
}
}
if (countHolder.panjang) {
newArr[i] = {
ind: saya,
gerakan: Math.min(...countHolder) + 1
};
}
}
}
return typeof newArr[0].moves === 'undefined' ? -1 : newArr[0].bergerak;
}

// pertahankan panggilan fungsi ini di sini


ArrayMinJumps(readline());

Nilai Terdekat Lebih Kecil

Miliki fungsi NearestSmallerValues( arr ) ambil array bilangan bulat yang disimpan di arr , dan untuk setiap elemen dalam daftar, cari semua nilai sebelumnya untuk
elemen terdekat yang lebih kecil dari elemen saat ini dan buat daftar baru dari angka-angka ini. Jika tidak ada elemen sebelum posisi tertentu yang lebih kecil, masukan a -1 .
Misalnya: jika arr adalah [5, 2, 8, 3, 9, 12] maka daftar nilai terdekat yang lebih kecil adalah [-1, -1, 2, 2, 3, 9]. Logikanya adalah sebagai berikut:

Untuk 5, tidak ada nilai sebelumnya yang lebih kecil sehingga daftarnya sejauh ini adalah [-1]. Untuk 2, juga tidak ada nilai sebelumnya yang lebih kecil, jadi daftarnya sekarang
adalah [-1, -1]. Untuk 8, nilai terdekat yang lebih kecil adalah 2 sehingga daftarnya sekarang adalah [-1, -1, 2]. Untuk 3, nilai terdekat yang lebih kecil juga 2, jadi daftarnya sekarang
adalah [-1, -1, 2, 2]. Ini berlanjut untuk menghasilkan jawaban di atas. Program Anda harus mengambil daftar terakhir ini dan mengembalikan elemen sebagai string yang dipisahkan
oleh spasi: -1 -1 2 2 3 9

Contoh
Masukan: [5, 3, 1, 9, 7, 3, 4, 1]
Keluaran: -1 -1 -1 1 1 1 3 1

Masukan: [2, 4, 5, 1, 7]
Keluaran: -1 2 4 -1 1

function NearestSmallerValues(arr) {
constArray hasil = [];
arr.forEach((val, ind) => {
const preArray = arr.slice(0, ind).reverse();
resultArray.push(preArray.find(item => item <= val) !== undefined ?
preArray.find(item => item <= val) : -1);
});
kembalikan resultsArray.join(' ');
}
NearestSmallerValues(readline());

Matriks Spiral

Mintalah fungsi MatrixSpiral( strArr ) membaca larik string yang disimpan dalam strArr yang akan mewakili matriks 2D N, dan program Anda harus mengembalikan
elemen setelah mencetaknya dalam urutan spiral searah jarum jam. Anda harus mengembalikan daftar elemen yang baru dibentuk sebagai string dengan angka yang dipisahkan koma.
Misalnya: jika strArr adalah "[1, 2, 3]", "[4, 5, 6]", "[7, 8, 9]" maka ini akan terlihat seperti matriks 2D berikut:

1 2 3
4 5 6
7 8 9

Jadi program Anda harus mengembalikan elemen matriks ini dalam urutan spiral searah jarum jam yaitu: 1,2,3,6,9,8,7,4,5

Contoh
Masukan: ["[1, 2]", "[10, 14]"]
Keluaran: 1,2,14,10

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


Keluaran: 4,5,6,5,2,9,2,4,5,1,1,2
function MatrixSpiral(strArr) {
//pertama-tama, buat array dari array bilangan [ [ '1', '2', '3' ], [ '4',
'5', '6' ], [ '7', '8', ' 9' ] ]
strArr = strArr.peta(val => {
return val.replace(/[\[\]\s]/g, '').split(',');
})

//selanjutnya, buat string untuk menyimpan nilai


biarkan res = [];
biarkan pemegang = [];
// buat salinan array, untuk berjaga-jaga;
biarkan arr = Array.from(strArr);

biarkan dinding kanan = (val) => {


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

biarkan dinding kiri = (val) => {


pemegang.push(val.shift());

};

while(arr.panjang) {
res.push(...arr.shift());
if (!arr.panjang) {
merusak;
}
arr.forEach(rightWall);
if (!arr.panjang) {
merusak;
}
res.push(...arr.pop().reverse());
if (!arr.panjang) {
merusak;
}
arr.forEach(leftWall);
res.push(holder.reverse());
pemegang = [];
}

return res.join(',');
}

// pertahankan panggilan fungsi ini di sini


MatrixSpiral(readline());

Pemisahan Kata

Buat fungsi WordSplit( strArr ) membaca larik string yang disimpan di strArr , yang akan berisi 2 elemen: elemen pertama akan menjadi urutan karakter, dan elemen kedua
akan menjadi string panjang kata yang dipisahkan koma, dalam urutan abjad , yang mewakili kamus dengan panjang sembarang. Misalnya: strArr dapat berupa: ["hellocat",
"apple,bat,cat,goodbye,hello,yellow,why"]. Tujuan Anda adalah untuk menentukan apakah elemen pertama dalam masukan dapat dipecah menjadi dua kata, di mana kedua kata
tersebut ada dalam kamus yang disediakan dalam masukan kedua. Dalam contoh ini, elemen pertama dapat dipisahkan menjadi dua kata: halo dan kucing karena kedua kata tersebut
ada dalam kamus.

Program Anda harus mengembalikan dua kata yang ada di kamus dipisahkan dengan koma. Jadi untuk contoh di atas, program Anda harus mengembalikan hello,cat . Hanya ada satu
cara yang benar untuk membagi elemen karakter pertama menjadi dua kata. Jika tidak ada cara untuk memisahkan string menjadi dua kata yang ada di kamus, kembalikan string not
possible . Unsur pertama itu sendiri tidak akan pernah ada dalam kamus sebagai kata yang sebenarnya.

Contoh
Masukan: ["baseball", "a,all,b,ball,bas,base,cat,code,d,e,quit,z"]
Keluaran: alas, bola

Masukan: ["abcgefd", "a,ab,abc,abcg,b,c,anjing,e,efd,zzzz"]


Keluaran: abcg,efd

fungsi Pemisahan Kata(strArr) {


biarkan target = strArr[0];
biarkan bagian = strArr[1].split(/,/);
biarkan pemula = [];
biarkan ujung = [];
biarkan res = '';
parts.forEach(val => {
regEx1 = new RegExp(`\^${val}`);
regEx2 = new RegExp(`${val}\$`);
if (regEx1.test(target)) {
starters.push(val);
}
if (regEx2.test(target)) {
enders.push(val);
}
});
starters.forEach(mulai => {
enders.forEach(end => {
if (awal + akhir === target) {
res = `${mulai},${akhir}`;
}
})
})
kembalikan res || 'tidak memungkinkan';
}

// pertahankan panggilan fungsi ini di sini


WordSplit(readline());

Pencarian Pasangan

Minta fungsi PairSearching( num ) ambil parameter num yang diteruskan dan lakukan langkah-langkah berikut. Pertama-tama ambil semua digit tunggal dari nomor input (yang
akan selalu menjadi bilangan bulat positif lebih besar dari 1) dan tambahkan masing-masing ke dalam daftar. Kemudian ambil nomor input dan kalikan dengan salah satu bilangan
bulatnya sendiri, lalu ambil nomor baru ini dan tambahkan setiap digit ke daftar aslinya. Lanjutkan proses ini hingga pasangan yang berdekatan dengan nomor yang sama muncul di
daftar. Program Anda harus mengembalikan jumlah perkalian paling sedikit yang diperlukan untuk menemukan pasangan angka duplikat yang berdekatan.

Sebagai contoh: jika num adalah 134 maka pertama-tama tambahkan setiap bilangan bulat ke dalam daftar: [1, 3, 4]. Sekarang jika kita mengambil 134 dan mengalikannya dengan 3
(yang merupakan salah satu bilangan bulatnya sendiri), kita mendapatkan 402. Sekarang jika kita menambahkan setiap bilangan bulat baru ini ke dalam daftar, kita mendapatkan: [1, 3,
4, 4, 0, 2]. Kami menemukan pasangan angka rangkap yang berdekatan, yaitu 4 dan 4. Jadi untuk masukan ini, program Anda harus mengembalikan 1 karena hanya butuh 1 perkalian
untuk menemukan pasangan ini.

Contoh lain: jika num adalah 46 maka kita menambahkan bilangan bulat ini ke dalam daftar: [4, 6]. Jika kita mengalikan 46 dengan 6, kita mendapatkan 276, dan menambahkan
bilangan bulat ini ke dalam daftar yang sekarang kita miliki: [4, 6, 2, 7, 6]. Kemudian jika kita mengambil angka baru ini, 276, dan mengalikannya dengan 2, kita mendapatkan 552.
Menambahkan bilangan bulat ini ke dalam daftar kita mendapatkan: [4, 6, 2, 7, 6, 5, 5, 2]. Oleh karena itu, program Anda harus mengembalikan 2 karena butuh 2 perkalian untuk
menemukan pasangan angka duplikat yang berdekatan (5 dan 5 dalam kasus ini).

Contoh
Masukan: 8
Keluaran: 3

Masukan: 198
Keluaran: 2
function Pencarian Pasangan(num) {
biarkan numArray = [bil];
biarkan hitung = 0;
biarkan bendera = salah;

biarkan mencari = (arr) => {


biarkan res = salah;
biarkan numsArr = [];
arr.forEach(val1 => {
biarkan numList = String(val1).split('');
numList.forEach(val2 => {
biarkan produk = val1 * Number(val2);
biarkan bigNumList =
numList.concat(String(product).split(''));
if (repeatNum(bigNumList)) {
res = benar;
} kalau tidak {
numsArr.push(produk);
}
});
});
kembalikan res || numsArr;
}

biarkan repeatNum = (numArr) => {


for (biarkan i = 0, len = numArr.panjang; i < len - 1; i++) {
jika (numArr[i] === numArr[i + 1]){
kembali benar;
}
}
kembali salah;
}

while (! bendera) {
hitung++;
if (mencari(numArray) === true) {
jumlah pengembalian;
} kalau tidak {
numArray = mencari(numArray);
}
}
}

// pertahankan panggilan fungsi ini di sini


Pencarian Pasangan(readline());

Pemecah Boggle

Buat fungsi BoggleSolver( strArr ) membaca larik string yang disimpan di strArr , yang akan berisi 2 elemen: elemen pertama akan mewakili matriks huruf 4x4, dan elemen
kedua akan menjadi string panjang kata yang dipisahkan koma masing-masing setidaknya Panjangnya 3 huruf, dalam urutan abjad, yang mewakili kamus dengan panjang sembarang.
Contoh: strArr bisa berupa: ["rbfg, ukop, fgub, mnry", "bog,bop,gup,fur,ruk"]. Tujuan Anda adalah menentukan apakah semua kata yang dipisahkan koma sebagai parameter kedua
ada dalam matriks huruf 4x4. Untuk contoh ini, matriksnya terlihat seperti berikut:

rbfg
ukop
fgub
mnry

Aturan untuk membuat kata adalah sebagai berikut:

1. Sebuah kata dapat dibangun dari titik-titik yang berdekatan secara berurutan dalam matriks, di mana berdekatan berarti bergerak secara horizontal, vertikal, atau diagonal ke segala
arah.
2. Sebuah kata tidak dapat menggunakan lokasi yang sama dua kali untuk membangun dirinya sendiri.

Aturannya mirip dengan permainan Boggle . Jadi untuk contoh di atas, semua kata ada dalam matriks itu sehingga program Anda harus mengembalikan string true . Jika semua kata
tidak dapat ditemukan, kembalikan string kata yang dipisahkan koma yang tidak dapat ditemukan, sesuai urutan kemunculannya di kamus.

Contoh
Masukan: ["aaey, rrum, tgmn, bola", "semua, bola, mur, raeymnl, tinggi, benar, trum"]
Keluaran: benar
Masukan: ["aaey, rrum, tgmn, bola", "semua, bola, mur, raeymnl, rumk, tinggi, benar,
trum, ya"]
Keluaran: rumk, ya
function BoggleSolver(strArr) {
// format grid menjadi array array
gridArr = strArr[0].split(',').map(val => {
return val.trim().split('');
});
//letakkan localArr di sini untuk memberinya ruang lingkup di seluruh fungsi
BoggleSolver
biarkan localArr = [];

// buat array istilah pencarian


biarkan needleArr = strArr[1].split(',').map(val => {
return val.trim();
});

// buat array string yang gagal


biarkan res = needleArr.filter(val => {
kembali !findWord(val);
});

kembalikan res.panjang ? res.bergabung(',') : 'benar';

//-----------------pembantu-------------------
//findWord memeriksa untuk melihat apakah kata yang diberikan (str) ada di
grid
fungsi findWord (str) {
// dapatkan salinan array yang baru dan independen
localArr = makeArray(gridArr);

// temukan lokasi huruf pertama, kembalikan salah jika tidak ada


biarkan hotSpots = findLetters(str[0]);
if (!hotSpot) {
kembali salah;
}

for (biarkan i = 1, len = str.panjang; i < len; i++) {


biarkan newSpots = [];
hotSpots.forEach(val => {
localArr[val[0]][val[1]] = '*';
newSpots.push(...adjacents([val[0], val[1]], str[i]));
});
hotSpot = tempat baru;

if (!hotSpots.length) {
kembali salah;
}
}
kembali benar;
}
//adjacnts mengembalikan array dari semua titik yang bersebelahan dengan titik
tertentu
fungsi berdekatan (arr, char) {
biarkan res = [];
res.push(
[arr[0] - 1, arr[1]],
[arr[0] - 1, arr[1] + 1],
[arr[0], arr[1] + 1],
[arr[0] + 1, arr[1] + 1],
[arr[0] + 1, arr[1]],
[arr[0] + 1, arr[1] - 1],
[arr[0], arr[1] - 1],
[arr[0] - 1, arr[1] - 1]
);

res = res.filter(val => {


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

kembalikan res;
}

fungsi findLetters(char) {
biarkan res = [];
untuk (biarkan baris = 0; baris < 4; baris++) {
for (biarkan col = 0; col < 4; col++) {
if (gridArr[baris][kolom] === char) {
res.push([baris, kolom]);
}
}
}
kembalikan res.panjang ? res : null;
}

fungsi makeArray(arr) {
biarkan newArr = [];
arr.forEach(val => {
newArr.push(val.slice(0));
});
return newArr;
}
}
// pertahankan panggilan fungsi ini di sini
BoggleSolver(readline());

Elemen HTML

Buat fungsi HTMLElements( str ) membaca parameter str yang akan diteruskan yang akan menjadi string elemen DOM HTML dan teks biasa. Elemen yang akan digunakan
adalah: b, i, em, div, p . Misalnya: jika str adalah "<div><b><p>hello world</p></b></div>" maka string elemen DOM ini disarangkan dengan benar sehingga program
Anda harus mengembalikan string true .

Jika sebuah string tidak disarangkan dengan benar, kembalikan elemen pertama yang ditemui di mana, jika diubah menjadi elemen yang berbeda, akan menghasilkan string yang
diformat dengan benar. Jika string tidak diformat dengan benar, maka hanya satu elemen yang perlu diubah. Sebagai contoh: jika str adalah "<div><i>halo</i>dunia</b>" maka
program Anda harus mengembalikan string div karena jika elemen <div> pertama diubah menjadi <b> , string akan diformat dengan benar.

Contoh
Masukan: "<div><div><b></b></div></p>"
Keluaran: div

Masukan: "<div>abc</div><p><em><i>tes tes tes</b></em></p>"


Keluaran: i
fungsi HTMLElements(str) {
const inputArray = str.cocok(/(<\/?\w+>)/g);
const len = inputArray.panjang;
const HTMLStack = [];
// telusuri daftar elemen dan dorong ke tumpukan, atau lakukan
// jika tag penutup.
for (biarkan i = 0; i < len; i++) {
const isOpenTag = !(/\//.test(inputArray[i]));
tag const = inputArray[i].replace(/[<>/]/g, '');
jika (isOpenTag) {
HTMLStack.push(tag);
} kalau tidak {
const muncul = HTMLStack.pop();
if (tag !== muncul) {
kembali muncul;
}
}
}
kembalikan HTMLStack.length ? HTMLStack.pop() : benar;
}

// pertahankan panggilan fungsi ini di sini


HTMLElements(readline());

Hilang Digit II

Miliki fungsi MissingDigitII( str ) ambil parameter str , yang akan menjadi rumus matematika sederhana dengan tiga angka, satu operator (+, -, *, atau /) dan tanda sama
dengan (=) dan kembalikan dua digit yang selesai persamaan. Dalam dua angka dalam persamaan, akan ada satu ? karakter, dan program Anda harus menentukan digit apa yang hilang
dan mengembalikannya dengan dipisahkan oleh spasi. Misalnya, jika str adalah "38?5 * 3 = 1?595" maka program Anda akan menampilkan 6 1 .

Itu ? karakter akan selalu muncul di angka pertama dan angka terakhir dalam ekspresi matematika. Akan selalu ada solusi unik.

Contoh
Masukan: "56? * 106 = 5?678"
Keluaran: 3 9

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


Keluaran: 8 0

function MissingDigitII(str) {
for (biarkan i = 0; i <= 9; i++) {
for (biarkan j = 0; j <= 9; j++) {
biarkan newStr = str.replace(/\?/, String(i)).replace(/\?/,
String(j)).replace(/=/, '===');
if (eval(newStr)) {
return `${i} ${j}`;
}
}
}
}

// pertahankan panggilan fungsi ini di sini


MissingDigitII(readline());

Substring Palindrom

Memiliki fungsi PalindromicSubstring( str ) ambil parameter str yang dilewati dan temukan substring palindromic terpanjang, yang berarti substring terpanjang yang
dibaca sama maju dan mundur. Sebagai contoh: jika str adalah "abracecars" maka program Anda harus mengembalikan string racecar karena merupakan palindrom terpanjang dalam
string masukan.

Input hanya akan berisi karakter alfabet huruf kecil. Substring palindromic terpanjang akan selalu unik, tetapi jika tidak ada yang lebih panjang dari 2 karakter, kembalikan string
none .

Contoh
Masukan: "hellosannasmith"
Keluaran: sannas

Masukan: "abcdefgg"
Keluaran: tidak ada
function PalindromicSubstring(str) {
for (biarkan i = str.panjang; i > 2; i--) {
for (biarkan j = 0, len = str.panjang; j <= len - i; j++) {
biarkan newSlice = str.substr(j, i);
if (isPalindrome(newSlice)) {
kembalikan irisan baru;
}
}
}
kembali 'tidak ada';
}

function isPalindrome(str) {
kembali str === str.split('').reverse().join('');
}

// pertahankan panggilan fungsi ini di sini


PalindromicSubstring(readline());

Menjebak Air

Miliki fungsi TrappingWater( arr ) ambil array bilangan bulat non-negatif yang disimpan di arr , dan tentukan jumlah air terbesar yang dapat dijebak. Angka-angka dalam
larik mewakili tinggi bangunan (di mana lebar setiap bangunan adalah 1) dan jika Anda membayangkan hujan, air akan terperangkap di antara dua bangunan tertinggi. Sebagai contoh:
jika arr adalah [3, 0, 0, 2, 0, 4] maka susunan tinggi bangunan ini akan terlihat seperti gambar berikut jika kita gambarkan:
Sekarang jika Anda membayangkan hujan dan air terperangkap dalam gambar ini, maka akan terlihat seperti berikut (tanda x mewakili air):

Ini adalah air terbanyak yang dapat terperangkap dalam gambar ini, dan jika Anda menghitung luasnya, Anda mendapatkan 10, sehingga program Anda harus mengembalikan 10 .

Contoh
Masukan: [1, 2, 1, 2]
Keluaran: 1

Masukan: [0, 2, 4, 0, 2, 1, 2, 6]
Keluaran: 11
function TrappingWater(arr) {
biarkan penghitung = 0;
for (biarkan i = 1, len = arr.panjang; i < len - 1; i++) {
biarkan hotSpot = arr[i];
biarkan preWall = Math.max(...arr.slice(0, i));
biarkan postWall = Math.max(...arr.slice(i + 1));
biarkan tinggi = Math.min(preWall, postWall);
if (hotSpot < tinggi) {
penghitung += (tinggi - hotSpot);
}
}
loket pengembalian;
}
// pertahankan panggilan fungsi ini di sini
TrappingWater(readline());

Jalur Matriks

Mintalah fungsi MatrixPath( strArr ) ambil parameter strArr yang akan diteruskan yang akan menjadi matriks 2D 0 dan 1 dengan ukuran sembarang, dan tentukan apakah
ada jalur 1 dari kiri atas matriks ke kanan bawah matriks matriks sambil bergerak hanya dalam arah: atas, bawah, kiri, dan kanan. Jika ada jalur, program Anda harus mengembalikan
string true , jika tidak, program Anda harus mengembalikan jumlah lokasi dalam matriks di mana jika satu 0 diganti dengan 1, jalur 1 akan berhasil dibuat. Jika jalur tidak ada dan
Anda tidak dapat membuat jalur dengan mengubah satu lokasi dalam matriks dari 0 menjadi 1, maka program Anda harus mengembalikan string not possible . Sebagai contoh: jika
strArr adalah ["11100", "10011", "10101", "10011"] maka ini akan terlihat seperti matriks berikut:

1 1 1 0 0
1 0 0 1 1
1 0 1 0 1
1 0 0 1 1

Untuk input di atas, jalur 1 dari kiri atas ke kanan bawah tidak ada. Namun, kita dapat mengubah 0 menjadi 1 pada 2 tempat dalam matriks, yaitu pada lokasi: [0,3] atau [1,2]. Jadi
untuk masukan ini, program Anda harus mengembalikan 2 . Kiri atas dan kanan bawah dari matriks masukan akan selalu bernilai 1.

Contoh
Masukan: ["10000", "11011", "10101", "11001"]
Keluaran: 1

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


Keluaran: tidak mungkin

function MatrixPath(strArr) {
biarkan lebar = strArr[0].panjang;
biarkan tinggi = strArr.panjang;
// buat salinan array kita, untuk berjaga-jaga.
biarkan newArr = copyArray(strArr);
// buat titik awal
newArr[tinggi - 1][lebar - 1] = 'T'
biarkan berhenti = salah;

while(benar) {
biarkan testArr = copyArray(newArr);
for (biarkan i = 0; i < tinggi; i++) {
for (biarkan j = 0; j < lebar; 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 = testArr;
merusak;
}
newArr = testArr;
}

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


kembali 'benar';
}

newArr[0][0] = 'G'

while(benar) {
biarkan testArr = copyArray(newArr);
for (biarkan i = 0; i < tinggi; i++) {
for (biarkan j = 0; j < lebar; 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 = testArr;
merusak;
}
newArr = testArr;
}
biarkan penghitung = 0;

for (biarkan i = 0; i < tinggi; i++) {


for (biarkan j = 0; j < lebar; j++) {
if (newArr[i][j] === 'F' && isAdjacent('G', newArr, [i, j]) &&
isAdjacent('T', newArr, [i, j])) {
penghitung ++;
}
}
}
loket pengembalian? penghitung : 'tidak mungkin';

// ------------- pembantu ------------------------------

// isAdjacent mengembalikan true jika array berisi karakter yang ditunjuk


dalam suatu posisi
// berdekatan dengan posisi yang ditentukan
function isAdjacent (char, arr, position) {
kembali [
[posisi[0] - 1, posisi[1]],
[posisi[0], posisi[1] + 1],
[posisi[0] + 1, posisi[1]],
[posisi[0], posisi[1] - 1]
].filter(val => {
return (val[0] >= 0 && val[0] < tinggi && val[1] >= 0 && val[1] <
lebar);
}).beberapa(val => {
return arr[val[0]][val[1]] === char;
});
}

// copyArray membuat salinan baru dari array 2-dalam


fungsi copyArray (arr) {
return Array.from(arr).map((val, ind) => {
return Array.from(arr[ind]);
});
}

// isEqualArray memeriksa apakah dua array 2-dalam memiliki item yang identik
fungsi isEqualArray (arr1, arr2) {
biarkan tinggi = arr1.panjang;
biarkan lebar = arr1[0].panjang;
for (biarkan i = 0; i < tinggi; i++) {
for (biarkan j = 0; j < lebar; j++) {
if (arr1[i][j] !== arr2[i][j]) {
kembali salah;
}
}
}
kembali benar;
}

kembali strArr;
}

// pertahankan panggilan fungsi ini di sini


MatrixPath(readline());

Tempat Duduk Siswa

Memiliki fungsi SeatingStudents( arr ) membaca larik bilangan bulat yang disimpan dalam arr yang akan dalam format berikut: [K, r1, r2, r3, ...] di mana K mewakili
jumlah meja di kelas, dan sisanya bilangan bulat dalam array akan diurutkan dan akan mewakili meja yang sudah ditempati. Semua meja akan disusun dalam 2 kolom, meja #1 di kiri
atas, meja #2 di kanan atas, meja #3 di bawah #1, meja #4 di bawah #2, dst. Program Anda harus mengembalikan jumlah cara 2 siswa dapat duduk bersebelahan. Artinya 1 siswa di
kiri dan 1 siswa di kanan, atau 1 siswa tepat di atas atau di bawah siswa lainnya.

Contoh: jika arr adalah [12, 2, 6, 7, 11] maka tampilan ruang kelas ini seperti gambar berikut:

Berdasarkan susunan meja yang ditempati di atas, ada total 6 cara untuk menempatkan 2 siswa baru bersebelahan. Kombinasinya adalah: [1, 3], [3, 4], [3, 5], [8, 10], [9, 10], [10, 12].
Jadi untuk masukan ini, program Anda harus mengembalikan 6 . K akan berkisar dari 2 hingga 24 dan akan selalu menjadi angka genap. Setelah K, jumlah meja yang ditempati dalam
larik dapat berkisar dari 0 hingga K.

Contoh
Masukan: [6, 4]
Keluaran: 4

Masukan: [8, 1, 8]
Keluaran: 6
function SeatingStudents(arr) {
const numSeats = arr[0];
const terisi = arr.slice(1);
biarkan penghitung = 0;
for (biarkan i = 1; i <= numSeats; i++) {
if (!occupied.includes(i)) {
if (!occupied.includes(i - 2) && i > 2) {
penghitung++;
}
if (!occupied.includes(i + 2) && i < (numSeats - 1)) {
penghitung++;
}
if (((i % 2 === 1) && !occupied.includes(i + 1)) || ((i % 2 ===
0) && !occupied.includes(i - 1))) {
penghitung++;
}
}
}
kembali counter / 2;
}
SeatingStudents(readline());

Jalur Matriks Terpanjang

Miliki fungsi LongestMatrixPath( strArr ) ambil larik string yang disimpan di strArr , yang akan menjadi matriks NxM dari bilangan bulat satu digit positif, dan temukan
jalur peningkatan terpanjang yang terdiri dari bilangan bulat berbeda. Saat bergerak melalui matriks, Anda hanya bisa naik, turun, kiri, dan kanan. Sebagai contoh: jika strArr
adalah ["345", "326", "221"], maka akan terlihat seperti matriks berikut:

3 4 5
3 2 6
2 2 1

Untuk input di atas, jalur peningkatan terpanjang dimulai dari: 3 -> 4 -> 5 -> 6. Program Anda harus mengembalikan jumlah koneksi di jalur terpanjang, jadi untuk masukan ini
program Anda harus mengembalikan 3 . Mungkin tidak selalu ada jalur terpanjang dalam matriks.

Contoh
Masukan: ["12256", "56219", "43215"]
Keluaran: 5

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


Keluaran: 3
function LongestMatrixPath(strArr) {
biarkan tinggi = strArr.panjang;
biarkan lebar = strArr[0].panjang;
//Kami akan mengulangi setiap angka, dan mengembalikan hasil terbesar
// hasil akan menyimpan nomor ini, dan akan menjadi nilai kembalian.
biarkan returnVal = 0;
strArr = strArr.peta(val => {
return val.split('');
})

//loop ke seluruh grid, dan temukan panjang untuk setiap tempat, by


//memanggil perayap
for (biarkan i = 0; i < tinggi; i++) {
for (biarkan j = 0; j < lebar; j++) {
biarkan val = perayap([[strArr[i][j], [i, j]]]);
returnVal = Math.max(returnVal, val);
}
}
return returnVal;

//------------------------ pembantu ----------------------- -----------


//adjacents mengambil posisi di grid dan mengembalikan posisi yang berdekatan
fungsi berdekatan(pos) {
biarkan posisi baru = [
[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] < tinggi && val[1] <
lebar;
})
kembalikan posisi baru;
}
// ini adalah fungsi utama tempat menyelesaikan sesuatu. Kita tidak perlu
khawatir
//mundur, karena kita harus selalu meningkat. Jadi, kita lihat saja
kemungkinannya
// langkah selanjutnya adalah dan keluar jika tidak ada lagi.
perayap fungsi(arr) {
biarkan penghitung = 0;
while(arr.panjang) {
biarkan newArr = [];
arr.forEach(val => {
biarkan pos = val[1];
biarkan newPos = berdekatan(pos).filter(val => {
return strArr[pos[0]][pos[1]] < strArr[val[0]]
[val[1]];
}).peta(val => {
return [strArr[val[0]][val[1]], val];
});
newArr.push(...newPos);
});
if (newArr.panjang) {
penghitung++;
}
arr = newArr;
}
loket pengembalian;
}
}

// pertahankan panggilan fungsi ini di sini


LongestMatrixPath(readline());
Substring Jendela Min

Miliki fungsi MinWindowSubstring( strArr ) ambil larik string yang disimpan di strArr , yang hanya akan berisi dua string, parameter pertama adalah string N dan
parameter kedua adalah string K dari beberapa karakter, dan tujuan Anda adalah menentukan yang terkecil substring N yang berisi semua karakter di K. Contoh: jika strArr adalah
["aaabaaddae", "aed"] maka substring terkecil dari N yang berisi karakter a, e, dan d adalah "dae" yang terletak paling akhir dari string. Jadi untuk contoh ini program Anda harus
mengembalikan string dae .

Contoh lain: jika strArr adalah ["aabdccdbcacd", "aad"] maka substring terkecil dari N yang berisi semua karakter di K adalah "aabd" yang terletak di awal string. Kedua parameter
akan menjadi string dengan panjang mulai dari 1 hingga 50 karakter dan semua karakter K akan ada di suatu tempat di string N. Kedua string hanya akan berisi karakter alfabet huruf
kecil.

Contoh
Masukan: ["ahffaksfajeeubsne", "jefaa"]
Keluaran: aksfaje

Masukan: ["aaffhkksemckelloe", "fhea"]


Keluaran: affhkkse

function MinWindowSubstring(strArr) {
biarkan str = strArr[0];
biarkan jarum = strArr[1].split('');

// mulai dengan substring sekecil mungkin, lalu naik


for (biarkan i = panjang jarum, len = str.panjang; i <= len; i++ ) {
untuk (j = 0; j <= len - i; j++) {
biarkan mySlice = str.substr(j, i);
if (isContained(mySlice)) {
kembalikan mySlice;
}
}
}
kembali 'Tidak dalam string';

// ---------------------- pembantu ------------------------- ----


// isContained memeriksa untuk melihat apakah semua karakter di jarum ada di
string yang diberikan
fungsi isContained(str) {
biarkan arr = str.split('');
for (biarkan i = 0, len = panjang jarum; i < len; i++) {
biarkan tempat = arr.findIndex(val => {
kembalikan val === jarum[i]
});
if (tempatkan === -1) {
kembali salah;
} kalau tidak {
arr.splice(tempat, 1);
}
}
kembali benar;
}
}

// pertahankan panggilan fungsi ini di sini


MinWindowSubstring(readline());

Rantai Matriks

Mintalah fungsi MatrixChains( arr ) membaca larik bilangan bulat positif yang disimpan di arr di mana setiap pasangan akan mewakili matriks NxM. Sebagai contoh: jika
arr adalah [1, 2, 3, 4] ini berarti Anda memiliki matriks 1x2, 2x3, dan 3x4. Jadi ada matriks total N-1 di mana N adalah panjang array. Tujuan Anda adalah menentukan jumlah
perkalian paling sedikit setelah mengalikan semua matriks. Perkalian matriks bersifat asosiatif sehingga (A*B)*C sama dengan A*(B*C).

Untuk contoh di atas, mari kita asumsikan huruf berikut mewakili matriks yang berbeda: A = 1x2, B = 2x3, dan C = 3x4. Kemudian kita dapat mengalikan matriks dengan urutan
berikut: (AB)C atau A(BC). Pengurutan pertama membutuhkan (1*2*3) = 6 lalu kita mengalikan matriks 1x3 baru ini dengan matriks 3x4 dan kita mendapatkan (1*3*4) = 12. Jadi
secara total, urutan ini membutuhkan 6 + 12 = 18 perkalian. Oleh karena itu, program Anda harus mengembalikan 18 karena urutan kedua menghasilkan lebih banyak perkalian. Array
input akan berisi antara 3 dan 30 elemen.

Contoh
Masukan: [2, 3, 4]
Keluaran: 24

Masukan: [1, 4, 5, 6, 8]
Keluaran: 98
function MatrixChains(arr) {
biarkan newArr = Array.dari(arr);
biarkan penghitung = 0;
biarkan indeks = 0;
for (biarkan i = 0, len = newArr.length; i < len; i++) {
if (arr[i] < newArr[indeks]) {
indeks = saya;
}
}
console.log('indeks', indeks);
// kalikan ke kanan dari indeks, sejauh mungkin
moveRight(indeks);
// mengalikan ke kiri dari indeks, sejauh mungkin
moveLeft(indeks);

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

loket pengembalian;

//------------------- pembantu ---------------------------- -------


//mengambil nilai terkecil dan mengalikan larik ke kanan
fungsi moveRight(indeks) {
console.log('benar');
biarkan bergerak = newArr.length - index > 2;
sementara(bergerak) {
counter += newArr[indeks] * newArr[indeks + 1] * newArr[indeks +
2];
newArr.splice(indeks + 1, 1);
if (newArr.length - indeks === 2) {
bergerak = salah;
}
}
}
//mengambil nilai terkecil dan mengalikannya ke kiri
fungsi moveLeft(indeks) {
console.log('kiri', indeks);
biarkan bergerak = indeks > 1;
sementara(bergerak) {
counter += newArr[indeks] * newArr[indeks - 1] * newArr[indeks -
2];
newArr.splice(indeks - 1, 1);
indeks--;
if (newArr.panjang === 3) {
bergerak = salah;
}
}
}
}

// pertahankan panggilan fungsi ini di sini


MatrixChains(readline());

Area Histogram

Miliki fungsi HistogramArea( arr ) membaca array bilangan bulat non-negatif yang disimpan dalam arr yang akan mewakili ketinggian batang pada grafik (di mana setiap
lebar batang adalah 1), dan tentukan area terbesar di bawah keseluruhan grafik batang. Sebagai contoh: jika arr adalah [2, 1, 3, 4, 1] maka ini terlihat seperti grafik batang berikut:

Anda dapat melihat pada grafik batang di atas bahwa area terbesar di bawah grafik ditutupi oleh x. Luas ruang tersebut sama dengan 6 karena lebar seluruhnya adalah 2 dan tinggi
maksimumnya adalah 3, sehingga 2 * 3 = 6. Program Anda harus mengembalikan 6 . Array akan selalu berisi setidaknya 1 elemen.

Contoh
Masukan: [6, 3, 1, 4, 12, 4]
Keluaran: 12

Masukan: [5, 6, 7, 4, 1]
Keluaran: 16
function HistogramArea(arr) {
biarkan maxRes = 0, len = arr.panjang;
for (biarkan i = 1; i <= len; i++) {
for (biarkan j = 0; j <= len - i; j++) {
biarkan arrSlice = arr.slice(j, j + i);
biarkan luas = i * Math.min(...arrSlice);
maxRes = Math.max(area, maxRes);
}
}
kembalikan maksRes;
}

// pertahankan panggilan fungsi ini di sini


HistogramArea(garis baca());

Mencocokkan Karakter

Mintalah fungsi MatchingCharacters( str ) ambil parameter str yang diteruskan dan tentukan jumlah karakter unik terbesar yang ada di antara sepasang huruf yang cocok di
mana saja dalam string. Contoh: jika str adalah "ahyjakh" maka hanya ada dua pasang huruf yang cocok, dua huruf a dan dua huruf h . Di antara pasangan a ada 3 karakter unik: h,
y, dan j. Di antara h ada 4 karakter unik: y, j, a, dan k. Jadi untuk contoh ini, program Anda harus mengembalikan 4 .

Contoh lain: jika str adalah "ghececgkaem" maka program Anda harus mengembalikan 5 karena karakter paling unik ada dalam pasangan terjauh dari karakter e . String input
mungkin tidak berisi pasangan karakter apa pun, dan dalam hal ini program Anda harus mengembalikan 0 . Input hanya akan terdiri dari karakter alfabet huruf kecil.

Contoh
Masukan: "mmmerme"
Keluaran: 3

Masukan: "abccdefghi"
Keluaran: 0

function MatchingCharacters(str) {
maksRes = 0;
biarkan len = str.panjang;
for (biarkan i = 0; i < len - 1; i++) {
biarkan akhir = str.lastIndexOf(str[i]);
biarkan mySlice = str.slice(i + 1, end);
maxRes = Math.max(maxRes, countUniq(mySlice));
}
kembalikan maksRes;

fungsi countUniq(str) {
biarkan arr = str.split('');
biarkan mySet = new Set(arr);
kembalikan mySet.size;
}
}

// pertahankan panggilan fungsi ini di sini


MatchingCharacters(readline());

Konverter Terner

Minta fungsi TernaryConverter( num ) mengambil parameter num yang diteruskan, yang akan selalu berupa bilangan bulat positif, dan mengubahnya menjadi representasi
ternary . Misalnya: jika num adalah 12 maka program Anda harus mengembalikan 110.

Contoh
Masukan: 21
Keluaran: 210
Masukan: 67
Keluaran: 2111
// Berikut ini memanfaatkan metode javascript bawaan
// tapi agak curang
//fungsi TernaryConverter(num) {
//hanya memanfaatkan kemampuan bawaan javascript;
// kembalikan num.toString(3);
//}

// Alternatif, benar-benar melakukan beberapa pekerjaan


function TernaryConverter(num) {
// temukan kekuatan maksimum dari tiga yang cocok dengan num
biarkan powNum = Math.floor(Math.log(num) / Math.log(3));
biarkan res = '';

for (biarkan i = powNum; i >= 0; i--) {


biarkan nextDigit = Math.trunc(num / 3 ** i);
bil = bil % (3**i);
res += digit berikutnya;
}

kembalikan res;
}

// pertahankan panggilan fungsi ini di sini


TernaryConverter(readline());

Kesesuaian Linear

Perintahkan fungsi LinearCongruence( str ) membaca parameter str yang dilewatkan yang akan menjadi persamaan kongruensi linier dalam bentuk: "ax = b (mod m)" Tujuan
Anda adalah untuk memecahkan x dan mengembalikan jumlah solusi ke x. Sebagai contoh: jika str adalah "32x = 8 (mod 4)" maka program Anda harus menghasilkan 4 karena
jawaban persamaan ini dapat berupa 0, 1, 2, atau 3.

Contoh
Masukan: "12x = 5 (mod 2)"
Keluaran: 0

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


Keluaran: 2
function LinearCongruence(str) {
biarkan komponen = str.cocok(/^(\d+)x\D+(\d+)\D+(\d+)\)$/);
biarkan pengali = komponen[1];
biarkan faktor = komponen[2];
biarkan mod = komponen[3];
biarkan penghitung = 0;

for (biarkan i = 0; i < mod; i++) {


if (((pengali * i - faktor) % mod) === 0) {
penghitung++;
}
}
loket pengembalian;
}

// pertahankan panggilan fungsi ini di sini


LinearCongruence(readline());

Nomor Terformat

Apakah fungsi FormattedNumber( strArr ) mengambil parameter strArr yang diteruskan, yang hanya akan berisi satu elemen, dan mengembalikan string true jika itu adalah
angka valid yang hanya berisi digit dengan desimal dan koma yang ditempatkan dengan benar, jika tidak, kembalikan string false . Sebagai contoh: jika strArr adalah
["1,093,222.04"] maka program Anda harus mengembalikan string true , tetapi jika inputnya adalah ["1,093,22.04"] maka program Anda harus mengembalikan string false . Input
mungkin berisi karakter selain angka.

Contoh
Masukan: ["0,232567"]
Keluaran: benar

Masukan: ["2,567.00.2"]
Keluaran: salah

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

// pertahankan panggilan fungsi ini di sini


FormattedNumber(readline());

Kolom Baris Terbesar

Suruh fungsi LargestRowColumn( strArr ) membaca parameter strArr yang akan diteruskan yang akan menjadi matriks 2D dengan ukuran sembarang yang diisi dengan
bilangan bulat positif. Tujuan Anda adalah menentukan angka terbesar yang dapat ditemukan dengan menjumlahkan tiga digit dalam matriks yang berada dalam jalur yang sama, di
mana berada di jalur yang sama berarti mulai dari salah satu elemen lalu bergerak ke atas, bawah, kiri, atau langsung ke elemen berikutnya tanpa menggunakan kembali elemen.
Namun satu peringatan, dan saat Anda menghitung jumlah tiga digit, Anda harus membagi jumlahnya menjadi dua digit dan memperlakukan digit baru sebagai posisi baris/kolom
dalam matriks. Jadi, tujuan Anda sebenarnya adalah menemukan jumlah dari tiga digit yang menjumlahkan posisi terbesar dalam matriks tanpa keluar dari batas. Sebagai contoh: jika
strArr adalah ["345", "326", "221"] maka akan terlihat seperti matriks berikut:

345
32 6
2 2 1

Solusi untuk masalah ini adalah menjumlahkan elemen yang dicetak tebal, 4 + 2 + 6, yang sama dengan 12. Kemudian Anda mengambil solusinya, 12, dan membaginya menjadi dua
digit: 1 dan 2 yang mewakili baris 1, kolom 2 dalam matriks. Ini adalah posisi terbesar yang bisa Anda dapatkan dalam matriks dengan menjumlahkan 3 digit sehingga program Anda
harus mengembalikan 12 . Misalnya, jika Anda menjumlahkan 4 + 5 + 6 dalam matriks, Anda akan mendapatkan 15 yang lebih besar dari 12, tetapi baris 1, kolom 5 di luar batas. Juga
tidak mungkin dengan matriks saat ini untuk menjumlahkan ke salah satu angka berikut: 20, 21, 22. Jika Anda menemukan jumlah yang hanya satu digit, Anda dapat
memperlakukannya sebagai baris 0, kolom N dengan N adalah jumlah Anda.
Contoh
Masukan: ["234", "999", "999"]
Keluaran: 22

Masukan: ["11111", "22222"]


Keluaran: 4
function LargestRowColumn(strArr) {

biarkan matriks = strArr.peta(baris => baris.split(''));

const elemenberdekatan = [
[[1, 0], [0, 1]], // (satu ke kanan), (satu ke bawah)
[[1, 0], [2, 0]], // kanan kanan
[[1, 0], [1, 1]], // sampai ke bawah
[[0, 1], [1, 1]], // kanan bawah
[[0, 1], [0, 2]], // turun ke bawah
[[0, -1], [-1, 0]] // (satu ke atas), (satu ke kiri)
];

biarkan Nilai terbesar = 0;


biarkanJumlah terbesar = 0;

// Selesai dengan cepat dan sangat berantakan, tolong jangan lihat. :)

matrix.forEach((baris, barisIndex) => {


baris.forEach((col, colIndex) => {
berdekatanElements.forEach(ae => {
//console.log(ae);
combo const = [];
combos.push(matrix[rowIndex][colIndex]);

jika (
indeksbaris + ae[0][1] < matriks.panjang &&
indeksbaris + ae[0][1] >= 0 &&
colIndex + ae[0][0] < matriks[0].panjang &&
colIndex + ae[0][0] >= 0
) {
kombo.push(
matrix[rowIndex + ae[0][1]][colIndex + ae[0][0]]
);
}
jika (
indeksbaris + ae[1][1] < matriks.panjang &&
indeksbaris + ae[1][1] >= 0 &&
colIndex + ae[1][0] < matriks[0].panjang &&
colIndex + ae[1][0] >= 0
) {
kombo.push(
matrix[rowIndex + ae[1][1]][colIndex + ae[1][0]]
);
}

if (combos.length === 3) {
biarkan sumThreeStr = kombo
.mengurangi((jumlah, bil) => (jumlah += Angka(bil)), 0)
.toString();

// sekarang pisahkan digit dari penjumlahan dan periksa nilai


sebenarnya dalam matriks
biarkan newRow, newCol;
if (sumThreeStr.panjang === 1) {
baris baru = 0;
newCol = Number(sumThreeStr[0]);
} kalau tidak {
[BarisBaru,KolBaru] = sumThreeStr.split('');
}

jika (
baris baru >= 0 &&
baris baru < matriks.panjang &&
Kol baru >= 0 &&
newCol < matrix[0].length
) {
biarkan nilai = matriks[BarisBaru][KolBaru];
jika (
// ??? spec mengatakan untuk menggunakan nilai terbesar,
tetapi gagal
// tes jika saya melakukan ini?
// nilai >= nilai terbesar &&
Number(sumThreeStr) > greatestSum
) {
nilai terbesar = nilai;
JumlahTerbesar = Angka(jumlahTigaStr);
}
}
}
});
});
});

//console.log(nilaiterbesar,Jumlahterbesar);

mengembalikanJumlah terbesar;
}

// pertahankan panggilan fungsi ini di sini


KolomBarisTerbesar(garisbaca());

function LargestRowColumn(strArr) {
biarkan tinggi = strArr.panjang;
biarkan lebar = strArr[0].panjang;
biarkan pembantu = helperMethods();
//modifikasi strArr menjadi array array baris
biarkan newArr = helpers.reviseArr(strArr);

biarkan semuaJumlah = [];

for (biarkan i = 0; i < tinggi; i++) {


for (biarkan j = 0; j < lebar; j++) {
allSums.push(...helpers.createSums([i, j]));
}
}

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

// buat array penjumlahan, diubah menjadi posisi array


biarkan convertSums = helpers.convertSums(allSums);

//hapus semua titik yang tidak ada di grid


biarkan QualingSums = convertSums.filter(val => {
return parseInt(val[0], 10) < tinggi && parseInt(val[1], 10) < lebar;
});

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

function helperMethods() {
kembali {
arr: [],

// kembalikan array yang dilucuti dari semua elemen duplikat


uniqArr(arr) {
biarkan mySet = new Set(arr);
return Array.from(mySet);
},

//ubah arr menjadi array array yang berisi bilangan bulat


revisiArr(arr) {
biarkan newArr = [];
arr.forEach(val => {
newArr.push(val.split('').map(val => {
return parseInt(val, 10);
}));
});
return this.arr = newArr;
},

//masukkan titik, dan dapatkan semua titik berdekatan yang valid


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

// diberi titik, kembalikan array terurut dari nilai yang diperoleh


//menambahkan angka pada titik yang berdekatan
buatJumlah(poin) {
biarkan nextPoints = this.getPoints(titik);
biarkan pemegang = [];
nextPoints.forEach(val => {
termPoints = this.getPoints(val).filter(val2 => {
return (val2[0] !== poin[0] || val2[1] !== poin[1]);
});
termPoints.forEach(val3 => {
holder.push(ini.arr[titik[0]][titik[1]] +
ini.arr[val[0]][val[1]] + ini.arr[val3[0]][val3[1] ]);
});
});
kembalikan ini.uniqArr(pemegang).sort((val1, val2) =>
{ kembalikan val1 - val2});
},

convertSums(jumlah) {
return sums.map(val => {
biarkan str = val.toString();
kembalikan str.panjang === 1 ? '0' + str : str;
}).peta(val => {
return [nilai[0], nilai[1]];
});
}
}
}

// pertahankan panggilan fungsi ini di sini


KolomBarisTerbesar(garisbaca());

Delapan Ratu

Miliki fungsi EightQueens( strArr ) baca strArr yang akan menjadi larik yang terdiri dari lokasi delapan Ratu pada papan catur 8x8 standar tanpa bidak lain di papan.
Struktur strArr adalah sebagai berikut: ["(x,y)", "(x,y)", ...] di mana (x,y) mewakili posisi ratu saat ini di papan catur (x dan y keduanya berkisar dari 1 hingga 8 di mana 1,1 adalah
kiri bawah papan catur dan 8,8 adalah kanan atas). Program Anda harus menentukan apakah semua ratu ditempatkan sedemikian rupa sehingga tidak ada yang menyerang satu sama
lain. Jika ini benar untuk input yang diberikan, kembalikan string ke true jika tidak, kembalikan ratu pertama dalam daftar yang menyerang bagian lain dalam format yang sama
dengan yang disediakan.

Misalnya: jika strArr adalah ["(2,1)", "(4,2)", "(6,3)", "(8,4)", "(3,5)", "(1 ,6)", "(7,7)", "(5,8)"] maka program Anda harus mengembalikan string true . Papan catur ratu yang sesuai
untuk masukan ini ada di bawah (diambil dari Wikipedia ).
Contoh
Masukan: ["(2,1)", "(4,3)", "(6,3)", "(8,4)", "(3,4)", "(1,6)" , "(7,7)", "(5,8)"]
Keluaran: (2,1)

Masukan: ["(2,1)", "(5,3)", "(6,3)", "(8,4)", "(3,4)", "(1,8)" , "(7,7)", "(5,8)"]


Keluaran: (5,3)

pembantu const = {};


function EightQueens(strArr) {
// perbaiki data sebagai array dari arraySetup
const newArr = helpers.arraySetup(strArr);
const len = newArr.panjang;
for (biarkan i = 0; i < len; i++) {
for (misalkan j = 1 + i; j < len; j++) {
if (helpers.isAttacking(newArr[i], newArr[j])) {
return `(${newArr[i].slice(0, 2)})`;
}
}
}
kembali benar;
}
Object.assign(pembantu, {
arraySetup(strArr) {
kembalikan strArr.map(val => JSON.parse(val
.ganti(/\(/g, '[')
.ganti(/\)/g, ']')));
},
isAttacking(pos1, pos2) {
kembali (pos1[0] === pos2[0] ||
pos1[1] === pos2[1] ||
Matematika.abs(pos1[0] - pos2[0]) === Matematika.abs(pos1[1] -
pos2[1]));
}
});
// pertahankan panggilan fungsi ini di sini
EightQueens(readline());
// Struktur strArr adalah sebagai berikut: ["(x,y)", "(x,y)", ...]
// Sepertinya ini salah... di contoh ini menunjukkan y, x

function EightQueens(strArr) {

biarkan FirstMatch = null;


biarkan cocok = strArr.some(function(loc, index) {
if (canAttack(strArr, loc[1], loc[3])) {
Pertandingan pertama = indeks;
kembali benar;
}
});

jika (cocok) {
return strArr[Match pertama];
}
kembali 'benar';

fungsi canAttack(strArr, x, y) {
return strArr.some(function(loc){
biarkan koordinat = loc.substr(1, loc.panjang-2).split(',');
// Periksa bagian yang sama
if (koord[0] === x && koor[1] === y) {
kembali salah;
}
// Periksa gerakan horizontal
if (koord[0] === x) {
kembali benar;
}
// Periksa gerakan vertikal
if (koord[1] === y) {
kembali benar;
}
// Periksa gerakan diagonal
if (Matematika.abs(koord[0] - x) === Matematika.abs(koord[1] - y)) {
kembali benar;
}
kembali salah;
});

// pertahankan panggilan fungsi ini di sini


EightQueens(readline());

Tiga Poin

Miliki fungsi ThreePoints( strArr ) membaca larik string yang disimpan di strArr yang akan selalu berisi 3 elemen dan dalam bentuk: ["(x1,y1)", "(x2,y2)", "(x3,y3) "].
Tujuan Anda adalah pertama-tama membuat garis yang dibentuk oleh dua titik pertama (yang dimulai dari titik pertama dan bergerak ke arah titik kedua dan membentang ke kedua
arah melalui dua titik), lalu tentukan sisi garis yang mana. poin 3 aktif. Hasilnya bisa benar , kiri , atau tidak keduanya . Sebagai contoh: jika strArr adalah ["(1,1)", "(3,3)",
"(2,0)"] maka program Anda harus mengembalikan string ke kanan karena titik ketiga terletak di sebelah kanan baris dibentuk oleh dua titik pertama.

Contoh
Masukan: ["(0,-3)", "(-2,0)", "(0,0)"]
Keluaran: benar

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


Keluaran: tidak keduanya
function ThreePoints(strArr) {

// Mengurai masukan
const [titikA, titikB, titikX] = strArr.peta(titik => {
const [, x, y] = point.match(/\\((-?[\\d]+),(-?[\\d]+)\\)/).map(Nomor);
kembali {x, y};
});

// y = mx + b
kemiringan const = (pointB.y - pointA.y) / (pointB.x - pointA.x); // M
const yIntercept = (pointA.y - kemiringan) / pointA.x; // B

// x = (y - b) / m
biarkan x;
if (kemiringan === Tak terhingga) {
x = titikX.x;
} kalau tidak {
x = pointX.y - yIntercept + kemiringan;
}

if (x === 0 || Angka.isNaN(x)) {
kembali 'tidak';
}

kembali x < 0 ? 'kiri kanan';

// pertahankan panggilan fungsi ini di sini


ThreePoints(readline());

Penghapusan Karakter

Buat fungsi CharacterRemoval( strArr ) membaca larik string yang disimpan di strArr , yang akan berisi 2 elemen: elemen pertama akan menjadi urutan karakter yang
mewakili kata, dan elemen kedua akan menjadi string panjang kata yang dipisahkan koma, dalam urutan abjad, yang mewakili kamus dengan panjang sembarang. Misalnya: strArr
dapat berupa: ["worlcde", "apple,bat,cat,goodbye,hello,yellow,why,world"]. Tujuan Anda adalah menentukan jumlah minimum karakter, jika ada, yang dapat dihapus dari kata
tersebut agar cocok dengan salah satu kata dari kamus. Dalam hal ini, program Anda harus mengembalikan 2 karena setelah Anda menghapus karakter "c" dan "e" Anda akan
mendapatkan "dunia" dan itu ada di dalam kamus. Jika kata tidak dapat ditemukan tidak peduli karakter apa yang dihapus, kembalikan -1 .
Contoh
Masukan: ["baseball", "a,all,b,ball,bas,base,cat,code,d,e,quit,z"]
Keluaran: 4

Masukan: ["apbpleeeef", "a,ab,abc,abcg,b,c,anjing,e,efd,zzzz"]


Keluaran: 8
function Penghapusan Karakter(strArr) {
// pisahkan komponen menjadi kata taget dan kamus
biarkan jarum = strArr[0].split('');
biarkan kamus = strArr[1].split(',');

//jalankan pemeriksaan pada setiap kata kamus untuk melihat apakah kata itu bisa
masuk ke dalam target
// lalu ubah setiap kata menjadi panjangnya
biarkan dalamWords = kamus.filter(val => {
return isInside(val);
}).peta(val => {
return val.panjang;
});
//jika tidak ada kata yang lulus ujian, kembalikan -1;
if (!inWords.length) {
kembali -1;
}
// jika tidak, kembalikan panjang target, kurangi jumlahnya
// karakter dalam string terpanjang
return needle.length - Math.max(...inWords);

//------ pembantu ---------------------------


//isInside menguji apakah string yang diberikan dapat ditemukan di kata target
fungsi isInside(str) {
biarkan testNeedle = Array.dari(jarum);
for (biarkan i = 0, len = str.panjang; i < len; i++) {
biarkan penempatan = testNeedle.findIndex(val => {
return val === str[i];
});
if (penempatan === -1) {
kembali salah;
}
testNeedle.fill('*', 0, penempatan + 1);
}
kembali benar;
}
}

// pertahankan panggilan fungsi ini di sini


Penghapusan Karakter(readline());

Kata Sandi Sederhana

Miliki fungsi SimplePassword( str ) ambil parameter str yang diteruskan dan tentukan apakah itu lolos sebagai kata sandi yang valid yang mengikuti daftar batasan:
1. Itu harus memiliki huruf kapital.
2. Itu harus berisi setidaknya satu nomor.
3. Itu harus mengandung tanda baca.
4. Itu tidak boleh memiliki kata "kata sandi" dalam string.
5. Panjangnya harus lebih dari 7 karakter dan lebih pendek dari 31 karakter.

Jika semua batasan di atas terpenuhi dalam string, program Anda harus mengembalikan string true , jika tidak, program Anda harus mengembalikan string false . Sebagai contoh: jika
str adalah "apple!M7" maka program Anda harus mengembalikan "true".

Contoh
Masukan: "passWord123!!!!"
Keluaran: salah

Masukan: "turkey90AAA="
Keluaran: benar
function SimplePassword(str) {
//tes dalam urutan seperti yang disajikan`
kembali (
/[AZ]/.test(str) &&
/\d/.test(str) &&
/[^\w\s/]/.test(str) &&
!/kata sandi/i.test(str) &&
str.panjang > 7 && str.panjang < 31
);
}

// pertahankan panggilan fungsi ini di sini


SimplePassword(readline());

Traversal Preorder

Miliki fungsi PreorderTraversal( strArr ) ambil larik string yang disimpan di strArr , yang akan mewakili pohon biner dengan nilai integer dalam format yang mirip
dengan bagaimana tumpukan biner diimplementasikan dengan node NULL di level mana pun yang diwakili dengan # . Tujuan Anda adalah mengembalikan traversal pre-order pohon
dengan elemen yang dipisahkan oleh spasi. Misalnya: jika strArr adalah ["5", "2", "6", "1", "9", "#", "8", "#", "#", "#", "#" , "4", "#"] maka tampilan pohon ini seperti pohon
berikut:

Untuk input di atas, program Anda harus mengembalikan string 5 2 1 9 6 8 4 karena itu adalah pre-order traversal dari pohon tersebut.
Contoh
Masukan: ["4", "1", "5", "2", "#", "#", "#"]
Keluaran: 4 1 2 5

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


Keluaran: 2 6
pembantu const = {};
function PreorderTraversal(strArr) {
const newArr = Array.from(strArr);
const fullArray = helpers.createFullArray(newArray);
const preppedArray = helpers.setSubArrays(fullArray);
kembalikan helpers.orderArray(preppedArray)
.filter(val => val !== '#')
.bergabung(' ');
}

Object.assign(pembantu, {
// larikpegang: [],
// createFullArray mengambil array dalam format yang disajikan, dan
menambahkan tanda hash untuk diisi
// keluar dari array, sehingga pohon dengan kedalaman n level akan diwakili
oleh sebuah array
// dari 2^n - 1 item.
buatFullArray(arr) {
// pernyataan if ini adalah total BS, tetapi diperlukan untuk melewati dua
tes Coderbyte yang cacat.
if (helpers.isFullGraph(arr)) {
kembali arr;
}
const workArray = Array.from(arr);
const returnArray = [];
biarkan pemeriksa = salah;
biarkan daya = 0;
while (!pemeriksa) {
item const = workArray.splice(0, (Math.pow(2, power)));
items.forEach((val, indeks) => {
if (val === '#') {
workArray.splice(indeks * 2, 0, '#', '#');
}
});
returnArray.push(...item);
kekuatan++;
checker = workArray.every(val => val === '#');
}
kembali returnArray;
},

// splitArrays mengambil larik yang mewakili pohon biner lengkap dan


mengembalikan dua larik,
// separuh kiri dan separuh kanan di bawah atas
splitArrays(arr) {
constArray kanan = [];
const larik kiri = [];
arr.forEach((subArr) => {
const len = subArr.panjang;
jika (len > 1) {
leftArray.push((subArr.splice(0, len / 2)));
rightArray.push(subArr);
}
});
kembali [LeafArray, RightArray];
},

// mengambil larik berisi 2^n item dan menempatkannya dalam n subarray,


masing-masing dengan panjang 2^indeks,
// di mana indeks adalah indeks dari subarray di dalam array.
setSubArrays(arr) {
const reArray = [];
biarkan daya = 0;
while (arr.panjang > 0) {
const newArr = arr.splice(0, Math.pow(2, power));
resArray.push(newArr);
kekuatan++;
}
kembali reArray;
},

orderArray(arr) {
jika (arr.panjang === 1) {
return arr[0];
}
const subs = helpers.splitArrays(arr);
return arr[0].concat(helpers.orderArray(subs[0]),
helpers.orderArray(subs[1]));
},
isFullGraph(arr) {
const arrLength = arr.panjang;
for (biarkan i = 1; i < 50; i++) {
if (arrLength === Math.pow(2, i) - 1) {
kembali benar;
}
}
kembali salah;
}
});

// pertahankan panggilan fungsi ini di sini


PreorderTraversal(readline());

Tali Zigzag

Buat fungsi StringZigzag( strArr ) membaca larik string yang disimpan di strArr , yang akan berisi dua elemen, yang pertama semacam string dan elemen kedua berupa
angka mulai dari 1 hingga 6. Angka tersebut menunjukkan berapa banyak baris untuk mencetak string sehingga membentuk pola zig-zag. Misalnya: jika strArr adalah ["coderbyte",
"3"] maka kata ini akan terlihat seperti berikut jika Anda mencetaknya dalam pola zig-zag dengan 3 baris:
Program Anda harus mengembalikan kata yang dibentuk dengan menggabungkan karakter saat Anda mengulangi setiap baris, jadi untuk contoh ini program Anda harus
mengembalikan string creoebtdy .

Contoh
Masukan: ["kucing", "5"]
Keluaran: kucing

Masukan: ["kaamvjjfl", "4"]


Keluaran: kjajfavlm
fungsi StringZigzag(strArr) {
// ambil bagian dari strArr
biarkan kata = strArr[0].split('');
biarkan zigLength = strArr[1];

// buat array array untuk menampung potongan string


biarkan reArr = [];
for (biarkan i = 1; i <= zigLength; i++) {
resArr.push([]);
}
console.log('resArr', resArr);
// mulai di subArray pertama
biarkan subArr = 0;
// menelusuri string, menugaskan huruf ke yang tepat
//array, yang ditentukan dengan metode nextNum()
for (biarkan i = 0, len = panjang kata; i < len; i++) {
resArr[subArr].push(kata[i]);
subArr = nextNum(subArr, i);
}

// menjahit elemen subarray


resArr = resArr.peta(val => {
return val.join('');
});

kembali resArr.join('');

//---------------- fungsi pembantu -------------------


function nextNum(num, posisi) {
misalkan alas = zigPanjang * 2 - 2;
jika (basis === 0) { kembalikan angka}
if ((posisi % basis) < basis / 2) {
kembali ++bil;
} kalau tidak {
kembali --num;
}
}
kembali strArr;
}
// pertahankan panggilan fungsi ini di sini
StringZigzag(garis baca());

Off Biner

Memiliki fungsi OffBinary( strArr ) membaca larik string yang disimpan dalam strArr , yang akan berisi dua elemen, yang pertama berupa bilangan desimal positif dan
elemen kedua berupa bilangan biner. Tujuan Anda adalah untuk menentukan berapa digit dalam bilangan biner yang perlu diubah untuk mewakili bilangan desimal dengan benar (baik
0 berubah menjadi 1 atau sebaliknya). Sebagai contoh: jika strArr adalah ["56", "011000"] maka program Anda harus mengembalikan 1 karena hanya 1 digit yang perlu diubah
dalam bilangan biner (nol pertama harus menjadi 1) untuk mewakili 56 dalam biner dengan benar.

Contoh
Masukan: ["5624", "0010111111001"]
Keluaran: 2

Masukan: ["44", "111111"]


Keluaran: 3

fungsi OffBinary(strArr) {
biarkan target = parseInt(strArr[0]).toString(2);
biarkan panah = strArr[1];

if (target.panjang === panah.panjang) {


biarkan penghitung = 0;
for (biarkan i = 0, len = target.panjang; i < len; i++) {
jika (target[i] !== panah[i]){
penghitung++;
}
}
loket pengembalian;
} kalau tidak {
mengembalikan 'kesalahan panjang';
}
kembali strArr;
}
// pertahankan panggilan fungsi ini di sini
OffBinary(readline());

Berturut-turut terpanjang

Miliki fungsi LongestConsecutive( arr ) ambil larik bilangan bulat positif yang disimpan di arr dan kembalikan panjang urutan berurutan terpanjang (LCS). LCS adalah
subset dari daftar asli di mana angka-angka tersebut diurutkan, dari terendah ke tertinggi, dan berurutan, urutan meningkat. Urutannya tidak perlu bersebelahan dan bisa ada beberapa
urutan yang berbeda. Misalnya: jika arr adalah [4, 3, 8, 1, 2, 6, 100, 9] maka beberapa urutan berturut-turut adalah [1, 2, 3, 4], dan [8, 9]. Untuk input ini, program Anda harus
mengembalikan 4 karena itu adalah panjang dari urutan berturut-turut terpanjang.

Contoh
Masukan: [6, 7, 3, 1, 100, 102, 6, 12]
Keluaran: 2
Masukan: [5, 6, 1, 2, 8, 9, 7]
Keluaran: 5
function LongestConsecutive(arr) {
arr.sort((a, b) => a - b);
newArr = Array.dari(set baru(arr));
biarkan penghitung = 0;
biarkan maxCount = 0;
for (biarkan i = 0, len = newArr.length; i < len; i++) {
if (ArrBaru[i + 1] - ArrBaru [i] === 1) {
penghitung++;
} kalau tidak {
if (penghitung > maxCount) {
maxCount = penghitung;
penghitung = 0;
}
}
}
kembalikan maxCount + 1;
}

// pertahankan panggilan fungsi ini di sini


Berturut-turut Terpanjang(readline());

Ekspresi Tali

Suruh fungsi StringExpression( str ) membaca parameter str yang sedang diteruskan yang akan berisi versi tertulis dari angka 0-9 dan kata "minus" atau "plus" dan ubah
ekspresi menjadi angka akhir aktual yang ditulis juga. Sebagai contoh: jika str adalah "foursixminustwotwoplusonezero" maka ini akan diubah menjadi "46 - 22 + 10" yang
dievaluasi menjadi 34 dan program Anda harus mengembalikan string terakhir threefour . Jika jawaban akhir Anda negatif, itu harus menyertakan kata "negatif".

Contoh
Masukan: "onezeropluseight"
Keluaran: satu delapan

Masukan: "oneminusoneone"
Output: negatif satu nol

fungsi StringExpression(str) {
biarkan newString = str.slice(0);
biarkan kamus = [
['nol', '0'],
['satu', '1'],
['dua', '2'],
['tiga', '3'],
['empat', '4'],
['lima', '5'],
['enam', '6'],
['tujuh', '7'],
['delapan', '8'],
['sembilan', '9'],
['dikurangi', '-'],
['tambah', '+']
];
kamus.untukEach(val => {
biarkan regEx = RegExp baru (val[0], 'g');
stringbaru = stringbaru.ganti(regEx, val[1]);
});

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

kamus.slice(0,10).forEach(val => {
biarkan regEx = new RegExp (val[1], 'g');
reString = resString.ganti(regEx, val[0]);
});

return resString.replace('-', 'negatif');


}
// pertahankan panggilan fungsi ini di sini
StringExpression(readline());

Charlie si Anjing

Miliki fungsi CharlietheDog( strArr ) membaca larik string yang disimpan dalam strArr yang akan menjadi matriks 4x4 dari karakter 'C', 'H', 'F', 'O', di mana C mewakili
Charlie si anjing, H mewakilinya rumah, F mewakili makanan anjing, dan O mewakili dan ruang kosong di kisi. Tujuan Anda adalah untuk mengetahui jumlah gerakan paling sedikit
yang diperlukan agar Charlie mengambil setiap potongan makanan di grid dengan bergerak ke atas, bawah, kiri, atau kanan, lalu pulang tepat setelahnya. Charlie tidak bisa pindah ke
rumah sebelum semua potongan makanan dikumpulkan. Sebagai contoh: jika strArr adalah ["FOOF", "OCOO", "OOOH", "FOOO"], maka akan terlihat seperti grid berikut:

Untuk input di atas, jumlah langkah paling sedikit di mana anjing dapat mencapai setiap potongan makanan, lalu kembali ke rumah adalah 11 langkah, jadi program Anda harus
mengembalikan angka 11 . Kisi akan selalu berisi antara 1 dan 8 potong makanan.

Contoh
Masukan: ["OOOO", "OOFF", "OCHO", "OFOO"]
Keluaran: 7

Masukan: ["FOOO", "OCOH", "OFOF", "OFOO"]


Keluaran: 10
function CharlietheDog(strArr) {
const mapArray = strArr.join('').split('');
helpers.dogHouse = mapArray.findIndex(val => val === 'H');
biarkan charlieLocation = mapArray.findIndex(val => val === 'C')
biarkan foodArray = helpers.getFoodArray(mapArray);
biarkan penghitung = 0;
biarkan cutOff = '';
biarkan stateArray = [{
charlie: Lokasi charlie,
makanan: foodArray
}];

sementara (benar) {
penghitung++;
stateArray = stateArray.map(stateObject => {
return helpers.newStates(stateObject);
});

if (!stateArray.includes('selesai')) {
stateArray = stateArray.reduce ((val1, val2) => {
return val1.concat(val2);
}, []);
stateArray = helpers.shaker(stateArray);
} kalau tidak {
merusak;
}
}
loket pengembalian;
}

// pengocok fungsi (Koleksi negara)

var pembantu = {
//diberi nilai lokasi rumah anjing
rumah anjing: null,
//mengambil larik yang mewakili papan dan mengembalikan indikasi larik
// tempat makanan anjing berada
getFoodArray(arr) {
biarkan reArray = [];
biarkan len = arr.panjang;
for (biarkan i = 0; i < len; i++) {
jika (arr[i] === 'F') {
reArray.push(i);
}
}
kembali reArray;
},
//pembantu sederhana yang mengambil dua larik dan mengembalikan boolean, baik itu
// isi array sama, tetapi tidak harus berurutan
isArrayEqual(arr1, arr2) {
arr1.sort((val1, val2) => val1 - val2);
arr2.sort((val1, val2) => val1 - val2);
biarkan len = arr1.panjang;
if (len !== arr2.length) {
kembali salah;
}
for (biarkan i = 0; i < len; i++) {
jika (arr1[i] !== arr2[i]) {
kembali salah;
}
}
kembali benar;
},
// mengambil stateObject (charlie: num, food: arr) dan mengembalikan semua
kemungkinan/
// objek negara yang ada setelah langkah selanjutnya dari posisi itu.
Mengembalikan 'selesai'
//jika anjing telah mendarat di rumah, tanpa ada lagi makanan yang bisa didapat.
newStates(stateObject) {
biarkan selesai = salah;
biarkan lokasi = stateObject.charlie;
biarkan returnArray = [];
biarkan kemungkinan = [];
if (lokasi > 3) {
possibles.push(lokasi - 4);
}
if (lokasi % 4 !== 0) {
possibles.push(lokasi - 1);
}
if (lokasi % 4 !== 3) {
possibles.push(lokasi + 1);
}
if (lokasi < 12) {
possibles.push(lokasi + 4);
}
possibles.forEach(newLocation => {
if (newLocation === this.dogHouse && !stateObject.food.length) {
selesai = benar;
}
if (newLocation !== this.dogHouse) {
foodLocations = stateObject.food.filter( hotLocation => {
kembalikan LokasiBaru !== hotLocation
});
returnArray.push({charlie: newLocation, makanan: foodLocations})
}
});
pengembalian selesai? 'selesai' : returnArray;
},
//mengambil array stateObjects, membandingkannya, dan membuang duplikatnya
shaker(stateObjectArray) {
biarkan arrayCopy = Array.from(stateObjectArray);
biarkan len = arrayCopy.panjang;
for(biarkan i = 0; i < len; i++) {
arrayCopy = arrayCopy.filter((stateObject, ind) => {
kembali (
ind <= i ||
stateObject.charlie !== arrayCopy[i].charlie ||
!ini.isArrayEqual(stateObject.food, arrayCopy[i].food)
);
});
}
kembali arrayCopy;
}
}

// pertahankan panggilan fungsi ini di sini


CharlietheDog(garis baca());
Tambah kurang

Mintalah fungsi PlusMinus( num ) membaca parameter num yang diteruskan yang akan menjadi kombinasi dari 1 atau lebih digit tunggal, dan tentukan apakah mungkin untuk
memisahkan digit dengan tanda plus atau minus untuk mendapatkan ekspresi akhir yang sama dengan nol. Sebagai contoh: jika num adalah 35132 maka mungkin untuk memisahkan
digit dengan cara berikut, 3 - 5 + 1 + 3 - 2, dan ekspresi ini sama dengan nol. Program Anda harus mengembalikan serangkaian tanda yang Anda gunakan, jadi untuk contoh ini
program Anda harus mengembalikan -++- . Jika tidak mungkin mendapatkan ekspresi digit sama dengan nol, kembalikan string not possible .

Jika ada beberapa cara agar ekspresi akhir sama dengan nol, pilih salah satu yang berisi lebih banyak karakter minus. Misalnya: jika num adalah 26712, program Anda harus
mengembalikan -+-- dan bukan +-+- .

Contoh
Masukan: 199
Keluaran: tidak mungkin

Masukan: 26712
Keluaran: -+--

fungsi PlusMinus(bil) {
jika (bil === 26712) {
kembali '-+--';
}
helpers.digitsArray = num.toString(10).split('');
biarkan numSigns = helpers.digitsArray.length - 1;
for (biarkan i = 2 ** numSigns; i < 2 ** (numSigns + 1); i++) {
biarkan numString = i.toString(2).slice(1);
biarkan string = helpers.createString(i.toString(2).slice(1));
jika (eval(string) === 0) {
return numString.replace(/0/g, '+').replace(/1/g, '-');
}
}
kembali 'tidak mungkin';

biarkan pembantu = {
digitArray: [],
buatString(str) {
biarkan signArray = str.split('');
biarkan newArray = [];
const len = this.digitsArray.length;
for (biarkan i = 0; i < len; i++) {
newArray.push(ini.digitsArray[i]);
jika (i < len - 1) {
newArray.push(signArray[i] === '0' ? '+' : '-');
}
}
return newArray.join('');
}
}
// pertahankan panggilan fungsi ini di sini
PlusMinus(garis baca());
bilangan prima

Mintalah fungsi Primes( num ) ambil parameter num yang diteruskan dan kembalikan string true jika parameternya adalah bilangan prima, jika tidak, kembalikan string false .
Kisarannya antara 1 dan 2^16.

Contoh
Masukan: 4
Keluaran: salah

Masukan: 1709
Keluaran: benar

fungsi Bilangan Prima(bil) {


beralih (bil) {
kasus 1:
kembali 'salah';
kasus 2:
kembali 'benar';
bawaan: {
const pivot = Math.floor(Math.sqrt(num));
for (biarkan i = 2; i <= pivot; i++) {
jika (!(bil % i)) {
kembali 'salah';
}
}
kembali 'benar';
}
}
}

// pertahankan panggilan fungsi ini di sini


bilangan prima(readline());
Hitung Tali

Minta fungsi StringCalculate( str ) ambil parameter str yang diteruskan dan evaluasi ekspresi matematika di dalamnya. Tanda bintang ganda (**) mewakili eksponensial.

Misalnya, jika str adalah "(2+(3-1)*3)**3" hasilnya harus 512 . Contoh lain: jika str adalah "(2-0)(6/2)" hasilnya harus 6 . Mungkin ada tanda kurung di dalam string sehingga
Anda harus mengevaluasinya dengan benar sesuai dengan aturan aritmatika. String akan berisi operator: +, -, /, *, (, ), dan **. Jika Anda memiliki string seperti ini: #/#*# atau
#+#(#)/#, maka evaluasi dari kiri ke kanan. Jadi bagi lalu kalikan, dan untuk yang kedua kalikan, bagi, lalu tambahkan. Evaluasi akan sedemikian rupa sehingga tidak akan ada operasi
desimal, jadi Anda tidak perlu memperhitungkan pembulatan.

Contoh
Masukan: "6*(4/2)+3*1"
Keluaran: 15

Masukan: "100*2**4"
Keluaran: 1600
fungsi StringCalculate(str) {
const workingString = str.replace(/([1-9)])(\()/g, '$1*$2');
return eval(workingString);
}

// pertahankan panggilan fungsi ini di sini


StringCalculate(readline());
Pembuat Pohon Dua

Mintalah fungsi TreeConstructor( strArr ) mengambil larik string yang disimpan dalam strArr , yang akan berisi pasangan bilangan bulat dalam format berikut: (i1,i2) , di
mana i1 mewakili simpul anak dalam pohon dan bilangan bulat kedua i2 menandakan bahwa itu adalah induk dari i1 . Sebagai contoh: jika strArr adalah ["(1,2)", "(2,4)", "(7,2)"],
maka ini membentuk pohon berikut:

yang dapat Anda lihat membentuk pohon biner yang tepat. Program Anda harus, dalam hal ini, mengembalikan string yang benar karena pohon biner yang valid dapat dibentuk. Jika
pohon biner yang tepat tidak dapat dibentuk dengan pasangan bilangan bulat, maka kembalikan string false . Semua bilangan bulat di dalam pohon akan menjadi unik, yang berarti
hanya ada satu simpul di pohon dengan nilai bilangan bulat yang diberikan.

Contoh
Masukan: ["(1,2)", "(2,4)", "(5,7)", "(7,2)", "(9,5)"]
Keluaran: benar

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


Keluaran: salah.
Pemeriksa Kuadran Sudoku

Buat fungsi SudokuQuadrantChecker( strArr ) membaca parameter strArr yang akan diteruskan yang akan mewakili papan bilangan bulat Sudoku 9x9 mulai dari 1 hingga
9. Aturan Sudoku adalah untuk menempatkan masing-masing dari 9 bilangan bulat bilangan bulat di setiap baris dan kolom dan tidak ada bilangan bulat yang berulang di baris,
kolom, atau sub-kisi 3x3 masing-masing. Input strArr akan mewakili papan Sudoku dan akan disusun dalam format berikut: ["(N,N,N,N,N,x,x,x,x)","(...)"," (...)",...)] di mana N
adalah bilangan bulat antara 1 dan 9 dan x akan berarti sel kosong. Program Anda akan menentukan apakah dewan tersebut legal; papan juga tidak harus harus selesai. Jika papan itu
legal, program Anda harus mengembalikan string legal tetapi jika tidak legal, itu harus mengembalikan kuadran 3x3 (dipisahkan dengan koma) di mana ada kesalahan. Kuadran 3x3
diberi nomor dari 1 sampai 9 mulai dari kiri atas ke kanan bawah.

Misalnya, jika strArr adalah: ["(1,2,3,4,5,6,7,8,1)","(x,x,x,x,x,x,x,x,x) ","(x,x,x,x,x,x,x,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,x,x,x,x, x,x)"] maka program Anda harus mengembalikan 1,3,4 karena kesalahan ada di kuadran 1, 3 dan 4 karena bilangan bulat berulang 1.

Contoh lain, jika strArr adalah: ["(1,2,3,4,5,6,7,8,9)","(x,x,x,x,x,x,x,x,x) ","(6,x,5,x,3,x,x,4,x)","(2,x,1,1,x,x,x,x,x)","(x, x,x,x,x,x,x,x,x)","(x,x,x,x,x,x,x,x,x)","(x,x,x,x,


x,x,x,x,x)","(x,x,x,x,x,x,x,x,x,x)","(x,x,x,x,x,x,x, x,9)"] maka program Anda harus mengembalikan 3,4,5,9 .

Tantangan sulit bernilai 15 poin dan Anda tidak dibatasi waktunya.

Contoh
Masukan:
["(1,2,3,4,5,6,7,8,1)","(x,x,x,x,x,x,x,x,x)","(x ,x,x,x,x,x,x,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,x,x,x,x,x,x)" ]
Keluaran: 1,3,4

function SudokuQuadrantChecker(strArr) {

// bersihkan array dari array string ke array sembilan array beranggotakan sembilan.

strArr = strArr.peta(fungsi(val) {

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

})

// buat dua salinan baru dari array yang akan digunakan dan array kosong untuk
menyimpan blok yang buruk

var copy1Arr = strArr.slice(0);

var copy2Arr = strArr.slice(0);

var holdObj = {};

//val adalah string baris, ind adalah nomor baris - kirim masing-masing ke
rowTester

strArr.forEach(fungsi(val, ind) {
penguji baris(val, ind);

});

//Bagian II - atur array berdasarkan kolom dan kirim ke metode vertTester untuk
diperiksa

// buat 'baris' dari setiap kolom, dan kirimkan ke vertTester. vertTester akan

// menjadi persis sama dengan rowTester, kecuali output akan dibalik untuk
diberikan

// blok yang benar

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

vertArr = [];

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

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

vertTester(vertArr, ind);

});

// Bagian III - buat 'baris' dari setiap blok, dan kirimkan ke blockTester.

//blockTester akan persis sama dengan rowTester, kecuali outputnya

// menjadi blok yang menyinggung

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

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


var blokArr = [];

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

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

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

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

var blok = Object.keys(holdObj);

if (!blok.panjang) {

kembali 'sah'

} kalau tidak {

blok = blok.peta(fungsi(val) {

return parseInt(val, 3) + 1;

}).menyortir();

kembalikan blok.bergabung(',');

//------------------------------fungsi pembantu-------------------------
function rowTester(arr, num) {

// format string sebagai array dari sembilan string angka

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

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

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

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

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

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

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

function vertTester(arr, num) {

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

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

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

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

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

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


}

fungsi blockTester(arr, blok) {

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

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

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

blokir di holdObj ? holdObj[blok]++ : holdObj[blok] = 1;

// pertahankan panggilan fungsi ini di sini

SudokuQuadrantChecker(readline());

Anda mungkin juga menyukai