무게의 더미


13

도전:

입력으로 가중치 더미의 ASCII 이미지가 제공되며 더미의 결합 된 무게를 출력해야합니다.

여기에 이미지 설명을 입력하십시오

체재:

1, 2, 5, 10, 20 Passerees (또는 다른 임의의 단위)의 5 가지 무게가 있습니다 .

가중치는 오름차순으로 다음과 같습니다.

1:   __
    |__|

2:   ______
    |______|

5:   ______
    |      |
    |______|

10:  ______________
    |              |
    |______________|

20:  ____________________
    |                    |
    |____________________|

계량은 반드시 정렬 된 순서가 아닌 대칭 적으로 배치됩니다 (예제 이미지에서와 같이). 해당되는 경우 계량은 경계를 공유합니다.

테스트 사례 :

모든 단일 가중치를 테스트 케이스로 사용할 수도 있습니다.

   __
 _|__|_
|______|
|      |
|______|
1 + 2 + 5 = 8

 ____________________
|                    |
|____________________|
   |              |
   |______________|
        _|__|_
       |______|
       |      |
       |______|          
20 + 10 + 1 + 2 + 5 = 38 

 ______
|______|
|______|
|______|
|______|
2 + 2 + 2 + 2 = 8

추가 규칙 :

  • 추가 선행 공백을 가정 할 수 없습니다 . 가장 큰 무게는 왼쪽 끝까지입니다.
  • 후행 공백과 줄 바꾸기를 가정 할 수 있습니다.
  • 최대 10 개의 가중치가 있다고 가정 할 수 있습니다.
  • 선택적 형식으로 입력 할 수 있지만 다른 문자로 사용 된 문자를 대체 할 수는 없습니다.

이것은 이므로 각 언어가 가장 짧은 바이트 단위의 코드입니다. 언제나처럼 설명이 권장됩니다.


당신의 도전은 저에게 이것을 쓰는 영감을주었습니다 . 모든 팁을 부탁드립니다!
tgrass12

답변:


7

젤리 ,  24  23 바이트

ḟ⁶Ỵẹ€”|IFṚ’œṗ$Ḅ:3“ÇÞ‘yS

온라인으로 사용해보십시오!

어떻게?

가중치는 너비와 높이로 식별 할 수 있습니다. 너비는 줄 |문자 사이의 거리를보고 측정 할 수 있습니다 . 먼저 모든 공간을 제거하면 높이 2의 가중치가 너비가 1 인 측정 선에 영향을줍니다.

다른 가중치의 너비는 각각 3, 7, 7, 15, 21가중치 1, 2, 5, 10, 20입니다. 1우리 [3],[7],[7,1],[15,1],[21,1]가 2 진에서 변환하는 것을 발견하는 2의 높이에 대한 후행 을 추가하면 3,7,15,31,43정수를 3으로 나누면 우리 가 대체 할 필요를 1,2,5,10,14제외하고 가중치 14가됩니다 20.

ḟ⁶Ỵẹ€”|IFṚ’œṗ$Ḅ:3“ÇÞ‘yS - Link: list of characters    e.g. <example 2>
 ⁶                      - literal space character
ḟ                       - filter discard
  Ỵ                     - split at new lines
     ”|                 - literal pipe character
   ẹ€                   - get indices for €ach             [[],[1,2],[1,22],[1,2],[1,16],[2,5],[1,8],[1,2],[1,8]]
       I                - incremental differences          [[],[1],[21],[1],[15],[3],[7],[1],[7]]
        F               - flatten                          [1,21,1,15,3,7,1,7]
         Ṛ              - reverse                          [7,1,7,3,15,1,21,1]
             $          - last two links as a monad:
          ’             -   decrement                     [6,0,6,2,14,0,20,0]
           œṗ           -   partition at truthy indices   [[],[7,1],[7],[3],[15,1],[21,1]]
              Ḅ         - convert from binary             [0,15,7,3,31,43]
               :3       - integer divide by three         [0,5,2,1,10,14]
                 “ÇÞ‘   - code-page-indices               [14,20]
                     y  - translate                       [0,5,2,1,10,20]
                      S - sum                             38

또는 다음을 사용하여 변환하기 전에 측정 된 너비를 21로 바꿉니다 .30“ßœ‘y

ḟ⁶Ỵẹ€”|IF“ßœ‘yṚ’œṗ$Ḅ:3S

4

파이썬 2 , 77 바이트

lambda x:sum(i/21*x.count('|'+i%21*' _'[i<50]+'|')for i in[23,48,69,224,440])

온라인으로 사용해보십시오!

[i/21, i%21, ' _'[i<50] for i in [23,48,69,224,440]][1, 2, '_'], [2, 6, '_'], [3, 6, ' '], [10, 14, ' '], [20, 20, ' ']각 가중치의 고유 한 한 줄 표현을 만드는 데 사용되는 가중치, 길이 및 각 가중치의 기준 문자를 나타내는 다음과 같은 삼중 항 을 생성합니다 .
세 번째 가중치가 두 번째 가중치와 겹치므로 기본을 본문으로 바꾸고 ( _-> ) 값을 3(기본을 2본문으로 계산하고 3결과를 5)


4

레티 나 0.8.2 , 60 바이트

T`|`!
!__!
1
!_{6}!
11
! {6}!
3$*
!.{14}!
5$*
!.{20}!
10$*
1

온라인으로 사용해보십시오! 설명 : 일치하기 쉽도록 |s가 s로 교체 된 !후 가중치는 단항으로 변환되고 합계됩니다. 유일한 흥미 부는이다 5중량은 합계로 간주 2하고, 3그동안, 가중치 1020가중치가 반 중량의 두 라인이다.



2

파이썬 3 , 76 바이트

lambda t:sum([1,2,3,5,5,9,11][len(x)//4+(x<'_')]for x in t.split('|')[1::2])

온라인으로 사용해보십시오!

어떻게?

sum([1,2,3,5,5,9,11][len(x)//4+(x<'_')]for x in t.split('|')[1::2])
                                                t.split('|')         - split ascii art into pieces
                                                            [1::2])  - weights are at odd indexes
                                       for x in                      - iterates over the weights
                     len(x)//4                                       - map widths to 0,1,3,5,7
                              +(x<'_')                               - add 1 if the first row of 2-row weight
    [1,2,3,5,5,9,11][                 ]                              - value of each part of a weight
sum(                                                              )  - add 'em all up

1

나는 약간의 개선이있을 것이라고 확신하지만, 이것은 내가 지금 가지고있는 것입니다 :

그루비, 131 바이트

def f(s){s.split('\n').sum{n=0;[2:1,6:2,14:5,20:10].each{k,v->if(it==~".*\\|[ _]{$k}\\|.*"){n=v+(!it.contains('_')&&k==6?1:0)}};n}}

입력 String을 a로 변환 한 Collection<String>다음 각 줄의 결과를 합하여 합계를 얻습니다. 사용 Map키 파이프 문자 사이에 공백 또는 밑줄의 수이고는 그 값이 대응 Passerees 량이다. 키가 정규식에 연결되어 선이 중요한 패턴과 일치하는지 확인합니다. 파이프 사이의 서브 스트링 길이가 6이고 공백으로 구성되는 경우 (밑줄과 반대되는 경우) 한 가지주의 사항은 1을 더하는 3 항입니다. 일치하는 패턴이 없으면 라인의 값은 0입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.