간단한 작업 해결 3 회


15

한 언어로 3 개의 프로그램 및 / 또는 기능을 작성해야합니다.

이러한 프로그램은 모두 동일한 작업을 해결해야하지만 서로 다른 (그러나 유효한) 출력을 제공해야합니다. (즉, 모든 프로그램 쌍마다 서로 다른 (그러나 유효한) 출력 번호 세트를 생성하는 입력이어야합니다.)

작업

  • n1보다 큰 정수가 제공됩니다.
  • n 별개의 양의 정수를 반환하거나 출력 해야하며 그 중 어느 것도로 나눌 수 없습니다n .
  • 숫자의 순서는 중요하지 않으며 숫자의 순열은 다른 출력으로 계산되지 않습니다.

일부 input => output쌍을 가진 유효한 프로그램의 삼중 항 :

program A:
    2 => 5 9
    4 => 5 6 9 10
    5 => 2 4 8 7 1

program B:
    2 => 1 11
    4 => 6 9 1 2
    5 => 4 44 444 4444 44444

program C (differs only in one number from program B):
    2 => 1 13
    4 => 6 9 1 2
    5 => 4 44 444 4444 44444

채점

  • 당신의 점수는 3 가지 프로그램 또는 기능의 길이의 합입니다.
  • 낮은 점수가 좋습니다.
  • 프로그램 / 기능이 코드를 공유하는 경우 공유 코드는 코드를 사용하는 모든 프로그램의 길이로 계산되어야합니다.

1
각 프로그램을 포함하지 않고 자체 파일에서 실행할 수 있어야합니까, 아니면 한 번만 계산되는 일부 공유 모듈 / 라이브러리에 의존 할 수 있습니까?
quintopia

@quintopia 프로그램 / 기능은 코드를 공유하지 않아야합니다. 만약 그렇다면, 공유 코드는 코드를 사용하는 모든 프로그램의 길이로 계산되어야합니다.
randomra

답변:


4

Pyth, 17 16 바이트

5 바이트 :

^LhQQ

출력 :

2: [1, 3]
3: [1, 4, 16]
4: [1, 5, 25, 125]

6 바이트 :

mh*QdQ

출력 :

2: [1, 3]
3: [1, 4, 7]
4: [1, 5, 9, 13]

5 바이트 :

|RhQQ

출력 :

2: [3, 1]
3: [4, 1, 2]
4: [5, 1, 2, 3]

대체 버전 : 오름차순 : -ShQQ


1
아 나는 그 세 번째 계획을 좋아한다.
quintopia

@isaacg oh, 죄송합니다
Maltysen

8

J, 16 바이트

기능 1, 5 바이트

p:^i.

기능 2, 6 바이트

+p:^i.

기능 3, 5 바이트

>:^i.

작동 원리

기능 1

p:^i.     Right argument: y

   i.     Compute (0 ... y-1).
p:        Compute P, the prime at index y (zero-indexed).
  ^       Return all powers P^e, where e belongs to (0 ... y-1).

이후 P가 소수이고 P> Y , Y는 나눌 수 P의 전자 .

기능 2

+p:^i.    Right argument: y

 p:^i.    As before.
+         Add y to all results.

y가 P e + y를 나눈 경우 P e + y-y = P e 도 나눕니다 .

기능 3

>:^i.     Right argument: y

   i.     Compute (0 ... y-1).
>:        Compute y+1.
  ^       Return all powers (y+1)^e, where e belongs to (0 ... y-1).

경우 y는 분할 (Y + 1) 전자 일부 소인수 QY가 나누는 것 (Y + 1) .

그러나 Qyy + 1을 나누 므로 y + 1-y = 1 입니다.



2

비시 , 54 바이트

프로그램들:

V1V \ [DV * 1 + N ''O1 +]
V2V \ [DV * 1 + N ''O1 +]
V3V \ [DV * 1 + N ''O1 +]

출력 :

2 => 3 7
4 => 5 9 13 17
5 => 6 11 16 21 26
2 => 5 7
4 => 9 13 17 21
5 => 11 16 21 26 31
2 => 7 9
4 => 13 17 21 25 
5 => 16 21 26 31 36

작동 방식 (설명으로 첫 번째 프로그램 사용) :

V1V \ [DV * 1 + N ''O1 +]
V 내재 입력을 최종 전역 변수로 캡처하십시오.
 1 나중에 사용할 수 있도록 하나를 스택에 밀어 넣습니다.
  V \ [] 괄호 입력 시간의 모든 작업을 수행하십시오.
     D 스택의 맨 위 항목을 복제합니다.
      V 전역 변수를 스택으로 밉니다.
       * 1 + 곱한 다음 1을 더합니다. 이는 나눌 수 없습니다.
          N ''O 숫자 다음에 공백을 출력합니다.
               1+ 스택에 남은 숫자에 1을 더하십시오.

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


2

펄, 79

-n플래그 가 필요하기 때문에 각 프로그램에 하나의 문자가 추가되었습니다 .

for$a(0..$_-1){say$_*$a+1}
for$a(1..$_){say$_*$a+1}
for$a(2..$_+1){say$_*$a+1}

매우 간단합니다.


2

수학, 12 + 12 + 12 = 36 바이트

# Range@#-1&
# Range@#+1&
#^Range@#+1&

테스트 :

# Range@#-1&[10]
(* -> {9, 19, 29, 39, 49, 59, 69, 79, 89, 99} *)
# Range@#+1&[10]
(* -> {11, 21, 31, 41, 51, 61, 71, 81, 91, 101} *)
#^Range@#+1&[10]
(* -> {11, 101, 1001, 10001, 100001, 1000001, 10000001, 100000001, 1000000001, 10000000001} *)

예제 출력을 추가 할 수 있습니까?
Paŭlo Ebermann

2

CJam, 8 + 8 + 8 = 24 바이트

{,:)))+}
{_,f*:)}
{)_(,f#}

이들은 n스택에있을 것으로 예상 되는 정수 이름없는 함수 3 개 이며 그 자리에 정수 목록을 남겨 둡니다. 이것이 최적인지는 모르겠지만 나중에 더 짧은 솔루션을 찾아야합니다.

테스트 스위트.

결과 :

{,:)))+}
2 => [1 3]
3 => [1 2 4]
4 => [1 2 3 5]
5 => [1 2 3 4 6]

{_,f*:)}
2 => [1 3]
3 => [1 4 7]
4 => [1 5 9 13]
5 => [1 6 11 16 21]

{)_(,f#}
2 => [1 3]
3 => [1 4 16]
4 => [1 5 25 125]
5 => [1 6 36 216 1296]

첫 번째는 또한

{_),:)^}

또는

{_(,+:)}

n = 2
Sparr

@Sparr 허용됩니다. 도전 과제의 예를 확인하십시오. 유일한 요구 사항은 모든 입력에서 다른 결과가 아니라 다른 기능을 계산해야한다는 것입니다.
Martin Ender

아, 그들은 서로 다른 결과가해야 할 몇 가지 입력을. 그것이 내가 잘못 읽은 것입니다.
Sparr

2

파이썬 2, 79 바이트

lambda n:range(1,n*n,n)
lambda n:range(1,2*n*n,2*n)
lambda n:range(1,3*n*n,3*n)

시작 세 익명 함수 1와 각에 의해 계산 n, 2*n, 3*n에 대한 n용어.


1

정말 20 바이트

,;r*1+

,;R*1+

,;R1+*1+

예,이게 최적이 아닙니다 ...


1

Par , 16 바이트

사용자 정의 인코딩 여기 은 문자 당 하나의 바이트 만 사용합니다.

✶″{*↑                   ## 3 => (0 1 2) => (0 3 6)  => (1 4 7)
✶″U{ⁿ↑                  ## 3 => (1 2 3) => (3 9 27) => (4 10 28)
✶U¡↑◄                   ## 3 => (1 2 3) =>             (1 2 4)

출력

2 => (1 3)
3 => (1 4 7)
4 => (1 5 9 13)
5 => (1 6 11 16 21)

2 => (3 5)
3 => (4 10 28)
4 => (5 17 65 257)
5 => (6 26 126 626 3126)

2 => (1 3)
3 => (1 2 4)
4 => (1 2 3 5)
5 => (1 2 3 4 6)

1

하스켈, 54 바이트

f n=n+1:[1..n-1]
g n=5*n+1:[1..n-1]
h n=9*n+1:[1..n-1]

이 세 가지 기능은 매우 간단하므로…



1

파이썬 2, 125 바이트

N=input();print[i*N+1for i in range(N)]
N=input();print[i*N+1for i in range(1,N+1)]
N=input();print[i*N+1for i in range(2,N+2)]

여기의 각 줄은 완전한 프로그램입니다. 내 마음 속에 가장 확실한 해결책.

@ Sherlock9를 편집 하면 2 바이트가 절약되었습니다.



0

골프 스크립트, 50 51 57 바이트

퀴 토피아 의 파이썬 코드 였던 Golfscript 버전 . 각 기능은 n스택을 제거합니다.

{.,{1$*)}%\;}:f;    i*n+1 for i in range(n)
{.,{)1$*)}%\;}:g;   i*n+1 for i in range(1,n+1)
{.,{1$)\?}%\;}:h;   (n+1)**i for i in range(n)

0

TI 기본 (TI-84 Plus CE), 총 55 40 바이트

PRGM:C 12 bytes
    seq(AnsX+1,X,1,Ans
PRGM:B 14 bytes
    seq(AnsX+1,X,2,Ans+1
PRGM:C 14 bytes
    seq(AnsX+1,X,3,Ans+2

여기에있는 다른 많은 답변과 마찬가지로 간단하게 각각 범위 (N)의 X에 대한 숫자 (X + A) N + 1 목록과 A가 어떤 프로그램 (1, 2 또는 3)인지 표시합니다.

오래된 솔루션 (55 바이트) :

PRGM:C 17 bytes
    Prompt N
    For(X,1,N
    Disp XN+1
    End
PRGM:B 19 bytes
    Prompt N
    For(X,2,N+1
    Disp XN+1
    End
PRGM:C 19 bytes
    Prompt N
    For(X,3,N+2
    Disp XN+1
    End

여기의 많은 다른 답변과 마찬가지로 간단하지만 각각은 범위 (N)의 X에 대한 숫자 (X + A) N + 1을 표시하고 A는 어떤 프로그램 (1, 2 또는 3)입니다.

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