Найти элемент, котоpый встречается в матрице чаще других - Lisp

Узнай цену своей работы

Формулировка задачи:

Дана матрица А размера 8*6. Найти элемент, котоpый встречается в массиве чаще других. Заменить элементы столбцов, в которых содержится такой элемент на этот элемент. Написать на LISP. Есть код на Питоне :
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
%Дана матрица А размера 8*6. Найти элемент, котоpый встречается в массиве чаще
%других. Заменить элементы столбцов, в которых содержится такой элемент на этот
%элемент.
"""
import sys
 
def find_frequency_el(m):
    fi_el_hash = {}
    #создадим хеш таблицу числа встречаемых в матрице элементов
    for i in range(len(m)):
        len_ms = len(m[i])
        for j in range(len_ms):
            if fi_el_hash.has_key(m[i][j]):
                fi_el_hash[m[i][j]] = fi_el_hash[m[i][j]]+1
            else:
                fi_el_hash[m[i][j]] = 1
    #найдем элемент с максимальной встречаемостью
    elem_max  = m[0][0]  #инициализируем начальный элемент для поиска наиболее часто встречающегося элемента
    count_max = fi_el_hash[elem_max]
    for k in fi_el_hash.keys():
        if fi_el_hash[k] > count_max:
            count_max = fi_el_hash[k]
            elem_max  = k
    return [elem_max, count_max]
 
def print_matr(m):
    for i in range(len(m)):
        len_ms = len(m[i])
        for j in range(len_ms-1):
            print "%d," % m[i][j],
        print "%d" % m[i][len_ms-1]
 
def replace_column_by_find_el(m,e):
    ind_hash = {}
    #пробежимся по матрице и найдем все индексы колонок в которых есть элемент е
    for i in range(len(m)):
        len_ms = len(m[i])
        for j in range(len_ms):
            if m[i][j] == e:
                if not ind_hash.has_key(j):
                    ind_hash[j] = 1
    #теперь по известным индексам колонок проведем замену всех элементов.
    for i in range(len(m)):
        for j in ind_hash.keys():
            m[i][j] = e
    return m
 
def work(m):
    print "Base matrix: "
    print_matr(m)
    [elem_max, count_max] = find_frequency_el(m)
    print "frequency element is %d, count is %d" % (elem_max, count_max)
    replace_column_by_find_el(m,elem_max)
    print "Rezult matrix: "
    print_matr(m)

def test1():
    m = [
      [2, 4, 1, 8, 5, 2],
      [0, 2, 1, 2, 8, 4],
      [6, 1, 4, 8, 5, 2],
      [3, 2, 4, 5, 1, 3],
      [5, 4, 2, 7, 6, 1],
      [2, 3, 1, 4, 234, 12],
      [23,2, 3, 6, 1, 4],
      [8, 3, 4, 2, 1, 2]]
    work(m)

def test2():
    m = [
      [2, 4, 1, 8, 5, 2],
      [0, 2, 1, 8, 8, 4],
      [6, 1, 4, 8, 5, 1],
      [3, 2, 4, 5, 1, 3],
      [5, 4, 2, 7, 6, 1],
      [2, 3, 1, 4, 234, 12],
      [23,1, 3, 6, 1, 4],
      [8, 3, 4, 2, 1, 2]]
    work(m)
 
if __name__ == "__main__":
    test1()
    test2()

Решение задачи: «Найти элемент, котоpый встречается в матрице чаще других»

textual
Листинг программы
(ns aeon.core)
 
(def ^:const matrix1
  [[2 4 1 8 5 2]
   [0 2 1 2 8 4]
   [6 1 4 8 5 2]
   [3 2 4 5 1 3]
   [5 4 2 7 6 1]
   [2 3 1 4 234 12]
   [23 2 3 6 1 4]
   [8 3 4 2 1 2]])
;; => #'aeon.core/matrix1
 
(def ^:const matrix2
  [[2 4 1 8 5 2]
   [0 2 1 8 8 4]
   [6 1 4 8 5 1]
   [3 2 4 5 1 3]
   [5 4 2 7 6 1]
   [2 3 1 4 234 12]
   [23 1 3 6 1 4]
   [8 3 4 2 1 2]])
;; => #'aeon.core/matrix2
 
(defn print-matrix [matrix]
  (doseq [row matrix]
    (doseq [elem row]
      (printf "%4d" elem))
    (newline)))
;; => #'aeon.core/print-matrix
 
(defn task [matrix]
  (let [transpose (partial apply mapv vector)
        [max-elem _] (apply max-key val (-> matrix flatten frequencies))
        [x :as tpose] (transpose matrix)]
    (-> (for [v tpose]
          (if (.contains v max-elem)
            (repeat (count x) max-elem)
            v))
        transpose)))
;; => #'aeon.core/task
 
(println "base-matrix1: ")
(print-matrix matrix1)
(println "result-matrix1: ")
(print-matrix (task matrix1))
 
(println "base-matrix2: ")
(print-matrix matrix2)
(println "result-matrix2: ")
(print-matrix (task matrix2))
 
;; *out*
;; base-matrix1: 
;;   2   4   1   8   5   2
;;   0   2   1   2   8   4
;;   6   1   4   8   5   2
;;   3   2   4   5   1   3
;;   5   4   2   7   6   1
;;   2   3   1   4 234  12
;;  23   2   3   6   1   4
;;   8   3   4   2   1   2
;; result-matrix1: 
;;   2   2   2   2   5   2
;;   2   2   2   2   8   2
;;   2   2   2   2   5   2
;;   2   2   2   2   1   2
;;   2   2   2   2   6   2
;;   2   2   2   2 234   2
;;   2   2   2   2   1   2
;;   2   2   2   2   1   2
;; base-matrix2: 
;;   2   4   1   8   5   2
;;   0   2   1   8   8   4
;;   6   1   4   8   5   1
;;   3   2   4   5   1   3
;;   5   4   2   7   6   1
;;   2   3   1   4 234  12
;;  23   1   3   6   1   4
;;   8   3   4   2   1   2
;; result-matrix2: 
;;   2   1   1   8   1   1
;;   0   1   1   8   1   1
;;   6   1   1   8   1   1
;;   3   1   1   5   1   1
;;   5   1   1   7   1   1
;;   2   1   1   4   1   1
;;  23   1   1   6   1   1
;;   8   1   1   2   1   1

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы