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
function MovingMedian(arr) {
biarkan buildArr = [];
biarkan winLength = arr.shift();
biarkan len = arr.panjang;
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
strArr.forEach(val => {
pertandingan const = val.match(parsingRegExp);
kunci const = cocok[1];
const numVal = Angka(cocok[2]);
kembalikan Object.keys(resObject)
.menyortir()
.map(val => {
kembalikan resObject[val] ? (val + ":" + resObject[val]) : '';
})
.filter(val => {
nilai kembali;
})
.bergabung(',');
}
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;
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(' ');
}
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
function HDistance(strArr) {
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
function DifferentCases(str) {
const charTest = /[a-zA-Z]/;
biarkan returnString = '';
const len = str.panjang;
const baseString = str.toLowerCase();
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
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]);
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;
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;
if (strarr[i] == strarr[i+1]) {
hitung ++;
}
kalau tidak {
var entri = hitung + strarr[i];
resarr.push(hitung + strarr[i]);
hitungan = 1;
}
}
return resarr.join("");
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;
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
}
}
}
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
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]);
}
}
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
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
// pertama, ketuk string ke huruf kecil dan letakkan di array untuk manipulasi
arr1 = str1.toLowerCase().split("");
arr2 = str2.toLowerCase().split("");
// 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++;
}
}
kalau tidak{
kembali salah;
}
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';
}
}
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);
fungsi arrayPrep(arr2) {
arr.sort(fungsi(a, b){
kembali a - b
});
target = arr2.pop()
kembali arr2
}
}
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;
loket pengembalian;
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
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
var x = arr[i].charCodeAt(0);
}
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;
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];
}
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);
}
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
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;
}
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();
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;
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;
}
}
}
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-');
}
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
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('');
}
};
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
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
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
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) {
// kode di sini
return str.panjang;
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;
});
}
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
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);
//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));
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) {
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];
}
}
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";
}
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
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;
}
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('-');
}
}
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
// 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);
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]];
}
};
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 = [];
// kode di sini
nomor kembali;
fungsi prepFunc(num) {
var str = num.toString();
var arr = str.split('');
kembali arr;
}
}
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;
str = arr.join("");
// kode di sini
kembali str;
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;
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
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
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;
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
if (BaruArray.panjang === 0) {
kembali;
}
crawler(BaruArray);
}
}
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
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
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) : "#");
// 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);
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:
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('-');
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
//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, ''));
kembali benar;
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.
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;
}
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
};
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(',');
}
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
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;
while (! bendera) {
hitung++;
if (mencari(numArray) === true) {
jumlah pengembalian;
} kalau tidak {
numArray = mencari(numArray);
}
}
}
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
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 = [];
//-----------------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);
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]
);
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
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
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}`;
}
}
}
}
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('');
}
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
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;
}
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;
// 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;
}
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());
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
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
function MinWindowSubstring(strArr) {
biarkan str = strArr[0];
biarkan jarum = strArr[1].split('');
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;
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;
}
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;
}
}
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);
//}
kembalikan res;
}
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
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);
}
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
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)
];
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();
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;
}
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);
return parseInt(qualifyingSums.pop().join(''));
function helperMethods() {
kembali {
arr: [],
convertSums(jumlah) {
return sums.map(val => {
biarkan str = val.toString();
kembalikan str.panjang === 1 ? '0' + str : str;
}).peta(val => {
return [nilai[0], nilai[1]];
});
}
}
}
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)
function EightQueens(strArr) {
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;
});
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
// 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';
}
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
//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);
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
);
}
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
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;
},
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;
}
});
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
kembali resArr.join('');
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
fungsi OffBinary(strArr) {
biarkan target = parseInt(strArr[0]).toString(2);
biarkan panah = strArr[1];
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;
}
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]);
});
kamus.slice(0,10).forEach(val => {
biarkan regEx = new RegExp (val[1], 'g');
reString = resString.ganti(regEx, val[0]);
});
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
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;
}
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;
}
}
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
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);
}
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
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.
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) {
})
// buat dua salinan baru dari array yang akan digunakan dan array kosong untuk
menyimpan blok yang buruk
//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
copy1Arr[0].forEach(function(val, ind) {
vertArr = [];
vertArr.push(copy1Arr[i][ind]);
vertTester(vertArr, ind);
});
// Bagian III - buat 'baris' dari setiap blok, dan kirimkan ke blockTester.
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) {
SudokuQuadrantChecker(readline());