노란 나무로 갈라진 두 길 (2 부)


25

이 시리즈의 번째, 세 번째는 노란색 나무로 분기 된 두 개의 도로입니다 (3 부).

이것은 이전의 도전 과제 인 노란 나무로 갈라진 두 개의 도로 (1 부)를 기반으로 합니다. 그것은 꽤 잘 받아 들여졌지만 꽤 사소했습니다 (52 바이트의 Java 답변!) 그래서 더 복잡한 것을 만들었습니다 ...

영감

이 도전은 Robert Frost의 유명한 시인 "The Road Not Taken"에서 영감을 얻었습니다.

두 개의 도로가 노란 나무로 갈라졌고,
죄송합니다. 둘 다 여행 할 수 없었습니다.
그리고 한 명의 여행자가되어서 오랫동안 서있었습니다.
그리고
덤불에서 구부러진 곳 까지 가능한 한 아래를 내려다 보았습니다 .

... 2 단락이 잘립니다 ...

나는 한숨을 쉬며
어딘가에 이것을 말해 줄 것이다 .
두 개의 도로가 나무로 갈라졌고, 나는 –
덜 여행 한 길을 택했다.
그리고 그것은 모든 차이를 만들었다.

두 번째 행부터 마지막 ​​행까지 주목하십시오 I took the one less traveled by,. 당신의 목표는 문자열 입력에서 가장 적게 여행 한 도로를 찾는 것입니다. 도로가 덜 이동하기 위해 어떤 방향으로 회전해야 하는지를 알려주는 서로 다른 두 값 중 하나를 출력해야합니다. 도로 분기점 (육각형의 흔적이 숫자로 바))이 교차점에 있습니다. 여기에는 숫자로 구성된 2 개의 경로가 있습니다. 숫자가 가장 낮은 경로는 가져 가지 않은 도로입니다. 길을 타지 않은 길은 길은 더 길지만 길은 더 작을 수 있습니다. 경로에 "왼쪽"또는 "오른쪽"을 인쇄하는 프로그램의 예제 / 테스트 사례는 다음과 같습니다.

 1     2
  1   2
   1 2
    #
    #
    #
left (3 < 6)


 1     2
  2   2
   1 1
    #
    #
    #
left (4 < 5)


 12    2
  11  2
   1 1
    #
    #
    #
right (6 > 5)


 99   989
  99  89
  99 99
  99 99
    #
    #
    #
   # 
left (72 < 79)


1111 1110
 001 111
  11 11
  11 11
    #
   ##
  ##
 ##  
left (9 < 10) (Note: 1111 is interpreted as 1+1+1+1=4, not 1111=1111)


1       1
 0     1
  1   1
  1   1
  1   1
  1   1
   1 1 
    #
    #
    #
     #
      #
left (6 < 7)


1   1 
 0   1  
  1   1
  1   1
  1   1
  1   1
   1 1 
    #
    #
    #
     #
      #
left (6 < 7)

가정하고 기억해야 할 것들

  • 항상 2 개의 경로가 있습니다. 그 이상도 이하도 아닌.
  • STDIN에서 한 번에 한 줄, LF 문자를 포함하는 문자열 또는 리터럴 백 슬래시 및 n을 포함하는 문자열을 입력 할 수 있습니다. 다른 방법으로 입력이 필요한 경우 의견에 승인을 요청하십시오.
  • 유효하지 않은 입력 또는 묶인 경로에 대해 걱정할 필요가 없습니다. 그것들은 프로그램 / 기능에 입력되지 않을 것입니다.
  • 입력은 언어의 문자열 제한보다 작은 너비 또는 높이의 길이 일 수 있습니다.
  • #같은 줄에 a 와 숫자 가 없습니다 .
  • 경로의 모든 숫자는 0에서 9 사이의 양의 정수입니다.
  • 후행 줄 바꿈이있는 입력 또는 출력이 허용됩니다.
  • 예제는 아래 JS ES6 답변을 참조하십시오 .
  • 두 경로 사이에는 항상 최소 1 개의 공간이 있어야합니다.
  • 두 경로는 각지도마다 높이가 항상 같지만 다른지도에서는 ​​다를 수 있습니다.
  • 특정 테스트 사례에 대해 혼란 스러우면 알려주십시오.
  • 1111은 1111 = 1111이 아니라 1 + 1 + 1 + 1 = 4로 해석됩니다. 지도는 임의의 길이가 아닌 일련의 한 자리 숫자입니다.
  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다!
  • 금지 된 표준 허점

이 도전에 대해 궁금한 점이 있으면 의견과 행운을 빌어주세요!


이봐, 당신은 $("div > h1").map(function(){return $(this).text()}).get().join("\n");당신의 콘솔 에 붙여 넣어 모든 답변과 바이트 수를 볼 수 있습니다 !
programmer5000

1
다음은 공백이 제거되고 취소 된 답을 무시한 대체 버전입니다.let answers = $('div > h1').map(function(){return $(this).clone().children(':not(a)').remove().end().text().replace(/\s+/g,' ').trim()}).get();answers.splice(0, 1);answers.join('\n');
David Archibald

2
#은 육각형이 아닙니다.
user253751

1
" 하지만 (52 바이트 자바 대답!) 또한 매우 사소한했다 " (43)는 지금 바이트. ;)
Kevin Cruijssen

다시 찬성? 대체 무슨 일이야?
Matthew Roh

답변:


2

05AB1E , 21 15 바이트

왼쪽은 0 , 오른쪽은 1 을 출력합니다 .

|vy#õK€SO})øO`›

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

설명

|v                # for each line in input
  y#              # split on spaces
    õK            # remove empty strings
      €S          # split each string into a list of chars
        O         # sum each sublist
         }        # end loop
          )ø      # wrap stack in a list and zip
            O     # sum each sublist (side of the tree)
             `›   # compare left to right

11

레티 나 , 28 바이트

\d
$*
%r`1\G
-
Os`.
+`-1

1+

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

0왼쪽과 1오른쪽에 인쇄 합니다 . 줄에 후행 공백이 없다고 가정합니다.

설명

\d
$*

각 자릿수 N를 한 자릿수 로 변환 N합니다.

%r`1\G
-

각 줄마다 ( %), \G끝 ( r) 에서 연속 되는 줄 ( )을 일치 시키고 각 줄을 -바꿉니다 (즉, 오른쪽 분기를 -s 로 바꿉니다).

Os`.

모든 문자가 모든 문자 -바로 앞에 오도록 모든 문자를 정렬하십시오 1.

+`-1

반복 한 쌍을 취소 -하고 1.

1+

하나 이상을 일치 시키십시오 1(그렇다면 왼쪽 경로에 더 많은 무게가있었습니다).



7

, 216 바이트

 EZ,Z~.
E~]x-.|
F].>vm'
Ax]}#----------------.
Bx]}#---------------.|z.
Cx]}#------------.,Z|##' E
Dx]}#---------.,Z|`@@('A~^~t
 E.>#------.,Z|`@@-('
A~S`#v--.,Z|`@@-('
*f,--<,Z|`@@-('
e |,Z|`@@-('
,Z|`@@-('
>@@-('
a

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

1 부에 대한 답변보다 조금 큽니다 ...

개요

칩은 실제 회로에서 영감을 얻은 2D 언어이며 바이트 스트림에서 각 바이트의 구성 요소 비트를 처리합니다.

이 솔루션은 보이는 숫자의 합계를 유지하고 공백이 생길 때마다 입력 부호를 뒤집은 다음 첫 번째 문자를 종료합니다 #. 입력을 위해

 11   12
  2   2
   1 1
    #
    #
    #

우리는 얻는다 1 + 1 - 1 - 2 + 2 - 2 + 1 - 1 = -1. 결과의 부호는 출력으로 주어지고, 음수는 결과를 1, 양수는 0입니다.

따라서 출력은 1왼쪽 경로가 덜 사용됨을 0의미하고 오른쪽을 의미합니다.

설명

높은 수준에서 다음과 같이 작동합니다.

@요소가있는 주요 대각선 은 누산기이며 출력은 a하단에 의해 결정됩니다 . (8 쌍은 @8 비트 를 의미하지만 가장 높은 비트는 부호이므로이 솔루션은 +127 또는 -128의 최대 차이를 처리 할 수 ​​있습니다.

Ax]}#--...로 시작하는 네 줄 은 입력을 읽고 숫자의 경우 입력을 무시하고 (필요한 경우) 가산기에 값을 전달합니다.

처음 세 줄은 숫자 또는 일련의 공백을보고 있는지 결정하고 숫자를 무효화해야하는지 여부를 추적합니다.

나머지 요소는 입력 아래에 갇히고 맨 오른쪽 요소는 종료 조건을 처리하고 출력을 ASCII로 매핑합니다 (따라서 문자 '0'또는 '1'값 대신 0x0또는 값을 얻습니다 0x1.이 ASCII 매핑에는 추가 바이트가 필요하지 않았습니다. 그렇지 않으면 그렇지 않습니다) 포함 시켰습니다.)


2
나는 코드가 두 개의 분기 도로처럼 보인다는 것을 좋아합니다.
Laikoni

@ Laikoni 나는 심지어 눈치 채지 못 했어, 그것은 좀 멋지다 :)
Phlarx

4

자바 스크립트 (ES6), 55 바이트

x=>x.replace(/\d(?=.*( )|)/g,(d,s)=>t-=s?d:-d,t=0)&&t<0

후행 라인마다 공간 및 출력이없는 가정 true대를 right, false위해 left. 요령은 입력의 각 숫자를 일치시키는 것이며, 같은 줄에 공백이 있으면 합계에서 빼십시오. 그렇지 않으면 합계에 추가하십시오. 최종 총계가 0보다 작 으면 오른쪽 도로가 덜 이동 한 도로이며 그 반대도 마찬가지입니다.

사용해보십시오 :

f=x=>x.replace(/\d(?=.*( )|)/g,(d,s)=>t-=s?d:-d,t=0)&&t<0
<textarea placeholder = "paste in a map here..." oninput = "document.querySelector('div').innerText = f(this.value)"></textarea>
<div></div>


x=표현식은 허용되지 않으며 변수 및 전체 프로그램으로 저장된 함수 만 허용되므로 처음에 를 입력해야 합니다.
programmer5000

@ programmer5000 왜? 기본값을 재정의하는 것은 조금 이상하게 보이며 이것이 문제의 경우임을 나타내는 것은 아닙니다.
위트 마법사

1
@ programmer5000 사실, 명명되지 않은 함수는 기본적으로 허용됩니다 . (스 니펫 주셔서 감사합니다, btw)
ETHproductions



2

망막 , 180 바이트

바이트 수는 ISO 8859-1 인코딩을 가정합니다.

^(?=( *(0|(1|(?<3>2|(?<3>3|(?<3>4|(?<3>5|(?<3>6|(?<3>7|(?<3>8|(?<3>9))))))))))+.+¶)+)(.+ (0|(?<-3>1|(?<-3>2|(?<-3>3|(?<-3>4|(?<-3>5|(?<-3>6|(?<-3>7|(?<-3>8|(?<-3>9))))))))))+¶)+ *#

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

나는 또한 정규식 전용 솔루션을 (위에서 사용한 것을 제외하고, 올바른 경로를주의해야한다에만 입력과 일치하는 일반 .NET 정규식입니다 시도라고 생각 을위한 속기로 \n).

반복적으로 반복되지만 가능한 각 자리를 개별적으로 처리해야 할 때 발생합니다.

이 솔루션은 밸런싱 그룹을 매우 간단하게 적용한 것입니다 . 먼저 각 자릿수의 N스택 3으로 캡처를 밀어서 왼쪽 분기의 자릿수를 합합니다 N. 그런 다음 오른쪽 지점의 각 숫자 에 대해 #스택 3 N시간 에서 튀어 나와서 에 도달하려고합니다 N. 왼쪽 분기의 자릿수가 오른쪽 분기의 자릿수보다 큰 경우에만 가능합니다 (빈 스택에서 팝할 수 없기 때문에).


.NET 정규 표현식에 익숙하지 않지만 문자 세트를 수행 할 수는 없습니다 : [0-9]모든 숫자 또는 \d?
programmer5000

@ programmer5000 물론, 나는 그들을 합치기 위해 얼마나 많은 캡처를 밀어야하는지 결정하기 위해 그것들을 구별 할 수 없습니다.
Martin Ender

2

자바 스크립트 (ES6) 106 104 바이트

s=b=>(b=b.split`\n`,c=0,d=0,b.forEach(a=>{a=a.match(/\d+/g)||[],c+=+(a[0]?a[0]:0),d+=+(a[1]?a[1]:0)}),c<d)

s=b=>(b=b.split("\n"),c=0,d=0,b.forEach(a=>{a=a.match(/\d+/g)||[],c+=+(a[0]?a[0]:0),d+=+(a[1]?a[1]:0)}),c<d)

strue도로를 타지 않은 경우 왼쪽에 있는 함수입니다 . 언 골프 드 :

var proc = function(str){
    str = str.split("\n");
    var left = 0;
    var right = 0;
    str.forEach(item=>{
        var match = item.match(/\d+/g) || [];
        console.log(match);
        left += +(match[0] ? match[0] : 0);
        right += +(match[1] ? match[1] : 0);
    });
    return left < right;
};

s=b=>(b=b.split`\n`,c=0,d=0,b.forEach(a=>{a=a.match(/\d+/g)||[],c+=+(a[0]?a[0]:0),d+=+(a[1]?a[1]:0)}),c<d)
<textarea placeholder = "paste in a map here..." oninput = "document.querySelector('div').innerText = s(this.value)"></textarea>
<div></div>


나는 누군가가 이것보다 더 나은 점수를 얻을 수 있기를 바랍니다 ...
programmer5000

도전 과제 @ programmer5000
David Archibald

@DavidArchibald 누군가가 이미했지만 새로운 답변에 감사드립니다. 시리즈세 번째에 관심이 있습니까?
programmer5000

확실한. 몰랐 있었다 3
데이비드 아치 볼드

2

PowerShell , 80 바이트

$args-split'\s|#'-ne''|%{$a+=(($i=[char[]]$_-join'+'|iex),-$i)[($x=!$x)]};$a-gt0

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

(Python 답변 아래에서 삐걱 거리는 것만.

True왼쪽 경로와 False오른쪽 경로에 대한 출력 .

로 입력 된 문자열을 입력합니다. `n이는 "리터럴 백 슬래시와 n을 포함하는 문자열"에 해당하는 PowerShell 또는 리터럴 멀티 라인 문자열입니다. 그런 다음 -split그 입력 \s(개행을 포함한 공백) 을 입력 하거나 #모든 빈 결과를 필터링 -ne''하므로 숫자 배열 만 남습니다. 그것들은 루프로 공급됩니다 |%{...}.

각 반복마다 먼저 현재 요소를 가져 와서 배열 $_로 캐스트 하고 더하기 부호와 함께 파이프하여 (와 짧게 및 비슷하게 ) 파이프합니다 . 저장되어 경로의 특정 부분에 숫자를 올바로 요약합니다. 그런 다음 부울 값을 앞뒤로 뒤집어 색인을 생성 하여 배열의 두 요소로 해당 값과 음수를 사용 합니다. 즉,이 루프를 통한 첫 번째 반복, 첫 번째 왼쪽 경로 청크는 다음과 같이 색인됩니다 . 다음에, 우리는 취할 것이다 ; 등등. 사람들은에 누적 과 함께 .char-join+iexInvoke-Expressioneval$i($i, -$i)-$i$i$a+=

마지막으로, 우리는 여부를 평가 $a입니다 -greater t0. 만약 그렇다면, 오른쪽 경로는 더 큰 합을 가졌고, 그렇지 않으면 왼쪽 경로는 더 큰 합을 가졌습니다. 해당 부울 결과는 파이프 라인에 남아 있으며 출력은 암시 적입니다.


2

CJam , 19 18 바이트

qN/Sf%z{'1*:~:+}/>

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

0왼쪽과 1오른쪽에 인쇄 합니다 .

설명

q      e# Read all input.
N/     e# Split into lines.
Sf%    e# Split each line around runs of spaces.
z      e# Transpose to group each branch.
       e# Note that each branch will have the same number of digit segments
       e# now but the first branch will also have all the #s at the end in
       e# separate segments.
{      e# For each branch...
  '1*  e#   Join the segments into a single string with 1s as separators.
       e#   This will add the same number of 1s between digit segments in
       e#   both branches (which won't affect their relative sum) and it 
       e#   will also insert a 1 before each # in the first branch.
  :~   e#   Evaluate each character. The digit characters are simply turned
       e#   into their values, but # is the exponentiation operator in CJam.
       e#   This is why we inserted those additional 1s, because 1# is a no-op.
  :+   e#   Sum the digits in the branch.
}/
>      e# Check whether the left branch's sum is greater than the right one's.

1

매스 매 티카, 80 77 바이트

3 바이트를 절약 한 Martin Ender에게 감사합니다!

#<#2&@@Total@Partition[Tr/@ToExpression[Characters@StringSplit@#/."#"->0],2]&

개행으로 구분 된 문자열을 입력 True으로 사용하고 왼쪽 경로 로 돌아가서 False올바른 경로 로 돌아가는 순수한 함수 입니다. 그 긴 Mathematica 명령 이름을 비난하십시오. 이것은 10 개의 토큰과 같습니다.


0

, 19 18 바이트

LR+XDax:-x+$+$0SGx

명령 행에서 입력을 단일 문자열로 사용합니다 (실제 명령 행에서 실행하는 경우 줄 바꾸기를 인용하고 이스케이프해야 함). -1왼쪽, 1오른쪽 에 대한 출력 . 온라인으로 사용해보십시오!

설명

숫자의 합을 반복하여 숫자 합을 집계에 추가합니다. 탈리 부호는 매번 교체되며, 결과적으로 왼쪽 값은 음수이고 오른쪽 값은 양수입니다. 그런 다음 최종 집계 표시 ( -1또는 1)를 인쇄합니다 .

                    a is 1st cmdline arg; XD is regex `\d`; x is "" (implicit)
                    Note that "" in a math context is treated as 0
  +XD               Apply regex + to XD (resulting in `\d+`)
LR   a              Loop over matches of that regex in a:
             $0      Regex match variable containing the full match
           $+        Sum digits by folding on +
      x:-x+          Swap the sign of the tally and add this sum
               SGx  After the loop, print the sign of the tally

0

하스켈 , 64 바이트

g=sum.map fromEnum
f(a:b:r)|a>"#"=g a-g b+f r|1<3=0
(>0).f.words

온라인으로 사용해보십시오! 사용법 : 익명 함수 (>0).f.words는 개행으로 구분 된 문자열을 인수로 사용하여 다음을 반환합니다.False 하여 왼쪽과 True오른쪽을 합니다 .

설명:

주어진 입력

 99   989
  99  89
  99 99
    #
    #
   # 

즉, 문자열 " 99 989\n 99 89\n 99 99\n #\n #\n #"이며 words모든 줄 바꿈과 공백 을 제거하고 나머지 문자열 목록을 반환합니다 ["99","989","99","89","99","99","#","#","#"]. 함수는 f처음 두 요소 소요 a하고 b있는지이 목록과 검사 a문자열 "#"과 비교하여 자리의 문자열이다. (숯불이 때문에 '#'숫자의 문자 모든보다 작은 '0', '1'... 숫자로 시작하는 모든 문자열보다 사전 클 것이다 "#".)이 함수 g는 아스키 문자 코드에 문자열의 각 문자를 매핑하고 그 합을 반환합니다. 에서 f우리는 적용 gab및 컴퓨팅 g a - g b왼쪽 경로를 뺀 올바른 값의 값, 그리고에 대한 재귀 호출에 추가f다음 줄을 처리하십시오. 왼쪽 경로가 더 이동하면 결과는 f음수이고 오른쪽 경로에 대해서는 양수이므로 (>0)결과가 0보다 큰지 확인합니다.


0

파이썬 3 , 84 바이트

현재 모든 Python 제출은 함수이므로 전체 프로그램을 제공한다고 생각했습니다.

x=0
try:
 while 1:
  for n in input().split():x=-x+sum(map(int,n))
except:print(x>0)

True왼쪽 경로가 덜 이동 한 경우 인쇄 합니다 False. 온라인으로 사용해보십시오!

각 입력 줄에 대해 공백으로 분할되고 각 결과 요소의 자릿수를 합산하여 각 단계에서 탈리 부호를 뒤집는 동안 탈리에 추가합니다. a로 입력 될 때까지 입력 행을 계속 읽 #습니다.이 시점 map(int,n)에서 예외가 발생하고 루프가 종료 True되어 탈리가 양수이고 False그렇지 않으면 인쇄 됩니다 .


0

배치, 169 바이트

@echo off
set/as=0
:l
set/pr=
if not %r: =%==# call:c - %r%&goto l
cmd/cset/a"s>>9
exit/b
:c
call:r + %3
:r
set/as%1=%2%%10,d=%2/10
if %d% gtr 0 call:r %1 %d%

0왼쪽, -1오른쪽으로 인쇄 합니다 . 참고 : 할 이있는 행을 찾을 때까지 행을 읽은# 읽은 다음 읽기를 중지합니다. 경로 합계의 차이는 511로 제한됩니다 (더 큰 차이를 지원하려면 1 바이트 추가). 각 경로의 각 행에 9 자리를 넘지 않아야합니다 (행 수에 제한 없음). 설명 : d서브 루틴은 더하기 또는 빼기 및 숫자와 같은 두 가지 매개 변수를 사용합니다. 모듈러스로 마지막 자리를 10으로, 나머지 자리를 10으로 나누어 추출하고 여전히 남아있는 자리가있는 동안 재귀 적으로 호출합니다. c서브 루틴은 세 개의 매개 변수를 사용합니다 추가하거나 빼기, 숫자를 추가하거나 빼기, 추가 숫자 추가 할 것인지 여부. 그것은 전화d추가 할 자릿수를 처리하는 서브 루틴과 처음 두 매개 변수를 처리하기 위해 넘어갑니다. 이는 c매개 변수 -및 왼쪽 및 오른쪽 숫자로 서브 루틴 을 호출하면 오른쪽 숫자를 더하고 왼쪽 숫자를 뺍니다. 마지막으로 부호를 추출하기 위해 결과가 이동됩니다.


0

옥타브, 46 바이트

@(a)diff((a(:)-48)'*(bwlabel(a>35)(:)==1:2))<0

온라인으로 사용해보십시오! 2D 문자형 배열 a을 입력으로 받는 함수입니다 .

설명:

a=

    1   1  
     0   1 
      1   1
      1   1
      1   1
      1   1
       1 1 
        #  
        #  
        #  
         # 
          #

a > 35                   %convert the matrix to a binary matrix
                         %where there is a number corresponing
                         %element of the binary matrix is 1.

*   *  
 *   * 
  *   *
  *   *
  *   *
  *   *
   * * 

bwlabel(a>35)            %label each connected component. 


1   2  
 1   2 
  1   2
  1   2
  1   2
  1   2
   1 2 

B=bwlabel(a>35)(:)==1:2  % a binary `[n ,2]` matrix created 
                         % each column related to one of labels

A=(a(:)-48)'             % convert array of characters to array of numbers 

A * B                    % matrix multiplication that computes 
                         % the sum of numbers under each label

diff(A*B)<0              % check if the left is grater than the right

0

자바 7, 219216 바이트

boolean c(String s){int l=0,r=0;for(String x:s.split("\n")){l+=f(x,0);r+=f(x,1);}return l>r;}int f(String x,int i){if(x.contains("#"))return 0;int n=0;for(int c:x.trim().split("\\s+")[i].getBytes())n+=c-48;return n;}

이번에 는 52 바이트 보다 긴 비트 입니다. ;)
그리고 다시 false오른쪽과 true왼쪽으로 돌아갑니다 .

설명:

boolean c(String s){              // Method with String parameter and boolean return-type
  int l=0, r=0;                   //  Right and left counters
  for(String x : s.split("\n")){  //  Loop over de lines
    l += f(x,0);                  //   Add all left digits to the left-counter
    r += f(x,1);                  //   Add all right digits to the right-counter
  }                               //  End of loop
  return l>r;                     //  Return whether the left-counter is larger than the right-counter
}                                 // End of method

int f(String x, int i){           // Separate method with String and integer parameters, and int return-type
  if(x.contains("#"))             //  If the current line contains "#"
    return 0;                     //   Simply return 0
  int n=0;                        //  Counter
  for(int c :                     //  Loop over the digits by
              x.trim()            //    first removing leading and trailing whitespaces
              .split("\\s+")      //    then split them right in the middle
              [i]                 //    then pick either the left or right side based on the int index parameter
              .getBytes())        //    and convert that String to a byte-array
    n += c-48;                    //   For each of those digit-characters: add it to the counter
                                  //  End of loop (implicit / single-line body)
  return n;                       //  Return the counter
}                                 // End of separate method

테스트 코드 :

여기에서 시도하십시오.

class M{
  boolean c(String s){int l=0,r=0;for(String x:s.split("\n")){l+=f(x,0);r+=f(x,1);}return l>r;}int f(String x,int i){if(x.contains("#"))return 0;int n=0;for(int c:x.trim().split("\\s+")[i].getBytes())n+=c-48;return n;}

  public static void main(String[] a){
    M m = new M();
    System.out.println(m.c(" 1     2\n  1   2\n   1 2\n    #\n    #\n    #"));
    System.out.println(m.c(" 1     2\n  2   2\n   1 1\n    #\n    #\n    #"));
    System.out.println(m.c(" 12    2\n  11  2\n   1 1\n    #\n    #\n    #"));
    System.out.println(m.c(" 99   989\n  99  89\n  99 99\n  99 99\n    #\n    #\n    #\n   # "));
    System.out.println(m.c("1111 1110\n 001 111\n  11 11\n  11 11\n    #\n   ##\n  ##\n ##  "));
    System.out.println(m.c("1       1\n 0     1\n  1   1\n  1   1\n  1   1\n  1   1\n   1 1 \n    #\n    #\n    #\n     #\n      #"));
    System.out.println(m.c("1   1 \n 0   1 \n  1   1\n  1   1\n  1   1\n  1   1\n   1 1 \n    #\n    #\n    #\n     #\n      #"));
  }
}

산출:

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