iOS 11 계산기 구현


43

iOS 11에는 1 + 2 + 3의 결과를 24로 만드는 버그 가 있습니다 . 이것은 애니메이션 속도와 관련이 있지만 어쨌든 :

과제는 만드는 것 1 + 2 + 3 == 24입니다. 그러나 그것만. 그래서 당신은 제대로 대부분의 시퀀스하지만 수익을 요약하는 기능 제공해야 24인수가 때를 1, 2그리고 3어떤 순서로한다.

입력 예 :

1 2 => 3
3 4 => 7
1 2 3 4 5 6 7 8 9 => 45
3 2 1 => 24
2 1 3 => 24
1 1 => 2
1 2 3 => 24
40 2 => 42
1 2 2 4 => 9
1 2 3 4 1 2 3 => 16
1 => 1
1 23 => 24
0 1 2 => 3
3 2 3 => 8

코드가 많은 수의 인수를 허용하는 한 입력 형식은 모든 형식이 될 수 있습니다.

  • 음수 지원이 필요하지 않습니다 (0이 포함 된 모든 음수가 아닌 숫자가 작동해야 함)
  • 올바른 입력을 가정합니다

다른 유사한 질문과의 차이점 : "6에 9를 곱하면 무엇을 얻습니까? (42)" :

  • 이 경우 함수는 받아 들일 필요가 있는 인수의 수입니다. 이전 질문은 정확히 2를 지정합니다.
  • 이 경우 순서는 중요하지 않지만 이전 질문은 순서 6 9가 필요하며 9 6올바르게 평가되어야한다고 지정했습니다 .

23
또한 iOS 11은 그런 식으로 작동하지 않습니다. 대신 이와 같아야합니다 . ( 코드 설명 )
user202729

3
@ user202729이 질문은 아마도 iOS 11에서 영감을 얻은 것입니다. OP가 완전히 복제하도록 요구하지는 않습니다.
Okx

2
@Okx 정확히. 이것은 재미를 위해서 일대일 구현하지 않습니다. 물론 이것은 user202729 제안으로 변경 될 수 있지만, 원한다면 그가 그러한 과제로 새로운 도전을 만들 수 있습니다.
Hauleth

3
입력이 정수입니까?
xnor

9
이것이 아름다운 도전이되는 한 가지 이유는이 숫자 조합이 매우 특별한 속성과 관련되어 있기 때문입니다 . 이것이 아름다운 도전이되는 또 다른 이유는 기능보다 UX의 우선 순위를 정하는 데있어 애플이 재미를 느끼기 때문입니다.
NH.

답변:




11

자바 8 109 106 101 90 75 74 71 66 바이트

a->{int s=0,p=0;for(int i:a){s+=i;p|=1<<i;}return s<7&p==14?24:s;}

@ OlivierGrégoire 덕분에 -12 바이트 . @Nevay
덕분에 -31 바이트 .

설명:

여기에서 시도하십시오.

a->{                  // Method with integer-array parameter and boolean return-type
  int s=0,            //  Sum-integer, starting at 0
      p=1;            //  Product-integer, starting at 1
  for(int i:a){       //  Loop over the input-array
    s+=i;             //   Add current item to sum
    p|=1<<i;          //   Take 1 bitwise left-shifted with `i`, and bitwise-OR it with `p`
  }                   //  End of loop
  return p==14        //  If `p` is now exactly 14 (`0b1110`)
    &s<7?             //  and the sum is 6 or lower:
     24               //   Return 24
    :                 //  Else:
     s;               //   Return the sum
}                     // End of method

(비효율적 임) 이 ( ) 일 [1,2,3]때 합계가 6 이하 ( ) 일 때 가능한 결과가 될 수 있다는 증거 : 여기에서 시도하십시오.p0b1110p==14s<7

p==14(는 0b1110입력 값 (32 개)은 커버 값을 모듈로 IFF에) 참으로 평가 1, 23어떠한 다른 값 (함유 없음 p|=1<<i) (각 값은 1 + 번 발생한다). 일치하는 입력의 합은 ( with )을 제외한 모든 입력 p==14보다 큽니다 . N61,2,3s=a*1+b*2+c*3+u*32a>0,b>0,c>0,u>=0


이전 71 바이트 답변 :

a->{int s=0,p=1;for(int i:a){s+=i;p*=i;}return a.length==3&p==s?s*4:s;}

0이 아닌 자연수 3 개에 대해 [1,2,3](어떤 순서로든) 만 제품 ( 1+2+3 == 1*2*3)과 양의 합 (양의 합)을
습니다. 합이 Leo Kurlandchik & Andrzej Nowicki 의 제품과 같을 때

(비효율적 임) 음수가 아닌 숫자와 길이가 3 인 경우에만 [1,2,3](어떤 순서로든) [0,0,0]가능한 결과가 될 수 있음을 증명 하십시오. 여기에서 시도하십시오.
그래서 s*4의지가된다 6*4 = 24위해 [1,2,3], 그리고 0*4 = 0에 대한 [0,0,0].



7

MATL , 13 바이트

stGp=18*Gda*+

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

다른 MATL 답변보다 2 바이트 더 길지만 완전히 다른 (그리고 더 흥미로운 IMO) 접근법을 사용하므로 게시 할 가치가 있다고 생각했습니다.

설명:

이 솔루션은 다음과 같은 사실을 사용합니다.

세 개의 요소를 가진 배열의 합과 곱은 배열이 순열 인 경우에만 같습니다 1,2,3.

입력을 받아 합계를 계산하여 s복제합니다 t. 그런 다음 합계가 곱과 같은지 확인합니다 Gp=. boolean 1/0에 18을 곱하고 18*벡터에 동일하지 않은 값이 있는지 확인합니다 da*(다시 boolean any(diff(x))을 곱한 후 마지막 두 숫자에 원래 합계를 더합니다).

단계별 설명 :

입력이 [1, 2, 3]다음과 같다고 가정하십시오 .

s                              % Implicit input, calculate the sum
                               % 6
 t                             % Duplicate the sum:
                               % 6, 6
  G                            % Grab input
                               % 6, 6, [1,2,3]
   p                           % Calculate the product
                               % 6, 6, 6
    =                          % Check if the last two elements are equal
                               % 6, 1 (true)
     18*                       % Push 18, multiply by the last number
                               % 6, 18
        G                      % Grab input
                               % 6, 18, [1,2,3]
         d                     % Calculate the difference between each element
                               % 6, 18, [1,1]
          a                    % any non zero elements?
                               % 6, 18, 1 (true)
           *                   % Multiply last two numbers
                               % 6, 18
            +                  % Add numbers. Result: 24

6

파이썬 2 , 39 바이트

lambda*a:sum(a)+18*(sorted(a)==[1,2,3])

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

정렬 된 입력이 다른 Python 응답 을 바이트만큼 [1, 2, 3]이길 경우 18을 더하는 대체 방법을 사용합니다 .


sorted(a)==[1,2,3]set(a)=={1,2,3}3 바이트를 절약 할 수 있습니다 .
mypetlion

1
@mypetlion 불행히도 다음과 같은 복제본이있는 목록에 해당됩니다.[1, 2, 3, 3]
FlipTack

웁스. 나는 우리가 정확히 3 개의 입력으로 제한되었다.
mypetlion

6

하스켈 , 37 바이트

f[a,b,c]|2^a+2^b+2^c==14=24
f l=sum l

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

우리는 예외적 인 경우를 잡기 위해 패턴 매칭을 사용합니다.

Haskell에는 정렬 기능이 없습니다. 음수가 아닌 정수 중 순열 2^a+2^b+2^c==14만으로 동등성 이 충족됩니다 . 짧을수록 거의 작동하지만에 만족 하고 확인 을 추가하면 1 바이트가 길어집니다.[a,b,c][1,2,3]a+b+c=a*b*c[0,0,0],a>0


4

옥타브 , 34 바이트

@(x)sum(x)+isequal(sort(x),1:3)*18

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

또는

@(x)(s=sum(x))+18*~(s-6|prod(x)-6)

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

또는

@(x)(s=sum(x))+18*~(s-prod(x)|s-6)

이것은 다른 사람들이 사용하는 접근 방식보다 짧습니다 @(x){24,sum(x)}{2-isequal(sort(x),1:3)}.

설명:

벡터의 합을 취하고 정렬 된 벡터가 같으면 18을 더합니다 1,2,3. 이것은 6+18=24벡터가 순열인지 아닌지, 벡터 1,2,3의 합계 만 줄 것 입니다.


4

PHP, 116 바이트

이것은 골프 도전에 대한 나의 첫 번째 시도이며, 여기에서 거의 볼 수 없기 때문에 골프에서 짜증나는 언어 인 PHP입니다.

<?php
//call as var/www/html/cg_ios.php --'1 2 3 4 5'
$i=$argv[1];$a=(explode(' ',$i));echo((($b=array_sum($a))==6&&count($a)==3&&in_array(3,$a)&&!in_array(0,$a)?24:$b));

참고 : 바이트 수에 주석을 포함시키지 않았습니다.

언 골프

특별한 아무것도 아닙니다.

$i=$argv[1];             //Read the input from the command line
$a=array_filter($c=explode(' ',$i)) //Split the input string into an array, use Whitespace as delimiter
                         //also, remove all 0 from the array, since they are not important at all
echo(                    //print the result
    ($b=array_sum($a) == 6  //If The SUM of the Array is 6 ...
        &&               //... AND ...
    (count($c) == 3)     //... the array has exactly 3 values ...
        &&               //... AND ...
    in_array(3,$a)       // ... the array contains the value 3 ...
        &&               // ... AND ...  
    !in_array(0,$a)      //... the array contains no zeros
        ?
    24                   //print 24
        :
    $b));     //print the sum of the array values we saved earlier

콘솔에서가 아니라 PHPFiddle에서 이것을 테스트하고 싶다면 분명히 원하는 것으로 바꿀 수 있습니다 $i.

Olivier Grégoire 덕분에 [0,3,3]24 시간 전에 반환 된 문자열 조합 을 알았 array_sum으며 함수를 다시 실행하는 대신 저장 하고 반환 하여 몇 가지 문자를 절약 할 수 있었습니다.


사이트에 오신 것을 환영합니다.
caird coinheringaahing

입력 값은 [0, 3, 3]어떻습니까? 또한 결과를 array_sum($a)변수에 저장 하고 재사용 할 수 없습니까?
Olivier Grégoire

@ OlivierGrégoire 너무 고쳐서, 분명히 그 사건을 놓쳤습니다. 아마 더 나은 해결책을 생각할 수 있습니다. 이것은 심지어 내 표준조차도 정말 지저분합니다.
YU NO WORK

Golfed 코드는 argv에 $ 누락 된 [1]
manassehkatz

4

R, 47 바이트 34 바이트 36 바이트

x=scan();all(sort(x)==1:3)*18+sum(x)

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

입력 세트가 1 : 3이면 입력을 합산하고 18을 더합니다.
11 바이트를 골라 낸 @mlt에게 감사드립니다. 오버 골프 코드에서 오류를 식별 한 @ Ayb4btu에게 감사합니다.


3

자바 스크립트 ES6, 39 바이트

@Herman Lauenstein에게 감사합니다

a=>a.sort()=="1,2,3"?24:eval(a.join`+`)

f=a=>a.sort()=="1,2,3"?24:eval(a.join`+`)

console.log(f([1,2,3]));
console.log(f([1,2,3,4]));

이전 답변

자바 스크립트 ES6, 66 바이트

a=>(n=[1,2,3],a.every(_=>n.includes(_))?24:a.reduce((x,y)=>x+y,0))

시도 해봐

f=a=>(n=[1,2,3],a.every(_=>n.includes(_))?24:a.reduce((x,y)=>x+y,0))

console.log(f([1,2,3]));
console.log(f([1,3,2]));
console.log(f([1,2,3,4]));


58 바이트 :a=>(Array.sort(a).join()=="1,2,3"?24:a.reduce((x,y)=>x+y))
Okx

a.sort()=="1,2,3"공장.
Neil

39 바이트 : a=>a.sort()=="1,2,3"?24:eval(a.joinBT+BT)(BT를 백틱으로 대체)
Herman L

3

스위프트, 67 바이트

func z(i: [Int])->Int{return i.sorted()==[1,2,3] ?24:i.reduce(0,+)}

[Int]의 확장자를 사용하여 27 바이트로 만들 수는 있지만 부정 행위입니다.


1
사이트에 오신 것을 환영합니다! 이것은 코드 골프 대회입니다. 공백을 제거하는 등 가능한 한 많이 골프를 칠 수 있습니다. 또한 Swift를 모르지만 정확하면 입력을 변수에 저장하므로 허용되지 않습니다. 그러나이를 기능으로 전환 할 수 있습니다.
caird coinheringaahing

1
조금 골프를 쳤다 : func z(i:[Int]){print(i.sorted()==[1,2,3] ?24:i.reduce(0,+))}.
Mr. Xcoder

1
{$0.sorted()==[1,2,3] ?24:$0.reduce(0,+)}as([Int])->Int익명 함수는 표준 규칙에 따라 허용되므로 55 바이트 (-12) : 여기서 어떻게 작동하는지 확인할 수 있습니다 .
Mr. Xcoder

@ Mr.Xcoder 당신은 캐스팅을 생략하고 선언하는 f 상수에 추가 할 수 있습니다. 또는 폐쇄 내부의 유형을 넣어 당신이 제거 as:
도미니크 부커

2
스위프트의 경우 +1 이것이 iOS 계산기의 원래 소스 코드입니까?
GB


2

J, 17 바이트

Frowny Frog 덕분에 -6 바이트

+/*1+3*1 2 3-:/:~

모든 숫자를 합산 +/하고 결과에 (의사 코드)를 곱하십시오 1 + 3*(is123 ? 1 : 0). 즉, 정렬 된 목록이 1 2 3어떤 경우에도 결과에 4를 곱 하지 않으면 결과를 변경하지 않고 반환합니다 .

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

원래 답변

+/`(24"_)@.(1 2 3-:/:~)

정렬 된 입력이 맞는지 확인하십시오. 1 2 3예인 경우 상수 함수 24 ( 24"_)를 호출하십시오 . 그렇지 않은 경우 합계를 반환+/

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


나는 J를 모르지만 1 2 3→ 할 수 i.3있습니까?
Uriel

@Uriel은를 i.3생성 0 1 2하므로 1+i.3문자를 저장하지 않지만 명확하지 않은 작업을 수행해야 합니다.
Jonah

맞다, 나는 J가 0 인 것을 잊었다
Uriel

[:+/8"0^:(1 2 3-:/:~)
FrownyFrog

+/@,[*3*1 2 3-:/:~
FrownyFrog


2

루아 , 116 81 바이트

Jonathan 덕분에 -7 바이트

명령 행 인수로 입력을받습니다.

Z=0S={}for i=1,#arg do
j=arg[i]+0S[j]=0Z=Z+j
end
print(#S>2 and#arg<4 and 24or Z)

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

설명:

희소 배열을 만들고 S입력 값에 해당하는 인덱스에 0을 추가하여 작동 합니다. 매개 변수가 3, 4, 7희소 인 경우 해당 인덱스에는 숫자 만 있습니다. 해당 배열, 우리는 운영자와 그것의 길이를 얻을 #인덱스에서 카운트 것을 1이 길이가 정확히 경우에 값을 가지고 높은 인덱스까지가 3, 그 위치에있는 요소가 있다고 의미를 1, 2그리고 3느릅 나무는 우리가있어 무엇인가 찾고있는. 희소 배열의 길이는 항상 매개 변수의 수 사이 0이며 N어디에 있습니까 N? 따라서 매개 변수 배열과 스파 스 배열의 길이가 모두인지 확인해야합니다 3.



당신은 아무것도 보지 못했습니다 (아직 5 분이
지났기

예, 방금 내 대답에서 동일한 결함을 발견했습니다. array-length == 3 AND A == S AND S> 0을 사용하여 수정했습니다. 그러나 #argsLua 의 길이를 확인하는 것이 너무 바이트가 무겁습니까? 이 경우 90 바이트 답변으로 롤백 할 수 있습니다 .. :(
Kevin Cruijssen


@JonathanS. 좋은 것
펠리페 나디 바티스타

2

R , 55 45 54 49 57 54 48 바이트

Ayb4btu 덕분에 많은 바이트와 잘못된 솔루션이 절약되었습니다.

주세페 덕분에 3 9 바이트를 절약했습니다 . 나는 사실을 남용하는 새로운 방법을 계속 배웁니다 F==0.

"if"((s=sum(x<-scan()))-prod(x)|sum(x|1)-3,s,24)

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

다른 R 답변은 결국 승리했습니다.


실패 [0,0,0]: : 24대신에 반환 합니다 0.
Olivier Grégoire

나는 스펙에서 '음이 아닌'과 '단일 수 있습니다'를 모두 놓쳤다. 기다려.
BLT

c(1,1,2,3)28대신에 반환7
Ayb4btu

@ Ayb4btu 감사합니다.
BLT

1
x=scan();s=sum(x);"if"(s-prod(x)|s-6|length(x)-3,s,24)조건을 바꾸고 |대신 사용 하는 54 바이트 &이므로 빼기 할 수 있습니다.
Giuseppe


1

망막 , 21 바이트

O`
^1¶2¶3$
24
.+
$*
1

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

입력은 줄 바꿈으로 구분되지만 테스트 스위트는 편의를 위해 쉼표로 구분합니다.

설명

O`

정렬 숫자가 (사전 식 사실,하지만 우리는 단지 사건에 대해 관심을 입력이라는 것을 1, 2, 3그 변화를하지 않는 어떤 순서에서).

^1¶2¶3$
24

입력이 1,2,3(순서대로) 있으면 24로 교체하십시오.

.+
$*

각 숫자를 단항으로 변환하십시오.

1

의 수를 세어 1단항 숫자를 더하고 10 진수로 다시 변환합니다.


호기심에서 귀하의 설명에 따라 마지막 줄이 일치하는 모든 항목을 계산한다는 것을 이해합니다 ( 1이 경우 모든 것 ). Retina는 항상 단일 최종 라인을 위해 이것을합니까? 아니면 1사이의 어딘가에있는 모든 것을 계산할 수 있습니까? 그런 다음 결과를 계속하여 다른 작업을 수행하십시오 (바꾸기 작업에 두 줄을 다시 사용함)? 또한 또 다른 관련 질문 : Retina의 어떤 함수가 한 줄만 필요합니까? 정렬 ( O`)은 그중 하나이며 다른 기능도 있습니다. 그러나 다른? Retina를 조금 더 이해하려고 노력했습니다. :)
Kevin Cruijssen

1
@KevinCruijssen 예, 중간에 어딘가에 (카운팅) 매치 스테이지를 사용할 수 있지만,로 스테이지를 매치 스테이지로 명시 적으로 표시해야합니다 M`. Retina가 기본적 M으로 Replace 대신 잡기 위해 단일 후행 줄이있는 경우에만 가능합니다 . AGMTS모두 한 줄 단계가있는 R두 줄이되고, O그리고 D여부에 따라 하나 명 또는 두 개의 선이다 $(종류 / deduplicate-로를 전환하는 옵션을 사용 하여 단계). 당신은 질문이있는 경우 망막 채팅방에서 저를 핑 (ping) 자유롭게 : chat.stackexchange.com/rooms/41525/retina
마틴 청산


1

PL / SQL - 135 123 바이트

i를 임의의 크기의 정수 배열 입력으로 가정 :

if (select sum(s) = exp(sum(ln(s))) from unnest(i) s) then
    return 24;
else
    return (select sum(s) from unnest(i) s);
end if;

PPCG에 오신 것을 환영합니다! 답변을 읽을 수없는 경우에도 (컴파일하는 한) 추가 공간을 모두 제거하여 골프를 치고 싶습니까?
Olivier Grégoire 8

1

C ++ 17, 56 54 바이트

[](auto...i){return(-i&...)+4|(~i*...)+24?(i+...):24;}

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

작성된 함수 객체는 컴파일 타임에 사용할 수 있으므로 프로그램을 실행할 필요없이 컴파일러가 테스트를 수행합니다.

설명:

[]             // Callable object with empty closure,
(auto...i)     // deduced argument types,
{              // and deduced return type
  return       //
      (-i&...) //   If the fold over the bitwise AND of the negation of each argument
    +4|        // is unequal to -4, or
      (~i*...) //   if the product of the bitwise complements of the arguments
    +24?       // is unequal to -24, then
      (i+...): //   return the sum of the arguments, otherwise
      24;}     //   return 24.

증명하는 유일한 음이 아닌 것을 i...있는이 (-i&...)동일 -4과 (~i*...)동일 -24의 순열은 1, 2, 3:

우리는 처음부터 관찰 -0= 0, 어떤 경우 i= 0다음 (-i&...) = 0우리가 결론을, 그래서 모든 것을이 i긍정적이다.

이제 2의 보수에서는 -i에 해당 ~(i - 1)하고 ~i에 해당합니다 -(i + 1). De Morgan의 규칙을 적용하면 (-i & ...)= ~((i - 1) | ...)= -(((i - 1) | ...) + 1)이므로 ((i - 1) | ...) = 3; 마찬가지로 -1 ** n * ((i + 1) * ...) = -24, 너무 n이상한입니다 ((i + 1) * ...) = 24.

24의 주요 요인은 2 ** 3 * 3, 그래서 n<= 4. 경우 n= 1, 우리는해야 i - 1 = 3하고 i + 1 = 24, 그래서 n= 3 작성하는 i등 wlog a <= b <= c, 다음 분명히 a그렇지 않으면로 = 1 (a + 1)(b + 1)(c + 1)> 또한 = 27 c<= 4로 그렇지 않으면 (a - 1)|(b - 1)|(c - 1)> = 4. 4 일 c수 없습니다. 5는 24의 인수가 아니므로 c<= 3입니다. 그런 다음 (a - 1)|(b - 1)|(c - 1) = 3c = 3, b = 2 를 만족시킵니다 .


1

껍질 , 9 바이트

?K24Σ=ḣ3O

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

설명

?K24Σ=ḣ3O
        O    Sort the input
?    =ḣ3     If it is equal to [1,2,3]:
 K24           Return 24
             Else:
    Σ          Return the sum of the input

이전 솔루션

[2,2]에 잘못된 결과를 제공하고 다른 입력도 가능하지만 더 흥미로 웠습니다.

?ṁD→E§eΠΣ
     §eΠΣ    Build a two-element list with the product and sum of the input
?   E        If the two elements are equal:
             (true for any permutation of [1,2,3] and the list [0,0,0]
 ṁD            Double both elements and sum them
               (This is 4 times the sum: 24 for permutations of [1,2,3], 0 for [0,0,0])
             Else:
   →          Return the last element (the sum)

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


이것은 2,2에 24를줍니다
재귀적인

@ 재귀 실제로 16을 제공하지만 당신이 맞습니다. 그리고 아마도 이것은 더 긴 배열에도 잘못된 결과를 줄 것입니다 ... 젠장, 지루한 솔루션으로 전환해야합니다
Leo

0

Pushy , 12 바이트

gF3RFx?18;S#

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

이것은 입력을 정렬하고 (과 같으면 [1, 2, 3]18을 더함) 작동합니다. 그런 다음 합계를 계산하여 인쇄하고 24를 산출하는 수는 18을 더하고 그렇지 않으면 정답을 계산합니다.

         \ Implicit: Input on stack.
g        \ Sort input ascendingly
F3RF     \ On auxiliary stack, push range(3) -> [1, 2, 3]
x?       \ If the stacks are equal:
  18     \    Append 18 to the input
;
S#       \ Print sum of input.



0

젤리 , 10 9 바이트

Ṣ24S⁼?3R¤

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

덕분에 -1 바이트 Erik

9 바이트에 대한 대안 ( Mr. Xcoder ) :

3R⁼Ṣ×18+S

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

작동 원리

Ṣ24S⁼?3R¤ - Main link. Argument: l (list)

Ṣ         - Sort
     ?    - Ternary if statement
    ⁼     -  Condition: Is l equal to...
      3R¤ -    [1, 2, 3]
 24       -  If condition: Return 24          
   S      -  Else: Return the sum of the list

Ṣ24S⁼?3R¤9 바이트를 할 수 있습니다 .
Outgolfer Erik

또는 3R⁼Ṣ×18+S9 바이트도 가능합니다.
Mr. Xcoder

0

피스 , 9 바이트

다른 Pyth 답변과 다른 접근법.

*sQ^4qS3S

설명:

내 파이썬 답변의 포트

*sQ^4qS3SQ  # Full program (Q at the end is implicit and represents the input)

*           # A * B where A and B are the next two lines
  sQ        # Sum elements of input
  ^4        # 4 to the power of:
    qS3SQ   # Compares sorted input to [1, 2, 3] and returns 0 or 1

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


0

PowerShell , 44 바이트

param($a)($a-join'+'|iex)+18*!(diff(1..3)$a)

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

Python 및 JavaScript 답변과 유사한 알고리즘. 리터럴 배열로 입력을 $a받습니다. 그런 다음 즉시 $a합쳐서 왼쪽 연산자를 형성합니다.+ .

오른손은이다 diff(별칭 Compare-Object의) 1,2,3$a-가 동일한 경우,이 중 빈 어레이, 또는 다른 항목의 비어 배열은 그들이 동일하지 않은 경우 - 부울 아니라 표로. 따라서 그것들이 같으면 빈 배열 (거짓 값)을$true 만듭니다.

그런 다음 18암시 적 $true으로 1and $falseto로 캐스트되는 값을 곱 합니다 0. 따라서 18배열이 같으면 오른쪽이 0됩니다. 24입력 배열이 1,2,3순열 인지 여부에 대한 올바른 결과를 제공하고 그렇지 않으면 입력 배열의 합계를 제공합니다.


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