The Six Most Common Species Of Code

User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

The Six Most Common Species Of Code

Post by dotcom »

Хорошо подмечено:
Image

Оригинал: http://www.willa.me/2013/11/the-six-mos ... -code.html
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: The Six Most Common Species Of Code

Post by rzen »

зачётная тема, но можно было выдоить побольше :-)
Don't code today what you can't debug tomorrow.
User avatar
Medium-rare
Уже с Приветом
Posts: 9194
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: The Six Most Common Species Of Code

Post by Medium-rare »

Можно ещё выделить типы кода:

код продукта, который продаётся,
код, который пишет Research,
код прототипа,
код, который пишут в продукте с очень длинной историей, чтобы залатать что-то, что нельзя напрямую трогать,
код юнит-теста,
код автоматического функционального теста,
код инструмента для поддержки разработки.

И у каждого типа кода свой характер. :-p
... and even then it's rare that you'll be going there...
rorp
Уже с Приветом
Posts: 314
Joined: 24 May 2013 22:04

Re: The Six Most Common Species Of Code

Post by rorp »

Код, написанный модным перцем:

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

Re: The Six Most Common Species Of Code

Post by Сабина »

Super !
https://www.youtube.com/watch?v=wOwblaKmyVw
Andriy777
Уже с Приветом
Posts: 1481
Joined: 28 Jan 2002 10:01

Re: The Six Most Common Species Of Code

Post by Andriy777 »

Поклонниками Александреску.

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);
User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: The Six Most Common Species Of Code

Post by dotcom »

rorp wrote:Код, написанный модным перцем:
А хипстер бы посмотрел на это, сказал бы, что Скала слишком сложна, и написал бы

import mpmath
print fib(n)
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: The Six Most Common Species Of Code

Post by crypto5 »

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!
User avatar
Komissar
Уже с Приветом
Posts: 64661
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: The Six Most Common Species Of Code

Post by Komissar »

если это было трудно написать, то должно быть трудно прочитать (с)
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: The Six Most Common Species Of Code

Post by Мальчик-Одуванчик »

Казалось-бы: банальнейший случай "обрубания хвоста" (tail call optimization) в императивных языках.
К сожалению, так и не раскрытый (за исключением варианта, предложенного crypto5) в приведенных выше решениях.
И кстати, поучительный пример того, как богатейшую и насыщенную искрометными вариациями тему сисек, можно бездарно свести к серым и будничным (в стиле Александреску) пубернатным прыщам.
Andriy777
Уже с Приветом
Posts: 1481
Joined: 28 Jan 2002 10:01

Re: The Six Most Common Species Of Code

Post by Andriy777 »

Если Вы еще не поняли, то стиль Александреску вообще не нуждался ни в каких tail оптимизациях. Он просто распечатал константу вычисленную во время компиляции. Вычислять не рекурсией во время компиляции, вроде как, на C++ еще не придумали.
User avatar
Sergunka
Уже с Приветом
Posts: 34124
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: The Six Most Common Species Of Code

Post by Sergunka »

Я обычно на интервью пишу так походу

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
avitya
Уже с Приветом
Posts: 3836
Joined: 13 Sep 2007 10:06

Re: The Six Most Common Species Of Code

Post by avitya »

ну вопрос на засыпку, сколько рекурсивных операций требуется для вычисления таким методом для числа N?
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: The Six Most Common Species Of Code

Post by Мальчик-Одуванчик »

Andriy777 wrote:Если Вы еще не поняли, то стиль Александреску вообще не нуждался ни в каких tail оптимизациях. Он просто распечатал константу вычисленную во время компиляции. Вычислять не рекурсией во время компиляции, вроде как, на C++ еще не придумали.
От рекурсии в этом примере все равно не удалось избавиться, а лишь перенести ее на время компиляции. Вдобавок наверняка придется вручную регулировать её глубину для вычисления больших значений.
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: The Six Most Common Species Of Code

Post by АццкоМото »

Sergunka wrote:Я обычно на интервью пишу так походу

Code: Select all

int fib (int n) {
     return (n < 3)  ? 1 : fib (n-1)  + fib (n-2);
}
fib(-8)==1? :)
Мат на форуме запрещен, блдж!
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: The Six Most Common Species Of Code

Post by crypto5 »

Просто интересно, а варианты с циклом принимать перестали? ))
In vino Veritas!
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: The Six Most Common Species Of Code

Post by АццкоМото »

crypto5 wrote:Просто интересно, а варианты с циклом принимать перестали? ))
Они некошерны. Моск программиста устроен так, что на простых задачах перед незнакомым человеком ему просто необходимо показать, что он знает, что такое рекурсия.
Плюс ко всему, рекурсивное решение короче в плане количества символов, а решение с циклом, будучи намного фефективнее, выглядит "неэлегантно"
Мат на форуме запрещен, блдж!
User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: The Six Most Common Species Of Code

Post by dotcom »

crypto5 wrote:Просто интересно, а варианты с циклом принимать перестали? ))
Ну вот. Просто и ясно. Скалисты должны завидовать.

Code: Select all

sub fib {  local($count,$kittens,$puppies)=(1,0,1); while($_[0] != $count++) {  ($kittens,$puppies)=($puppies, $kittens+$puppies); }  $puppies; 
P.S. Нет, строчку разворачивать нельзя. :P

Хотя нет. Нашел лучше:

Code: Select all

$_ = "fiiiiib";
print "$_\n";

print "$_\n" while s/fi?b/i/g || s/fii(i*)b/f$1bfi$1b/g;
Отсюда: http://nick.zoic.org/languages/fibonacc ... erversity/
User avatar
Boriskin
Уже с Приветом
Posts: 18862
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: The Six Most Common Species Of Code

Post by Boriskin »

crypto5 wrote:Просто интересно, а варианты с циклом принимать перестали? ))
Это ж "динамическое программирование", такое нонче толи не учат, толи не понимают... :cry:
Тупизна как Энтропия. Неумолимо растет.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: The Six Most Common Species Of Code

Post by crypto5 »

dotcom wrote:
crypto5 wrote:Просто интересно, а варианты с циклом принимать перестали? ))
Ну вот. Просто и ясно. Скалисты должны завидовать.

Code: Select all

sub fib {  local($count,$kittens,$puppies)=(1,0,1); while($_[0] != $count++) {  ($kittens,$puppies)=($puppies, $kittens+$puppies); }  $puppies; 
P.S. Нет, строчку разворачивать нельзя. :P

Хотя нет. Нашел лучше:

Code: Select all

$_ = "fiiiiib";
print "$_\n";

print "$_\n" while s/fi?b/i/g || s/fii(i*)b/f$1bfi$1b/g;
Отсюда: http://nick.zoic.org/languages/fibonacc ... erversity/
Меня всегда восхищал язык программирования J:

Code: Select all

f2a=: 3 : '{. +/\@|.^:y 0 1x'
http://www.jsoftware.com/jwiki/Essays/F ... #Iteration
Это цикл кстати ))
In vino Veritas!
User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: The Six Most Common Species Of Code

Post by dotcom »

crypto5 wrote:Меня всегда восхищал язык программирования J:
Тоже красиво. Надо будет запомнить такое, чтобы сломать мозг потенциальному интервьюеру. Я подозреваю, что еще круче будет что-то написать на древнем APL с его специальными символами. Но даже страшно гуглить, как оно выглядит в жизни.
dimp
Уже с Приветом
Posts: 4936
Joined: 22 Nov 2005 20:32
Location: Maryland

Re: The Six Most Common Species Of Code

Post by dimp »

avitya wrote:ну вопрос на засыпку, сколько рекурсивных операций требуется для вычисления таким методом для числа N?
Это не на засыпку. На засыпку - сколько рекурсивных операций потребуется, если в самом первом варианте (CS101) - вызвать fibonacci(0)? :D Чисто теороетически, stack overflow пренебречь, int считать 32 бита.
dimp
Уже с Приветом
Posts: 4936
Joined: 22 Nov 2005 20:32
Location: Maryland

Re: The Six Most Common Species Of Code

Post by dimp »

Кстати, характерно, что ни один вариант не использует unsigned int :lol:
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: The Six Most Common Species Of Code

Post by АццкоМото »

dimp wrote:Кстати, характерно, что ни один вариант не использует unsigned int :lol:
+1
и ошибки есть чуть ли не в каждом
Мат на форуме запрещен, блдж!
avitya
Уже с Приветом
Posts: 3836
Joined: 13 Sep 2007 10:06

Re: The Six Most Common Species Of Code

Post by avitya »

да и вообще этот код говно. :)

Return to “Работа и Карьера в IT”