Пянтичное: опять фибоначчи

avitya
Уже с Приветом
Posts: 3836
Joined: 13 Sep 2007 10:06

Re: Пянтичное: опять фибоначчи

Post by avitya »

Не зря я яву не люблю. Какой на редкость уродский код получается...
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Пянтичное: опять фибоначчи

Post by crypto5 »

avitya wrote:Не зря я яву не люблю. Какой на редкость уродский код получается...
А какой код классный?
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Пянтичное: опять фибоначчи

Post by Интеррапт »

crypto5 wrote:
avitya wrote:Не зря я яву не люблю. Какой на редкость уродский код получается...
А какой код классный?
Присоеденяюсь к вопросу. Хочу посмотреть на изящный код.
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: Пянтичное: опять фибоначчи

Post by Zorkus »

Ну вот, например, парсинг обратной польской записи в изящном коде :oops: :

Code: Select all

calc :: String -> [Float]
calc = foldl f [] . words
  where 
    f (x:y:zs) "+" = (y + x):zs
    f (x:y:zs) "-" = (y - x):zs
    f (x:y:zs) "*" = (y * x):zs
    f (x:y:zs) "/" = (y / x):zs
    f xs y         = read y : xs
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Пянтичное: опять фибоначчи

Post by crypto5 »

Code: Select all

  Long calc(Stack<String> stack) {
	  String c = stack.pop();
	  switch(c) {
	  	case "+": return calc(stack) + calc(stack);
	  	case "-": return calc(stack) - calc(stack);
	  	case "*": return calc(stack) * calc(stack);
	  	case "/": return calc(stack) / calc(stack);
	  }
	  return Long.valueOf(c);
  }
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Пянтичное: опять фибоначчи

Post by Интеррапт »

Zorkus wrote:Ну вот, например, парсинг обратной польской записи в изящном коде :oops:
Редко смотрю на код парсеров, потому что всякие парсеры я, как правило, все-равно на ANTLR пишу и в ANTLR записи оно все-равно намного удобней и изящней :) . А какой оно мне при этом код нагенерит (уверен, что уродский) - мне без разницы :)
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Пянтичное: опять фибоначчи

Post by Интеррапт »

crypto5 wrote:

Code: Select all

  Long calc(Stack<String> stack) {
	  String c = stack.pop();
	  switch(c) {
	  	case "+": return calc(stack) + calc(stack);
	  	case "-": return calc(stack) - calc(stack);
	  	case "*": return calc(stack) * calc(stack);
	  	case "/": return calc(stack) / calc(stack);
	  }
	  return Long.valueOf(c);
  }
Или Питон :umnik1: При этом можно обойтись без всяких case и добавлять операторы прямо в ops, без изменения основного кода :umnik1:

Code: Select all

import string, operator
ops = {'+': operator.add, '-': operator.sub, '*': operator.mul, '/': operator.div}
while True:
  try:
    st = []
                 # читаем из потока
    for tk in string.split(raw_input()):
      if tk in ops:
        y, x = st.pop(), st.pop()
        z = ops[tk](x,y)
      else:
        z = float(tk)
      st.append(z)
    assert len(st) <= 1
    if len(st)==1: print(st.pop())
  except EOFError:  break
  except:  print('Error')
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Пянтичное: опять фибоначчи

Post by crypto5 »

Code: Select all

from operator import *
ops = {’+’: add, ’-’: sub, ’*’: mul, ’/’: div}
def eval(l):
  if l[0].isdigit(): return [int(l[0])] + l[1:]
  l1 = eval(l[1:])
  l2 = eval(l1[1:])
  return [ops[l[0]](l1[0], l2[0])] + l2[1:]
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Пянтичное: опять фибоначчи

Post by Интеррапт »

crypto5 wrote:

Code: Select all

from operator import *
ops = {’+’: add, ’-’: sub, ’*’: mul, ’/’: div}
def eval(l):
  if l[0].isdigit(): return [int(l[0])] + l[1:]
  l1 = eval(l[1:])
  l2 = eval(l1[1:])
  return [ops[l[0]](l1[0], l2[0])] + l2[1:]
Только здесь http://ideone.com/plain/HBXAZ кавычки правильно расставлены, а в отквотированном посте одинарная кавычка (’+’ и т.п.), когда я попытался сделать copy&paste - ругается при компиляции :umnik1:

Это Привет шалит или твой редактор?
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Пянтичное: опять фибоначчи

Post by crypto5 »

Code: Select all

from operator import *
 
ops = {'+': add, '-': sub, '*': mul, '/': div}
 
def eval(l):
  c = l.pop()
  if(c.isdigit()): return int(c)
  return ops[c](eval(l), eval(l))
  
s = ['2', '2', '2', '+', '+']
print eval(s)
Вот так "изящнее" всего наверное
In vino Veritas!
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Пянтичное: опять фибоначчи

Post by crypto5 »

Интеррапт wrote: Это Привет шалит или твой редактор?
Какой то веб редактор найденный на скорую руку в гугле
In vino Veritas!
User avatar
Сабина
Уже с Приветом
Posts: 19045
Joined: 11 Jan 2012 09:25
Location: CA

Re: Пянтичное: опять фибоначчи

Post by Сабина »

АццкоМото wrote:Исключительно в плане пятничного развлечения
Всегда лажал на Привете задачу про вычисление чисел Фибоначчи.
.....
Неплохая, как оказалось, задача. Ни разу такого не видел и верить в такое не хотел. Всем пятницы, посоны! И, конечно же, девч0нки
Кстати не могла пройти мимо на ФБ. Сразу вспомнилась эта тема, да и пятница на дворе :)

Image
https://www.youtube.com/watch?v=wOwblaKmyVw
avitya
Уже с Приветом
Posts: 3836
Joined: 13 Sep 2007 10:06

Re: Пянтичное: опять фибоначчи

Post by avitya »

это просто прогрессия...
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Пянтичное: опять фибоначчи

Post by Интеррапт »

avitya wrote:это просто прогрессия...
Да, довольно безграмотная SMSка.
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Пянтичное: опять фибоначчи

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

Сабина wrote:
АццкоМото wrote:Исключительно в плане пятничного развлечения
Всегда лажал на Привете задачу про вычисление чисел Фибоначчи.
.....
Неплохая, как оказалось, задача. Ни разу такого не видел и верить в такое не хотел. Всем пятницы, посоны! И, конечно же, девч0нки
Кстати не могла пройти мимо на ФБ. Сразу вспомнилась эта тема, да и пятница на дворе :)
Да, это "пять", слов нет :good:
Мат на форуме запрещен, блдж!
User avatar
Сабина
Уже с Приветом
Posts: 19045
Joined: 11 Jan 2012 09:25
Location: CA

Re: Пянтичное: опять фибоначчи

Post by Сабина »

АццкоМото wrote: Да, это "пять", слов нет :good:
Мне тоже было смешно, а некоторые сразу бросились ошибки исправлять, а тут в них и есть весь прикол :tong:
https://www.youtube.com/watch?v=wOwblaKmyVw
Amto2011
Уже с Приветом
Posts: 7937
Joined: 16 May 2011 09:10
Location: Camel

Re: Пянтичное: опять фибоначчи

Post by Amto2011 »

Сабина wrote:
АццкоМото wrote:Исключительно в плане пятничного развлечения
Всегда лажал на Привете задачу про вычисление чисел Фибоначчи.
.....
Неплохая, как оказалось, задача. Ни разу такого не видел и верить в такое не хотел. Всем пятницы, посоны! И, конечно же, девч0нки
Кстати не могла пройти мимо на ФБ. Сразу вспомнилась эта тема, да и пятница на дворе :)

Image
А что такое "фибоначчи"? :-)
If you wanna be rich
Idi rabotai bitch..
sergant
Уже с Приветом
Posts: 1177
Joined: 11 Apr 2004 03:28

Re: Пянтичное: опять фибоначчи

Post by sergant »

Если в лоб то:

Code: Select all

unsigned long fib( int n ) {
	unsigned long p0 = 0;
	unsigned long p1 = 1;

	if ( n < 1 || n > MAX ) {
		return 0;	// or die
	} else if ( n == 1 ) {
		return p0;
	} else if ( n == 2 ) {
		return p1;
	}

	unsigned long s;
	while ( n-- > 2 ) {
		s = p0 + p1;
		p0 = p1;
		p1 = s;
	}

	return s;
}
rorp
Уже с Приветом
Posts: 314
Joined: 24 May 2013 22:04

Re: Пянтичное: опять фибоначчи

Post by rorp »

sergant wrote:Если в лоб
А если по лбу, то:

Code: Select all

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
sergant
Уже с Приветом
Posts: 1177
Joined: 11 Apr 2004 03:28

Re: Пянтичное: опять фибоначчи

Post by sergant »

rorp wrote:
sergant wrote:Если в лоб
А если по лбу, то:

Code: Select all

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
5+
А fibs(n) там нет?
sergant
Уже с Приветом
Posts: 1177
Joined: 11 Apr 2004 03:28

Re: Пянтичное: опять фибоначчи

Post by sergant »

Лучший программный продукт это программист (желательно хороший) под рукой... (c) мой
mynameiszb
Уже с Приветом
Posts: 1666
Joined: 16 Jul 2009 14:18
Location: Uganda

Re: Пянтичное: опять фибоначчи

Post by mynameiszb »

sergant wrote:Лучший программный продукт это программист (желательно хороший) под рукой... (c) мой
Лучший программист - этот тот программист, кто написал этот код. Потому как собирать 4 либы, написанные разными людьми, в одно целое и без создателей - ... :sadcry:

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