2012年2月21日火曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の13章(新しいクラスの作成と既存クラスの変更), 13.1(練習問題)組み込みクラスの拡張を解いてみる。

その他参考書籍

組み込みクラスの拡張

コード(TextWrangler)

#!/usr/bin/env ruby
#encoding: utf-8

class Array
  def shuffle
    some_array = self
    result = []
    while some_array.length > 0
      r = rand(some_array.length)
      i = 0
      tmp = []
      some_array.each do |item|
        if r == i
          result.push item
        else
          tmp.push item
        end
        i += 1
      end
      some_array = tmp
    end
    result
  end
end

class Integer
  def factorial
    num = self
    return 1 if num <= 1
    return num * (num - 1).factorial
  end
  
  def to_roman
    num = self
    roman = ''
    romans = [['M',1000],
              ['D',500],
              ['C',100],
              ['L',50],
              ['X',10],
              ['V',5],
              ['I',1]]
    roman = romans[0][0] * (num / romans[0][1])
    num = num % romans[0][1]
    nums = []
    c = romans[2][1]
    i = 0
    while c > 0
      nums[i] = num / c
      num = num % c
      c /= 10
      i += 1
    end
    i = 0
    nums.each do |item|
      if item == 9
        roman += romans[i+2][0] + romans[i][0]
      elsif item == 4
        roman += romans[i+2][0] + romans[i+1][0]
      else
        roman += romans[i+1][0] * (item / 5)
        roman += romans[i+2][0] * (item % 5)
      end
      i += 2
    end
    roman
  end
end

5.times do
  puts "#{[1,1,2,2,3,3,4,4,5,5].shuffle}"
end

puts 10.factorial

(1..1000).each do |num|
  puts "#{num}: #{num.to_roman}"
end

入出力結果(Terminal)

$ ./ruby_program.rb
4531245123
4223143515
5125442331
2234113554
5133524412
3628800
1: I
2: II
3: III
4: IV
5: V
6: VI
7: VII
8: VIII
9: IX
10: X
11: XI
12: XII
13: XIII
14: XIV
15: XV
16: XVI
17: XVII
18: XVIII
19: XIX
20: XX
21: XXI
22: XXII
23: XXIII
24: XXIV
25: XXV
26: XXVI
27: XXVII
28: XXVIII
29: XXIX
30: XXX
31: XXXI
32: XXXII
33: XXXIII
34: XXXIV
35: XXXV
36: XXXVI
37: XXXVII
38: XXXVIII
39: XXXIX
40: XL
41: XLI
42: XLII
43: XLIII
44: XLIV
45: XLV
46: XLVI
47: XLVII
48: XLVIII
49: XLIX
50: L
51: LI
52: LII
53: LIII
54: LIV
55: LV
56: LVI
57: LVII
58: LVIII
59: LIX
60: LX
61: LXI
62: LXII
63: LXIII
64: LXIV
65: LXV
66: LXVI
67: LXVII
68: LXVIII
69: LXIX
70: LXX
71: LXXI
72: LXXII
73: LXXIII
74: LXXIV
75: LXXV
76: LXXVI
77: LXXVII
78: LXXVIII
79: LXXIX
80: LXXX
81: LXXXI
82: LXXXII
83: LXXXIII
84: LXXXIV
85: LXXXV
86: LXXXVI
87: LXXXVII
88: LXXXVIII
89: LXXXIX
90: XC
91: XCI
92: XCII
93: XCIII
94: XCIV
95: XCV
96: XCVI
97: XCVII
98: XCVIII
99: XCIX
100: C
101: CI
102: CII
103: CIII
104: CIV
105: CV
106: CVI
107: CVII
108: CVIII
109: CIX
110: CX
111: CXI
112: CXII
113: CXIII
114: CXIV
115: CXV
116: CXVI
117: CXVII
118: CXVIII
119: CXIX
120: CXX
121: CXXI
122: CXXII
123: CXXIII
124: CXXIV
125: CXXV
126: CXXVI
127: CXXVII
128: CXXVIII
129: CXXIX
130: CXXX
131: CXXXI
132: CXXXII
133: CXXXIII
134: CXXXIV
135: CXXXV
136: CXXXVI
137: CXXXVII
138: CXXXVIII
139: CXXXIX
140: CXL
141: CXLI
142: CXLII
143: CXLIII
144: CXLIV
145: CXLV
146: CXLVI
147: CXLVII
148: CXLVIII
149: CXLIX
150: CL
151: CLI
152: CLII
153: CLIII
154: CLIV
155: CLV
156: CLVI
157: CLVII
158: CLVIII
159: CLIX
160: CLX
161: CLXI
162: CLXII
163: CLXIII
164: CLXIV
165: CLXV
166: CLXVI
167: CLXVII
168: CLXVIII
169: CLXIX
170: CLXX
171: CLXXI
172: CLXXII
173: CLXXIII
174: CLXXIV
175: CLXXV
176: CLXXVI
177: CLXXVII
178: CLXXVIII
179: CLXXIX
180: CLXXX
181: CLXXXI
182: CLXXXII
183: CLXXXIII
184: CLXXXIV
185: CLXXXV
186: CLXXXVI
187: CLXXXVII
188: CLXXXVIII
189: CLXXXIX
190: CXC
191: CXCI
192: CXCII
193: CXCIII
194: CXCIV
195: CXCV
196: CXCVI
197: CXCVII
198: CXCVIII
199: CXCIX
200: CC
201: CCI
202: CCII
203: CCIII
204: CCIV
205: CCV
206: CCVI
207: CCVII
208: CCVIII
209: CCIX
210: CCX
211: CCXI
212: CCXII
213: CCXIII
214: CCXIV
215: CCXV
216: CCXVI
217: CCXVII
218: CCXVIII
219: CCXIX
220: CCXX
221: CCXXI
222: CCXXII
223: CCXXIII
224: CCXXIV
225: CCXXV
226: CCXXVI
227: CCXXVII
228: CCXXVIII
229: CCXXIX
230: CCXXX
231: CCXXXI
232: CCXXXII
233: CCXXXIII
234: CCXXXIV
235: CCXXXV
236: CCXXXVI
237: CCXXXVII
238: CCXXXVIII
239: CCXXXIX
240: CCXL
241: CCXLI
242: CCXLII
243: CCXLIII
244: CCXLIV
245: CCXLV
246: CCXLVI
247: CCXLVII
248: CCXLVIII
249: CCXLIX
250: CCL
251: CCLI
252: CCLII
253: CCLIII
254: CCLIV
255: CCLV
256: CCLVI
257: CCLVII
258: CCLVIII
259: CCLIX
260: CCLX
261: CCLXI
262: CCLXII
263: CCLXIII
264: CCLXIV
265: CCLXV
266: CCLXVI
267: CCLXVII
268: CCLXVIII
269: CCLXIX
270: CCLXX
271: CCLXXI
272: CCLXXII
273: CCLXXIII
274: CCLXXIV
275: CCLXXV
276: CCLXXVI
277: CCLXXVII
278: CCLXXVIII
279: CCLXXIX
280: CCLXXX
281: CCLXXXI
282: CCLXXXII
283: CCLXXXIII
284: CCLXXXIV
285: CCLXXXV
286: CCLXXXVI
287: CCLXXXVII
288: CCLXXXVIII
289: CCLXXXIX
290: CCXC
291: CCXCI
292: CCXCII
293: CCXCIII
294: CCXCIV
295: CCXCV
296: CCXCVI
297: CCXCVII
298: CCXCVIII
299: CCXCIX
300: CCC
301: CCCI
302: CCCII
303: CCCIII
304: CCCIV
305: CCCV
306: CCCVI
307: CCCVII
308: CCCVIII
309: CCCIX
310: CCCX
311: CCCXI
312: CCCXII
313: CCCXIII
314: CCCXIV
315: CCCXV
316: CCCXVI
317: CCCXVII
318: CCCXVIII
319: CCCXIX
320: CCCXX
321: CCCXXI
322: CCCXXII
323: CCCXXIII
324: CCCXXIV
325: CCCXXV
326: CCCXXVI
327: CCCXXVII
328: CCCXXVIII
329: CCCXXIX
330: CCCXXX
331: CCCXXXI
332: CCCXXXII
333: CCCXXXIII
334: CCCXXXIV
335: CCCXXXV
336: CCCXXXVI
337: CCCXXXVII
338: CCCXXXVIII
339: CCCXXXIX
340: CCCXL
341: CCCXLI
342: CCCXLII
343: CCCXLIII
344: CCCXLIV
345: CCCXLV
346: CCCXLVI
347: CCCXLVII
348: CCCXLVIII
349: CCCXLIX
350: CCCL
351: CCCLI
352: CCCLII
353: CCCLIII
354: CCCLIV
355: CCCLV
356: CCCLVI
357: CCCLVII
358: CCCLVIII
359: CCCLIX
360: CCCLX
361: CCCLXI
362: CCCLXII
363: CCCLXIII
364: CCCLXIV
365: CCCLXV
366: CCCLXVI
367: CCCLXVII
368: CCCLXVIII
369: CCCLXIX
370: CCCLXX
371: CCCLXXI
372: CCCLXXII
373: CCCLXXIII
374: CCCLXXIV
375: CCCLXXV
376: CCCLXXVI
377: CCCLXXVII
378: CCCLXXVIII
379: CCCLXXIX
380: CCCLXXX
381: CCCLXXXI
382: CCCLXXXII
383: CCCLXXXIII
384: CCCLXXXIV
385: CCCLXXXV
386: CCCLXXXVI
387: CCCLXXXVII
388: CCCLXXXVIII
389: CCCLXXXIX
390: CCCXC
391: CCCXCI
392: CCCXCII
393: CCCXCIII
394: CCCXCIV
395: CCCXCV
396: CCCXCVI
397: CCCXCVII
398: CCCXCVIII
399: CCCXCIX
400: CD
401: CDI
402: CDII
403: CDIII
404: CDIV
405: CDV
406: CDVI
407: CDVII
408: CDVIII
409: CDIX
410: CDX
411: CDXI
412: CDXII
413: CDXIII
414: CDXIV
415: CDXV
416: CDXVI
417: CDXVII
418: CDXVIII
419: CDXIX
420: CDXX
421: CDXXI
422: CDXXII
423: CDXXIII
424: CDXXIV
425: CDXXV
426: CDXXVI
427: CDXXVII
428: CDXXVIII
429: CDXXIX
430: CDXXX
431: CDXXXI
432: CDXXXII
433: CDXXXIII
434: CDXXXIV
435: CDXXXV
436: CDXXXVI
437: CDXXXVII
438: CDXXXVIII
439: CDXXXIX
440: CDXL
441: CDXLI
442: CDXLII
443: CDXLIII
444: CDXLIV
445: CDXLV
446: CDXLVI
447: CDXLVII
448: CDXLVIII
449: CDXLIX
450: CDL
451: CDLI
452: CDLII
453: CDLIII
454: CDLIV
455: CDLV
456: CDLVI
457: CDLVII
458: CDLVIII
459: CDLIX
460: CDLX
461: CDLXI
462: CDLXII
463: CDLXIII
464: CDLXIV
465: CDLXV
466: CDLXVI
467: CDLXVII
468: CDLXVIII
469: CDLXIX
470: CDLXX
471: CDLXXI
472: CDLXXII
473: CDLXXIII
474: CDLXXIV
475: CDLXXV
476: CDLXXVI
477: CDLXXVII
478: CDLXXVIII
479: CDLXXIX
480: CDLXXX
481: CDLXXXI
482: CDLXXXII
483: CDLXXXIII
484: CDLXXXIV
485: CDLXXXV
486: CDLXXXVI
487: CDLXXXVII
488: CDLXXXVIII
489: CDLXXXIX
490: CDXC
491: CDXCI
492: CDXCII
493: CDXCIII
494: CDXCIV
495: CDXCV
496: CDXCVI
497: CDXCVII
498: CDXCVIII
499: CDXCIX
500: D
501: DI
502: DII
503: DIII
504: DIV
505: DV
506: DVI
507: DVII
508: DVIII
509: DIX
510: DX
511: DXI
512: DXII
513: DXIII
514: DXIV
515: DXV
516: DXVI
517: DXVII
518: DXVIII
519: DXIX
520: DXX
521: DXXI
522: DXXII
523: DXXIII
524: DXXIV
525: DXXV
526: DXXVI
527: DXXVII
528: DXXVIII
529: DXXIX
530: DXXX
531: DXXXI
532: DXXXII
533: DXXXIII
534: DXXXIV
535: DXXXV
536: DXXXVI
537: DXXXVII
538: DXXXVIII
539: DXXXIX
540: DXL
541: DXLI
542: DXLII
543: DXLIII
544: DXLIV
545: DXLV
546: DXLVI
547: DXLVII
548: DXLVIII
549: DXLIX
550: DL
551: DLI
552: DLII
553: DLIII
554: DLIV
555: DLV
556: DLVI
557: DLVII
558: DLVIII
559: DLIX
560: DLX
561: DLXI
562: DLXII
563: DLXIII
564: DLXIV
565: DLXV
566: DLXVI
567: DLXVII
568: DLXVIII
569: DLXIX
570: DLXX
571: DLXXI
572: DLXXII
573: DLXXIII
574: DLXXIV
575: DLXXV
576: DLXXVI
577: DLXXVII
578: DLXXVIII
579: DLXXIX
580: DLXXX
581: DLXXXI
582: DLXXXII
583: DLXXXIII
584: DLXXXIV
585: DLXXXV
586: DLXXXVI
587: DLXXXVII
588: DLXXXVIII
589: DLXXXIX
590: DXC
591: DXCI
592: DXCII
593: DXCIII
594: DXCIV
595: DXCV
596: DXCVI
597: DXCVII
598: DXCVIII
599: DXCIX
600: DC
601: DCI
602: DCII
603: DCIII
604: DCIV
605: DCV
606: DCVI
607: DCVII
608: DCVIII
609: DCIX
610: DCX
611: DCXI
612: DCXII
613: DCXIII
614: DCXIV
615: DCXV
616: DCXVI
617: DCXVII
618: DCXVIII
619: DCXIX
620: DCXX
621: DCXXI
622: DCXXII
623: DCXXIII
624: DCXXIV
625: DCXXV
626: DCXXVI
627: DCXXVII
628: DCXXVIII
629: DCXXIX
630: DCXXX
631: DCXXXI
632: DCXXXII
633: DCXXXIII
634: DCXXXIV
635: DCXXXV
636: DCXXXVI
637: DCXXXVII
638: DCXXXVIII
639: DCXXXIX
640: DCXL
641: DCXLI
642: DCXLII
643: DCXLIII
644: DCXLIV
645: DCXLV
646: DCXLVI
647: DCXLVII
648: DCXLVIII
649: DCXLIX
650: DCL
651: DCLI
652: DCLII
653: DCLIII
654: DCLIV
655: DCLV
656: DCLVI
657: DCLVII
658: DCLVIII
659: DCLIX
660: DCLX
661: DCLXI
662: DCLXII
663: DCLXIII
664: DCLXIV
665: DCLXV
666: DCLXVI
667: DCLXVII
668: DCLXVIII
669: DCLXIX
670: DCLXX
671: DCLXXI
672: DCLXXII
673: DCLXXIII
674: DCLXXIV
675: DCLXXV
676: DCLXXVI
677: DCLXXVII
678: DCLXXVIII
679: DCLXXIX
680: DCLXXX
681: DCLXXXI
682: DCLXXXII
683: DCLXXXIII
684: DCLXXXIV
685: DCLXXXV
686: DCLXXXVI
687: DCLXXXVII
688: DCLXXXVIII
689: DCLXXXIX
690: DCXC
691: DCXCI
692: DCXCII
693: DCXCIII
694: DCXCIV
695: DCXCV
696: DCXCVI
697: DCXCVII
698: DCXCVIII
699: DCXCIX
700: DCC
701: DCCI
702: DCCII
703: DCCIII
704: DCCIV
705: DCCV
706: DCCVI
707: DCCVII
708: DCCVIII
709: DCCIX
710: DCCX
711: DCCXI
712: DCCXII
713: DCCXIII
714: DCCXIV
715: DCCXV
716: DCCXVI
717: DCCXVII
718: DCCXVIII
719: DCCXIX
720: DCCXX
721: DCCXXI
722: DCCXXII
723: DCCXXIII
724: DCCXXIV
725: DCCXXV
726: DCCXXVI
727: DCCXXVII
728: DCCXXVIII
729: DCCXXIX
730: DCCXXX
731: DCCXXXI
732: DCCXXXII
733: DCCXXXIII
734: DCCXXXIV
735: DCCXXXV
736: DCCXXXVI
737: DCCXXXVII
738: DCCXXXVIII
739: DCCXXXIX
740: DCCXL
741: DCCXLI
742: DCCXLII
743: DCCXLIII
744: DCCXLIV
745: DCCXLV
746: DCCXLVI
747: DCCXLVII
748: DCCXLVIII
749: DCCXLIX
750: DCCL
751: DCCLI
752: DCCLII
753: DCCLIII
754: DCCLIV
755: DCCLV
756: DCCLVI
757: DCCLVII
758: DCCLVIII
759: DCCLIX
760: DCCLX
761: DCCLXI
762: DCCLXII
763: DCCLXIII
764: DCCLXIV
765: DCCLXV
766: DCCLXVI
767: DCCLXVII
768: DCCLXVIII
769: DCCLXIX
770: DCCLXX
771: DCCLXXI
772: DCCLXXII
773: DCCLXXIII
774: DCCLXXIV
775: DCCLXXV
776: DCCLXXVI
777: DCCLXXVII
778: DCCLXXVIII
779: DCCLXXIX
780: DCCLXXX
781: DCCLXXXI
782: DCCLXXXII
783: DCCLXXXIII
784: DCCLXXXIV
785: DCCLXXXV
786: DCCLXXXVI
787: DCCLXXXVII
788: DCCLXXXVIII
789: DCCLXXXIX
790: DCCXC
791: DCCXCI
792: DCCXCII
793: DCCXCIII
794: DCCXCIV
795: DCCXCV
796: DCCXCVI
797: DCCXCVII
798: DCCXCVIII
799: DCCXCIX
800: DCCC
801: DCCCI
802: DCCCII
803: DCCCIII
804: DCCCIV
805: DCCCV
806: DCCCVI
807: DCCCVII
808: DCCCVIII
809: DCCCIX
810: DCCCX
811: DCCCXI
812: DCCCXII
813: DCCCXIII
814: DCCCXIV
815: DCCCXV
816: DCCCXVI
817: DCCCXVII
818: DCCCXVIII
819: DCCCXIX
820: DCCCXX
821: DCCCXXI
822: DCCCXXII
823: DCCCXXIII
824: DCCCXXIV
825: DCCCXXV
826: DCCCXXVI
827: DCCCXXVII
828: DCCCXXVIII
829: DCCCXXIX
830: DCCCXXX
831: DCCCXXXI
832: DCCCXXXII
833: DCCCXXXIII
834: DCCCXXXIV
835: DCCCXXXV
836: DCCCXXXVI
837: DCCCXXXVII
838: DCCCXXXVIII
839: DCCCXXXIX
840: DCCCXL
841: DCCCXLI
842: DCCCXLII
843: DCCCXLIII
844: DCCCXLIV
845: DCCCXLV
846: DCCCXLVI
847: DCCCXLVII
848: DCCCXLVIII
849: DCCCXLIX
850: DCCCL
851: DCCCLI
852: DCCCLII
853: DCCCLIII
854: DCCCLIV
855: DCCCLV
856: DCCCLVI
857: DCCCLVII
858: DCCCLVIII
859: DCCCLIX
860: DCCCLX
861: DCCCLXI
862: DCCCLXII
863: DCCCLXIII
864: DCCCLXIV
865: DCCCLXV
866: DCCCLXVI
867: DCCCLXVII
868: DCCCLXVIII
869: DCCCLXIX
870: DCCCLXX
871: DCCCLXXI
872: DCCCLXXII
873: DCCCLXXIII
874: DCCCLXXIV
875: DCCCLXXV
876: DCCCLXXVI
877: DCCCLXXVII
878: DCCCLXXVIII
879: DCCCLXXIX
880: DCCCLXXX
881: DCCCLXXXI
882: DCCCLXXXII
883: DCCCLXXXIII
884: DCCCLXXXIV
885: DCCCLXXXV
886: DCCCLXXXVI
887: DCCCLXXXVII
888: DCCCLXXXVIII
889: DCCCLXXXIX
890: DCCCXC
891: DCCCXCI
892: DCCCXCII
893: DCCCXCIII
894: DCCCXCIV
895: DCCCXCV
896: DCCCXCVI
897: DCCCXCVII
898: DCCCXCVIII
899: DCCCXCIX
900: CM
901: CMI
902: CMII
903: CMIII
904: CMIV
905: CMV
906: CMVI
907: CMVII
908: CMVIII
909: CMIX
910: CMX
911: CMXI
912: CMXII
913: CMXIII
914: CMXIV
915: CMXV
916: CMXVI
917: CMXVII
918: CMXVIII
919: CMXIX
920: CMXX
921: CMXXI
922: CMXXII
923: CMXXIII
924: CMXXIV
925: CMXXV
926: CMXXVI
927: CMXXVII
928: CMXXVIII
929: CMXXIX
930: CMXXX
931: CMXXXI
932: CMXXXII
933: CMXXXIII
934: CMXXXIV
935: CMXXXV
936: CMXXXVI
937: CMXXXVII
938: CMXXXVIII
939: CMXXXIX
940: CMXL
941: CMXLI
942: CMXLII
943: CMXLIII
944: CMXLIV
945: CMXLV
946: CMXLVI
947: CMXLVII
948: CMXLVIII
949: CMXLIX
950: CML
951: CMLI
952: CMLII
953: CMLIII
954: CMLIV
955: CMLV
956: CMLVI
957: CMLVII
958: CMLVIII
959: CMLIX
960: CMLX
961: CMLXI
962: CMLXII
963: CMLXIII
964: CMLXIV
965: CMLXV
966: CMLXVI
967: CMLXVII
968: CMLXVIII
969: CMLXIX
970: CMLXX
971: CMLXXI
972: CMLXXII
973: CMLXXIII
974: CMLXXIV
975: CMLXXV
976: CMLXXVI
977: CMLXXVII
978: CMLXXVIII
979: CMLXXIX
980: CMLXXX
981: CMLXXXI
982: CMLXXXII
983: CMLXXXIII
984: CMLXXXIV
985: CMLXXXV
986: CMLXXXVI
987: CMLXXXVII
988: CMLXXXVIII
989: CMLXXXIX
990: CMXC
991: CMXCI
992: CMXCII
993: CMXCIII
994: CMXCIV
995: CMXCV
996: CMXCVI
997: CMXCVII
998: CMXCVIII
999: CMXCIX
1000: M
$

本書を続けつつ、上記の本を入手したらそっちに切り替え。

0 コメント:

コメントを投稿