The Six Most Common Species Of Code
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
-
- Уже с Приветом
- Posts: 24375
- Joined: 18 Nov 2003 16:42
Re: The Six Most Common Species Of Code
зачётная тема, но можно было выдоить побольше
Don't code today what you can't debug tomorrow.
-
- Уже с Приветом
- Posts: 9194
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: The Six Most Common Species Of Code
Можно ещё выделить типы кода:
код продукта, который продаётся,
код, который пишет Research,
код прототипа,
код, который пишут в продукте с очень длинной историей, чтобы залатать что-то, что нельзя напрямую трогать,
код юнит-теста,
код автоматического функционального теста,
код инструмента для поддержки разработки.
И у каждого типа кода свой характер. :-p
код продукта, который продаётся,
код, который пишет Research,
код прототипа,
код, который пишут в продукте с очень длинной историей, чтобы залатать что-то, что нельзя напрямую трогать,
код юнит-теста,
код автоматического функционального теста,
код инструмента для поддержки разработки.
И у каждого типа кода свой характер. :-p
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 314
- Joined: 24 May 2013 22:04
Re: The Six Most Common Species Of Code
Код, написанный модным перцем:
Code: Select all
def fibonacci(n: BigInt): BigInt = {
@tailrec
def fib(i: BigInt, a: BigInt, b: BigInt): BigInt = {
if (i < 0)
a
else
fib(i - 1, b, a + b)
}
fib(n, 0, 1)
}
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
-
- Уже с Приветом
- Posts: 1481
- Joined: 28 Jan 2002 10:01
Re: The Six Most Common Species Of Code
Поклонниками Александреску.
template <unsigned N>
struct Fib
{
static const unsigned Value = Fib<N-1>::Value + Fib<N-2>::Value;
};
template <>
struct Fib<2>
{
static const unsigned Value = 1;
};
template <>
struct Fib<1>
{
static const unsigned Value = 1;
};
printf("%u\n", Fib<10>::Value);
template <unsigned N>
struct Fib
{
static const unsigned Value = Fib<N-1>::Value + Fib<N-2>::Value;
};
template <>
struct Fib<2>
{
static const unsigned Value = 1;
};
template <>
struct Fib<1>
{
static const unsigned Value = 1;
};
printf("%u\n", Fib<10>::Value);
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: The Six Most Common Species Of Code
А хипстер бы посмотрел на это, сказал бы, что Скала слишком сложна, и написал быrorp wrote:Код, написанный модным перцем:
import mpmath
print fib(n)
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: The Six Most Common Species Of Code
Модные перцы пишут вот так:rorp wrote:Код, написанный модным перцем:Code: Select all
def fibonacci(n: BigInt): BigInt = { @tailrec def fib(i: BigInt, a: BigInt, b: BigInt): BigInt = { if (i < 0) a else fib(i - 1, b, a + b) } fib(n, 0, 1) }
Code: Select all
def fib: Stream[Int] = 0 #:: 1 #:: fib.zip(fib.tail).map{case (a,b) => a + b}
In vino Veritas!
-
- Уже с Приветом
- Posts: 64661
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: The Six Most Common Species Of Code
если это было трудно написать, то должно быть трудно прочитать (с)
-
- Уже с Приветом
- Posts: 15475
- Joined: 27 Sep 2007 22:53
Re: The Six Most Common Species Of Code
Казалось-бы: банальнейший случай "обрубания хвоста" (tail call optimization) в императивных языках.
К сожалению, так и не раскрытый (за исключением варианта, предложенного crypto5) в приведенных выше решениях.
И кстати, поучительный пример того, как богатейшую и насыщенную искрометными вариациями тему сисек, можно бездарно свести к серым и будничным (в стиле Александреску) пубернатным прыщам.
К сожалению, так и не раскрытый (за исключением варианта, предложенного crypto5) в приведенных выше решениях.
И кстати, поучительный пример того, как богатейшую и насыщенную искрометными вариациями тему сисек, можно бездарно свести к серым и будничным (в стиле Александреску) пубернатным прыщам.
-
- Уже с Приветом
- Posts: 1481
- Joined: 28 Jan 2002 10:01
Re: The Six Most Common Species Of Code
Если Вы еще не поняли, то стиль Александреску вообще не нуждался ни в каких tail оптимизациях. Он просто распечатал константу вычисленную во время компиляции. Вычислять не рекурсией во время компиляции, вроде как, на C++ еще не придумали.
-
- Уже с Приветом
- Posts: 34124
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: The Six Most Common Species Of Code
Я обычно на интервью пишу так походу
Code: Select all
int fib (int n) {
return (n < 3) ? 1 : fib (n-1) + fib (n-2);
}
"A patriot must always be ready to defend his country against his government." Edward Abbey
-
- Уже с Приветом
- Posts: 3836
- Joined: 13 Sep 2007 10:06
Re: The Six Most Common Species Of Code
ну вопрос на засыпку, сколько рекурсивных операций требуется для вычисления таким методом для числа N?
-
- Уже с Приветом
- Posts: 15475
- Joined: 27 Sep 2007 22:53
Re: The Six Most Common Species Of Code
От рекурсии в этом примере все равно не удалось избавиться, а лишь перенести ее на время компиляции. Вдобавок наверняка придется вручную регулировать её глубину для вычисления больших значений.Andriy777 wrote:Если Вы еще не поняли, то стиль Александреску вообще не нуждался ни в каких tail оптимизациях. Он просто распечатал константу вычисленную во время компиляции. Вычислять не рекурсией во время компиляции, вроде как, на C++ еще не придумали.
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: The Six Most Common Species Of Code
fib(-8)==1?Sergunka wrote:Я обычно на интервью пишу так походу
Code: Select all
int fib (int n) { return (n < 3) ? 1 : fib (n-1) + fib (n-2); }
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: The Six Most Common Species Of Code
Просто интересно, а варианты с циклом принимать перестали? ))
In vino Veritas!
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: The Six Most Common Species Of Code
Они некошерны. Моск программиста устроен так, что на простых задачах перед незнакомым человеком ему просто необходимо показать, что он знает, что такое рекурсия.crypto5 wrote:Просто интересно, а варианты с циклом принимать перестали? ))
Плюс ко всему, рекурсивное решение короче в плане количества символов, а решение с циклом, будучи намного фефективнее, выглядит "неэлегантно"
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: The Six Most Common Species Of Code
Ну вот. Просто и ясно. Скалисты должны завидовать.crypto5 wrote:Просто интересно, а варианты с циклом принимать перестали? ))
Code: Select all
sub fib { local($count,$kittens,$puppies)=(1,0,1); while($_[0] != $count++) { ($kittens,$puppies)=($puppies, $kittens+$puppies); } $puppies;
Хотя нет. Нашел лучше:
Code: Select all
$_ = "fiiiiib";
print "$_\n";
print "$_\n" while s/fi?b/i/g || s/fii(i*)b/f$1bfi$1b/g;
-
- Уже с Приветом
- Posts: 18862
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: The Six Most Common Species Of Code
Это ж "динамическое программирование", такое нонче толи не учат, толи не понимают...crypto5 wrote:Просто интересно, а варианты с циклом принимать перестали? ))
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: The Six Most Common Species Of Code
Меня всегда восхищал язык программирования J:dotcom wrote:Ну вот. Просто и ясно. Скалисты должны завидовать.crypto5 wrote:Просто интересно, а варианты с циклом принимать перестали? ))
P.S. Нет, строчку разворачивать нельзя.Code: Select all
sub fib { local($count,$kittens,$puppies)=(1,0,1); while($_[0] != $count++) { ($kittens,$puppies)=($puppies, $kittens+$puppies); } $puppies;
Хотя нет. Нашел лучше:
Отсюда: http://nick.zoic.org/languages/fibonacc ... erversity/Code: Select all
$_ = "fiiiiib"; print "$_\n"; print "$_\n" while s/fi?b/i/g || s/fii(i*)b/f$1bfi$1b/g;
Code: Select all
f2a=: 3 : '{. +/\@|.^:y 0 1x'
Это цикл кстати ))
In vino Veritas!
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: The Six Most Common Species Of Code
Тоже красиво. Надо будет запомнить такое, чтобы сломать мозг потенциальному интервьюеру. Я подозреваю, что еще круче будет что-то написать на древнем APL с его специальными символами. Но даже страшно гуглить, как оно выглядит в жизни.crypto5 wrote:Меня всегда восхищал язык программирования J:
-
- Уже с Приветом
- Posts: 4936
- Joined: 22 Nov 2005 20:32
- Location: Maryland
Re: The Six Most Common Species Of Code
Это не на засыпку. На засыпку - сколько рекурсивных операций потребуется, если в самом первом варианте (CS101) - вызвать fibonacci(0)? Чисто теороетически, stack overflow пренебречь, int считать 32 бита.avitya wrote:ну вопрос на засыпку, сколько рекурсивных операций требуется для вычисления таким методом для числа N?
-
- Уже с Приветом
- Posts: 4936
- Joined: 22 Nov 2005 20:32
- Location: Maryland
Re: The Six Most Common Species Of Code
Кстати, характерно, что ни один вариант не использует unsigned int
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: The Six Most Common Species Of Code
+1dimp wrote:Кстати, характерно, что ни один вариант не использует unsigned int
и ошибки есть чуть ли не в каждом
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 3836
- Joined: 13 Sep 2007 10:06
Re: The Six Most Common Species Of Code
да и вообще этот код говно.