<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: triangle code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 04:27:58 GMT</pubDate>
    <description>DZone Snippets: triangle code</description>
    <item>
      <title>Sierpinski Triangle in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/5526</link>
      <description>&lt;code&gt;&lt;br /&gt;# From: http://gilesbowkett.blogspot.com/2008/04/ruby-golf-ascii-sierpinski-triangle.html&lt;br /&gt;# Author: Brain Mitchell&lt;br /&gt;&lt;br /&gt;# For wide terminals:&lt;br /&gt;ruby -le '64.times{|y|print" "*(63-y),(0..y).map{|x|~y&amp;x&gt;0?" .":" A"}}'&lt;br /&gt;&lt;br /&gt;# For thin terminals:&lt;br /&gt;ruby -le '32.times{|y|print" "*(32-y),(0..y).map{|x|~y&amp;x&gt;0?" .":" A"}}'&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 20 May 2008 14:48:51 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5526</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>Pascal's triangle in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/4700</link>
      <description>&lt;code&gt;&lt;br /&gt;&lt;br /&gt;# cf. http://www.ruby-forum.com/topic/97105&lt;br /&gt;&lt;br /&gt;6.times { k=0; p $*.map!{|i|k+k=i} &lt;&lt; 1 }&lt;br /&gt;&lt;br /&gt;# ... or ...&lt;br /&gt;&lt;br /&gt;ar=[]; 6.times { k=0; p ar.map!{|i|k+k=i} &lt;&lt; 1 }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# a more general approach (for polynomials)&lt;br /&gt;&lt;br /&gt;class Polynomial&lt;br /&gt;&lt;br /&gt;   def triangle(nterms, row, pos=nil)&lt;br /&gt;&lt;br /&gt;      return nil if nterms &lt; 2 || row &lt; 1&lt;br /&gt;      nterms = nterms - 2&lt;br /&gt;      num_of_rows = row&lt;br /&gt;&lt;br /&gt;      var1 = 0 + nterms   &lt;br /&gt;      var2 = 1 + nterms&lt;br /&gt;      var3 = 3 + nterms &lt;br /&gt;  &lt;br /&gt;      ar1 = [0, 1, 0]   # first row&lt;br /&gt;      var1.times { ar1.push(0) }&lt;br /&gt;      var1.times { ar1.unshift(0) }&lt;br /&gt;&lt;br /&gt;      ar2 = []&lt;br /&gt;      ar3 = []&lt;br /&gt;      ar4 = [[1]]&lt;br /&gt;&lt;br /&gt;      for num in 0..(num_of_rows - 1)  &lt;br /&gt;&lt;br /&gt;         nextnum = ar1.size - var2&lt;br /&gt;&lt;br /&gt;         for nextn in 1..nextnum&lt;br /&gt;            sum = 0&lt;br /&gt;            count = 0&lt;br /&gt;            ar1.each do |n|  &lt;br /&gt;               count += 1 &lt;br /&gt;               if count &lt; var3 then t = sum += n; ar2 &lt;&lt; t else break end &lt;br /&gt;            end&lt;br /&gt;&lt;br /&gt;            ar3 &lt;&lt; ar2.last&lt;br /&gt;            ar2.clear&lt;br /&gt;            ar1.shift&lt;br /&gt;&lt;br /&gt;         end   # second for-loop&lt;br /&gt;&lt;br /&gt;         ar1.clear&lt;br /&gt;         ar1 &lt;&lt; ar3&lt;br /&gt;         ar1.flatten!&lt;br /&gt;&lt;br /&gt;         var2.times { ar1.push(0) }&lt;br /&gt;         var2.times { ar1.unshift(0) }&lt;br /&gt;&lt;br /&gt;         ar4 &lt;&lt; ar3&lt;br /&gt;         ar3 = []&lt;br /&gt;&lt;br /&gt;      end  # first for-loop&lt;br /&gt;&lt;br /&gt;      if !pos.nil?&lt;br /&gt;         ret = ar4.at(row).at(pos)&lt;br /&gt;         return "No such position: #{pos} in row: #{row}" if ret.nil?&lt;br /&gt;         ret&lt;br /&gt;      else&lt;br /&gt;         ar4.map! { |r| r.join('-') }&lt;br /&gt;         ar4&lt;br /&gt;      end&lt;br /&gt;   end &lt;br /&gt;end &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;puts Polynomial.new.triangle(2, 5)&lt;br /&gt;puts Polynomial.new.triangle(3, 5)&lt;br /&gt;puts Polynomial.new.triangle(4, 5)&lt;br /&gt;puts Polynomial.new.triangle(5, 5)&lt;br /&gt;puts Polynomial.new.triangle(5, 4, 8)&lt;br /&gt;puts Polynomial.new.triangle(4, 9)&lt;br /&gt;puts Polynomial.new.triangle(4, 9, 10)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Integer&lt;br /&gt;   def fak&lt;br /&gt;      f=1&lt;br /&gt;      (2..self).each { |i| f *= i   }&lt;br /&gt;      f&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;module Enumerable&lt;br /&gt;   def sum&lt;br /&gt;      inject { |n, m| n + m  }&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# cf. http://blade.nagaokaut.ac.jp/~sinara/ruby/math/combinatorics/array-rep_perm.rb&lt;br /&gt;class Array&lt;br /&gt;  def rep_perm(n)&lt;br /&gt;    if n &lt; 0&lt;br /&gt;    elsif n == 0&lt;br /&gt;      yield([])&lt;br /&gt;    else&lt;br /&gt;      rep_perm(n - 1) do |x|&lt;br /&gt;	each do |y|&lt;br /&gt;	  yield(x + [y])&lt;br /&gt;	end&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;nterms = 2&lt;br /&gt;exponent = 80&lt;br /&gt;exponent = 8&lt;br /&gt;&lt;br /&gt;# create the same number of variable names as there are terms &lt;br /&gt;# example: ['a', 'b'] for (a+b)**3&lt;br /&gt;&lt;br /&gt;var_names = ('a'..'z').to_a.slice(0, nterms)&lt;br /&gt;#var_names = (('a'..'z').to_a &lt;&lt; ('A'..'Z').to_a &lt;&lt; ('aa'..'zz').to_a).flatten!.slice(0, nterms)&lt;br /&gt;&lt;br /&gt;ar1 = []&lt;br /&gt;(0..exponent).to_a.rep_perm(nterms) { |x| p x; ar1 &lt;&lt; x if x.sum == exponent }   # example: ... if [2,6].sum == 8&lt;br /&gt;ar1.reverse!&lt;br /&gt;&lt;br /&gt;#p ar1&lt;br /&gt;#puts ar1&lt;br /&gt;&lt;br /&gt;ar2 = []&lt;br /&gt;&lt;br /&gt;ar1.each do |term|&lt;br /&gt;&lt;br /&gt;   #puts "term: #{term.inspect}"  # example: term: [5, 0, 0]&lt;br /&gt;   count = 0&lt;br /&gt;   var1 = 1&lt;br /&gt;   term.each { |i| var1 *= i.fak }&lt;br /&gt;   var2 = exponent.fak / var1 &lt;br /&gt;   var3 = "#{var2}   (  #{ term.join('-') &lt;&lt; '-' } )"  # prepare term for parsing with gsub below&lt;br /&gt;   ar2 &lt;&lt; var3&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;#p ar2&lt;br /&gt;&lt;br /&gt;result = ar2.collect do |term|&lt;br /&gt;   p term&lt;br /&gt;   count = -1&lt;br /&gt;   term.gsub!(/(\d+)-/)  { count += 1;  "#{var_names.at(count)}" &lt;&lt; '**' &lt;&lt; $1 &lt;&lt; ' ' }&lt;br /&gt;   term.gsub!(/^(\d+)( +)/, '\1\2*\2')&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts result&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 26 Oct 2007 17:02:28 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4700</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>pascal triangle plotter XD</title>
      <link>http://snippets.dzone.com/posts/show/440</link>
      <description>&lt;code&gt;&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;conio.h&gt;&lt;br /&gt;&lt;br /&gt;#define MAX 16&lt;br /&gt;&lt;br /&gt;int main () {&lt;br /&gt;	int unsigned vetor[MAX], grau, i = 0, j, top, left;&lt;br /&gt;&lt;br /&gt;	clrscr();&lt;br /&gt;&lt;br /&gt;	printf( "Dado o grau, printar o triangulo de pascal\n" );&lt;br /&gt;&lt;br /&gt;	while( grau &gt; MAX &amp;&amp; printf( "Digite um numero entre 0 e %d para o grau: ", MAX ) &amp;&amp; scanf( "%u", &amp;grau ) );&lt;br /&gt;	while( i++ &lt; grau &amp;&amp; !( j = 0 ) &amp;&amp; printf( "\n" ) )&lt;br /&gt;		while( j &lt; i &amp;&amp; ( j == 0 &amp;&amp; ( top = left = vetor[j] = 1 ) ? 1 : j &gt; 0 &amp;&amp; j &lt; i-1 &amp;&amp; ( top = vetor[j] ) &amp;&amp; ( vetor[j] = left + top ) &amp;&amp; ( left = top ) ? 1 : ( vetor[j] = 1 ) ) &amp;&amp; printf( "%-5d", vetor[j] ) &amp;&amp; ++j );&lt;br /&gt;	getch();&lt;br /&gt;	return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 02 Jul 2005 03:59:46 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/440</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
  </channel>
</rss>
