Конкурс Популярности - Построение Графика Коллатца

  • Автор темы Meiaa677skestSoky
  • Обновлено
  • 26, Oct 2024
  • #2

Python+графвиз

 
 collatz_grid(10000) 

Изображение

Создано с collatz_grid(100) and gem 'chunky_png' require 'chunky_png' def random_color ChunkyPNG::Color.rgba(*(1..3).map{rand(1..255)},255) end def collatz(n) n.even? ? n/2 : 3*n + 1 end def collatz_grid(max) grid = [] colors = (1..max).map { |i| random_color } collatz_steps = (1..max).map { |n| collatz(n) } overflow = ChunkyPNG::Color::TRANSPARENT while colors.uniq.count > 4 grid << colors colors = collatz_steps.map { |i| colors[i-1] || overflow } end img = ChunkyPNG::Image.new(max, grid.size, ChunkyPNG::Color::TRANSPARENT) max.times do |x| grid.size.times do |y| img[x,y] = grid[y][x] end end img.save("collatz#{max}.png") end :

 

Lavanda11


Рег
15 Aug, 2011

Тем
94

Постов
200

Баллов
670
  • 26, Oct 2024
  • #3

Руби (через ChunkyPNG)

Я не знаю, если это довольно то, что вы имели в виду, но у меня была идея попробовать это некоторое время назад, но я не дошел до этого. Мы создаем ряд случайных цветов, затем итеративно заменяем каждый цвет n цветом в позиции collatz(n) , or an empty pixel if greater than the max, until every sequence either escapes or converges. The result is that each pixel gradually propagates to the positions connected to it in the graph.

m=20

Изображения ниже предлагают открыть их в новом окне и увеличить.

dot :

#!/usr/bin/env python # -*- coding: utf-8 -*- import networkx as nx import os """Tool to generate collatz sequence graphs.""" def collatz_one(x): """Make a single step in the collatz sequence.""" if x % 2 == 0: x = x/2 else: x = 3*x + 1 return x def main(max_collatz=20): """Create the collatz graph. """ G = nx.DiGraph() seen = [1] G.add_node("1") edges = [] for i in range(1, max_collatz): while i != 1: if i not in seen: seen.append(i) G.add_node(str(i)) j = collatz_one(i) edges.append((str(i), str(j))) i = j else: i = 1 for i, j in edges: G.add_edge(i, j) nx.write_dot(G, 'test.dot') os.system("dot -Tpng test.dot -o test.png") if __name__ == '__main__': from argparse import ArgumentParser parser = ArgumentParser(description=__doc__) parser.add_argument("-m", dest="m", help=("The first 1..m elements are guaranteed " "to be included"), default=20, type=int) args = parser.parse_args() main(args.m) :

 

U5f7z9v11


Рег
23 Mar, 2020

Тем
88

Постов
211

Баллов
671
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно