#/*********************************************************** # stemleaf.rb -- 幹葉表示 #***********************************************************/ require "statutil.rb" MAXLINES = 60 def stem_and_leaf(n, x) histo = [] xmin = xmax = x[0] for i in 1...n if (x[i] < xmin); xmin = x[i] elsif (x[i] > xmax); xmax = x[i] end end factor = 1 while (factor * xmax > 32767 || factor * xmin < -32767) factor /= 10 end while (true) kmin = ((factor * xmin) / 10).to_i - (xmin < 0 ? 1 : 0) kmax = ((factor * xmax) / 10).to_i if ((kmax - kmin + 1) <= MAXLINES); break; end factor /= 10 end printf("10 * 幹 + 葉 = %.1g * データ\n", factor) for k in 0...(10 * MAXLINES); histo[k] = 0; end for i in 0...n histo[(factor * x[i]) - (x[i] < 0 ? 1 : 0) - 10 * kmin] += 1 end if (kmin < 0 && kmax > 0) k = 0 for i in 0...n; if (x[i] == 0); k += 1; end; end histo[-10 * kmin ] -= k / 2 histo[-10 * kmin - 1] += k / 2 end for k in kmin..kmax if (k != -1); printf("%5d | ", k + (k < 0 ? 1 : 0)) else; printf(" -0 | ") end for j in 0..9 if (k >= 0); h = histo[10 * (k - kmin) + j] else; h = histo[10 * (k - kmin) + 9 - j] end for i in 0...h; printf("%d", j); end end printf("\n") end end NMAX = 5000 x = [] n = 0 while (! readerror(t = getnum($stdin))) if (missing(t)); next elsif (n >= NMAX); error("多すぎます") else; x[n] = t; n +=1; end end stem_and_leaf(n, x) exit 0