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

Вернуться   Форум Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.06.2010, 19:04
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 1  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По умолчанию Почему програмисты не умеют програмировать?

http://www.codinghorror.com/blog/200...s-program.html

Понравилась статья. Если чесно, я с ходу не понял, в чем фишка, но когда понял, вобщем, у нас появилось два варианта:

Код AS3:
private function runFizzBuzz():void
{
	var result:String;
	var threes:int = 3;
	var fives:int = 5;
 
	for (var i:int = 1; i <= 100; i++) 
	{
		result = "";
		if (i == threes)
		{
			result = "Fizz";
			threes += 3;
		}
		if (i == fives)
		{
			result += "Buzz";
			fives += 5;
		}
		if (!result) result = i.toString();
		trace(result, i);
	}
}
Код AS3:
function runFizzBuzz():void
{
	var result:String;	 
	for (var i:int = 1; i <= 100; i++)
	{
		result = "";
		if (!(i % 3)) result += "Fizz";
		if (!(i % 5)) result += "Buzz";
		if (!result) result = i.toString();
		trace(result, i);
	}
}
Ваши мысли по поводу, альтернативы?
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 26.06.2010 в 19:10.
Старый 26.06.2010, 21:09
E-mail вне форума Посмотреть профиль Отправить личное сообщение для E-mail Найти все сообщения от E-mail
  № 2  
Ответить с цитированием
E-mail
 
Аватар для E-mail

Регистрация: Jun 2005
Адрес: Питер
Сообщений: 498
Записей в блоге: 1
Аналогично второму сделал
Кстати, а в чём фишка?

Старый 26.06.2010, 21:38
koIIImarik вне форума Посмотреть профиль Отправить личное сообщение для koIIImarik Посетить домашнюю страницу koIIImarik Найти все сообщения от koIIImarik
  № 3  
Ответить с цитированием
koIIImarik
 
Аватар для koIIImarik

Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
Бегло прочитал статью, если честно, не очень понятно, как связаны 2 участка кода с указанной статьёй. На сколько я понял, там просто рассказывалось о том, что многие программисты, которые пытаются устроиться на работу не в состоянии написать простую программу.

Что касается 2-х участков кода, которые вы представили: я против записей блоков if/while/for/case с участками кода, которые выполняются после них, в одну строку, например так:

Код AS3:
if (!(i % 3)) result += "Fizz";
Поэтому, не могу сказать, что «альтернатива» гораздо лучше 1-го участка кода, хотя выглядит компактнее, согласен.

Старый 26.06.2010, 22:03
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 4  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
Цитата:
которые выполняются после них, в одну строку, например так
поддерживаю...хотя иногда сам этим грешу
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 26.06.2010, 22:21
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 5  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Ваши мысли по поводу, альтернативы?
Число итераций можно примерно в два раза сократить


Последний раз редактировалось udaaff; 26.06.2010 в 22:25.
Старый 26.06.2010, 22:23
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я всегда пишу так, и мне так больше нравится, но суть не в этом.
В самом начале статьи было написано, что большинство програмистов не способны решить примитивную задачу, и как раз эта задача решается в этом банальном на первый взгляд коде
Кстати, по производительности первый вариант лучше второго т.как инкремент быстрее модуло, да и при этом инкремент происходит не каждую итерацию. Но фишка не в этом, а в том, что прочитав условие задачи появляется желание найти вариант где бы использовались только два if'a или взаимоисключающие условия, а вот не находится
__________________
Hell is the possibility of sanity

Старый 26.06.2010, 23:46
TERRORist вне форума Посмотреть профиль Отправить личное сообщение для TERRORist Найти все сообщения от TERRORist
  № 7  
Ответить с цитированием
TERRORist
 
Аватар для TERRORist

блогер
Регистрация: Jun 2005
Адрес: RU
Сообщений: 1,540
Записей в блоге: 12
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Я всегда пишу так, и мне так больше нравится, но суть не в этом.
В самом начале статьи было написано, что большинство програмистов не способны решить примитивную задачу, и как раз эта задача решается в этом банальном на первый взгляд коде
Кстати, по производительности первый вариант лучше второго т.как инкремент быстрее модуло, да и при этом инкремент происходит не каждую итерацию. Но фишка не в этом, а в том, что прочитав условие задачи появляется желание найти вариант где бы использовались только два if'a или взаимоисключающие условия, а вот не находится

а почему вы пропустили одно из условий задачи "For numbers which are multiples of both three and five print "FizzBuzz"." ? я не наблюдаю такого трейса..

Код AS3:
			for (var i:uint = 1; i < 101; i++)
			{
				var fizz:Boolean = !(i % 5);
				var buzz:Boolean = !(i % 3);
				trace(buzz && fizz ? "FizzBuzz" : fizz ? "Fizz" : buzz ? "Buzz" : i)
			}
некрасиво но работает

Старый 27.06.2010, 00:35
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
TERRORist:
там не = а +=

Но идея интересная, хотя тоже не ахти - тернарный оператор ни чем не лучше if-else ну только что запись немного короче, а с другой стороны - приходится использовать "FizzBuzz", которая явно собирается из двух компонентов, которые так же используются отдельно. + нужно считать модуло каждую итерацию (более накладно чем раз в несколько итераций проинкрементить). + дополнительная операция &&.

кстати, для Лиспа можно было бы по-другому и красивше решать, там есть натуральные дроби (или я не знаю, как это правильно называется), в смысле можно 1/3 + 1/3 + 1/3 = 1.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 27.06.2010 в 00:48.
Старый 27.06.2010, 00:36
TERRORist вне форума Посмотреть профиль Отправить личное сообщение для TERRORist Найти все сообщения от TERRORist
  № 9  
Ответить с цитированием
TERRORist
 
Аватар для TERRORist

блогер
Регистрация: Jun 2005
Адрес: RU
Сообщений: 1,540
Записей в блоге: 12
а, точно, не заметил, сорри

Старый 27.06.2010, 01:19
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Кстати, вот еще экстримальный вариант
Код AS3:
function runFizzBuzz():void
{
	var result:String;
 
	for (var i:int = 1, state:int; i <= 100; i++, state++)
	{
		switch (state)
		{
			case 2: case 5: case 8: case 11:
				result = "Fizz";
				break;
			case 4: case 9:
				result = "Buzz";
				break;
			case 14:
				result = "FizzBuzz";
				state = -1;
				break;
			default: result = i.toString();
		}
		trace(result, i);
	}
}
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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