комбинаторика — создание комбинаций с переполнением стека

Итак, у меня есть следующие символы (символы alt):

¯ ˜ ” “ ’ ‘ ¨ ´ ¹ ² ³ ` ° ⁿ

То, что я пытаюсь сделать, просто: генерировать все возможные комбинации между ними до длины два. При этом, несколько образцов поколений будут выглядеть так:

¯ ^ ¨
³ ^ “

Также они должны быть разделены, скажем, оператором XOR. Я думал о следующем сценарии:

$array = array('¯', '˜' ,'”', '“', '’', '‘', '¨', '´', '¹', '²', '³', '`', '°', 'ⁿ');

foreach ($array as $element) {
echo $element ' ^ ' //..;
}

Я просто не могу реализовать свою логику. Как я могу сгруппировать их в пары из двух элементов и просмотреть каждую возможную комбинацию между ними без дубликатов?

РЕДАКТИРОВАТЬ:


Хотя мне удалось заставить его работать с обычными буквами, вот так:

<?php
ini_set('max_execution_time', '65');

$values = 'ABCD';
container(strlen($values), 0 );

function container($length, $pos, $out = '' ){
global $values;

for ($i = 0; $i < $length; ++$i){
if ($pos < $length ){
container($length, $pos + 1, $out . $values[$i]);
}
}

if(strlen($out) <= 2){
echo $out . '<br />';
}
}

?>

Я захожу в тупик, когда в качестве значений для итерации используем символы alt.

1

Решение

Используя несколько разных символов:

$chars = array('a','b','c','d','e','f');
for ($i = 0; $i < (count($chars) - 1); $i++) {   // count()-1 to prevent f^f
for ($j = $i+1; $j < count($chars); $j++) {  // $i+1 to prevent a^a
echo "$chars[$i] ^ $chars[$j]\n";
}
}

Выход:

a ^ b
a ^ c
a ^ d
a ^ e
a ^ f
b ^ c
b ^ d
b ^ e
b ^ f
c ^ d
c ^ e
c ^ f
d ^ e
d ^ f
e ^ f

Это предполагает, что a ^ a это обманка, и b^a а также a^b являются обманщиками друг друга.

0

Другие решения

Других решений пока нет …