← All posts tagged программирование

Общим, есть задачка: упорядочить числа от 1 до 17 (включительно) что бы в этой цепочке сумма каждой пары соседей была целым квадратом.
(оригинал — Arrange the numbers 1 through 17 (inclusive) in a sequence so that the sum of each pair of consecutive numbers is a perfect square)
Пример куска цепочки-результата 10, 6, 3, 1 — 10+6=4^2, 6+3=3^2, 3+1=2^2;
Я решил на питоне, но хотелось бы посмотреть может кто покажет более красивые решение на своем любимом языке, ну или улучшит мое (в комменте)

решил вот прочитать книжку по эрлангу. Пока в консольке примеры — все ок. А дальше прямо жестяк. Что, реально для эрланга нету поддержки в Саблайме/Атоме? Да и вообще, гугление чего-то по эрлангу мучительно и обычно ничего не всплывает. Как вообще эрлангисты живут без текстовых редакторов?

Жуйче, помоги. Общим, я пишу поддержку джойстиков как hid устройств; проблема — они возвращают минимум и максимум для осей. Например микрософтовские геймпады для 360 говорят что они от -32к до + 32к. Все клево и понятно. А вот сони и другие (типа логитек) говорят что они от 0 до 255. Проблема — не понятно где нейтральное положение. Типа если не трогать thumbsticks, оно типа фигачит 0.5, а не 0. Есть опыт как получить нейтральное значение? Или вообще, какой-то связанный опыт с работой с hid устройствами?

вообще всегда хотелось что бы не было ссаных простых типов... Ну, для примера, возьмем lua c api. Там есть куча функций, которые оперируют с порядком на стеке. При чем номер на стеке — int. Так же как и значения некоторых параметров, которые не номер на стеке. Например — lua_pop, которая получает количество элементов которые нужно со стека убрать. Общим, это ведь разные сущности — там номер, там — количество. При чем номер может быть "специальным" часто. Нужно больше типов!

а вы вот какой апргрейд языков предпочитаете? Например разница между С++ 11 и 98 очень большая, но они обратно совместимы практически полностью; это тянет за собой груз всего стремного синтаксиса и новый синтаксис стремноват от обратной совместимсоти. Или, другой пример — питон 2 и 3, где буквально хелло ворд поменялся, и новая версия не тянет за собой обратную совместимостью.

Общим, вопрос — нужно на Objective C написать маппинг межу си строками и NSString. Т.е. дан на бумажке список пар строк, типа
"thing" <==> @"com.apple.thing"
"other" <==> @"com.adobe.other.thing"
"value" <==> @"other value"
….
Надо написать две функции
const char * -> NSString
NSString -> const char []
Которые будут возвращать другую сторону стрелочки. Что хочется а) что бы было элегантно б) маппинг можно хардкодить в) что бы маппинг можно было задать только раз и шарить его между функциями

не часто задаю вопросы по питону, но даже не знаю как нагуглить. Вот есть список. Я его последовательно фигачу фильтрами, мапами. Общим, вот кот специально для пимера:
#!/usr/bin/env python
import sys

if __name__ == '__main__':
    with open(sys.argv[1]) as f:
        lines = f.readlines()
        lines = map(str.strip, lines) #stripping endlines
        lines = filter(bool, lines) #stripping empty lines
        lines = filter(lambda l: ':' in l, lines) #filter out strings withot :
        lines = map(lambda l: l.split(':', 1), lines)
        lines = map(lambda l: "=".join(l), lines)
        print "\n".join(lines)

Можно легко заметить паттерн. Общим, а я хочу зафигачить (монаду?) что бы можно было все как-то чейнить? Я наваял что-то типа этого, но выглядит ужасно. Есть ли методы получше?

#!/usr/bin/env python
import sys

class Monadinize():
    def __init__(self, l):
        self.l = l

    def map(self, f, *args):
        self.l = map(f, self.l, *args)
        return self

    def filter(self, f):
        self.l = filter(f, self.l)
        return self

    def done(self):
        return self.l

if __name__ == '__main__':
    with open(sys.argv[1]) as f:
        out = Monadinize(f.readlines()) \
                    .map(str.strip) \
                    .filter(bool) \
                    .filter(lambda l: ':' in l) \
                    .map(lambda l: l.split(':', 1)) \
                    .map(lambda l: "=".join(l)) \
                    .done()
        print "\n".join(out)

Ведь паттерн такой общий, должны же быть инструменты, а?