Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как можно сократить (и можно ли) этот скрипт (см. внутри)? (https://javascript.ru/forum/misc/14535-kak-mozhno-sokratit-i-mozhno-li-ehtot-skript-sm-vnutri.html)

Hyuga_Nia 20.01.2011 15:19

Как можно сократить (и можно ли) этот скрипт (см. внутри)?
 
<script language = "JavaScript">
	Date.prototype.getDOY = function()
	{
		var onejan = new Date(this.getFullYear(),0,1);
		return Math.ceil((this - onejan) / 86400000);
	}
	Date.prototype.isLeapYear = function()
	{
		var year = this.getFullYear();
		return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));
	}
	var today = new Date();
	var yearday = today.getDOY();
	var path = "yenonotie_files/enderi/";
	var x = 0;
	var enderi5 = new Array(
		path + "1.png",
		path + "2.png",
		path + "3.png",
		path + "4.png",
		path + "5a.png");
	var enderi6 = new Array(
		path + "1.png",
		path + "2.png",
		path + "3.png",
		path + "4.png",
		path + "5b.png",
		path + "6.png");
	var months = new Array();
	var days = new Array();
	var y = 30;

	while  (x <= 11)
	{
		months [x] = "yenonotie_files/months/" + x + ".png";
		++x;
	}
	x = 0
	while  (x <= 29)
	{
		days [x] = "yenonotie_files/days/" + x + ".png";			
		++x;
	}
	x = 1;
	if (yearday >= 361)
	{
		if (today.isLeapYear())
		{
			document.getElementById("pic1").src = "yenonotie_files/main/enderi6.png";
			document.getElementById("pic2").src = enderi6 [yearday - 361];
		}
		else
		{
			document.getElementById("pic1").src = "yenonotie_files/main/enderi5.png";
			document.getElementById("pic2").src = enderi5 [yearday - 361];
		}
	}
	else
	{
		while (y <= yearday - 1)
		{
			++x;
			y += 30;
		}
		yearday = yearday - (30 * (x - 1));
		document.getElementById("pic1").src = "yenonotie_files/main/calendar.png";
		document.getElementById("pic2").src = months [x];
		document.getElementById("pic3").src = days [yearday];
	}
</script>

Hyuga_Nia 20.01.2011 15:27

Примечание 1: Все работает, надо только сократить...
Примечание 2: Например, нельзя ли функции, которые используются только по 1 разу, не назначать заранее, а прямо в программе по действиям выполнять? Ну, то есть то, что после "function () { " вставить вместо вызова функции или как-то так...

ksa 20.01.2011 15:55

Цитата:

Сообщение от Hyuga_Nia
надо только сократить...

А сама задача-то в чём? Может лучше вообще по-другому все сделать? :)

Skipp 20.01.2011 16:00

ksa,
Я сначала такой же вопрос написал, потом подумал и удалил(посмотрев на выше приведённый скрипт))))

ksa 20.01.2011 16:14

Цитата:

Сообщение от Skipp
написал, потом подумал и удалил

Рыцарь, ты мудр! (с) к/ф Путешественники во времени (с Ж.Рено)

Skipp 20.01.2011 16:19

O_O(:blink:)

:)

Hyuga_Nia 20.01.2011 16:24

Цитата:

Может лучше вообще по-другому все сделать?
Как?

Цитата:

А сама задача-то в чём?
Скрипт выводит вот такое:

А в последние 5 дней года такое:

(Или 6, если год високосный:
)

ksa 20.01.2011 16:33

Hyuga_Nia, что-то картинок я твоих не вижу... :(

Skipp 20.01.2011 16:36

ksa,
лучше и не видеть!!!!:)

Hyuga_Nia,
Если бы понятно было бы, что да как)

Hyuga_Nia 20.01.2011 16:36

Цитата:

Hyuga_Nia, что-то картинок я твоих не вижу...
Народ.ру глючил, теперь видишь?

Hyuga_Nia 20.01.2011 16:37

Цитата:

Hyuga_Nia,
Если бы понятно было бы, что да как)
Календарь это... В общем, картинки смотри.

Aetae 20.01.2011 16:50

Чей энто календарь?
В каждом месяце ровно 30 дней, при этом учитываются високосные года?

with-love-from-siberia 20.01.2011 17:20

Цитата:

Сообщение от Aetae
при этом учитываются високосные года?

Да учитывается.

Какой-нибудь эльфийский календарь. Интересно, а какая у них система счисления? Вроде бы есть определенный порядок, но и сумбур присутствует.

upd: 12-ричная?

Aetae 20.01.2011 17:56

Сократил на солько можно без тестирования.))
<script type="text/javascript">
	var today = new Date();
	var yearday = Math.ceil((+today - today.setMonth(0,0)) / 864e5);
	today.setMonth(12,366);
	var leap = today.getDate()!=1?'leap':'';
	var d = 'yenonotie_files/';
	var id = function(i){return document.getElementById(i)};
	if (yearday > 360)
	{
		id("pic1").src = d+'main/enderi'+leap+'.png';
		id("pic2").src = d+'enderi/' + (yearday+(yearday==365&&leap)) + '.png';
	}
	else
	{
		id("pic1").src = d+'main/calendar.png';
		id("pic2").src = d+'months/' + Math.floor(yearday/30) + '.png'; //возможно (Math.floor(yearday/30)+1)
		id("pic3").src = d+'days/' + yearday%30 + '.png';
	}
</script>

Переименовать ->
yenonotie_files/enderi/1.png		yenonotie_files/enderi/361.png
yenonotie_files/enderi/2.png		yenonotie_files/enderi/362.png		
yenonotie_files/enderi/3.png		yenonotie_files/enderi/363.png		
yenonotie_files/enderi/4.png		yenonotie_files/enderi/364.png
yenonotie_files/enderi/5a.png		yenonotie_files/enderi/365.png
yenonotie_files/enderi/5b.png		yenonotie_files/enderi/365leap.png
yenonotie_files/enderi/6.png		yenonotie_files/enderi/366.png
yenonotie_files/main/enderi5.png	yenonotie_files/main/enderi.png
yenonotie_files/main/enderi6.png	yenonotie_files/main/enderileap.png

ksa 20.01.2011 20:04

Цитата:

Сообщение от Hyuga_Nia
теперь видишь?

Тваюметь! :blink: Я как-то делал еврейский сайт... :D

ksa 20.01.2011 20:07

Hyuga_Nia, просто для дней многое решается делением по модулю... Т.е. массивы практически не нужны...

Hyuga_Nia 20.01.2011 20:12

Цитата:

Чей энто календарь?
Предполагается, что эльфийский (и сделан на квенья), хотя по Толкину у эльфов другой календарь вообще.
Цитата:

В каждом месяце ровно 30 дней, при этом учитываются високосные года?
Лишние 5 (6) дней между последним и первым месяцами.
Цитата:

Какой-нибудь эльфийский календарь.
Ага.
Цитата:

Интересно, а какая у них система счисления?
12-ричная forever tennoio!
Цитата:

Вроде бы есть определенный порядок, но и сумбур присутствует.
Хде сумбур?
Цитата:

Сократил на солько можно без тестирования.))
СПАСИБО!!! *побежал проверять*
Цитата:

Тваюметь! Я как-то делал еврейский сайт...
)))))))))))))))))))))))))))

Hyuga_Nia 20.01.2011 20:15

Цитата:

делением по модулю
О_о энто что?
Цитата:

массивы практически не нужны...
:(

ksa 20.01.2011 20:22

Цитата:

Сообщение от Hyuga_Nia
энто что?

Цитата:

% (Модуль числа)

Этот оператор возвращает значение остатка при делении первого операнда на второй. Результат будет иметь тот же знак, что и первый операнд.
7 % 2  // = 1
-1 % 2 // -1

http://javascript.ru/arithmetic

ksa 20.01.2011 20:26

Например для "нашего" календаря, для распознавания дней недели, достаточно к количеству дней прибавть какую-то константу (зависит от языка) для коррекции и разделить по модулю 7.
Результат операции будет во множестве (0, 1, 2, ..., 6), что соответствует количеству дней недели...

Hyuga_Nia 20.01.2011 20:30

Цитата:

% (Модуль числа)
Этот оператор возвращает значение остатка при делении первого операнда на второй. Результат будет иметь тот же знак, что и первый операнд.
7 % 2 // = 1
-1 % 2 // -1
Удобно

Aetae,
Почти все работает, не отображается тока месяц.

P. S. Это, конечно не важно, но почему все используют эти одинарные кавычки вместо обычных?

Hyuga_Nia 20.01.2011 20:33

Цитата:

Например для "нашего" календаря, для распознавания дней недели, достаточно к количеству дней прибавть какую-то константу (зависит от языка) для коррекции и разделить по модулю 7.
Результат операции будет во множестве (0, 1, 2, ..., 6), что соответствует количеству дней недели...
Ясно *нифига мне не ясно О_о Сколько надо было выпить, чтобы придумать наш календарь?*

ksa 20.01.2011 20:49

Цитата:

Сообщение от Hyuga_Nia
почему все используют эти одинарные кавычки вместо обычных?

Я это делаю по техническим причинам... JS понимает как одинарные, так и двойные. А вот Cache (СУБД на котором работаю) только двойные... Т.ч. для использования в сочетании приходится делать так

<input type='text' id='info' name='info' value='#($g(%request.Data("info",1)))#' />


Да и в обычных текстах чаще используются двойные кавычки...

document.getElementById('info').value='ООО "Рога и копыта" ищет сырьё...'

Aetae 20.01.2011 20:55

Цитата:

Сообщение от Hyuga_Nia (Сообщение 88931)
Удобно

Aetae,
Почти все работает, не отображается тока месяц.

Отображаться должно в люобом случае, разве что не верно)
К месяцу коммент стоит, то может и +1.

Цитата:

Сообщение от Hyuga_Nia (Сообщение 88931)
P. S. Это, конечно не важно, но почему все используют эти одинарные кавычки вместо обычных?

Мне привычнее так. В js,css - одинарные, в html - двойные. Чисто эстетическое)

Ну и:
Цитата:

Сообщение от ksa (Сообщение 88935)
Да и в обычных текстах чаще используются двойные кавычки...

document.getElementById('info').value='ООО "Рога и копыта" ищет сырьё...'


Hyuga_Nia 20.01.2011 20:57

Aetae,
Все работает, спсибо! Ты был прав насчет +1 к месяцу.
Цитата:

Я это делаю по техническим причинам... JS понимает как одинарные, так и двойные. А вот Cache (СУБД на котором работаю) только двойные... Т.ч. для использования в сочетании приходится делать так
Понятно, значит ничего, что я поменял их на двойные...

Hyuga_Nia 20.01.2011 21:00

Aetae,
Еще раз спасибо!

ТЕМА ЗАКРЫТА

Aetae 20.01.2011 21:03

Зря, " в два раза больше трафика съест, чем '.
шутка

А файлы месяца тогда рекомендую тож переименовать на единицу меньше, чтоб лишних действий в скрипте не писать.)
сотые доли миллисекунды конечно, но эстетика же)

Hyuga_Nia 20.01.2011 21:05

Цитата:

А файлы месяца тогда рекомендую тож переименовать на единицу меньше, чтоб лишних действий в скрипте не писать.)
сотые доли миллисекунды конечно, но эстетика же)
Однако да!
Эстетика - это святое...

with-love-from-siberia 20.01.2011 21:48

Цитата:

Вроде бы есть определенный порядок, но и сумбур присутствует.
Цитата:

Сообщение от Hyuga_Nia (Сообщение 88924)
Хде сумбур?



Ну вот посмотрите. Если я правильно понимаю, то чтение идет слева-направо и сверху-вниз.

Код:

т      тт      ттт        L          Lт        Lтт
...
т т    тт т    ттт т      L т      Lт т      Lтт т
...
т тт  тт тт  ттт тт ...

тт т от т тт трудно отличить.

Первая строка выглядит вообще как 4-ричная система.
1, 2, 3, 10, 11, 12, ...
У эльфов вообще сколько пальцев, конечностей? Что говорят эльфийские легенды о происхождении их системы счисления? (-:

Вот это я и называю - определенная закономерность есть, но она "ломается".

Вообще-то это к делу не относится, но просто интересно по какому принципу создавались эльфийские цифры. (-:


Часовой пояс GMT +3, время: 16:26.