Небольшое исследование
kesha 16 апреля, 2012 - 15:35
Доброго всем!
Для себя провожу небольшое исследование разных вопросов, вот один из них:
- Как узнать сумму чисел "123123123123" ?
Заранее спасибо всем, кто откликнется.
»
- Для комментирования войдите или зарегистрируйтесь
Сложите их.
Сложите их.
Хорошо :-) Возможно я
Хорошо :-) Возможно я невнятно выразился, как научить компьютер это делать?
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
Сумма чисел "123123123123"
Сумма чисел "123123123123" будет 123123123123.
Не грусти, товарищ! Всё хорошо, beautiful good!
Логично :-) Но ведь если
Логично :-) Но ведь если рассматривать к примеру число 12, то его написание состоит из двух символов 1 и 2. Каждый из этих символов представляет собой число. Когда мы пишем эти символы вместе, мы автоматически (так нас учили в школе) добавляем вес каждому следующему числу, начиная с права. Пример:
2 + 1*10
А вот как сделать так, что бы компьютер рассматривал каждый символ строки "123123123123", как отдельное число и суммировал эти числа, без учета "веса" этого числа?
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
Элементарно. Находишь длину,
Элементарно.
Находишь длину, и сканишь в цикле начиная с первого символа. результат хоть суммируй,хоть умножай,хоть в массив загоняй.
Непонятно правда зачем это может понадобитсья(нумерология?)
Спасибо. Как я понимаю,
Спасибо.
Как я понимаю, что-то вроде:
for (i=0; i <= length "123123123123"; i++)
{
Здесь идет приведение типов и суммирование
return РЕЗУЛЬТАТ;
}
А если строку "123123123123" нужно будет разбить на двухзначные числа или трехзначные, как поступить в таком случае?
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
ты это не жмись, а задачу то
ты это не жмись, а задачу то расскажи? посчистать сумму чисел всевозможных разбиений числа записанного в 10-чной форме?
держи
~
запись числа 12 в 10-тичной
запись числа 12 в 10-тичной системе счисления состоит из двух цифр 1 и 2. запись "123123123123" это одно число, состоящее из большого кол-ва цифр.
так что пожалуйста формулируйте задачу сразу корректно.
а так foldl' (+) 0 . (map digitToInt)
Спасибо всем
Спасибо всем откликнувшимся.
Я пытаюсь, для себя, выяснить границу удобного применения различных языков программирования.
Например в newLISP такая задача решается так:
добавление условия, на скольки-значные числа нужно разбивать входную строку, делается элементарно:
С другой стороны, есть профессиональные библиотеки написанные для решения различных задач, импортировать функции из этих библиотек в newLISP тоже не проблема. Вот пример импорта необходимых функций из библиотеки GTK:
Я пытаюсь для себя нащупать границу, когда удобнее применять один язык программирования, а когда другой.
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
научись сначала нащупывать
научись сначала нащупывать границу когда поставленное условие некорректно или неоднозначно и да, haskell круче :)
в принципе можно и однострочником, но не вижу смысла
qnikst написал(а): научись
Вся прелесть и заключается в том, что условия могут уточнятся по ходу "пьесы". Бывает, что и алгоритм решения приходится менять кардинально. Хочется для себя понять, на каком языке программирования и при решении каких задач смена алгоритма наименее болезненна.
Говорят, что у Слона, яйца больше чем у Мыши, и тем не менее, Слон боится Мышь :-) Так говорят :-)
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
> Вся прелесть и заключается
> Вся прелесть и заключается в том, что условия могут уточнятся по ходу "пьесы". Бывает, что и алгоритм решения приходится менять кардинально. Хочется для себя понять, на каком языке программирования и при решении каких задач смена алгоритма наименее болезненна.
Браться за задачу когда ты не понимаешь, что ты хочешь не имеет смысла. Отсуствие условия != изменение условия. К слову я привёл варианты
решения аж трёх условий. у тебя решение только двух :)
> Говорят, что у Слона, яйца больше чем у Мыши, и тем не менее, Слон боится Мышь :-) Так говорят :-)
а некоторые говорят, что ищут границы применимости языков, а на самом деле потроллить лиспом зашли.
qnikst
Прошу меня извинить, условие было в топике.
Строка "123123123123", в топике, взята в кавычки для того, что бы подчеркнуть, что это именно СТРОКА.
А про изменение условий, согласен, мой косяк :-) Но разве всегда все известно наперед?
Я не стремлюсь мерятся "пиписками", и все же:
Ну может совсем чуть-чуть :-) На самом деле я действительно ищу задачи, которые удобнее решать тем или иным языком программирования. Я хочу познакомить широкую общественность с newLISP, и для этих целей готовлю сайт. Мне хочется, что бы информация, которую я буду выкладывать, была бы объективной. Вот поэтому немного так троллю :-)
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
если честно я код распарсить
если честно я код распарсить не сумел, так что расскажите, а что он при <0 делает. и да за "123 любая произвольная строка 1+2=3 123123" 3)) убивать мало :)
qnikst написал(а):если
Хорошо, на самом деле это не сложно:
Можно узнать почему?
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
> почему? абсолютное
> почему?
абсолютное неопределенное поведение, приводящее к необходимости полного покрытия кода юнит-тестами, при этом с большой вероятностью делающее не то. что надо. Раз уж делать динамический лисп-стайл-код, то нужно, чтобы возвращало [123,1,2,3,246]. Кстати в случае <0 в нас разные результаты, есть подозрение, что некорректный код не мой.
qnikst
А как быть? Хотя вы правы, если функция не получает данные извне, нет смысла в такой перестраховке.
Так и есть :-)
Поясните, покажите
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
а не, всё ок. я не прав :)
а не, всё ок. я не прав :)
Python: a="123123123123" su=0
Python:
вот так как-то... к сожалению, lambda пока ниасилил (если она вообще применима)
P.S.: Linux - это красная таблетка :-) Windows - синяя...
А по вашему мнению, для
А по вашему мнению, для какого типа задач удобен Puthon, и почему?
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
(*)
Python удобен для всех типов задач, кроме задач, связанных с адовым выжиманием из железа максимальной производительности. http://norvig.com/python-lisp.html
Спасибо, очень познавательный
Спасибо, очень познавательный обзор.
А скажите, можно ли у Puthona как-то исключить/заменить эти отступы с "красной строки", или это мертво в язык вмонтированно?
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
(*)
По аналоги с исключением/заменой у Лиспа этих "скобочек".
Спасибо, понял :-)
Спасибо, понял :-)
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
Скажите это разработчикам
Скажите это разработчикам django, turbogears... Что там еще есть? А! OpenERP... Это может быть и было верно... Когда-то... А сейчас все заоптимизировано.
P.S.: Linux - это красная таблетка :-) Windows - синяя...
Это верно всегда т.к. питон
Это верно всегда т.к. питон это интерпретируемый язык ещё и с идиотским GIL. Будет неверно когда CPython будет юзабельным. Другое дело, что в большинстве задач на это можно спокойно забить.
(*)
C какой частью моего высказывания вы несогласны? С первой - что Python удобен для большинства типов задач? Или со второй - что Python неудобен для задач адового выжимания из железа максимальной производительности? Вероятно, со второй. Ну так я вовсе не утверждал, что не существует модулей на С, которые можно использовать в Питоне, достигая очень очень неплохой производительности. Я утверждал, что такие задачи как написание "Hyper fast Audio and Video encoder" (media-video/ffmpeg) или "Compress or decompress FILEs in the .xz format" (app-arch/xz-utils) или "Некой Абстрактной Числодробилки" лучше решать не на Питоне. Вот что я имел в виду.
про скорость
про скорость
P.S.: Linux - это красная таблетка :-) Windows - синяя...
то, что FFI вызов блочит
то, что FFI вызов блочит рантайм питона, если там не приняты меры это видать тоже норм и для улучшения скорости и отзывчивости. :)
; Рабочая строка, над которой
Не могли бы вы, прокомментировать свой код и показать результаты выполнения?
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
while a: НЕ пусто ('')
while a:
НЕ пусто ('') тождественно True
a[:step] - работа со строками в Python'е сделана очень удобно. Данная инструкция выделяет из a первые step байт (в данном случае символов).
a[step:] - выборка символов после step. т.е. обработанные не предыдущем шаге символы просто отбрасываем. корректно работает, даже если осталось
—
первые три инструкции можно в одну строку записать:
a, su, step = "123123123123", 0, 1
вообще, для решения вашей задачи достаточно того минимума введения в язык, что дано в википедии :)
P.S.: Linux - это красная таблетка :-) Windows - синяя...
Aladdin написал(а): while
Пока a: что то содержит. Из этого следует, что дальше a: режется и пилится :-)
Как я понял, это работает примерно так:
Каждому свое конечно, но зачем вводить лишние элементы синтаксиса? Это мне непонятно.
Так глубоко изучать Puthon я не планировал :-)
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
Раз "пошла такая пьянка", вот
Раз "пошла такая пьянка", вот интересная статья про то, как по мнению автора, корректно сравнивать языки программирования.
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
(*)
Давно хотел спросить. Из моей ссылки выше - в части Quotation - в чём фишка этого Quotation? Неужели только в том, что 'hello - это строка 'hello' а '(this is a test) это просто список строк ['this', 'is', 'a', 'test']?
mastepaner написал(а): Давно
Если вы имеете ввиду вот этот кусок:
Одиночная кавычка вначале строки, это сокращенная запись функции quote. Эта функция указывает Лиспу не вычислять значение выражения. Например:
Здесь получилась такая "фишка". Лисп разместил в памяти строку "Присваиваемое значение", и адрес размещения строки в памяти связал с другой строкой - VALUE. Если теперь запросить у Лиспа VALUE, он с готовность вернет связанную строку, но если указать quote перед VALUE, тогда Лисп вернет эту строку, а про связанную и не вспомнит.
Немного сумбурно получилось :-)
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
ааа они придумали указатели.
ааа они придумали указатели. если я правильно понял статью, то brainfuck и whitespace всех уделывают.
Это просто я так сумбурно все
Это просто я так сумбурно все описал. Вот еще пример, может он лучше меня все объяснит:
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
Вот, взгляни на модуль работы
Вот, взгляни на модуль работы с brainfuck:-)
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
в Python ВСЁ указатели :) и
в Python ВСЁ указатели :) и сборщик мусора там интерактивный - у каждого объекта в памяти, на который обращаются переменные, есть счетчик ссылок на него. как он обнуляется, так объект уничтожается. Типа так:
a = 2
b = a
a += 1
чему равно b ? ;)
на объект 2 (который был двойкой, пока не было выполнено a += 1) указывают два указателя. делаем b = 3. Не смотря на то, что b и так 3 (упс, проговорился! :) ), создается новый объект, декрементируется счетчик указателей на объект, на который указывали a и b. делаем a = 4. счетчик объета, на который указывала a, декрементируется, становитс равным 0 и объект уничтожается. Без периодических запусков сборщиков мусора, как в java. а на счет скорости... обратитесь к учебному курсу по Python на ibm-developers ;) Байт-код, завязаный на либы и ядро, написаное на C не так уж и медленен...
P.S.: Linux - это красная таблетка :-) Windows - синяя...
eegorov@egorov-ey /tmp $ cat
Толи я что-то не понимаю, толи ты переврал насчет указателей.
ЗЫЖ Я под указателями понимаю следующее:
вероятно, да, напутал... до a
вероятно, да, напутал... до a += 1 это один объект, потом раздление. :S
P.S.:
http://otvety.google.ru/otvety/thread?tid=2105e01ecf09ca45 - вот тут пример, поддтверждающий мою правоту в первой части
P.S.: Linux - это красная таблетка :-) Windows - синяя...
Цитата: А вам не кажется,
©
это мнение комментатора по
это мнение комментатора по указанной ссылке. :) я же привел "мнение" help(id)
P.S.: Linux - это красная таблетка :-) Windows - синяя...
Да я тебя прекрасно понял. И
Да я тебя прекрасно понял. И то, что объект создается во время модификации я не оспариваю. Я просто не склонен рассматривать в питоне все переменные как указатели. Именно в контексте программирования на нем, а не написания расширений для него.
это мнение комментатора. я же
это мнение комментатора. я же привел мнение help(id) ;)
P.S.: Linux - это красная таблетка :-) Windows - синяя...
я вот единственное в
я вот единственное в документации не могу найти инфу, или так происходит т.к. числа это immutable типы и создаётся новый объект, или так как в Java есть Primitive и Reference Types + чит для чисел < const. Интересно если бы кто из питонистов прояснил.
судя по help(id) (id(a),
судя по help(id) (id(a), id(b)) - так же и в питоне. только названо иначе.
P.S.: Linux - это красная таблетка :-) Windows - синяя...
судя по id в питоне не так
судя по id в питоне не так как в java. Действительно в питоне всё это объекты, только есть immutable и не immutable объекты, таким образом b=a, присваивает значению в ссылку на объект на который указывает а, но любая операция над а изменяющая его создаёт новый объект (не очень-то эффективно).
В java есть Reference Types обладающие такими же свойствами и primitive types, и мощной системой boxing-unboxing, для выжимания производительности из всего этого.
картинка если help не врёт
a = 4 b = 4 id(a), id(b) ?
a = 4
b = 4
id(a), id(b)
?
P.S.: Linux - это красная таблетка :-) Windows - синяя...
>>> a =4 >>>
>>> a =4
>>> id(a)
26683248
>>> b=4
>>> id(b)
26683248
что-то не так?
все так. :) четверка - "одна
все так. :) четверка - "одна и та же" :)
upd: вот тут интересненький обзор по ОЯП. Питона, там, правда, нет, но в конце график "Линия Вирта". Языки избыточны?
upd1: а сцылку не дал :) http://www.uni-vologda.ac.ru/cs/syntax/ariphm.htm
P.S.: Linux - это красная таблетка :-) Windows - синяя...
уйди пожалуйста читать маны
уйди пожалуйста читать маны по своему защищаемому тобой ЯП, или сначала хотя бы проверяй примеры, которые ты приводишь. Ещё
раз повторюсь, что питон не предназначен для выжимания всех возможностей из железа, он для других задач, это отличный скриптовый
язык, который можно использовать для административных скриптов, небольших утилит, быстрого создания UI, в WEB, немало правда?
к слову в яве сейчас наилучший GC среди всех мутабельных языков, питонам шарпам и прочим зверям до него ещё несколько лет развития,
если развитие явы остановят.Другое дело immutable языки там могут быть принципиально другие GC, но там свои проблемы.
по поводу Цитата: к слову в
по поводу
а если учесть, что в java еще и патентами обложено...
P.S.: Linux - это красная таблетка :-) Windows - синяя...
С рулит!
С
рулит!А никто и не сомневался, но
А никто и не сомневался, но хочется узнать, для каких типов задач он рулит? И какие задачи лучше не решать с использованием Си?
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
Если говорить о вопросе,
Если говорить о вопросе, поставленном в топике, то данная задача достаточно легко реализуется практически на любом языке программирования, поэтому метод проведения твоего "исследования", на мой взгляд, не совсем корректен. Если говорить об области применимости языков, то, на мой взгляд, достаточно взять подборку существующих проектов (желательно крупных) и проанализировать статистику по используемым в них языкам. Понятно, что для написания ядра операционной системы больше подходит С (хотя на питоне тоже, вроде, пишут), но для web-приложения выбор C будет неоправданным.
eegorov написал(а): Если
Каюсь, хотел вызвать дебаты :-) Один человек не может знать все одинаково хорошо, поэтому такой вброс.
Вот тут я сильно сомневаюсь в объективности показателей. Если бы проекты делались так:
К сожалению это не так. Я когда то давно баловался ассемблером, и хорошо себе представляю, что им лучше пользоваться, когда программируешь на уровне CPU. Когда используешь Ассемблер, просто видишь как дышит процессор, какие логические "ниточки" он дергает.
Над ним уже расположен Си. Вот с ним я знаком поверхностно и не могу хорошо себе представить на каких задачах он хорош.
Высоко нагруженные проекты будут только рады перейти на Си, другое дело если код приходится постоянно корректировать, тут пожалуй компилируемые языки проигрывают.
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...