LINUX.ORG.RU

Работа с последовательностями в разных языках

 , , , ,


7

9

Навеяно темой Ментальный вирус, пример взят и дополнен оттуда. Интересует реализация подобной операции на других языках. Лично я хотел бы увидеть на Lisp, Java, Smalltalk, Erlang.

array = ["John", "James", "Jakob", "Peter", "Janette", "Tom", "Vasya", "Jean", "Juilia", "Heather"]

puts array.select{|v|v[/^J[a-z]+/]}. # ВЫБРАТЬ ПО someregexp
each_slice(3). # КАЖДЫЙ КУСОК ПО 3 ЭЛЕМЕНТА
map{|v| "#{v[0]} and #{v[1]} follow #{v[2]}"}. # ПОДСТАВИТЬ ЗНАЧЕНИЯ В СТРОКУ
join("\n") # ОБЪЕДИНИТЬ
# John and James follow Jakob
# Janette and Jean follow Juilia

Пошагово для тех, кто не знаком с Ruby:

array.select{|v|v[/^J[a-z]+/]}
# ["John", "James", "Jakob", "Janette", "Jean", "Juilia"]
array.select{|v|v[/^J[a-z]+/]}.
each_slice(3).to_a # в массив
# [["John", "James", "Jakob"], ["Janette", "Jean", "Juilia"]]
array.select{|v|v[/^J[a-z]+/]}.each_slice(3).
map{|v| "#{v[0]} and #{v[1]} follow #{v[2]}"}
# ["John and James follow Jakob", "Janette and Jean follow Juilia"]
array.select{|v|v[/^J[a-z]+/]}.each_slice(3).map{|v| "#{v[0]} and #{v[1]} follow #{v[2]}"}.
join("\n") 
# "John and James follow Jakob\nJanette and Jean follow Juilia"

Использовать только стандартную библиотеку.

Целесообразность операции не важна. Вопрос кратности количества найденных элементов трем не рассматриваем.



Последнее исправление: ymn (всего исправлений: 3)

Внезапно кложура.

(def names ["John" "James" "Jakob" "Peter" "Janette" "Tom" "Vasya" "Jean" "Juilia" "Heather", "Jeb"])

(doseq
    [s (map #(apply format "%s and %s follow %s" %)
        (partition 3
            (filter #(= \J (get % 0)) names)))]
    (println s))
PolarFox ★★★★★
()
Ответ на: комментарий от Anatolik

Оказывается неиспользуемой переменной можно пренебречь вот так:

array = <[John James Jakob Peter Janette Tom Vasya Jean Juilia Heather]>

filter (_ is /^J[a-z]+/), array
|> (-> ["#{&0[i]} and #{&0[i+1]} follow #{&0[i+2]}" for ,i in &0 by 3] * \\n)

Anatolik ★★
()
Ответ на: комментарий от Anatolik
array = <[John James Jakob Peter Janette Tom Vasya Jean Juilia Heather]>

filter (is /^J[a-z]+/), array
|> (-> ["#{it[i]} and #{it[i+1]} follow #{it[i+2]}" for ,i in it by 3] * \\n)

Отпадный язык. So much fun.

Anatolik ★★
()
Ответ на: комментарий от Anatolik

LiveScript интересный. Думал в рельсах вместо CoffeScript исользовать.

dr_jumba
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.