有人能为victor仓库问题提供js或php解决方案吗



Victor仓储是一家公共仓储公司,主要从事向客户租赁存储空间的业务。客户按租赁的存储单元每平方英尺收费。为了保持竞争力,留住并吸引更多客户,该公司专门提供各种灵活的存储空间租赁方式。。它们允许客户端根据需要自定义存储单元,从而提供了这种灵活性。该公司接受客户提供的存储单元规范,并根据给定规范构建存储单元。通过客户端规范,客户端表达了所需的不同存储单元以及它们必须如何组装在一起。

客户端规范包含两部分。在第一行中用逗号分隔的不同存储单元,以及在接下来的n-1行中这些单元如何相互关联,其中n表示不同存储单元的数量。下面的示例说明了一个简单的客户端规范:

Pallet,Rack,Row,Shelf
Pallet = 12 Rack
Rack = 18 Row
Row = 30 Shelf

根据给定的客户规范,Victor仓储必须建立一个标准化的输出规范,使其内部员工易于理解和组装存储。输出规范的构建必须如下所示,从最左边的最大存储单元开始,一直到右边的较小单元,最后在最右边的最小存储单元。上面示例输入规范的输出规范如下所示:

1Pallet = 12Rack = 216Row = 6480Shelf

开发一个程序来帮助Victor仓储将输入客户端规范转换为标准化输出规范。您的程序将读取客户端规范作为输入,并生成相应的输出规范作为输出。

Example Input(1)
Pallet,Rack,Row,Shelf
Pallet = 12 Rack
Rack = 18 Row
Row = 30 Shelf
Example Output(1)
1Pallet = 12Rack = 216Row = 6480shelf
Example Input(2)
container,bay,multi-pallet,pallet
pallet = 50 container
bay =  5000 container
multi-pallet = 500 container
Example Output(2)
1bay = 10multi-pallet = 100pallet  = 5000container
Sample input 1
Pallet,Rack,Row,Shelf
Pallet = 12 Rack
Rack = 18 Row
Row = 30 Shelf
Sample output 1
1Pallet = 12Rack = 216Row = 6480Shelf
process.stdin.resume();
process.stdin.setEncoding('utf8');
var stdin_input = "";
process.stdin.on("data", function (input) {
stdin_input += input;                               
// Reading input from STDIN
});
process.stdin.on("end", function () {
main(stdin_input);
});

class graph{
constructor(){
this.AdjList = new Map();
this.mp  = {};
this.rmp = {};
this.mp_pro = [];
this.result = [];
this.flag = false;
}
calc_result(startingNode){
this.result.sort((a,b)=>{
return b[0]<a[0];
});
if(this.result[0][0]!==0){
this.flag = true;
var reso = "1";
reso += startingNode;
for(var i in this.result){
reso += " = ";
reso += this.result[i][0];
reso += this.result[i][1];
}
console.log(reso);
}
}
dochange(total_nodes){
this.result=[];
for(var i=0;i<total_nodes;i++){
this.mp_pro[i] = 1;
}
}
addVertex(vertex){
this.AdjList.set(vertex, []);
}
addEdge(vertex, node, weight){
this.AdjList.get(vertex).push({
"dest":node,
"weight":Number(weight),
"reverse":false
});
this.AdjList.get(node).push({
"dest":vertex,
"weight":Number(weight),
"reverse":true
});
}
printGraph(){
var get_keys = this.AdjList.keys();  
for (var i of get_keys) { 
var get_values = this.AdjList.get(i); 
var conc = ""; 
for (var j of get_values)
console.log(j);
console.log(i + " -> " + conc); 
} 
}
mapper(point){
for(var i=0;i<point.length;i++){
this.mp[point[i]] = i;//["pallet"]=>0
this.rmp[i] = point[i];//0=>"pallet"
}
}
dfs(s,visited){
visited[this.mp[s]] = true;
var getNeighbors = this.AdjList.get(s);
for(var i in getNeighbors){
var get_dest_node = getNeighbors[i];
if(!visited[this.mp[get_dest_node.dest]]){
//calculation
if(get_dest_node.reverse){
this.mp_pro[this.mp[get_dest_node.dest]] = this.mp_pro[this.mp[s]] /  get_dest_node.weight;
if(this.mp_pro[this.mp[get_dest_node.dest]]<1)
this.mp_pro[this.mp[get_dest_node.dest]] = 0;
}else{
this.mp_pro[this.mp[get_dest_node.dest]] = this.mp_pro[this.mp[s]] *  get_dest_node.weight;
}
this.result.push([this.mp_pro[this.mp[get_dest_node.dest]],get_dest_node.dest]);
this.dfs(get_dest_node.dest,visited);
}
}
}
}

function main(input){
var data = input.split('n');
const n = data.length;
const point = data[0].split(';');
node = new graph();
for(var ii=0;ii< point.length;ii++){
node.addVertex(point[ii]);
}
var decre = n-1;
var k = 1;
while(decre--){
var ss = data[k].split(' ');k++;
node.addEdge(ss[0],ss[3],ss[2]);
}

node.mapper(point);
for(var ki=0;ki<n;ki++){
if(node.flag) break;
var visited = [];
for(var ui=0;ui<n;ui++) visited[ui] = false;
node.dochange(n);
var startingNode = point[ki];
node.dfs(startingNode,visited);
node.calc_result(startingNode);
}
}

JS 中的代码

最新更新