понедельник, 21 октября 2013 г.

Задачка от Dzone: Remove Duplicates From a Linked List

Задача:
Given an unsorted linked list, and without using a temporary buffer, write a method that will delete any duplicates from the linked list.  
Моё решение на Scala:
 

def removeDuplicates[A](li: List[A]): List[A] =
  li match{
   case Nil => li
   case h::Nil => li
   case h::t => if(t.contains(h)) removeDuplicates(t) else h::removeDuplicates(t)
  }


воскресенье, 13 октября 2013 г.

Посещение Ираклеонского Археологического музея

Основная экспозиция всё ещё на замке. Но ремонтные работы, длящиеся уже 10 лет, подходят судя по всему к концу. То один, то другой зал музея открывает свои двери для посетителей. В тестовом режиме, так сказать. В этом году нам посчастливилось попасть в зал с минойскими фресками, об этом я и расскажу.

На первом этаже музея, как и ранее, открыты временная микроэкспозиция плюс зал со статУями. Фрески же разместились на втором этаже. Декорировал зал по-взрослому: мраморные полы, толстые стеклянные щиты для защиты фресок. Внушает. Скамейки тоже имеются. Вот, например, мой сын. Минойское искусство ему вообще никак. А если на скамеечке, да с телефоном  в руках - то можно и потерпеть, пока родители рассматривают что-то непонятное за стеклом.

пятница, 11 октября 2013 г.

Задачка от Dzone: Sudoku Checker

Задача:
Write a program that will accept a 2D array and check if it contains a 100% correct Sudoku solution. For those unfamiliar with the rules, check out http://www.sudoku.name/rules/ .  
Моё решение на Scala:
 

package solver

object SudokuSolver {
  type Sudoku = IndexedSeq[IndexedSeq[Int]]
  
  def toSudoku( s: String): Sudoku  =
   s.split("\n").toVector.map(_.split(" ").map(_.toInt).toVector)

   def check( sudoku:  Sudoku )=
   linesCorrect(sudoku) && rowsCorrect(sudoku) && blocksCorrect(sudoku)
   
    private def isCorrect( splitMethod: Sudoku=>Sudoku) ={
   s:Sudoku => splitMethod(s).filter( isCombinationWrong).isEmpty
   }
   
   private val blocksCorrect = isCorrect(splitToBlocks)
   private val rowsCorrect = isCorrect(splitToRows)
   private val linesCorrect = isCorrect(splitToLines)  
   
   private def splitToLines( sudoku: Sudoku) = sudoku
  
   private def splitToRows( sudoku: Sudoku) =
  for( i <- 0 to 8 )
   yield( for(j<-0 to 8) yield( sudoku(j)(i) ) )
   
  private def splitToBlocks( sudoku: Sudoku) =
  for( i <- 0 to 8 by 3; j <- 0 to 8 by 3 )
   yield( for(ii <- 0 to 2; jj<- 0 to 2 )
    yield(sudoku(i+ii)(j+jj)) )
    
  private def isCombinationWrong( comb: IndexedSeq[Int]) = comb.min != 1  || comb.max != 9 || comb.toSet.size != 9
}

среда, 2 октября 2013 г.

Ущелье Розас: как стать альпинистом

Коричневый указатель на неизвестное ущелье я заприметил по дороге из пещеры Зевса (или Психра). Решение посетить данное место было принято незамедлительно. На следующее утро личный состав выдвинулся в сторону деревни Гониес. Именно тут находится отворот на ущелье Розас.

Задачка от Dzone: A Simple Number Printing Exercise

Задача:
Create a method that takes a string parameter and looks for pairs of strings in the code, breaking the string up using spaces as the delimiter. There are two types of pairs, combinations and adjacent, and you'll need to find a count of each. Adjacent pairs appear alongside each other, while combination pairs cover every permutation that can be found of pairing the strings.

So if you have a string 
dzone java dzone dzone javascript java
the results would be 
dzone has 1 adjacent pair
dzone has 3 combination pairs (0,2) (0,3) (2,3)
java has 1 combination pair (1,5) 


Моё решение на Scala:
 
def hasRepeats( n: Int) = {
    def innerHasRepeats( s: List[Char]):Boolean = s match {
        case a::b::tail =>
          if( a == b) true else innerHasRepeats( b::tail)
        case _ => false
    }
  
     innerHasRepeats( n.toString.toList )
}
  
  
(45 to 4578).filter( !hasRepeats(_) == true).size

четверг, 26 сентября 2013 г.

Ущелья Крита: Мили

Помнится, листая путеводитель по Криту, наткнулся на интересные цифры. В этом путеводителе утверждалось, что на острове известно 124 ущелья. Причём каждое сопровождалось коротким описанием и координатами. "Если каждый год посещать по 10 ущелий - это ж сколько раз сюда приезжать придётся" - подумал я тогда.

В общем, ущелье Мили. Находится оно в номе Ретимно, а найти его можно так:
Если свернуть с Национальной Дороги в районе города Ретимно в сторону Руссоспити (Roussospiti) и двигаться по указателям на деревушку Мили (Mili, в греч. написании — Μύλοι), а перед въездом в деревню взять дорогу, уходящую левее, то через 100 метров от последней развилки вы увидите небольшую парковку вдоль дороги, канатную дорогу, прокинутую на другую сторону ущелья и тропу, спускающуюся вниз. Это и есть вход в ущелье Мили (в пер. с греч. – мельницы).( утянул отсюда)

Прямо рядом с парковкой указатель:

четверг, 19 сентября 2013 г.

Неожиданный заезд в Норвегию

Норвегия никогда меня не привлекала. Ну да, страна фьордов и родина викингов. Крууто... Из известных личностей - лишь Тур Хейердал. Ну, типа, известных лично мне. Я к тому, что по своей воле и за свои кровные в Норвегию я бы не поехал. 

Что-то я не с того конца начал... И, значит, говорит мне начальник: а не поехал бы ты в Норвегию, на конференцию? А я такой : Отнюдь!Ибо в рабочее время за счёт работодателя я готов хоть в Новую Зеландию. И вот уже я и верный товарищ Лёха в аэропорту Осло.

Далее - слайды. В аэропорту патрулируют охранники с собаками. Видимо, борются с наркотрафиком. 

суббота, 7 сентября 2013 г.

Крит 2013. Попытка Номер 4

Коротка память человеческая. Казалось бы, и двух месяцев не прошло с тех пор, как вернулся из Греции, а воспоминания поблекли и пожухли, как осение листья под ногами. С этим надо что.то делать, ну вот я и делаю. Документирую, то есть.

Отъезд.
В этом сезоне все туроператоры как с ума посходили. Греция стала чуть ли не самым дорогим направлением, не смотри, что там - кризис.  Купить только билеты без проживания на прямой рейс из Эстонии казалось вообще нереальной задачей.  Но мы, опытные грекоманы, знаем, где искать. В результате было куплено 3 билета до Ираклиона с вылетом из Финдяндии. Вышло не дёшево, 1000 еврО на троих, зато на 2 недели. Ибо, как показывает практика, меньше чем на 2 недели и лететь не стоит, половину времени уходит на утрамбовывание чемоданов да на переезды к аэропорту и обратно.

До Хельсинки плыли на пароме Викинг Лайн. Паром добротный, быстрый. Весь путь от силы занимает 2,5 часа. Погода в Таллинне перед отъездом наладилась, пошли фотографироваться на палубу. К слову, после отъезда погода резко испортилась, и две недели лили дожди при температуре около 15 градусов. В общем, угадали мы с  рейсом .

суббота, 17 августа 2013 г.

Треккинг в Эстонии : тропа Маякиви-Пиканымме

Изучая горы и ущелья в Греции, нередко задавал себе вопрос: а почему у нас такого нет? Где, спрашивается, интересные и хорошо размеченные маршруты для треккеров в родной Эстонии? Ну не может такого быть, чтобы ну совсем ничего не было! И верно, есть они, маршруты, и как оказалось, вполне приличные.

Сегодня посетил с семьёй учебную тропу Маякиви-Пиканымме. Добираемся так. Едем из Таллинна километров 35-40 до Куусалу, затем сворачиваем на Лееси и едем километров 12 в этом направлении.Зорко высматриваем указатель на Хара. А вот и он - 6 километров по великолепной извилистой грунтовке. Затем - поворот налево, на Юминда, и вот оно, место старта. Обширная парковка, инфо-стенд, удобства.

воскресенье, 21 апреля 2013 г.

Агиа Галини. Или окончание истории Дедала.

Скинсэйвер Пикассы внезапно напомнил мне о местечке, которое незаслуженно осталось неотмеченным мной в этом блоге. Не то, чтобы Агиа Галини было настолько примечательным или знаковым. Оно не раскручено, как Матала и не так фотогенично, как Ханья. Здесь нет каких-то известных достопримечательностей. Однако, этот сонный городок мне запал в душу.