Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Задача для скучающих (https://javascript.ru/forum/misc/7207-zadacha-dlya-skuchayushhikh.html)

subzey 20.01.2010 23:51

Задача для скучающих
 
Уважаемые любители client-side-программирования, вот вам задачка на смекалку.
alert(+[n[[n][n]]+n[[n]]+n[n+n]+n+++[n]]); // 42

Вопрос: чему же равно n?

Призовой фонд за решение равен нулю в денежном эквиваленте. Ну, могу, разве что, кармой поделиться ;)

UPD: В такой формулировке она, пожалуй, поинтереснее будет :)

Gvozd 21.01.2010 00:40

Спасибо за интересную задачу
решение отправляю в личку, чтобы не портить остальным удовольствие

Octane 21.01.2010 02:15

Читерское решение :D
var toString = Array.prototype.toString;

var n = {
	toString: function () {
		Array.prototype.toString = arguments.callee;
		return 42;
	}
};

alert(+[n[[n][n]]+n[[n]]+n[n+n]+n+++[n]]);

Array.prototype.toString = toString;


если плюсики подругому пробелами разделить, то можно еще так:
var n = {
	"0": 14,
	toString: function () {
		return 0;
	}
};

alert(+[n[[n][n]] + n[[n]] + n[n+n] + n+ + +[n]]);

Gvozd 21.01.2010 02:47

subzey,
оставил бы и старый вариант также
негоже что только я его увидел.тем более, что предыдущая задача работала и с моим способом, а новая только с твоим))
вот еще одна сложностью чуточку повыше
alert(m[[m]]+(m[eval(m[''+[m],+m]+[m]+m[eval(''+[m],+m)])]+m[+[m]]))//42

и немного усложненое
alert(m[[m]]+(m[eval(m[[m],+m]+[m]+m[eval(m[m[m]]+[m],+m)])]+m[+[m]]))//42

На всякий случай: решения у примеров разные могут быть

PS m-статичная переменная, без переопределенных прототипов, и их свойств
так что просьба без читов.иначе теряется интерес
и расставлять по-другому также ничего не надо

zm8 21.01.2010 13:27

Отличная задачка! Занимательное преобразование типов, так сказать :D

var n = {
val: 1,
toString: function(){
return this.val;
},
valueOf: function(){
return this.val;
},
undefined: 1,
1: 1,
2: 1
};

Как вставить код вместе к кнопочкой "Запустить" не нашёл, код букмарклета бьётся редактором:
javascript:(function(){var n={val:1,toString:function(){return this.val;},valueOf:function(){return this.val;},undefined:1,1:1,2:1};alert(+[n[[n][n]]+n[[n]]+n[n+n]+n+++[n]]);})()

subzey 21.01.2010 15:31

zm8,
так держать!

Для исполняемого js используйте такой синтаксис:
[js run]…Ваш код…[/js]

И… не стóит спойлить :)

zm8 21.01.2010 15:39

скрыл решение ;)
спасибо за подсказку к исполняемому javascript.

Gvozd 21.01.2010 15:46

subzey,
попробуешь мои задачки? ;)

subzey 22.01.2010 17:55

Gvozd,
ага, на выходных. Пока мне и прикладного яваскрипта хватает :)


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