Логин: Пароль:

Спортивное программирование
в Красноярском крае


k_mihey
kormyshov


 


Перейти к профилю
Вернуться к ленте

ProjectEuler + Haskell + Vim

Изучать язык намного интересней, если есть задача, которую пытаешься решить на нём. Поэтому, для изучения Haskell, я взялся за задачи с Project Euler.

И, действительно, часто код на этом языке получается намного короче. Но не менее часто он более извращенный, но это от незнания языка. Так сказать, как умею, так и пишу. Но сейчас не об этом.

Есть несколько задач, в которых дано множество чисел (таблица или список), и надо что-то посчитать. Например задача 11, в которой дана таблица. Для решения задачи (а считывать с файла я пока не научился) надо организовать её в двумерный массив (список списков). То есть из:

08 02 22 ...
49 49 99 ...
81 49 31 ...
...

надо получить:

list = [
          [08, 02, 22, ...],
          [49, 49, 99, ...],
          [81, 49, 31, ...],
          ...
        ]

В первой и последней строке ничего сложного, их можно просто написать. А вот для обработки основных данных в Vim'е можно записать макрос. Для этого нажимаем qa (где a - это имя макроса) и выполняем все команды, завершаем запись макроса нажатием q.

А команды в нашем случае тоже будут простыми:

  • разделим числа запятыми: ":s/ /, /g<Enter>"
  • перейдём в начало и вставим пробелы и скобку: "0i         [<Esc>"
  • перейдём в конец и вставим скобку и запятую: "A],<Esc>"
  • перейдём на начало следующей строки: "j0"

Чтобы запустить макрос надо написать "@a". А чтобы запустить его 20 раз: "20@a". Итого вся последовательность символов будет такой: "qa:s/ /, /g<Enter>0i        [<Esc>A],<Esc>j0q19@a", то есть 38 нажатий (с учётом нажатий Shift). А ваш редактор так может?

P.S. а кто-нибудь из вас решает задачи с этого сайта?

2013-08-24


2015-06-27 demidenko
решаю

Система Orphus

(c) Copyright 2011-2014 Михаил Кормышов

kormyshov[dog]gmail.com