помогите понять
не получается цифровые данные из отдельного текстового файла считать в массив в программу и работать с ними
|
Цитата:
Как вариант, сделать ajax-запрос этого файла. А потом
var str='1 2 3 2 3 4 5 1 4 6';
alert(str.split(' '));
|
Цитата:
Если в файле "m.txt" находится javascript-код, то стоит изменить ему расширение на "js". Как вы посчитали ответ для вашего примера входящих данных? |
Цитата:
Цитата:
|
Цитата:
Цитата:
1 2 3 2 3 4... Но вода останется только в одной луже 1 2 3 2 3 4 И там будет 1 единица воды. |
ksa, спасибо :)
|
Цитата:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='https://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
$.ajax({
url: "tmp1.csp",
success: function(Data){
var h=Data.match(/\d+/g);
var a=h.slice(1);
h=h[0];
alert('Высота волны - '+h);
alert('Рельеф - '+a);
}
});
});
</script>
</head>
<body>
</body>
</html>
Файл tmp1.csp 4 1 2 3 2 3 4 5 1 4 6 |
Цитата:
function getCount(array, h) {
var max = 0, sum = 0;
for (var i = 0; i < array.length; ++i) {
var item = array[i];
if (item >= h) {
break;
}
sum += Math.max(0, max - item);
max = Math.max(max, item);
}
return sum;
}
alert(getCount([1, 2, 3, 2, 3, 4, 5, 1, 4, 6], 4));
alert(getCount([1, 2, 3, 2, 3, 4, 5, 1, 4, 6], 6));
|
Мое решение (можно значительно упростить):
const wave=5;
const relief='1 2 4 2 3 4 5 1 4 6'.split(' ');
const puddles=[];
let puddle=[];
for(let i=0;i<relief.length;i++){
const prevHeight=!puddle.length?(relief[i-1]||0):puddle[0];
const height=relief[i];
if(wave<=height)
break;
if(!puddle && prevHeight<=height)
continue;
if(prevHeight>height)
(!puddle.length?(puddle=[prevHeight]):puddle).push(height);
if(puddle[0]<=height){
puddles.push(puddle);
puddle=[];
}
}
const result=puddles.map(puddle=>{
const max=+puddle.shift();
return puddle.reduce((r,h)=>r+max-h,0);
}).reduce((r,v)=>r+v,0);
alert(result);
|
Alexandroppolus, После вашего решения свое публиковать стыдно :D
|
Цитата:
Контрольный пример 6 1 5 3 2 3 4 5 1 4 6 Вот такой рельеф получается
-
6
5 5 6
5 45 46
53 345 46
532345 46
1532345146
Твой алгоритм дает 6 воды, а это не так... :no: |
Rise,
тут хрен поймешь, как считать потери. Скорее всего, под "волной" подразумевался "прилив", т.е. запас воды неограничен и она не "теряется" |
Цитата:
Типа море же! Оно огромное, воды валом! :D |
Цитата:
|
Alexandroppolus, видел критику?
https://javascript.ru/forum/css-html...tml#post489147 |
|
Alexandroppolus, извини, это я после вставки не досмотрел программку до конца. :)
|
RCTYBZ, вот тебе кагбэ полное решение...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='https://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
$.ajax({
url: "tmp1.csp",
success: function(Data){
var h=Data.match(/\d+/g);
var a=h.slice(1);
h=h[0];
alert('Высота волны - '+h);
alert('Рельеф - '+a);
h=getCount(a,h);
alert('Воды - '+h);
}
});
function getCount(array, h) {
var max = 0, sum = 0;
for (var i = 0; i < array.length; ++i) {
var item = array[i];
if (item >= h) {
break;
}
sum += Math.max(0, max - item);
max = Math.max(max, item);
}
return sum;
};
});
</script>
</head>
<body>
</body>
</html>
|
:) :write:
var arr = '1 2 3 2 3 4 5 1 4 6'.match(/\d+/g);
var max = 4;
function pit(arr, max)
{
var puddle = 0, min;
for (var i = 0; i < arr.length; i++) {
if(max <= +arr[i]) break;
if(min == void 0 && arr[i + 1] < arr[i]) min = arr[i];
if(min != void 0 && arr[i] > min) min = void 0;
if(min != void 0) puddle += min - arr[i];
}
return puddle
}
var num = pit(arr, max) ;
alert(num);
|
совсем не понятно, как выгрузить информацию из txt
есть отдельный файл текстовый только с цифровым значением - высота волн и углубления, не понятно, как открыть, взять данные, внести их в массив. Можно попробовать открыть таким способом и вывести данные для наглядности
<!DOCTYPE html>
<html>
<head>
<title>wave</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<input type="file" id="files" name="file" /> Read file:
<span class="readButtons">
<button>show text</button>
</span>
<div id="byte_range"></div>
<div id="byte_content"></div>
<script>
function read(opt_start, opt_stop) {
var files = document.getElementById('files').files;
if (!files.length) {
alert('file not selected');
return;
}
var file = files[0];
var start = parseInt(opt_start) || 0;
var stop = parseInt(opt_stop) || file.size - 1;
var reader = new FileReader();
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) {
document.getElementById('byte_content').textContent = evt.target.result;
}
};
var blob = file.slice(start, stop + 1);
reader.readAsBinaryString(blob);
}
document.querySelector('.readButtons').addEventListener('click', function(evt) {
if (evt.target.tagName.toLowerCase() == 'button') {
var startByte = evt.target.getAttribute('data-startbyte');
var endByte = evt.target.getAttribute('data-endbyte');
read(startByte, endByte);
}
}, false);
alert(file);
</script>
</head>
</html>
|
<input type="file">
<script>
var arr;
document.querySelector('input').onchange = function(){
var fr = new FileReader();
fr.onload = function(){
arr=this.result.split(' ');
};
fr.readAsText(this.files[0]);
};
</script>
|
если там в несколько строк разбить на массив по новой строке и по пробелам
|
не получается задать рабочий массив, чтобы вывести значение и проводить операции с ним, для решения задачи
как из отдельного файла взять данные и внести в массив, до сих пор не найден для меня ответ и тут наверное так
arr=this.result.split(',');
|
так и не дошло, как вывести из файла в программу данные
|
| Часовой пояс GMT +3, время: 10:53. |