개발 꿀팁/PHP

php 한 변이 N인 솔리드 및 속이 빈 마름모꼴을 인쇄

Jammie 2022. 8. 22. 15:24
반응형

php 한 변이 N인 솔리드 및 속이 빈 마름모꼴을 인쇄


솔리드 마름모꼴 계산 방법:

$n: 에지 길이
$i: 현재 줄, 0 시작
$rows: 총 행 수



상부
전면 공백 수=$n-$i-1
문자수=$i*2+1

하부
전면 공백 수=$i-$n+1
문자 수= ($rows-$i)*2-1



str_pad를 사용하면 for/wh를 줄일 수 있다ile 등순환

 

/**
 * 인쇄 솔리드 마름모꼴
 * @param  int    $n 가장자리 길이, 기본값 5
 * @param  String $s 표시된 문자, 기본값*
 * @return String
 */
function solidDiamond($n=5, $s='*'){
 
    $str = '';
 
    // 총행수를 계산하다
    $rows = $n*2-1;
 
    // 각 행의 *을( 를) 반복 계산합니다
    for($i=0; $i<$rows; $i++){
        if($i<$n){ // 상부
            $str .= str_pad('', ($n-$i-1), ' '). str_pad('', $i*2+1, $s)."\r\n";
        }else{     // 하부
            $str .= str_pad('', ($i-$n+1), ' '). str_pad('', ($rows-$i)*2-1, $s). "\r\n";
        }
    }
 
    return $str;
 
}
 
echo '<xmp>';
echo solidDiamond(5);
echo '</xmp>';
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

중공마름모형 계산방법:
$n: 에지 길이
$i: 현재 줄, 0 시작
$rows: 총 행 수

상부
전면 공백 수=$n-$i-1
빈 공간 수=$i*2+1-2
문자수=$i*2+1 - 빈 칸 수

하부
전면 공백 수=$i-$n+1
빈 칸 수 = ($r)ows-$i)*2-1-2
문자 수= ($rows)-$i)*2-1 - 빈 칸 수

/**
 * 인쇄 중공 마름모꼴
 * @param  int    $n 가장자리 길이, 기본값 5
 * @param  String $s 표시된 문자, 기본값**
 * @return String
 */
function hollowDiamond($n=5, $s='*'){
 
    $str = '';
 
    // 총행수를 계산하다
    $rows = $n*2-1;
 
    // 각 행의 *을( 를) 반복 계산합니다
    for($i=0; $i<$rows; $i++){
        if($i<$n){ // 상부
            $tmp = $i*2+1;
            $str .= str_pad('', ($n-$i-1), ' '). str_pad(str_pad('', $tmp-2, ' ', STR_PAD_BOTH), $tmp, $s, STR_PAD_BOTH)."\r\n";
        }else{     // 상부
            $tmp = ($rows-$i)*2-1;
            $str .= str_pad('', ($i-$n+1), ' '). str_pad(str_pad('', $tmp-2, ' ', STR_PAD_BOTH), $tmp, $s, STR_PAD_BOTH). "\r\n";
        }
    }
 
    return $str;
 
}
 
echo '<xmp>';
echo hollowDiamond(5);
echo '</xmp>';
    *
   * *
  *   *
 *     *
*       *
 *     *
  *   *
   * *
    *
반응형