<?php
/*
(1) 4種類のアルファベット "A,C,G,T" から成る3文字の文字列を全て列挙するプログラムを書きなさい。ただし、文字列内に同じアルファベットが出現しても構わないものとし、出力順序は問わないものとします。
(2) 4種類のアルファベット "A,C,G,T" から成るn文字の文字列を全て列挙するプログラムを書きなさい。ただし、nは1以上の整数とし、その他の条件は(1)と同じであるものとします。
(3) 4種類のアルファベット "A,C,G,T" から成るn文字の文字列のうち、"AAG"という並びが含まれる文字列を全て列挙するプログラムを書きなさい。ただし、nは3以上の整数とし、その他の条件は(1)と同じであるものとします。
*/
// one();
two(4);
function one(){
$first = ["A", "C", "G", "T"];
$second = ["A", "C", "G", "T"];
$third = ["A", "C", "G", "T"];
foreach($first as $f){
foreach($second as $s){
foreach($third as $t){
echo $f . $s . $t . PHP_EOL;
}
}
}
}
function two(int $n){
// ガード
if($n<1){
return;
}
$dnArray = ["A", "C", "G", "T"];
// $dnArray = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
$base = count($dnArray);
for($i=0; $i<pow($base, $n); $i++){
for($j=0; $j<$n; $j++){
$num = intval($i / pow($base, $j));
$outputIdxes[$j] = $num % $base;
}
two_output($outputIdxes, $dnArray);
}
}
function two_output($outputIdxes, $dnArray){
foreach($outputIdxes as $key => $value){
$output[$key] = $dnArray[$value];
}
for($i=count($output)-1; 0<=$i; $i--){
echo $output[$i];
}
echo PHP_EOL;
}