Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Inet_PC

Оценить эту запись

Загадки

Запись от Inet_PC размещена 17.03.2014 в 22:22
Обновил(-а) Inet_PC 20.03.2014 в 14:43 (Добавлено еще 3 загадки)

Загадка №1:
Есть класс TestBase:
Код AS3:
package
{
    public class TestBase
    {
        public function TestBase()
        {
            super();
        }
 
        public function foo(a:int, b:int):void
        {
            trace("TestBase#foo()");
        }
    }
}
Необходимо написать наследника (Test) этого класса так, чтобы следующий код скомпилился и выполнился без ошибок:
Код AS3:
var t:TestBase = new Test();
t.foo.apply(null, [1, 2, 3]);//TestBase#foo()
Сигнатуру метода менять нельзя!

Загадка №2:
Код AS3:
private function foo():void
{
        // какой-то код здесь
        // использовать ключевое слова var нельзя
        player = null;
}
foo();
Код должен скомпилиться и не упасть при выполнении.

Загадка №3:
Имеется класс:
Код AS3:
package
{ 
    public class TestClass
    { 
        public function TestClass()
        {
            super(); 
        }
 
        public function foo():void
        {
            trace("foo");
        }
 
        public function change(value:Function):void
        {
 
        }
    }
}
Нужно, чтобы следующий код вывел в trace:
foo
--> foo <--
Код AS3:
public function Main()
{
    var test:TestClass = new TestClass();
    test.foo();//foo
    test.change(myTrace);
    test.foo();//--> foo <--
}
private function myTrace(...args):void
{
    args.push   ("<--");
    args.unshift("-->");
    trace.apply(null, args);
}
  • менять код класса Main нельзя;
  • использовать var, const, dynamic, prototype нельзя;
  • менять метод foo нельзя;
  • наследоваться нельзя.

Загадка №4:
Необходимо, не меняя значения переменных, изменить результат их сравнения.
Код AS3:
var a:Point = new Point(5);
var b:Point = new Point(1);
trace(a, "<", b, "=", a < b);//(x=5, y=0) < (x=1, y=0) = false
// какой-то код здесь
trace(a, "<", b, "=", a < b);//(x=5, y=0) < (x=1, y=0) = true
Загадка №5:
Необходимо вызвать метод foo, так, чтобы в трейс вывелось: «foo» и «after foo»:
Код AS3:
private function foo(...args):void
{
    trace("foo");
    throw new Error();
}
 
// здесь нужно как-то вызвать foo
trace("after foo");
-использовать try/catch нельзя;
-должно работать как в debug, так и в release FP;
-изменять метод foo нельзя;
-никаких окон с ошибками не должно быть.

Загадка №6:
Имеется класс Color, с перечислением цветов (фактически Enum):
Код AS3:
public class Color
{
    public static const RED:Color = new Color(0xFF0000);//it's OK
    public static const GREEN:Color = new Color(0x00FF00);//it's OK
    public static const RANDOM:Color = new Color(Math.random() * 0xFFFFFF);//it's OK
    // остальные объявления цветов
 
    private var _value:uint;
 
    public function Color(value:uint)
    {
        super();
        _value = value;
 
        // какой-то код здесь
    }
 
    public function toString():String
    {
        return _value.toString();
    }
}
Необходимо написать проверку в конструкторе класса так, чтобы она выкидывала ошибку, если мы пытаемся
создать еще один экземпляр класса Color:
Код AS3:
trace(Color.RED, Color.GREEN, Color.RANDOM);//0xFF0000 0x00FF00 0xF67D53
trace(new Color(Math.random() * 0xFFFFFF));//здесь должно упасть в run-time
-код проверки можно писать только внутри конструктора класса Color;
-использовать динамику нельзя.

Некоторые задачи имеют несколько решений. Так же некоторые задачи используют недокументированные
возможности FP. Используйте их (лучше не используйте) на свой страх и риск. Вообщем это все just for fun!
Всего комментариев 80

Комментарии

Старый 21.03.2014 20:19 Rzer вне форума
Rzer
 
Аватар для Rzer
Во второй я бы написал:
Код AS3:
with ([])
player = null;

Шестая:
Код AS3:
if (RANDOM) throw new Error();
Задача 1 : "trace" не сказано, что нельзя использовать SharedObject.

А вот моя небольшая задачка: Нужно поменять переменные местами не используя других переменных, используя только сложение, вычитание и присваивание (EDIT: не более двух присваиваний).
Код AS3:
foo(1,9);
function foo(a:int, b:int):void {	
 
	//тут код
 
	trace(a); //9
	trace(b); //1
}
Обновил(-а) Rzer 22.03.2014 в 01:00
Старый 21.03.2014 21:12 Inet_PC вне форума
Inet_PC
 
Аватар для Inet_PC
rumc, что-то в трейс вообще ничего не выводится.

Rzer, решение второй задачи принимается!
Решение 6 задачи, увы нет. Предполагается универсальное решение.
Цитата:
// остальные объявления цветов
Имеется ввиду, что может быть описано еще несколько цветов, и в Вашем случае будет ошибка при их создании.
Цитата:
Задача 1 : "trace" не сказано, что нельзя использовать SharedObject.
Не понятно чем здесь поможет SharedObject?
Обновил(-а) Inet_PC 21.03.2014 в 21:26
Старый 21.03.2014 21:19 КорДум вне форума
КорДум
 
Аватар для КорДум
Rzer, школьная же задачка )
Код AS3:
a += b;
b = a - b;
a -= b;
Старый 21.03.2014 22:46 etc вне форума
etc
 
Аватар для etc
Inet_PC, шестая:
Код AS3:
if (Color) throw new IllegalOperationError();
Старый 21.03.2014 22:59 etc вне форума
etc
 
Аватар для etc
Inet_PC, четвертая:

Код AS3:
			var a:Point = new Point(5);
			var b:Point = new Point(1);
			trace(a, "<", b, "=", a < b);//(x=5, y=0) < (x=1, y=0) = false
 
			Point.prototype.valueOf = function():Object {
				return -this.x;
			}
 
			trace(a, "<", b, "=", a < b);//(x=5, y=0) < (x=1, y=0) = true
5-ю пока не решал, in4core, над твоей не думал ещё тоже.
Старый 21.03.2014 23:02 Inet_PC вне форума
Inet_PC
 
Аватар для Inet_PC
etc, 6-я правильно, но хотелось бы чуть универсальнее.
4-я именно.

Еще одно решение твое задачи:
Код AS3:
public static function test():void
{
        var x:Object = Object(test).valueOf;
        x = getDefinitionByName(describeType(x()).constant.@type);
        trace(x.TEST);
}
Оно?
Обновил(-а) Inet_PC 23.03.2014 в 17:59
Старый 21.03.2014 23:41 etc вне форума
etc
 
Аватар для etc
Inet_PC, универсальнее?
Ну вот вариантик:

Код AS3:
if (getDefinitionByName(getQualifiedClassName(this))) throw new IllegalOperationError();
Не будет работать, если класс приватный. В твоём решении моей задачи тоже не будет. Предлагаю решить эту задачу, допустив, что плеер 11.5 и выше)

И ещё мой универсальный вариантик без getDefinitionByName:

Код AS3:
var n:String = getQualifiedClassName(this).split('::').pop();
if ((arguments.callee.valueOf)()[n]) throw new IllegalOperationError();
Старый 22.03.2014 00:52 Rzer вне форума
Rzer
 
Аватар для Rzer
КорДум, а в два присваивания?)
Старый 22.03.2014 00:55 in4core вне форума
in4core
 
Аватар для in4core
Цитата:
Не понятно чем здесь поможет SharedObject?
Так то он прав)
Старый 22.03.2014 01:46 etc вне форума
etc
 
Аватар для etc
Код AS3:
foo(1,9);
function foo(a:int, b:int):void {	
	a = arguments[1];
	b = arguments[0];
	trace(a); //9
	trace(b); //1
}
Старый 22.03.2014 02:30 Rzer вне форума
Rzer
 
Аватар для Rzer
Хитрец =)

Можно и без использования arguments
Обновил(-а) Rzer 22.03.2014 в 03:52
Старый 23.03.2014 03:08 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
КорДум, а в два присваивания?)
Код AS3:
foo(1,9);
function foo(a:int, b:int):void {	
 
	//тут код
        a = 9;
        b = 1;
	trace(a); //9
	trace(b); //1
}
Где забрать приз?
Старый 23.03.2014 03:24 GBee вне форума
GBee
 
Аватар для GBee
in4core, в вашу задачку про doIt можно использовать SharedObject. Но это неинтересно.
Старый 23.03.2014 07:35 YBil вне форума
YBil
Код AS3:
foo(1,9);
function foo(a:int, b:int):void {	
 
	a = (a + b) - (b = a);
 
	trace(a); //9
	trace(b); //1
}
Старый 23.03.2014 16:25 alatar вне форума
alatar
 
Аватар для alatar
В пятой можно не UncaughtError подписаться.
Старый 23.03.2014 16:56 Inet_PC вне форума
Inet_PC
 
Аватар для Inet_PC
alatar, можно. И?
Старый 23.03.2014 17:07 in4core вне форума
in4core
 
Аватар для in4core
И все станет хорошо!
Старый 23.03.2014 19:28 Lecosson вне форума
Lecosson
in4core, я бы сделал задачку с doIt так - если в шаред обжекте нет соответствующей записи - закинуть в нее список готовых ответов ...somevar = [3,2,1];
а потом просто на каждом вызове trace(...somevar.pop());
Старый 24.03.2014 03:30 in4core вне форума
in4core
 
Аватар для in4core
Lecosson тоже можно. В любом случае, начиная с первой загадки, большинство дает задачи сопоставимые с конкретными методами флеша, ничего нового и необычного , я не исключение. Но по факту интересно - некая битва титанов, кто уже поработал с многими зависимостями. Это как бы в отдельную ветку даже можно вынести, типа кто круче - и сделать голосование Мне вот больше интересно, как etc с этим справляется, зная его, я думаю он уже давно с флешем не дружит, скорее с JAVA/C подобными, но еще многое помнит с данной системы - респект!
Старый 24.03.2014 03:33 in4core вне форума
in4core
 
Аватар для in4core
Ну а вообще уныло ... вроде как и пишешь дальше и работаешь с этим... но как то скучно становится, ну да, кто то написал фреймворк, более удобный, кто то с E4X стал дружен, но все однотипно и скучно, что то хандра какая то посл время, пиши, пиши, кеш хватай, а душа? сука...
Старый 24.03.2014 11:55 alatar вне форума
alatar
 
Аватар для alatar
Цитата:
alatar, можно. И?
И это будет соответствовать условию.
Старый 24.03.2014 13:09 Inet_PC вне форума
Inet_PC
 
Аватар для Inet_PC
Цитата:
И это будет соответствовать условию.
Подписка на это событие, решением задачи не является.
Старый 24.03.2014 14:45 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
Ну а вообще уныло ... вроде как и пишешь дальше и работаешь с этим... но как то скучно становится, ну да, кто то написал фреймворк, более удобный, кто то с E4X стал дружен, но все однотипно и скучно, что то хандра какая то посл время, пиши, пиши, кеш хватай, а душа? сука...
Вам надо руками физически поработать, ремонт сделать или дом построить. Все от того, что мы не можем потрогать то, что делаем. Мы создаем эфемерные сущности, вкладываем силы и время, а ощутимого (физического) отклика нет.
Старый 24.03.2014 17:10 in4core вне форума
in4core
 
Аватар для in4core
GBee дело говоришь...
Старый 24.03.2014 19:44 Lecosson вне форума
Lecosson
in4core, вот еще вариант
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.trace.Trace;
 
	public class testDoIt extends Sprite
	{
		public function testDoIt()
		{
			one();
			two();
			three();
		}
 
		function one():void  {  doIt() }
		function two():void  { doIt() }
		function three():void  { doIt() }
		function doIt():void  {
			var listener:Function = function (fileInfo:String,lineNumber:String,classAndMethod:String,methodArguments:String):void {
				var pre:Object={"testDoIt/two":2,"testDoIt/three":3};
				if (pre.hasOwnProperty(classAndMethod)) trace(pre[classAndMethod]);
			}
			if (Trace.getLevel()==Trace.OFF) {
				trace(1);
				Trace.setListener(listener);
				Trace.setLevel(Trace.LISTENER);
			}
		}
 
 
	}
}
Старый 25.03.2014 00:02 in4core вне форума
in4core
 
Аватар для in4core
Lecosson шикарно!
Старый 26.03.2014 01:09 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Ойойой, люди что ж вы делаете!
Старый 28.03.2014 03:34 MerlinTwi вне форума
MerlinTwi
 
Аватар для MerlinTwi
in4core, варианты со счетчиком
Код AS3:
		private function doIt():void  {
			var n:int = int(arguments.callee.valueOf['cnt']) + 1;
			arguments.callee.valueOf['cnt'] = n;
			trace(n);
		}
Код AS3:
		private function doIt():void  {
			for (var i:int = 1; i <= 10; i++) {
				if (!hasEventListener('test' + i)) {
					trace(i);
					addEventListener('test' + i, function(e:Event):void{});
					break;
				}
			}
		}
Старый 28.03.2014 04:18 СлаваRa вне форума
СлаваRa
 
Аватар для СлаваRa
Вот это событие, @MerlinTwi, какими судьбами?
Старый 28.03.2014 14:06 in4core вне форума
in4core
 
Аватар для in4core
Да уж богат наш русскЫй язык ) чего только не придумают.
 
Последние записи от Inet_PC

 


Часовой пояс GMT +4, время: 08:54.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.