Показать сообщение отдельно
  #13 (permalink)  
Старый 16.08.2017, 20:17
Аспирант
Отправить личное сообщение для HJ90 Посмотреть профиль Найти все сообщения от HJ90
 
Регистрация: 24.07.2012
Сообщений: 37

Пока вот так - возвращает первый слева элемент который пересекается с входным диапазоном.
Осталось найти все интервалы когда входной диапазон большой.

<html>
	<span> [8-16] [24-32] [40-48] [56-64] [72-80] [88-96] </span> 
	<br>
	<input type="number" value="8" oninput="test()" /> и
	<input type="number" value="" disabled="true" /> пересекается с
	<input id="result" disabled="true" />
	
	<style>
		body {text-align:center}
		span {display:inline-block; padding:15px; font-size:18px; font-family:consolas}
		input {width:100px; height:50px; font-size:35px; text-align:center}
	</style>
	
	<script>
		window.onload = test;
		
		var intervals = [
			{beg: 8,   end: 16},
			{beg: 24,  end: 32},
			{beg: 40,  end: 48},
			{beg: 56,  end: 64},
			{beg: 72,  end: 80},
			{beg: 88,  end: 96}
		];
		
		function test(value)
		{
			var A = +document.querySelectorAll("input")[0].value;
			var B = A + 2;
			
			document.querySelectorAll("input")[1].value = B;
			
			function bin_search_range(arr, A)
			{
				var min = 0;
				var max = arr.length - 1;
				
				while (min < max)
				{
					var mid = Math.floor((min + max) / 2);
					
					if(arr[mid].end < A)
					{
						min = mid + 1;
					}
					else max = mid;
				}
				if(arr[min].beg <= B && arr[min].end >= A)
				{
					return arr[min].beg + "-" + arr[min].end;
				}
				return "...";
			}
			document.querySelector("#result").value = bin_search_range(intervals, A);
		}
	</script>
</html>
Ответить с цитированием