서수 스파크라인

주간 도전 179



Challenge , My solution

작업 1: 서수 철자법





양수$n가 주어집니다. 서수를 철자하는 스크립트를 작성하십시오.

내 솔루션



이것은 내가 생각했던 것보다 조금 더 복잡한 것으로 판명되었습니다. 특히 일부 극단적인 경우에 그렇습니다. 물론 이미 이 작업을 수행하는 Python 및 Perl 모듈이 있지만 이러한 문제를 완료하는 정신은 아닙니다.

네 개의 목록(Perl의 배열)을 정의하는 것으로 시작합니다. numbers에는 처음 19개 숫자에 대한 단어가 있으므로 1, 2, 3 등입니다. tens에는 20, 30 등에 대한 단어가 있습니다. ordinal 목록에는 다음과 같이 처음 19개 숫자에 대한 서수 단어가 있습니다. 첫번째 두번째 세번째. 마지막으로 thousands 목록에는 우리가 천, 백만, 십억에 사용하는 단어가 있습니다. 1012 이상을 처리하지 않습니다.

다음으로 숫자를 오른쪽에서 3개의 블록으로 나눕니다. 따라서 12345는 [345, 12]가 됩니다.

그런 다음 각 블록에 대한 단어를 인쇄할 시간입니다.
  • 숫자가 0이면(예: 1,000,234의 중간 블록) 아무 작업도 수행하지 않음
  • 숫자가 100으로 균등하게 나누어지면 해당 숫자에 해당하는 단어를 인쇄합니다.
  • 숫자가 100보다 크면 100이라는 단어와 '및'라는 단어를 인쇄합니다. 숫자를 100에서 나머지로 변경합니다.
  • 숫자가 19보다 큰 경우 10단어를 인쇄하고 숫자를 10에서 나머지로 변경합니다.
  • 1에서 19 사이의 숫자를 인쇄하십시오. 이것이 첫 번째 블록인 경우 ordinal 목록을 사용하고 그렇지 않으면 numbers 목록을 사용하십시오.
  • 마지막으로 이것이 첫 번째 블록이 아닌 경우 적절한 천 단어를 추가합니다.

  • 솔루션을 100으로 나눌 수 있는 극단적인 경우도 있습니다. 이 경우에는 ordinal 목록을 사용한 적이 없습니다. 이런 일이 발생하면 문자열 끝에 'th'라는 문자열을 추가합니다.

    이 블로그를 작성할 때 숫자가 10으로 나누어 떨어지는 경우(100과 10 제외) 서수 단어도 인쇄하지 않았다는 사실도 깨달았습니다. 이를 처리하기 위해 몇 가지 코드를 추가했습니다. 고맙게도 모든 tens 단어에 대해 올바른 단어를 얻기 위해 'y'를 'ieth'로 바꿀 수 있습니다.

    그런 다음 최종 문자열을 생성하기 위해 함께 비트 조각의 문제입니다.




    $ ./ch-1.py 11
    eleventh
    
    $ ./ch-1.py 62
    sixty second
    
    $ ./ch-1.py 99
    ninety ninth
    


    작업 2: 유니코드 스파크라인





    양수 목록(@n)이 제공됩니다.

    주어진 숫자 목록에 대해 유니코드로 스파크라인을 인쇄하는 스크립트를 작성하십시오.

    내 솔루션



    먼저 솔루션의 속성을 Rosetta Code 라이센스에 따라 CC BY-SA 4.0에 부여합니다.

    고맙게도 Python 3과 Perl은 유니코드를 기본적으로 지원하므로 이를 지원하기 위해 특별한 작업을 수행할 필요가 없습니다.

    코드는 다음 변수를 정의합니다.
  • bar 문자열▁▂▃▄▅▆▇█(필자는 Perl 솔루션에 목록을 사용함) 및 barcount 목록의 길이입니다.
  • mnmx 목록의 최소값과 최대값.
  • extent 두 값의 차이입니다.

  • 그런 다음 @n의 각 값을 검토하고 방정식 (n - mn) / extent * barcount을 사용하여 표시할 막대를 계산합니다.




    $ ./ch-2.py 1 2 3 4 5 6 7 8
    ▁▂▃▄▅▆▇█
    
    $ ./ch-2.py 1 8 2 7 3 6 10
    ▁▇▁▆▂▅█
    

    좋은 웹페이지 즐겨찾기