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