Skip to content

Instantly share code, notes, and snippets.

@adamgomespinto
Last active September 23, 2022 21:00
Show Gist options
  • Save adamgomespinto/2c4c13dc980502c433ccfe1bf302ba37 to your computer and use it in GitHub Desktop.
Save adamgomespinto/2c4c13dc980502c433ccfe1bf302ba37 to your computer and use it in GitHub Desktop.
(ns aula4.exercicio
(:require [aula4.data :as data]))
;; 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 retorna-vetor-de-nomes
[clientes]
(map (fn [cliente] (assoc cliente :full-name (str (:first-name cliente) " " (:last-name cliente)))) clientes))
;; retornar clientes que tem `:age` maior que 35. Usar tanto `filter` quanto `remove`.
(defn retorna-clientes-mais-velhos-filter
[clientes idade]
(filter (fn [cliente] (> (:age cliente) idade)) clientes))
(defn retorna-clientes-mais-velhos-remove
[clientes idade]
(remove (fn [cliente] (<= (:age cliente) idade)) clientes))
;; retornar um mapa, tendo a chave do item como o id do produto e o valor sendo a quantidade total comprada desse item.
(defn retorna-mapa-item-quantidade-comprada
[compras]
(reduce (fn [acc compra] (update acc (:item-id compra) #(+ (:amount compra) (or % 0)))) {} compras))
;; 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 retorna-mapa-compras-cliente
[compras]
(reduce (fn [acc compra] (update acc (:client-id compra) #(conj (or % []) compra))) {} compras))
;; retornar o vetor de clientes com a chave `:purchases`.
;; O valor dessa chave sera um vetor contendo mapas com `:item-id` e `:amount`.
(defn retorna-mapa-clientes-com-compras
[clientes compras]
(let [mapa-compras (retorna-mapa-compras-cliente compras)]
(map (fn [cliente] (assoc cliente :purchases (map #(dissoc % :client-id) (get mapa-compras (:id cliente))))) clientes)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment