전기 콘센트


23

이것은 NCPC 2005 의 문제입니다 . Roy에는 단 하나의 전기 콘센트가있는 아파트가 있지만 전원 스트립이 많이 있습니다. 그가 가지고있는 멀티탭을 사용할 수있는 최대 콘센트 수를 계산하십시오. 파워 스트립 당 콘센트 수는 입력으로 제공됩니다.

스트립의 출구 수가 각각

p1,p2,,pn

콘센트의 수는 .

1n+ipi

또는

1+p11+p21++pn1
.

프로그램 또는 함수에 대한 입력 은 비어 있지 않은 양의 정수 시리즈입니다.

2 3 4
> 7
2 4 6
> 10
1 1 1 1 1 1 1 1
> 1
100 1000 10000
> 11098

17
그리고 나는 당신이 파워 스트립을 연결해서는 안된다고 생각했습니다 ...
Joey

내가 Retina에게 말할 수있는 한 단항 입력을 사용하는 유일한 대답입니다. codegolf.stackexchange.com/questions/71047/electrical-outlet/… 에 대한 의견 토론을 원할 수도 있습니다. ... 단항 솔루션이 너무 심하지 않은 해킹이라고 생각하면 도전 과제, 입력이 10 진수이어야한다고 지정하게되어 기쁩니다 (그리고 그에 따라 내 대답을 수정합니다).
Martin Ender

7
전기는 너무 비싸기 때문에 더 많은 에너지를 사용하지 않도록 코드가 가능한 짧아야합니다.
cat

1
@cat 오래된 햄스터 구동 식 튜링 기계와 기계 컴퓨터를 파낼 시간입니다.
Pharap

1
@immibis는 확실하지만 출력은 터미널에서 렌더링 한 결과가 아닌 바이트 스트림에 포함 된 정보로 처리됩니다.
Martin Ender

답변:



29

망막 , 3 바이트

 1

후행 줄 바꿈이 중요합니다.

입력은 공백으로 구분 된 단항 숫자 목록입니다 .

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

설명

이 코드는 단순히 1문자열에서 모든 공백뿐만 아니라 공백을 제거 합니다. 그 이유는 다음과 같습니다.

단항에 추가하는 것은 간단합니다. 구분 기호를 제거하는 것과 동일한 숫자를 연결하십시오. 1 씩 줄이는 것도 간단합니다. 1각 숫자에서 a 만 제거하면 됩니다. 우리는 감소 된 입력의 합보다 1을 더 원하기 때문에 1공백 뒤에서 찾은 s 만 제거 하여 첫 번째 입력을 제외한 모든 입력을 줄입니다.


1
단항 입력이 허용되어야하는지 궁금합니다.
존 드보락

챌린지가 명시 적으로 10 진수 입력을 지정하지 않는 한 @JanDvorak 기본적으로 사용됩니다. (답변의 링크를 참조하십시오.) 중요하지 않습니다. 젤리가 어쨌든 승리하고 있습니다.
Martin Ender

@ MartinBüttner이 질문과 원래 과제 모두에 표본 데이터가 있습니다. 전달하는 데 필요한 (충분하지는 않지만) 기준이되어야하며 코드가 완전 샘플 데이터와 함께 작동해야한다고 생각하지 않습니까?
nitro2k01

1
@ nitro2k01 아니요 (이 경우 대부분의 답변이 유효하지 않을 수 있습니다). 챌린지가 특정 입력 형식을 명시 적으로 지정하지 않으면 일반적으로 목록을 기본 목록 형식으로 가져올 수 있다고 가정합니다 . 숫자 형식도 마찬가지입니다 (챌린지가 금지하지 않는 한 바이트 값이 합의에 의해 허용 될 때 적어도 단항 및 정수 사용). 챌린지에 모든 생각할 수있는 기본 입력 형식으로 샘플 데이터를 포함하는 것은 거의 불가능합니다.
Martin Ender

@ MartinBüttner Imo는 권장 사항이 해결하는 문제가 아닙니다. 여전히 이것을 반대하는 것은 (실수하지 않으면) 단항은 Retina에서 지원되는 또는 기본 숫자 형식이기 때문에 작동하지 않지만 문자열을 문자열 데이터로 처리 할 때 작동한다는 것입니다. 해킹입니다. 그것은 영리한 해킹이지만 규칙에 따른다는 것을 여전히 확신하지 못합니다. 공백으로 구분 된 단항 숫자가 바이트 목록이 bf의 기본 형식과 동일한 방식으로 Retina의 기본 형식 인 경우 권장 사항이 적용되며 다른 의견을 가질 것입니다.
nitro2k01

9

헥사 고니 , 18 14 바이트

.?<_(@'")>{+.!

펼쳐진 :

  . ? <
 _ ( @ '
" ) > { +
 . ! . .
  . . .

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

나는 측면 길이 2가 가능하다고 생각하지 않지만,이 있어야 이 그보다 효율적인 측면 길이 3의 솔루션이 될 수 있습니다.

이것은 일반적인 "모두 감소, 합계, 증분"방식이지만 나중에 16 진법에서 정확히 어떻게 작동하는지 보여주기 위해 다이어그램을 추가해야합니다.




7

하스켈, 17 15 바이트

foldl1$(+).pred

사용 예 : ( foldl1$(+).pred ) [2,4,6]-> 10.

이전 버전, 다른 접근 방식, 17 바이트 : succ.sum.map pred.


6

J, 6 바이트

+/+1-#

합에 1을 뺀 길이. 다음과 같이 괄호로 묶고 적용하십시오.

   (+/+1-#) 2 3 4
7

6

미로 , 9 바이트

"?;)!@
+(

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

일반적인 프라이머 :

  • 미로는 2D 및 스택 기반입니다. 스택의 맨 아래에는 무한의 0이 있습니다.
  • 명령 포인터가 접점에 도달하면 스택의 상단을 확인하여 다음 회전 위치를 결정합니다. 음수는 남아 있고, 0은 앞으로, 양수는 오른쪽입니다.

여기서 우리는 왼쪽 상단에서 시작하여 "오른쪽으로 향합니다. 다음은 ?STDIN에서 int를 읽는 것입니다 (문자를 버림으로써 정수로 해석 할 수 없습니다 (예 : 공백)). 이제 두 가지 경우가 있습니다.

입력이 양수이면 우회전하여 다음을 수행합니다.

(            decrement top of stack
+            add top two stack elements
             [continue loop]

입력이 0이면 (EOF에서 발생) 다음을 수행하면서 바로 진행합니다.

;            pop zero from EOF
)            increment top of stack
!            output top of stack as number
@            halt program

5

Pyth, 5 바이트

hstMQ

증가 (합 (맵 (감소, 입력)))


5

ES6, 25 바이트

a=>a.map(n=>r+=n-1,r=1)|r

4
나는 "감소가 게임에서 이길 때 드문 경우 중 하나"...를 게시하려고했는데 25도 l=>l.reduce((a,b)=>a+b-1)였습니다.
edc65

@ edc65 예, (,b)비용이 많이 들지만 그 버전도 좋아합니다.
Neil


4

05AB1E , 4 바이트

암호:

E<O>

설명:

E     # Evaluates input
 <    # Decrement on list
  O   # Compute the total sum
   >  # Increment on the sum
      # Implicit: output top of the stack

배열처럼 입력을 [3, 4, 5]받습니다 (예 :) .


골프 랭에 매우 우아함
Pharap

4

별이 빛나는 , 26 24 바이트

, + '`      + ** `, +'*.

줄 바꿈으로 구분 된 정수를 기대합니다. 온라인으로 사용해보십시오!

-2 바이트에 대한 @ MartinBüttner에게 감사합니다.

,           Read line as integer
 + '        Dupe and jump to label 1 if nonzero
`           Set label 0
      +     Push 1
 *          Sub
*           Add
 `          Set label 1
,           Read line as integer
 + '        Dupe and jump to label 0 if nonzero
*           Add
.           Output as integer

루프가 풀려 첫 번째 숫자가 감소하지 않으므로 증분 할 필요가 없습니다. Starry에서는 숫자를 누르는 것이 비쌉니다 ...


20 바이트 만 계산합니다.
애디슨 크럼

1
@VoteToClose 선행 공간을 세었습니까? (나는 당신이 26 바이트에 대해 이야기하고 있다고 가정합니다)
Sp3000

4

배쉬 + GNU 유틸리티, 16

N전원 스트립 이 있으면 N-1쉼표로 구분 된 입력 목록에 구분 기호 가 있어야 합니다. 구분자를 대체 - 1 +하고 산술적으로 평가하기 만하면됩니다.

sed s/,/-1+/g|bc

또는 동일한 트릭을 사용하십시오.

퓨어 배쉬 (외부 유틸리티 없음), 19

echo $[${1//,/-1+}]

3

APL (NARS 2000), 13 10 바이트

{1+(+/⍵)-⍴∊⍵}

편집 : Lynn의 (더 나은) 접근 방식으로 10까지 줄입니다.

{1++/1-⍨⍵}


3

gs2, 5 바이트

(CP437 인코딩)

W&Φd'

그렇습니다 read-nums dec m1 sum inc.


3

CJam, 7 바이트

q~:(:+)

여기에서 테스트하십시오.

Lynn과 동일한 접근 방식 (모두 감소, 합계, 증분). 이것은 8 바이트에서도 작동합니다 (그리고 아마도 더 흥미 롭습니다).

q~{(+}*

목록 위에 "감소, 추가"를 접습니다. 이렇게하면 감소가 첫 번째를 제외한 모든 요소에만 적용되므로 증분을 별도로 처리 할 필요가 없습니다.


3

C, 60 59 55 바이트

x;main(s){while(~scanf("%i",&x))s+=x-1;printf("%i",s);}

3

펄 6, 14 바이트

{1+[+] --«@_}

용법

my &f = {1+[+] --«@_}

say f([2,3,4]) # 7
say f([2,4,6]) # 10
say f([1,1,1,1,1,1,1,1]) # 1
say f([100,1000,10000]) # 11098

나는 완전히 똑같은 것에 대한 내 대답을 편집하려고했습니다 ( html 주석 참조 )
Brad Gilbert b2gills

11 바이트 :{.sum-$_+1}
nwellnhof


2

펄 6 , 20 바이트

put 1+sum --«@*ARGS

( <<대신 사용할 수 있습니다 «)

용법:

$ perl6 -e 'put 1+sum --«@*ARGS' 100 1000 10000
11098

«펄 연산자입니까?
user253751

@immibis 실제로 여러 Perl 6 연산자의 @arraya »+« @arrayb ++«@array @array».method @array»++ « a 'space separated' list of words »일부입니다. 그 중 일부는 다른 연산자와 결합 된 메타 연산자입니다. (Perl 5에는 현재 해당 연산자가 없습니다.)
Brad Gilbert b2gills

2

펄 5 23 + 2 = 25 또는 19 + 2 = 21

-ap플래그 필요 :

map{$.+=($_-1)}@F;$_=$.

파일에 저장하고 다음으로 실행

perl -ap file.pl

편집 : 또 다른 대답은 작지만 (19 + 2) 기본적으로 dev-null 답변에서 복사되었습니다.

$.+=$_-1for@F;$_=$.

2

F #, 25 바이트

Seq.fold(fun s n->s+n-1)1

정수의 배열 / 목록 / 시퀀스를 받아서 필요한 결과를 반환하는 함수입니다.

작동 방식 :

Seq.fold시퀀스의 모든 요소에 함수를 적용하는 동안 일부 상태를 전달할 수 있습니다. 첫 번째 요소에 적용되는 함수의 결과는 두 번째 요소의 함수에 포함될 상태 등을 제공합니다. 예를 들어 list를 요약하려면 다음 [1; 3; 4; 10]과 같이 작성하십시오.

Seq.fold (fun sum element -> sum + element) 0 [1; 3; 4; 10]
         (       function to apply        ) ^ (sequence to process)
                                     ( initial state )

다음과 같이 적용됩니다.

// First, initial state  + first element
0 + 1  = 1
// Then, previous state + next element until the end of the sequence
1 + 3  = 4
4 + 4  = 8
8 + 10 = 18

마지막 상태는의 반환 값입니다 Seq.fold.


2

𝔼𝕊𝕄𝕚𝕟, 5 자 / 7 바이트

ï⒭+‡_

Try it here (Firefox only).

10 비트 문자 (thx @Dennis!)와 함께 사용자 지정 인코딩을 사용합니다. encode('ï⒭+‡_')JS 콘솔에서 실행 하여 인코딩 된 양식을 가져오고 decode(/*ENCODED TEXT HERE*/)인코딩 된 양식을 디코딩하십시오.

설명

다음과 같이 Javascript ES6으로 변환합니다.

i=>i.reduce(($,_)=>$+--_)

재미있는 인코딩.
lirtosiast

꽤 잘 작동합니다.
Mama Fun Roll

2

모닝 턴 초승달 , 1909 1873 1839 바이트

Take Northern Line to Stockwell
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Turnham Green
Take District Line to Hammersmith
Take District Line to Turnham Green
Take District Line to Notting Hill Gate
Take Circle Line to Notting Hill Gate
Take Circle Line to Bank
Take Circle Line to Embankment
Take Northern Line to Stockwell
Take Northern Line to Embankment
Take Circle Line to Temple
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Blackfriars
Take Circle Line to Embankment
Take District Line to Parsons Green
Take District Line to Bank
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Parsons Green
Take District Line to Embankment
Take Circle Line to Blackfriars
Take Circle Line to Bank
Take Northern Line to Angel
Take Northern Line to Bank
Take Circle Line to Bank
Take District Line to Upminster
Take District Line to Bank
Take Circle Line to Bank
Take Northern Line to Mornington Crescent

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


"모든 지시 사항의 90 %가 디스트릭트 라인을 이용하는 것과 관련이 있습니다." 디스트릭트가 모든 산술 스테이션이있는 곳이기 때문입니다. 그러나 TIO에서는 모든 예제에서 작동하지 않는 것 같습니다 .
NieDzejkob

가능한 경우 더 짧은 라인 이름을 사용하여 1873 바이트
NieDzejkob

TIO의 통역사는 버그가 있으며 Turnham Green을 구현하지 않습니다
pppery

잘 잡았다. 업스트림을 수정하는 PR을 보냈습니다.
NieDzejkob

1

파이썬 3, 79 바이트

import sys
print(sum(map(lambda x: int(x)-1, sys.stdin.readline().split()))+1)

줄 바꿈을 2 바이트로 계산하는 것 같습니다. 바이트를 저장하기 위해 세미콜론으로 바꾸십시오. 몇 개의 공백도 제거 할 수 있습니다.
Daffy

1

루비, 30 바이트

$*.inject(1){|s,v|s+=v.to_i-1}

충분히 간단합니다-1에서 시작하여 제공된 숫자를 각각 -1로 더하십시오 (명령 줄 인수는에 있음 $*). 수치심 inject은 그렇게 긴 단어입니다.


1

PowerShell, 19 바이트

$args-join'-1+'|iex

이 ( 1 + p1-1 + p2-1 + ... + pn-1는)와 동일합니다 p1-1 + p2-1 + ... + pn.

을 사용하여 입력을 별도의 명령 줄 인수로 사용 $args합니다. 우리 -join-1+구분 기호 와 함께와 같은 문자열을 만듭니다 2-1+3-1+4. 그런 다음 문자열을 Invoke-Expression(와 유사하게 eval) 파이프 하고 결과를 출력합니다.


1

펄, 21 + 2 = 23 바이트

$a+=$_-1for@F;say++$a

필요 -a-E:

$ perl -aE'$a+=$_-1for@F;say++$a'<<<'2 3 4'
7

-a플래그를 사용하여 @F이미 분할 된 요소로 변수 를 가져 오고 -n을 -p로 바꾸면 dont'need say가 21 + 2로 줄어 듭니다.$a+=$_-1for@F;$_=++$a
ChatterOne

어쨌든 사용해야하므로 -p대신 대신 사용 하는 say것이 동일 $_=합니다.
andlrc

@ChatterOne -a은 좋은 생각입니다!
andlrc

1

Brainfuck, 15 바이트

가정 :, 연산자는 모든 입력이 소진되면 0을 반환하고 플러그가 0 인 연장 코드가 없습니다. 또한 IO는 ASCII 문자 코드 대신 바이트 값이어야합니다.

+>,[-[-<+>],]<.

설명 : 2 개의 레지스터를 사용합니다. 플러그를 꽂을 수있는 장치 수를 나타내는 "Value"누산기 레지스터 및 현재 코드 값을 추적하는 "current code"레지스터 기존 콘센트에 대해 값을 1 씩 증가시켜 시작합니다. 그런 다음 각 연장 코드에 대해 플러그를 뽑아서 값에서 1을 빼고 플러그 수만큼 값을 증가시킵니다.

대부분의 온라인 인터프리터는 원시 바이트 입력 모드에서 작동하지 않습니다. 온라인으로 테스트하려면 다음 코드를 사용하십시오.

+>,[->-[>+<-----]>---[-<+>]<[-<->]<[-<+>],]<.

프로그램을 어딘가에서 테스트 할 수 있습니까?
Pål GD

고마워, 그 실수를 고쳤다. 바이트 모드에서 작동하는 온라인 인터프리터를 알지 못합니다. 온라인 인터프리터에서 실행될 입력에서 '0'을 빼는 구현을 함께 던질 수 있습니다.
Ethan

코드를 테스트하려면 여기에서 코드를 실행하십시오. copy.sh/brainfuck 숫자 값 사이에 공백을 넣지 마십시오. 불행히도 ASCII 모드로 작동하기 때문에 데모 코드는 한 자리 숫자에서만 작동합니다. 그러나 15 바이트 버전은 <= 255 값에서 올바르게 작동합니다. 실행 후 메모리 덤프를보고 최종 값을보십시오.
Ethan

언젠가 BF는 예상 IO에 대한 적절한 표준을 가지고 있으며 '입력 및 출력이 모두 널 문자로 종료됩니다'대신 '표준 3 사용'이라고 말할 수 있습니다.
Pharap
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.