gpt4 book ai didi

PHP字母数字组合算法及从X位置开始

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:45 27 4
gpt4 key购买 nike

我一直在使用这个算法,现在它的输出是一个像这样的字符串:

AAA AAB AAC AAD AAE AAF AAG AAH AAI AAJ AAK AAL AAM AAN AAO AAP AAQ AAR AAS AAT AAU AAV AAW AAX AAY AAZ AA0 AA1 AA2 AA3 AA4 AA5 AA6 AA7 AA8 AA9 (END OF LOOP 1) ABA ABB ABC ABD ABE ABF ABG ABH ABI ABJ ABK ABL ABM ABN ABO ABP ABQ ABR ABS ABT ABU ABV ABW ABX ABY ABZ AB0 AB1 AB2 AB3 AB4 AB5 AB6 AB7 AB8 AB9 (END OF LOOP 2)

这非常有效,但是假设我想从 AB0 位置继续。我如何在 X 职位之后继续?我一直在尝试实现位置保持器的代码,但我的想法用完了,现在我已经筋疲力尽了。

我的项目所做的是创建一些 text.txt 文件,其中包含下面代码可以执行的所有可能组合,但它会在一个长字符串/echo 中回显所有内容,因此,我想要实现的是能够将那些 text.txt 文件分成几部分。

例如,需要 5700 个组合(5700 个循环),5 个 text.txt 的 1000 个组合和一个 text.txt 文件,剩下 700 个组合。如何在不从头开始的情况下从循环 3000 继续?

这是我使用的代码:

<?php
ini_set('memory_limit', '3062M');
/*
Author: Luka Vidaković
Website: http://www.lvidakovic.com
Date: 21.2.2013.
*/
$charSet .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charSet .= '0123456789';

$size = strlen($charSet);
$base = array();
$counter = 0;

$maxLength = 3; // 3 for now to experiment
$baseSize = 3; // min

$loops_to_make = 1; // 0 will loop once. 1 will loop twice and so on...
$loops_done = 0;
$megavar = "";

while($baseSize <= $maxLength)
{
if($loops_done > $loops_to_make) { break; }
// Go through all the possible combinations of last character and output $base
for($i = 0; $i < $size; $i++)
{
$base[0] = $i; //echo $i." ";
for($j=$baseSize-1;$j>=0;$j--)
{
$megavar .= $charSet[$base[$j]];
}
$megavar .= ' ';
}
// How many $base elements reached their max?
for($i = 0; $i<$baseSize;$i++)
{
if($base[$i] == $size-1) { $counter++; $megavar .= "<br>|(".$j.")|"; }
else break;
}
// Every array element reached max value? Expand array and set values to 0.
if($counter == $baseSize)
{
// Notice <=$baseSize! Initialize 0 values to all existing array elements and ADD 1 more element with that value
for($i=0;$i<=$baseSize;$i++)
{
$base[$i] = 0;
}
$baseSize = count($base);
}
// Carry one
else
{
$base[$counter]++;
for($i=0;$i<$counter;$i++) $base[$i] = 0;
}
$loops_done++;
$counter=0;
}
echo $megavar; // Eventually I'll echo this into a txt file
?>

我也对其他想法持开放态度,只要使用 PHP 或更好的语言就可以创建相同的输出。谢谢。

最佳答案

您的问题是计算给定字符串和给定位置之和的简单案例。唯一的困难是您的基数是 36 并且数字是自定义的。但这可以通过 strtr() 轻松解决。和 base_convert()组合:

function getSeed($string, $positions=1)
{
$convert = array_combine(
array_merge(range('A', 'Z'), range('0', '9')),
array_merge(range('0', '9'), range('A', 'Z'))
);
//actually, $result can be written as one-liner
//but that will be horrible whitespacing..
$result = base_convert(strtr($string, $convert), 36, 10);
$result = strtoupper(base_convert($result+$positions, 10, 36));
$result = strtr(str_pad($result, strlen($string), '0', STR_PAD_LEFT), array_flip($convert));
return $result;
}

所以要使用它,只需调用:

$result = getSeed('AAA', 40);//ABE

因此,您将能够在循环中生成值或通过指定偏移量恢复循环。请注意,如果您将在循环中使用它,我建议您在函数外部评估 $convert 。这将节省不必要的开销。

关于PHP字母数字组合算法及从X位置开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20800449/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com