Skip to content

Instantly share code, notes, and snippets.

@danielmarquesr
Created September 26, 2022 20:26
Show Gist options
  • Save danielmarquesr/337977f13e5e7dffc21e8da64185c076 to your computer and use it in GitHub Desktop.
Save danielmarquesr/337977f13e5e7dffc21e8da64185c076 to your computer and use it in GitHub Desktop.
(ns aula5.exercicio
(:require [aula4.data :as data]))
;; Utilizar loop/recur para resolver os exercicios
;; retornar o vetor de clientes a chave `:full-name` adicionada nos mapas de clientes. (full-name deve ser a concatenacao do `:first-name` com o `:last-name`).
(defn get-full-name
[{:keys [first-name last-name]}]
(str first-name " " last-name))
(defn add-full-names
[clients]
(loop [clients-vector clients
acc []]
(if (empty? clients-vector)
acc
(recur
(rest clients-vector)
(let [first-client (first clients-vector)]
(conj acc
(assoc first-client :full-name (get-full-name first-client))))))))
(comment
(add-full-names data/clients)
)
;; retornar um mapa de compras, onde a chave deve ser o id do cliente e o valor deve ser um vetor que contendo todas as compras do cliente.
(defn get-purchase-map
[purchases]
(loop [purchases-vector purchases
acc {}]
(if (empty? purchases-vector)
acc
(recur
(rest purchases-vector)
(let [first-purchase (first purchases-vector)
first-purchase2 (dissoc first-purchase :client-id)]
(update acc (:client-id first-purchase) #(conj (or % []) first-purchase2)))))))
(comment
(get-purchase-map data/purchases)
)
;; retornar o vetor de clientes com a chave `:purchases`. O valor dessa chave sera um vetor contendo mapas com `:item-id` e `:amount`.
(defn get-clients-with-purchases
[clients]
(let [purchases (get-purchase-map data/purchases)]
(loop [clients-vector clients
acc []]
(if (empty? clients-vector)
acc
(recur
(rest clients-vector)
(let [first-client (first clients-vector)]
(conj acc
(assoc first-client :purchases (get purchases (:id first-client))))))))))
(comment
(get-clients-with-purchases data/clients)
)
;; escrever uma funcao que tras a frequencia de cada caracter em uma string.
(defn get-chars-frequency
[word]
(loop [word-vector word
acc {}]
(if (empty? word-vector)
acc
(recur
(rest word-vector)
(let [first-word-vector (first word-vector)]
(update acc first-word-vector #(inc (or % 0))))))))
(comment
(get-chars-frequency "abacaxi")
(get-chars-frequency "arara")
(get-chars-frequency "")
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment