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

Shchvova

Общим, есть задачка: упорядочить числа от 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;
Я решил на питоне, но хотелось бы посмотреть может кто покажет более красивые решение на своем любимом языке, ну или улучшит мое (в комменте)

Shchvova

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

Shchvova

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

Shchvova

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

Shchvova

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

Shchvova

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

Shchvova

не часто задаю вопросы по питону, но даже не знаю как нагуглить. Вот есть список. Я его последовательно фигачу фильтрами, мапами. Общим, вот кот специально для пимера:
#!/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)

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