sierpinski_sidef.sf 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/usr/bin/ruby
  2. class Sierpinski {
  3. # **
  4. # * * *
  5. # **
  6. method letter_s(n) {
  7. var c = ['*'];
  8. {
  9. c = (c.map{|x| ' '*(x.len*2) + x*2 + ' '*(x.len*1) } +
  10. c.map{|x| x + ' '*(x.len) + x + ' '*(x.len) + x } +
  11. c.map{|x| ' '*(x.len*1) + x*2 + ' '*(x.len*2) }
  12. );
  13. } * n;
  14. return c;
  15. }
  16. # *
  17. # *
  18. # *
  19. method letter_i(n) {
  20. var c = ['*'];
  21. {
  22. c = (c.map{|x| x*2 } +
  23. c.map{|x| x*2 } +
  24. c.map{|x| x*2 }
  25. );
  26. } * n;
  27. return c;
  28. }
  29. # *
  30. # **
  31. # ***
  32. method letter_d(n) {
  33. var c = ['*'];
  34. {
  35. c = (c.map{|x| x*1 + ' '*(x.len*2) } +
  36. c.map{|x| x*2 + ' '*(x.len*1) } +
  37. c.map{|x| x*3 }
  38. );
  39. } * n;
  40. return c;
  41. }
  42. # ***
  43. # **
  44. # ***
  45. method letter_e(n) {
  46. var c = ['*'];
  47. {
  48. c = (c.map{|x| x*3 } +
  49. c.map{|x| x*2 + ' '*(x.len) } +
  50. c.map{|x| x*3 }
  51. );
  52. } * n;
  53. return c;
  54. }
  55. # ***
  56. # **
  57. # *
  58. method letter_f(n) {
  59. var c = ['*'];
  60. {
  61. c = (c.map{|x| x*3 } +
  62. c.map{|x| x*2 + ' '*(x.len*1) } +
  63. c.map{|x| x*1 + ' '*(x.len*2) }
  64. );
  65. } * n;
  66. return c;
  67. }
  68. }
  69. var size = 2;
  70. var ski = Sierpinski();
  71. var str = "sidef";
  72. var chars = gather {
  73. str.each { |char|
  74. take(ski.('letter_' + char)(size))
  75. }
  76. }
  77. chars.zip { |*a|
  78. say a.join(' ')
  79. }