3

このルビーコードはピラミッドを生成します:

w = 20
1.upto(w) { |i| puts ">"+" "*(w-i)+"."*i*2+" "*(w-i)+"<" }

そのようです:

>                   ..                   <
>                  ....                  <
>                 ......                 <
>                ........                <
>               ..........               <
>              ............              <
>             ..............             <
>            ................            <
>           ..................           <
>          ....................          <
>         ......................         <
>        ........................        <
>       ..........................       <
>      ............................      <
>     ..............................     <
>    ................................    <
>   ..................................   <
>  ....................................  <
> ...................................... <
>........................................<

ピラミッドの上部に2つではなく1つのドットを付けたい(現在は"."*i*2対称にするため)。

どうすればこれを達成できますか?

4

4 に答える 4

2
w=20; 1.upto(w) { |i| puts ">"+" "*(w-i)+"."*(i*2-1)+" "*(w-i)+"<" }
于 2013-01-06T00:37:15.370 に答える
1

固定幅フォントを使用しているため、現在のピラミッドの中央にピリオドを配置する方法はありません。偶数ではなく奇数のドットを使用する必要があります。

w = 20
1.upto(w) do |i|
  spaces = " " * (w-i)
  dots   = "." * (i*2 - 1) # Use one fewer dot per line, starting with one dot
  puts ">" + spaces + dots + spaces + "<"
end

これにより、次のものが生成されます。

>                   .                   <
>                  ...                  <
>                 .....                 <
>                .......                <
>               .........               <
>              ...........              <
>             .............             <
>            ...............            <
>           .................           <
>          ...................          <
>         .....................         <
>        .......................        <
>       .........................       <
>      ...........................      <
>     .............................     <
>    ...............................    <
>   .................................   <
>  ...................................  <
> ..................................... <
>.......................................<
于 2013-01-06T00:40:12.550 に答える
1

使うtimesときれいになります。また、center物事を単純化するものがあります:

20.times{|i| puts ">#{("."*(i*2+1)).center(39)}<"}
于 2013-01-06T05:13:53.190 に答える
0
S, W = ' ', 20; 1.upto(W) {|i| n = W - i; puts ">#{S*n + '.' * (2*i - 1) + S*n}<"}
于 2013-01-06T02:41:09.557 に答える