Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2013, 17:16   #11
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

В качестве критерия ранжирования лучших попыток служит размер кода закачиваемой программы. При подсчете размера кода не учитываются пробелы, а так же символы переноса и табуляции.
Poma][a вне форума Ответить с цитированием
Старый 30.06.2013, 17:29   #12
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Убрал еще пару байт:
Код:
var
  n: Byte;

begin
  Reset(input, 'input.txt');
  Assign(output, 'output.txt');
  Read(n);
  n:=n+2-ord(n=0);
  Write(copy('2.7182818284590452353602875', 1, n - 1) + '3.7283828385690552454603985'[n])
end.
Arigato вне форума Ответить с цитированием
Старый 30.06.2013, 17:34   #13
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
n:=n+2-ord(n=0);
Arigato, А ведь гениально! Ну конечно же!!

Цитата:
'[n])
BDA, А это просто бесподобно! У меня до сих пор компилятор отплевывается и не хочет признавать что это работает.

И того 177 мы уже в ТОПе
Poma][a вне форума Ответить с цитированием
Старый 30.06.2013, 17:40   #14
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

На С++ переписать, будет короче
А какие языки они там поддерживают?

Еще минус 1 байт:

Код:
var
  n: Byte;

begin
  Reset(input, 'input.txt');
  Assign(output, 'output.txt');
  Read(n);
  n:=n+2-ord(n=0);
  Write(copy('2.718281828459045235360287', 1, n - 1) + '3.7283828385690552454603985'[n])
end.

Последний раз редактировалось Arigato; 30.06.2013 в 17:45.
Arigato вне форума Ответить с цитированием
Старый 30.06.2013, 18:47   #15
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

162 байта:

Код:
var
  n: Byte;
begin
  Reset(input, 'input.txt');
  Assign(output, 'output.txt');
  Read(n);

  if n < 18
    then write(exp(1):0:n)
    else write(exp(1):0:16, 353602875/exp(ln(10)*(25-n)):0:0)

end.

Последний раз редактировалось Arigato; 30.06.2013 в 18:51.
Arigato вне форума Ответить с цитированием
Старый 30.06.2013, 18:59   #16
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
А какие языки они там поддерживают?
Паскаль, Плюсы, Басик, Ява
Цитата:
Еще минус 1 байт:
А можете тыкнуть пальцем где?
Цитата:
162 байта:
А можно тут комментарии?
Poma][a вне форума Ответить с цитированием
Старый 30.06.2013, 19:07   #17
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
А можете тыкнуть пальцем где?
Код:
Write(copy('2.7182818284590452353602875'
Write(copy('2.718281828459045235360287'
Цитата:
Сообщение от Poma][a Посмотреть сообщение
А можно тут комментарии?
exp(1) - это и есть число е, но с точностью до 16 знаков, потому можно смело эту часть выводить. Если знаков больше, то выводим недостающие: 353602875/exp(ln(10)*(25-n)):0:0

Решение на 165 байт у меня получалось, 162 тоже теперь знаем как. Однако кто-то умудрился в 149 байт на Паскале уложиться, пока не ясно как...
Arigato вне форума Ответить с цитированием
Старый 30.06.2013, 19:27   #18
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Спасибо за объяснения.

Цитата:
Однако кто-то умудрился в 149 байт на Паскале уложиться, пока не ясно как...
Очень даже ясно.
Код:
if n < 18
    then write(exp(1):0:n)
    else write(exp(1):0:16, 353602875/exp(ln(10)*(25-n)):0:0)
1-ый Write и 1-ая часть 2-го Write похожи. И их можно было бы заменить на
Write (exp(1) : 0 : n), НО эта зараза дописывает 0 в конце. Если отнего избавиться в 2 символа, то и получится решение с усеченной развилкой.


Тоесть :
Код:
var
  n: Byte;
begin
  Reset(input, 'input.txt');
  Assign(output, 'output.txt');
  Read(n);

  write(exp(1):0:n);
  if n > 19 then
    write(353602875/exp(ln(10)*(25-n)):0:0)

end.
147

Вариант рабочий :
Код:
var
  n: Byte;
begin
  Reset(input, 'input.txt');
  Assign(output, 'output.txt');
  Read(n);

  write(exp(1):0:n-ord(n>16)*(n-16));
  if n > 19 then
    write(353602875/exp(ln(10)*(25-n)):0:0)

end.
164 тоесть не в ту степь

Последний раз редактировалось Poma][a; 30.06.2013 в 19:29.
Poma][a вне форума Ответить с цитированием
Старый 01.07.2013, 04:13   #19
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

160 байт:

Код:
var
  n: Byte;
  
begin
  Reset(input, 'input.txt');
  Assign(output, 'output.txt');
  Read(n);

  write(exp(1):0:n-n shr 4*(n-16));
  if n > 16 then
    write(353602875/exp(ln(10)*(25-n)):0:0)

end.
Arigato вне форума Ответить с цитированием
Старый 02.07.2013, 00:38   #20
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Гениально.. суметь втхать туда еще и сдвиг.. Респект!
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация (сокращение) кода решения задачи #2 c acmp.ru - нахождение суммы целых чисел от 1 до N Serge_Bliznykov Помощь студентам 31 23.08.2014 22:35
Оптимизация кода задачи three_cats Общие вопросы C/C++ 7 28.09.2012 15:13
Написать программу, которая вычисляет приближенное значение числа e с заданной точностью quade1992 Паскаль, Turbo Pascal, PascalABC.NET 3 08.11.2011 15:10
Вычисление числа e, Pi с заданной точностью MrakSPb Общие вопросы C/C++ 3 12.05.2010 12:51
Оптимизация и сокращение кода (if + сдвиг) Alex Cones Общие вопросы Delphi 2 06.04.2010 21:37