szczyglis/php-ulam-spiral-generator

这是一个用PHP编写的数学乌拉姆螺旋生成器和渲染器,具有可编程回调功能。

v1.2.3 2024-08-26 03:14 UTC

This package is auto-updated.

Last update: 2024-09-26 03:33:05 UTC


README

版本: 1.2.3 | 构建: 2024.08.26 | PHP: ^7.2.5|^8.0

乌拉姆螺旋生成器

这是一个用PHP编写的数学乌拉姆螺旋生成器和渲染器,具有可编程回调功能。

实时演示: https://szczyglis.dev/ulam-spiral-generator

什么是乌拉姆螺旋?

来源:https://en.wikipedia.org/wiki/Ulam_spiral

乌拉姆螺旋或素数螺旋是数学家斯坦尼斯拉夫·乌拉姆于1963年发明的素数集合的图形表示,后来在《科学美国人》杂志的马丁·加德纳的数学游戏专栏中被广泛传播。它是通过将正整数写入正方形螺旋并特别标记素数来构建的。[...]

300px-Ulam_1

如何安装

composer require szczyglis/php-ulam-spiral-generator

功能

  • 与任何数据集兼容的乌拉姆螺旋矩阵构建器。
  • 内置屏幕螺旋渲染器(作为HTML表格或原始数据)。
  • 适用于独立和外部使用(由一个PHP类组成)。
  • 可编程回调,用于突出显示和计数行和列中的数字。
  • 基于JavaScript的实时突出显示器,用于行、列和对角线。
  • 易于使用。

使用示例

<?php
// app.php

require __DIR__ . '/vendor/autoload.php';

use Szczyglis\UlamSpiralGenerator\UlamSpiral;

// configuration
$config = [ 
	'raw' => false, // if true then displays raw spiral (without CSS)
	'append_css' => true, // enables CSS stylizing
	'append_js' => true, // enables JS features
	'no_append_jquery' => false, // disables jQuery script appending if true
	'counters_mode' => 'count', // sets counters mode (sum of values or occurencies count)
	'row_counters' => true, // enables vertical counters
	'col_counters' => true, // enables horizontal counters
	'cell_width' => 35, // sets width of cell in pixels,
	'cell_height' => 35, // sets height of cell in pixels
	'cell_font_size' => 12, // sets font size in pixels
];

$dataset = range(1, 1000); // create dataset

$ulam = new UlamSpiral($config); // create new generator
$ulam->setDataset($dataset); // define dataset
$ulam->addCounter('sum', function($value) { // add custom callbacks for counters ( optional )
	return true;
});
$ulam->addCounter('prime', function($value) {
	if (is_integer($value)) {						
		if (UlamSpiral::isPrime($value)) {
			return true;		
		}						
	}	
});
$ulam->addMarker('prime', function($value) { // add custom callbacks for markers ( optional )
	if (is_integer($value)) {						
		if (UlamSpiral::isPrime($value)) {
			return '#e9e9e9';		
		}						
	}	
});

$ulam->buildMatrix(); // build Ulam spiral matrix
echo $ulam->render(); // render spiral

$matrix = $ulam->getMatrix(); // returns spiral's matrix

您可以在 $ulam->dataset 中使用任何填充数字或字符的PHP数组。数组中的所有值都将放置在螺旋中。

执行 $ulam->buildMatrix() 后,由该方法创建的矩阵将可用在 $ulam->matrix 数组中。放置在螺旋中的值的x和y坐标将在 $ulam->coords 数组中可用。您可以使用 $ulam->getMatrix() 方法访问矩阵。

截图

CSS样式版本

gggg

原始版本

spiral_raw

仓库包含

  • src/UlamSpiral.php - 基类

  • example.php - 使用示例

配置

您可以通过创建一个 $config 数组并将其传递给构造函数来配置生成器。

数组中的所有键如下所述

  • raw(布尔值)- [true|false] 如果为 true,则显示原始螺旋(不带CSS)。默认:false
  • append_css(布尔值)- [true|false] 启用CSS。默认:true
  • append_js(布尔值)- [true|false] 启用JavaScript。默认:true
  • no_append_jquery(布尔值)- [true|false] 禁用jQuery脚本。默认:false
  • counters_mode(字符串)- [sum|count] 设置计数器模式(值的总和或发生次数)。默认:count
  • row_counters(布尔值)- [true|false] 启用垂直计数器。默认:true
  • col_counters(布尔值)- [true|false] 启用水平计数器。默认:true
  • cell_width(整数)- 设置每个单元格的像素宽度。默认:35
  • cell_height(整数)- 设置每个单元格的像素高度。默认:35
  • cell_font_size(整数)- 设置像素字体大小。默认:15

定义自定义回调

数字突出显示

您可以创建自己的标记回调来突出显示特定的数字(例如,素数、偶数、大于指定值的数字等)。回调函数接收一个参数,即当前数字,并必须返回一个用于高亮的HTML颜色代码。如果回调函数返回nullfalse,则数字将不受影响。您可以创建任意数量的标记,每个标记用于不同类型的数字。

以下示例演示了如何创建偶数的标记回调

$ulam = new UlamSpiral();
$ulam->addMarker('even', function($value) {					
	if (is_integer($value)) {
		if ($value %2 == 0) {
			return '#e9e9e9';		
		}	
	}
});

带有偶数高亮显示的截图

mark_even

带有素数高亮显示的截图

mark_prime

每行/每列的数字计数器

计数器回调用于在螺旋表头(水平和垂直)中创建计数器。计数器可以计算行或列中的特定数字并显示结果在行或列表头中。有两种类型的计数器:countsum。您可以在配置中选择行为。

第一种类型 - count - 计算行或列中指定类型数字的所有出现次数。第二种类型 - sum - 显示它们的值之和。如果回调函数返回true,则数字将受到计数器的影响。您可以创建任意数量的计数器,每个计数器用于不同类型的数字。

以下示例显示了如何创建偶数的计数器回调

$ulam = new UlamSpiral();
$ulam->addCounter('even', function($value) {					
	if (is_integer($value)) {
		if ($value %2 == 0) {
			return true;		
		}	
	}
});

带有偶数计数在表头中的截图

count_even

带有素数计数在表头中的截图

nnnn

鼠标悬停时高亮显示行、列和交叉

hhhhhh

变更日志

  • 1.2.0 - 包添加到Packagist(2022-04-23)
  • 1.2.1 - 更新PHPDoc(2022-04-25)
  • 1.2.2 - 更新composer.json(2022-04-28)
  • 1.2.3 - 修复仓库URL并更新README(2024-08-26)

Ulam螺旋生成器免费使用,但如果您喜欢它,可以通过为我买咖啡来支持我的工作;(

https://www.buymeacoffee.com/szczyglis

享受吧!

MIT许可证 | 2022年3月Marcin 'szczyglis' Szczygliński

https://github.com/szczyglis-dev/php-ulam-spiral-generator

https://szczyglis.dev/ulam-spiral-generator

联系方式:szczyglis@protonmail.com