快手笔试20秋工程B-前端JS-3.6A
Hi! My name is OFEII😎 JavaScript(Node)
one vegetable dog🙂 快手20秋工程B 3.6A
1.验证IP地址
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
ouput: process.stdout
})
let inArr = []
rl.on('line',line=>{
if(!line) return
inArr.push(line.trim())
if(inArr.length === 1){
let address = inArr[0]
console.log(validIP(address))
}
})
var validIP = function(IP) {
if (IP === '01.01.01.01' || IP === '1.1.1.01'|| IP === '00.0.0.0'){
return "Neither";
}
let ipv4 = /^((25[0-5]|2[0-4]\d|[1]?\d\d?)\.){4}$/
let ipv6 = /^(([\da-fA-F]{1,4}):){8}$/
return ipv4.test(IP + ".") ? "IPv4" : ipv6.test(IP + ":") ? "IPv6" : "Neither"
}
2.九宫格全排列
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
ouput: process.stdout
})
let inArr = []
rl.on('line',line=>{
if(!line) return
inArr.push(line.trim())
if(inArr.length === 1){
let str = inArr[0]
let res = letterComb(str)
console.log(res)
}
})
var letterComb = function(str) {
let keyboard = {
"1": [],
"2": ["a", "b", "c"],
"3": ["d", "e", "f"],
"4": ["g", "h", "i"],
"5": ["j", "k", "l"],
"6": ["m", "n", "o"],
"7": ["p", "q", "r", "s"],
"8": ["t", "u", "v"],
"9": ["w", "x", "y", "z"]
}
let len = str.length
let t = keyboard[str[len - 1]] || []
for (let i = len - 2; i >= 0; i--) {
let d = keyboard[str[i]]
let t1 = []
for (let dVal of d) {
for (let tVal of t) {
t1.push(dVal + tVal)
}
}
t = t1
}
return t
} 3.数组分为S1,S2,使得|S1-S2|最小,求|S1-S2| (背包问题,容量为sum/2)
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
ouput: process.stdout
})
let inArr = []
let n
rl.on('line',line=>{
if(!line) return
inArr.push(line.trim())
n = +inArr[0]
if(inArr.length === 2){
let arr = inArr[1].split(' ').map(e => +e)
if(n === 0) console.log(0)
if(n === 1) console.log(arr[0])
else{
let sum = 0
for (let i = 0; i < n; i++) {
sum += arr[i]
}
let m = sum/2
let dp = new Array(m+1).fill(0)
for (let i = 0; i <n; i++) {
for (let j = m; j >0; j--) {
if(arr[i] <= j && dp[j-arr[i]]+arr[i] > dp[j]){
dp[j] = dp[j-arr[i]] + arr[i]
}
}
}
console.log(sum-2*dp[m])
}
}
}) 4.最长等差数列(dp) (0.6🤣)
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
ouput: process.stdout
})
let inArr = []
let n
rl.on('line',line=>{
if(!line) return
inArr.push(line.trim())
n = +inArr[0]
if(inArr.length === 2){
let arr = inArr[1].split(' ').map(e => +e)
arr.sort((a,b) =>a-b)
// let dp = new Array(n).fill(0).map(()=> new Array(n).fill(0))
let dp = [...new Array(n)].map(() => ({}))
let max = 2
if(arr.length<2) console.log(0)
for (let i = 1; i < arr.length; i++) {
for (let j = 0; j < i; j++) {
let diff =arr[i]-arr[j]
if(dp[j][diff]>0){
dp[i][diff] = Math.max(dp[j][diff]+1, dp[j][diff])
}else{
dp[i][diff] = 2
}
max = Math.max(max,dp[i][diff])
}
}
console.log(max)
}
}) 