성냥개비 계산


20

여기서 대부분의 사람들은 성냥개비 퍼즐에도 사용되는 7 개의 세그먼트 디스플레이에 익숙합니다. 아래는 자리입니다 0통해 9와 문자 a를 통해 z제외시켰다 k,m,t,v,w형식으로 기록 된이.

 _        _   _         _    _    _    _    _
| |   |   _|  _|  |_|  |_   |_     |  |_|  |_|
|_|   |  |_   _|    |   _|  |_|    |  |_|   _|

 _       _      _  _  _                        _   _      _               _
|_| |_  |   _| |_ |_ |   |_  |   | |   _   _  |_| |_|  _ |_      |_| |_|  _|
| | |_| |_ |_| |_ |  |_| | | | |_| |_ | | |_| |     | |   _| |_| | |   | |_

여기서의 도전은 간단합니다. 입력 문자열이 주어지면 해당 문자열을 나타내는 데 필요한 성냥 개수를 출력하십시오. 문자열에 위의 표현 이외의 문자가 포함되어 있으면 무시하십시오 (0으로 계산).

예를 들어, 입력 53의 총 10성냥개비가 필요 5위해 55위해 3때문에 출력된다 10.

입력 하려면 hello19성냥개비가 필요 h (4), e (5), l (3), l (3), o (4)하므로 출력은 19입니다.

명확성을 위해 각 캐릭터를 만드는 데 필요한 성냥개비는 다음과 같습니다.

0 -> 6
1 -> 2
2 -> 5
3 -> 5
4 -> 4
5 -> 5
6 -> 6
7 -> 3
8 -> 7
9 -> 6
a -> 6
b -> 5
c -> 4
d -> 5
e -> 5
f -> 4
g -> 5
h -> 4
i -> 2
j -> 4
l -> 3
n -> 3
o -> 4
p -> 5
q -> 5
r -> 2
s -> 5
u -> 3
x -> 5
y -> 4
z -> 5

이제 비틀기를 위해 두 가지가 있습니다.

  • 첫 번째는 입력이 대소 문자 구분하는 것으로 간주된다는 것 입니다. 즉, Aa해야 모두 카운트 6성냥개비조차 대문자와 같은 시각적 표현 보이지만 A.
  • 점수는 소스 코드 가이 알고리즘을 통해 실행되며 소스 코드의 길이는 바이트 단위이며 낮을수록 좋습니다. 예를 들어 소스 코드가 인 경우 abc123점수는입니다 6+5+4+2+5+5 = 27 + 6 = 33. 소스 코드가 #&@()*이면 점수가됩니다 0 + 6 = 6.

입력 / 출력 예

0    -> 6
53   -> 10
111  -> 6
112  -> 9
8888 -> 28
hello -> 19
PPCG  -> 19
Programming Puzzles & Code Golf -> 99
#&()mt!!~ -> 0
*DḌƤÆE%Ḅċ0 -> 16

규칙

  • 해당되는 경우 입력 / 출력이 해당 언어의 기본 정수 유형에 적합하다고 가정 할 수 있습니다.
  • 입력 및 출력은 편리한 방법 으로 제공 할 수 있습니다 .
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 표준 허점 은 금지되어 있습니다.

2
T는 일반적으로 |_\n|_(소문자 t)
12Me21

@ 12Me21 나는 그런 식으로 생각했지만 편지에 충분히 가깝게 느껴지지 않았다.
AdmBorkBork

문자 X (H)는 어떻습니까? (음, 지금 답이 있다는 것은 중요하지 않습니다.)
12Me21

외부 캐릭터의 경우 [0-9a-z]성냥개비를 0으로 계산해야합니까? 그것이 내가 당신의 점수 에서 이해하는 것은 소스 코드 의 길이와 바이트 단위 의이 알고리즘을 통한 소스 코드입니다 .
Outgolfer Erik

@EriktheOutgolfer 예, 맞습니다.
AdmBorkBork

답변:


8

파이썬 2 , 97 바이트 + 237 일치 = 334

lambda w:sum(map(('1ir'*2+'7lnu'*3+'4cfhjoy'*4+'235bdegpqsxz'*5+'069a'*6+'8'*7).count,w.lower()))

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

이것은 각 빌드 가능한 캐릭터가 해당 캐릭터를 만드는 데 필요한 동일한 양의 성냥개비가 나타나는 문자열을 생성하여 작동합니다


+'069a8'*6+'8')대신 하나의 문자를 저장할 수 있습니다 +'069a'*6+'8'*7).
xbarbie

@xbarbie는 실제로, 그러나 그것은 경기 수를 증가시켜 +3 점을 초래합니다
Rod

6

펄 5-pF95 바이트 + 14 109

eval~"Û£Ô„…ÊÏÉÎÍÍÊÌÊËËÊÊÉÉÈÌÇÈÆÉžÉʜ˛ʚʙ˘ʗ˖͕˓̑ÌËÊŽÊ͌ʊ̇ʆËÂÐÑИ‚ÒÁ„Ô“œ‚™¿¹"}{

이것은 다음과 같습니다.

$\+={z506122535445566738796a6b5c4d5e5f4g5h4i2j4l3n3o4p5q5r2s5u3x5y4=~/./g}->{+lc}for@F

그러나 ~연산자를 사용하면 높은 바이트 문자를 사용할 수 있으며 실제로 바이트를 희생하지 않고도 많은 문자를 피할 수 있습니다.

여전히 도움을 받아도 톤의 점수에서 벗어난 방법입니다!

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

이 솔루션에는 인쇄 할 수없는 것이 포함되어 있으므로 바이트 수를 확인할 수있는 가역 16 진 덤프가 있습니다.

00000000: 6576 616c 7e22 dba3 d4c2 8485 cacf c9ce  eval~"..........
00000010: cdcd cacc cacb cbca cac9 c9c8 ccc7 c8c6  ................
00000020: c99e c99d ca9c cb9b ca9a ca99 cb98 ca97  ................
00000030: cb96 cd95 cb93 cc91 cc90 cb8f ca8e ca8d  ................
00000040: cd8c ca8a cc87 ca86 cbc2 81d0 d1d0 9882  ................
00000050: d2c1 84d4 939c 8299 908d bfb9 227d 7b    ............"}{

}{? -n옵션 과 옵션을 삭제하십시오 . 또한 :-) +lc대신에 잊어 버리 세요lc()
Ton Hospel

@TonHospel Goddammit! 심지어 두 게시물을 모두 살펴 보았는데 어떤 게시물을 보았는지 기억이 나지 +않았으며 즉시 떠오르지 않습니다! 나는 n내 기계에 필요 하고 그것을 떨어 뜨릴 수 있다는 것을 잊었다!
Dom Hastings

죄송합니다. 나는 "드롭 }{-p"을 의미했다 (그리고 -n당신의 펄이 여전히 그것을 필요 로 한다면 그것을 대체 하라. 요즘은 계산되지 않는다)
Ton Hospel

@TonHospel 나는 내 코드를 최신의 oops로 업데이트하지 않았다 ...
Dom Hastings

6

자바 스크립트 (ES6), 198 (102 바이트 + 96 개 성냥개비)

@ l4m2 덕분에 5 포인트 절약

v=>[...v].map(w=>t+=('{w__^_{]|{{_^__^_^w^~]~]^__w_~]~~_^_'[parseInt(w,36)]+v).charCodeAt()%9,t=+[])|t

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

방법?

우리는 성냥개비를 인코딩하기 위해 페널티를 추가하지 않는 ASCII 코드 모듈로 9 문자를 사용합니다.

 char. | code | modulo 9
-------+------+-----------------
   ~   |  126 |   0
   v   |  118 |   1  (not used)
   w   |  119 |   2
   ]   |   93 |   3
   ^   |   94 |   4
   _   |   95 |   5
   {   |  123 |   6
   |   |  124 |   7

parseInt()대소 문자를 구분하지 않으므로 대소 문자 를 걱정할 필요가 없습니다 .

일치하지 않는 문자 [0-9A-ZA-Z] , parseInt()수익률 NaN과의 문자열 조회 결과 undefined. 문자열로 강제 일단 "undefined".charCodeAt()의 ASCII 코드를 반환 "u"하고, 117 . 편리하게도, 117 모듈로 9 는 예상대로 0 을 제공합니다 .


v=>[...v].map(w=>t+='~{w__^_{]|{{_^__^_^w^~]~]^__w_~]~~_^_'.charCodeAt(1+parseInt(w,36))%9,t=+[])|t1 미만
l4m2

5

젤리 , 42 바이트 + 0 성냥개비 = 42 포인트

“ṄḟṭkɗØæ⁶ṡ“£ƈṠ¤żȥṬ}ė$t¿ƬⱮȷ|çƓ’×/ṚṚæ.ċЀØW$

-2 점을 얻은 @JonathanAllan에게 감사합니다!

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

작동 원리

“ṄḟṭkɗØæ⁶ṡ“£ƈṠ¤żȥṬ}ė$t¿ƬⱮȷ|çƓ’

split on로 시작 하고 끝나는 리터럴 은 Jelly의 코드 페이지에서 나머지 문자를 1 기반 인덱스로 바꾼 다음 bijective base 250에서 integer로 변환합니다.

이 특정 리터럴은

[3096734725226860846495, 211369264881118657055472842435156679693648].

×/ 곱셈으로 줄임

654554542403034552503005456545545424030345525030054562554563760

이 정수를 직접 인코딩하면 6 바이트가 절약되지만 28 개의 성냥개비가 소요됩니다.

ṚṚ두 번 뒤집습니다. 첫 번째 호출은 정수를 숫자 배열로 승격시킵니다. 이 결과

[6, 5, 4, 5, 5, 4, 5, 4, 2, 4, 0, 3, 0, 3, 4, 5, 5, 2, 5, 0, 3, 0, 0, 5, 4, 5, 6, 5, 4, 5, 5, 4, 5, 4, 2, 4, 0, 3, 0, 3, 4, 5, 5, 2, 5, 0, 3, 0, 0, 5, 4, 5, 6, 2, 5, 5, 4, 5, 6, 3, 7, 6, 0]

ċЀØW$카운트 ( ċ) 각 (의 발생 Ѐ의) 문자 "A ... ZA ... Z0 ... 9_" ( ØW입력 문자열에서).

마지막으로 æ.내적을 취하여 각 문자 수에 성냥개비에 해당하는 비용을 곱한 다음 합계를 취합니다.


큰 수의 인수 분해를 사용하여 다른 바이트 D를 저장하는 대신 한 바이트 및 기본 압축 해제 및 모듈로 를 저장하십시오. 온라인으로 시도
Jonathan Allan

byte ... err point :)
Jonathan Allan

1
와 하나 더 Ɗ. 감사!
Dennis

3

Perl 5 -p , 90 64 코드 + 9 평가 하네스 + 14 성냥개비 = 87

청구 된 점수에 대해 16 진 코드를 리터럴 1 바이트 변형 ( TIO가 시도하는 UTF-8 아님)으로 바꿉니다.

eval~"\xdb\xa3\xd4\xc2\x86\xd0\xcf\xd2\xc6\x9e\xd2\x85\xd0\xc9\xcd\xca\xca\xcb\xca\xc9\xcc\xc8\xc9\xc9\xca\xcb\xca\xca\xcb\xca\xcb\xcd\xcb\xcf\xcc\xcf\xcc\xcb\xca\xca\xcd\xca\xcf\xcc\xcf\xcf\xca\xcb\xca\xd0\x8d\x99\x90\x8d\xdf\x93\x9c\xc2\x81\xd0\xd1\xc0\xd0\x98"}{

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

보완 문자열 내부의 코드 :

$\+=y/0-9a-z/625545637665455454240303455250300545/rfor lc=~/.?/g

3

젤리 , 34 바이트 + 3 일치 = 37

⁽[ɱד®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’‘ḤṚæ.ŒlċЀØWṚƊ

문자 목록을 승인하고 정수를 리턴하는 모나드 링크.

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

방법?

Dennis의 Jelly 답변 과 비슷한 방식으로 작동 하지만 다른 답변이 필요하다고 생각할만큼 충분한 노력을 기울였습니다. 핵심 차이점은 세 개의 일치 비용 (을 Œl포함 l)에 대한 입력을 소문자로 입력 하여 비용 배열을 만드는 데 훨씬 더 작은 숫자를 사용할 수 있다는 것입니다. 까다로운 비트는 간결한 상태로 일치하지 않고 해당 숫자를 구성하는 방법을 찾고있었습니다.

ØW수익률 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"계산 낮은 맡았다 입력 발생하므로 항상 26 제로로 시작합니다. 이것을 반대로하여 길이 63 대신 길이 37의 배열로 내적을 수행 할 수 있습니다.

⁽[ɱד®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’‘ḤṚæ.ŒlċЀØWṚƊ - Link: list of characters
⁽[ɱ                                - literal                                     23913
    “®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’               - literal         136861653160003879166772353166783
   ×                               - multiply  = 3272772712015172762515027281277281879
                    ‘              - increment = 3272772712015172762515027281277281880
                     Ḥ             - double    = 6545545424030345525030054562554563760
                      Ṛ            - reverse (implicit decimal list) -> [0,6,7,3,6,5,4,5,5,2,6,5,4,5,0,0,3,0,5,2,5,5,4,3,0,3,0,4,2,4,5,4,5,5,4,5,6]
                                   -                     (to align with: _ 9 8 7 6 5 4 3 2 1 0 z y x w v u t s r q p o n m l k j i h g f e d c b a)
                                 Ɗ - last four links as a monad:
                         Œl        -   lower-case (the input)
                              ØW   -   word -> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"
                            Ѐ     -   map across right:
                           ċ       -     count (right character in lower-cased input)
                                Ṛ  -   reverse (to align with the values as shown above)
                       æ.          - dot-product




1

루비 , 125 바이트 + 87 개 성냥개비 = 212

->m{v=->w,k{w.scan(/./).map &k};v[m,->t{v["!#&&;&=$(==&;&&;&;#;!$!$;&&#&!$!!&;&",->k{k.ord%11}][t.to_i 36].to_i+(t==?0?6:0)}].sum}

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

Arnauld의 Javascript answer에서 크게 영감을 받았습니다 .

일반적으로 람다를 두 번만 사용하도록 선언하는 비용은 그만한 가치가 없지만 " scanap" 의 성냥개비 무게가 .scan(/./).map변경되었습니다. 이것은 재미있는 도전이었습니다!

->m{
  v=->w,k{w.scan(/./).map &k};                # v is a lambda taking a string and a block
  v[m,->t{                                    # Transform each char t of the input:
    v["!#&&;&=$(==&;&&;&;#;!$!$;&&#&!$!!&;&", # Transform each char of this magic string
      ->k{k.ord%11}                           #  into a matchstick count ([0,2,5,5,4,5...])
    ][t.to_i 36]+                             # Parse t as a base 36 index into the counts
    (t==?0?6:0)                               # If t was "0", add 6 matchsticks
  }].sum                                      # Add the counts for all characters
}


1

R, 112 바이트 + 319 개의 일치 = 431 개의 점수

sum(strtoi(el(strsplit(chartr("0-9a-z","625545637665455454240303455250300545",tolower(scan(,""))),""))),na.rm=T)

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

이 개선 사항을 생각 해낸 주세페 에게 찬사를 보냅니다 .

이전 버전, 143 바이트 + 454 개의 일치 = 597 개의 점수

b=el(strsplit(chartr("0123456789abcdefghijlnopqrsuxyz","6255456376654554542433455253545",tolower(readline())),""))
sum(as.numeric(b[b%in%0:9]))

el()TIO 에서 기능을 작동 시키려면 을 사용해야 library(methods)합니다.

으아 아아아, R 장황하다!


TIO는 어떤 이유로 든 methods패키지를 자동으로로드하지 않지만 패키지이기 때문에 base항상 헤더에 넣었으며 바이트 수로 계산하지 않습니다. readline또한 대화식 세션이 아니기 때문에 TIO에서는 작동하지 않습니다. 그러나 이것은 확실히 골프입니다.
주세페


^는 공백을 포함하는 입력 주위에 따옴표가 필요합니다.
주세페

또한 방금 R 골프를위한 대화방을 시작했습니다 ! ! 나는 최근에 아주 :) 장려하고 다른 많은 사용자에 의해 R에서 답을 많이 본 것
주세페

@ 주세페 나는 당신이 답을 따로 게시해야한다고 생각합니다. 그것은 원칙적으로 다르고 내 것보다 훨씬 우수합니다.
Andreï Kostyrka

1

Perl 6 , 87 바이트 + 26 개 성냥개비 = 113

{+[+] (~'򘮉򛫡񯌞𺪯񯉒񉘁'.ords~~m:g/\w/)[m:g/<[/..{]-[\W_]>/>>.&{:٣٦(~$_)}]}

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

비 ASCII 유니 코드 문자를 사용합니다. 조회 테이블은 유니 코드 문자열로 인코딩됩니다.

say '򘮉򛫡񯌞𺪯񯉒񉘁'.ords;
# (625545 637665 455454 240303 455250 300545)

아라비아 숫자를 사용하여 문자를 36 진수로 변환하여 문자를 색인으로 변환합니다.

:٣٦('z'); # is equivalent to
:36('z');

1

sed, 367 (소스 코드 바이트) + 532 (소스 코드의 성냥개비) = 899

s/[^0-9a-jln-suxyz]//Ig;/^$/{s/.*/0/;b};s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/;:1;s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I;/ ;/!b1;s/;.+//;s/^/,;/;:2;s/(;[^%]*)(%+)/\2\1/;:3;s/,%{10}/%,/;s/^%/,&/;/%{10}/b3;/;.*%/b2;:4;s/,[;,]/,0,/;/,[;,]/b4;s/%{9}/9/g;s/%{8}/8/g;s/%{7}/7/g;s/%{6}/6/g;s/%{5}/5/g;s/%%%%/4/g;s/%%%/3/g;s/%%/2/g;s/%/1/g;s/[^0-9]//g

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

여러 줄 버전 :

s/[^0-9a-jln-suxyz]//Ig
/^$/{s/.*/0/;b}
s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/
:1
s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I
/ ;/!b1
s/;.+//
s/^/,;/
:2
s/(;[^%]*)(%+)/\2\1/
:3
s/,%{10}/%,/
s/^%/,&/
/%{10}/b3
/;.*%/b2
:4
s/,[;,]/,0,/
/,[;,]/b4
s/%{9}/9/g
s/%{8}/8/g
s/%{7}/7/g
s/%{6}/6/g
s/%{5}/5/g
s/%%%%/4/g
s/%%%/3/g
s/%%/2/g
s/%/1/g
s/[^0-9]//g

설명:

위의 스크립트는 표준 입력을 한 줄씩 (패턴 공간으로-일반적인 "sed way"로) 읽고 각 줄에 대해 해당 줄의 모든 성냥개비 표현 가능한 문자를 나타내는 데 필요한 성냥개비의 양을 출력합니다. 각 입력 라인에 대한 계산은 다음과 같이 수행됩니다.


s/[^0-9a-jln-suxyz]//Ig

먼저, 패턴 공간에서 해당하는 성냥개비 표현이없는 모든 문자를 패턴 공간에서 제거합니다. 즉, "0"에서 "9"까지의 숫자, "a"에서 "j", "n"에서 "s", "l", "u"까지의 문자가 아닌 모든 문자를 제거합니다. "x", "y"또는 "z". 대문자와 소문자는 동일하게 취급됩니다.

/^$/{s/.*/0/;b}

빈 패턴 공간으로 끝나는 경우 0을 인쇄하고 (특수 플래그를 전달하지 않는 한 sed는 항상 sed와 같이 자동으로 줄 바꿈을 수행함) 스크립트의 모든 후행을 건너 뛰고 다음 "sed cycle"( 즉, 다음 입력 줄을 읽고 처리 할 입력 줄이 더 이상 없을 때까지 첫 번째 명령에서 다시 처리를 반복하십시오.

s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/

그렇지 않으면, 패턴 공간이 비어 있지 않은 경우, 이제 세미콜론으로 구분 된 두 개의 "하위 공간"으로 분할합니다. 먼저 입력 공간 이옵니다. 입력 공간 은 처음에 패턴 공간에서 제거되지 않은 모든 문자로 구성됩니다. 라인 1의 실행; 다음은 세미콜론과 그 뒤에 맵 공간이옵니다 .

지도 공간은 각 관련 영숫자를 나타내는 데 1 이외의 몇 개의 성냥개비가 필요한지 알려줍니다. 지도 공간에서 영숫자 문자를 나타내는 데 필요한 성냥개비가 몇 개인 지 알고 싶다면 해당 문자의 왼쪽에서 연속 된 %의 첫 번째 시퀀스를 찾으십시오. 그러면 답은 %의 수입니다. 예를 들어, "b"를 나타내는 데 필요한 성냥개비의 수는 4 + 1 = 5입니다. "4"를 나타 내기 위해, 3 + 1 = 4, "y"를 나타 내기 위해, 3 + 1 = 4; 등등.

:1
s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I
/ ;/!b1

이것은 루프입니다. 이제 입력 공간의 모든 문자를 숫자의 해당 문자를 나타내는 데 필요한 양의 성냥개비를 나타내는 %의 (완전한) 순서로 바꾸고 그 문자 뒤에 공백 문자 (대문자, 소문자)를 붙입니다. 동일한 치료를 받으면). 루프가 종료되어야하는지 여부를 결정하는 기준은 패턴 공간에서 세미콜론의 바로 왼쪽에 공백 문자가 있는지 확인하는 것입니다. 해당 조건이 유지되면 루프를 종료하고 다음 줄로 계속 진행합니다.

s/;.+//
s/^/,;/

이 두 줄은 패턴 공간에서 세미콜론과 그 뒤에 나오는 모든 것을 제거한 다음 패턴 공간의 시작 부분에 쉼표와 세미콜론을 삽입합니다. 이제 패턴 공간을 다시 두 개의 새로운 하위 공간 ( 세미콜론 앞의 아날로그 결과 공간 과 그 후의 아날로그 입력 공간) 으로 나누었 습니다.

아날로그 입력 공간은 이전에 "입력 공간"이라고 불렀지 만 다른 형식입니다. 이제 공백으로 구분 된 % 시퀀스가 ​​포함됩니다. 아날로그 입력 공간에서 이러한 %의 총 개수는 초기 입력 문자열을 나타내는 데 필요한 것과 동일한 개수의 성냥개비입니다. 즉, 해당 개수가 결과입니다. 그러나 일련의 퍼센트 부호가 아니라 10 진수 표기법으로 결과를 인쇄해야합니다. 아날로그 결과 공간 의 목적은 결과 의 각 숫자에 대한 아날로그 표현을 유지하는 동시에 아날로그 입력 공간에서 각 연속적인 %의 시퀀스를 하나씩 합산하여 결과를 계산하는 것입니다. 다음 루프는 그 합계를 수행합니다.

:2
s/(;[^%]*)(%+)/\2\1/
    :3
    s/,%{10}/%,/
    s/^%/,&/
    /%{10}/b3
/;.*%/b2
  1. 먼저, 레이블 2 다음에, 우리는 아날로그 결과 공간에서 세미콜론 다음의 연속 된 %의 시퀀스를 아날로그 입력 공간에서 세미콜론의 바로 왼쪽으로 이동합니다.

  2. 다음으로, 다음 계산을 수행 하는 서브 루프 (라벨 3 ) 로 들어갑니다 .

    • 아날로그 결과 공간에서 쉼표 뒤에 10 %의 연속 된 시퀀스가 ​​있으면 해당 %를 제거하고 쉼표 왼쪽에 즉시 단일 %를 넣습니다. 간단히 말하면 결과의 소수점 자리 중 하나가 9 개 이상의 단위를 획득 했으므로 해당 소수점 자리에서 10 단위를 빼고 다음 큰 소수점 자리에 1 단위를 추가합니다.

    • "%"가 패턴 공간에서 첫 번째 문자 인 경우 바로 앞에 새 쉼표를 삽입합니다. 이는 합계가 왼쪽에 이전 값보다 소수점이 하나 더있는 값에 도달했음을 나타냅니다.

    • 아날로그 결과 공간에 10 %의 연속 된 시퀀스가 ​​여전히 있으면 레이블 3 으로 돌아가서이 프로세스를 반복하십시오. 그렇지 않으면, 우리는이 서브 루프를 빠져 나와 다음 줄로 들어갑니다.

  3. 이제 아날로그 입력 공간에 여전히 "%"가 있으면 (즉, 세미콜론 뒤에), 총 합계에 추가 될 몇 개의 성냥개비가 여전히 있음을 의미하므로 레이블 2 로 돌아갑니다 .

합이 완료되면 코드의 마지막 루프로 들어갑니다.

:4
s/,[;,]/,0,/
/,[;,]/b4

여기서는 왼쪽에 쉼표와 오른쪽에 세미콜론 또는 쉼표로 형성된 모든 문자 쌍을 확인합니다. 이러한 모든 문자 쌍을 두 개의 쉼표 안에 "0"으로 바꿉니다.

s/%{9}/9/g
s/%{8}/8/g
s/%{7}/7/g
s/%{6}/6/g
s/%{5}/5/g
s/%%%%/4/g
s/%%%/3/g
s/%%/2/g
s/%/1/g

위의 코드는 매우 간단합니다. 아날로그 결과 공간에서 각 %의 연속 된 시퀀스를 각 특정 시퀀스의 % 수에 해당하는 10 진수 문자로 바꿉니다.

s/[^0-9]//g

마지막으로 패턴 공간에서 숫자가 아닌 모든 문자를 제거하고 친숙한 10 진수 표기법의 최종 결과가 남습니다. 이 값은 표준 출력에 인쇄되며 처리 할 입력 라인이 더 있으면 다음 sed주기가 시작됩니다.




1

자바 (10), 452 (432) 416 (404) 점수는 (145 + 259 개 바이트 일치)

k->{int m=0,t;for(var w:k)for(t=m-m;t<'';)m+="1ir 7lnu 4cfhjoy 235bdegpqsxz 069a 8".split(" ")[t++].contains((char)(w|32)+"")?-~t:t-t;return m;}

설명:

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

k->{                   // Method with character-array parameter and int return-type
  int m=0,             //  Result-integer, starting at 0
      t;               //  Index-integer
  for(var w:k)         //  Loop over the input String-array
    for(t=m-m;t<'';)   //   Inner loop over the parts array with index [0,6)
      m+="1ir 7lnu 4cfhjoy 235bdegpqsxz 069a 8".split(" ")[t++]
                       //     If the current part ordered by amount of matches (2-8)
         .contains((char)(w|32)+"")?
                       //     contains the current (lowercase) letter
          -~t          //      Increase the result by the index + 2
         :             //     Else:
          t-t;         //      The result remains the same by adding 0
  return m;}           //  Return the result
  • $ραετ문자 대신 변수 이름 이 사용됩니다. 편집 : 변수 이름 kmtvw은 이제 도전 설명에 따라 일치로 구성 할 수 없으므로 대신 사용됩니다.
  • ''대신 (인쇄 불가능)이 사용됩니다 6.
  • m-m그리고 t-t대신에 사용된다 0.
  • (char)(w|32)+""w.toLowerCase()문자열 배열 입력 대신 문자 배열 입력이 사용됩니다 .

0

오토 핫키 , 148 바이트 + 345 성냥개비 = 493

이것은 단축하기가 약간 어려웠습니다.

n:=["1ir","7lnu","4cfhjoy","235bdegpqsxz","09a5",7+1]
Loop Parse,i
{r:=A_LoopField
Loop % n.Length()
{l:=A_Index
if InStr(n[l],r)
u+=l+1
}}
send % u


0

, 48 바이트 + 3 = 51

IΣEθ⎇№α↥ιI§”)➙⊞←!Σw➙⊙↘⁴↘”⌕α↥ι∧№IX²φιI§”)⧴u↑$◨”Iι

온라인으로 사용해보십시오!링크는 자세한 버전의 코드입니다. 설명:

IΣEθ

입력의 문자를 반복하고 각각의 성냥개비를 계산 한 다음 결과를 합산하고 문자열로 변환 한 후 암시 적으로 인쇄합니다.

⎇№α↥ι

편지라면 ...

I§”)➙⊞←!Σw➙⊙↘⁴↘”⌕α↥ι

압축 된 문자열에서 성냥개비를 찾으십시오. 65455454240303455250300545.

∧№IX²φι

그렇지 않은 경우 2 ** 1000 ...

I§”)⧴u↑$◨”Iι

압축 된 문자열에서 성냥개비를 찾으십시오 6255456376.


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