다른 작업, 같은 캐릭터


36

이 과제에서는 동일한 문자 집합을 사용하여 4 가지 작업을 해결해야합니다. 문자를 재 배열 할 수는 있지만 문자를 추가하거나 제거 할 수는 없습니다.

우승자는 가장 적은 수의 문자를 사용하여 모든 작업을 해결하는 제출물이됩니다. 모든 작업은 동일한 언어로 해결해야합니다.

가장 적은 수의 고유 한 문자가 아니라 가장 적은 수의 문자입니다.

작업 1 :

N모든 세 번째 복합 번호 의 첫 번째 숫자를 출력합니다 . 아래 코드 블록은 첫 번째 행의 처음 19 개의 복합 숫자와 아래 행의 모든 ​​세 번째 복합 숫자를 보여줍니다.

4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30
4,       9,         14,         18,         22,         26,         30

그렇다면 N=5출력은이어야합니다 4, 9, 14, 18, 22. 당신은 지원해야합니다 1<=N<=50.

복합 숫자는 소수 또는 1이 아닌 양수입니다.

결과 N=50는 다음과 같습니다.

4, 9, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 57, 62, 65, 69, 74, 77, 81, 85, 88, 92, 95, 99, 104, 108, 112, 116, 119, 122, 125, 129, 133, 136, 141, 144, 147, 152, 155, 159, 162, 166, 170, 174, 177, 182, 185, 188, 192

작업 2 :

N-by-N곱셈표를 출력 합니다. 당신은 지원해야합니다1<=N<=20

예:

N = 4
1   2   3   4
2   4   6   8
3   6   9  12
4   8  12  16

출력 형식은 선택 사항이며 다음은 허용되는 출력 [[1,2,3,4],[2,4,6,8],[3,6,9,12],[4,8,12,16]]입니다.

작업 3 :

숫자가 피보나치 수 인지 확인하십시오 . N언어의 기본 정수 제한까지 양수를 지원해야합니다 . 32 비트 정수와 64 비트 정수가 모두 있으면 가장 짧은 코드가 필요한 정수를 사용하도록 선택할 수 있습니다. 예를 들어, 선택의 여지가 int아니라 대신 사용 long int하십시오. 기본값이 아닌 경우 32 비트보다 작은 정수를 선택할 수 없습니다 (32 비트가 기본값이면 8 비트 정수를 사용할 수 없음).

true/false, false/true, 1/0, 1/-1, a/b등의 그것이 일관성의 모든 허용 출력됩니다.

작업 4 :

가라 N의 입력 및 출력 결과 1^1+2^2+3^3+...N^N. 당신은 지원해야합니다 1<=N<=10.

10 가지 결과는 다음과 같습니다.

1, 5, 32, 288, 3413, 50069, 873612, 17650828, 405071317, 10405071317

이것은 이므로 각 언어에서 가장 짧은 제출이 이깁니다!

이 스택 스 니펫은 솔루션을 확인하는 데 도움이됩니다. 네 가지 솔루션을 모두 포함하는 데 필요한 최소 문자 세트를 측정하고 남은 문자를 표시합니다.


1
이진 : 두 문자
coredump

@coredump 네, 독특한 두 캐릭터 ...
Stewie Griffin

답변:


12

파이썬, 88 87 바이트

lambda n:[a for a in range(11*n)if any(a%b<1for b in range(2,a))][:3*n:3]#1,,,=====bd++
lambda n:[[a*b for b in range(1,n+1)]for a in range(1,n+1)]#,,::ybaaa(*i%n< =====2)d33f
f=lambda n,a=1,b=1:a<n and f(n,b,a+b)or n==a#2eerrrfo::((**iii11[[aannn+     ]]y))%33gg
f=lambda n,a=1:a<=n and a**a+f(n,a+1)#::ooeeiii]]      y))bbbgg,,rrrra((11[[nnnnf==2%33

캐릭터 나 골프 자체를 공유하는 데 너무 많은 노력을 기울이지 않았지만 거의 확실하게 이길 것입니다.


1
range(11*n)항상 충분한 복합을 포함?
FlipTack

1
@FlipTack 예, 5*n충분합니다.
Martin Ender

12

젤리 , 19 18 17 자

작업 1

Ḟþe*S
×5µḊḟÆRm3ḣ³

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

작업 2

5µḊḟÆRm3ḣ³Ḟe*S
×þ

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

작업 3

5µḊḟmḣþ*S
×3RÆḞ³e

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

작업 4

×5ḊḟÆm3ḣ³þe
Rµ*ḞS

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

작동 원리

Jelly 프로그램의 모든 라인은 별도의 링크 (기능)를 정의합니다 . 마지막 링크메인 링크 이며 프로그램이 실행될 때 자동으로 호출됩니다. 주 링크가 다른 링크를 어떻게 든 참조하지 않으면 아무런 영향을 미치지 않습니다. 호출되지 않은 링크조차도 파서 오류를 포함하지 않을 수 있습니다.

작업 1

×5µḊḟÆRm3ḣ³  Main link. Argument: n

×5           Yield 5n.
  µ          Begin a new chain, with argument 5n.
   Ḋ         Dequeue; yield [2, ..., 5n].
     ÆR      Prime range; yield all primes in [1, ..., 5n].
    ḟ        Filter; remove the elements to the right from the ones to the left.
       m3    Pick every third element.
         ḣ³  Keep the first n results.

작업 2

이것은 사소한 것입니다 : ×곱셈 원자이며 빠른 þ(표)는 ×왼쪽과 오른쪽 인수의 각 요소 조합에 적용됩니다 . 인수가 정수 (여기있는)이면 범위를 먼저 범위로 캐스트합니다.

작업 3

×3RÆḞ³e  Main link. Argument: n

×3       Yield 3n.
  R      Range; yield [1, ..., 3n].
   ÆḞ    Fibonacci; yield [F(1), ... F(3n)].
     ³e  Test if n exists in the result.

작업 4

Rµ*ḞS  Main link. Argument: n

R      Range; yield [1, ..., n].
 µ     Begin a new chain with argument [1, ..., n].
   Ḟ   Floor; yield [1, ..., n].
  *    Yield [1**1, ..., n**n].
    S  Take the sum.

만나서 반갑습니다. ÆḞ이미 유용한 것으로 입증되었습니다!
Lynn

9

매스 매 티카, 60 자

작업 1 : 복합 재료

#/AFF^abcinoruy{};Select[Range[2,9#],!PrimeQ@#&][[;;3#;;3]]&

작업 2 : 곱셈표

!29;F@FPQRS[];a^b;c[c[e]];eeegiilmnnotu;Array[3##&,{#,#}]/3&

작업 3 : 피보나치

##&;239;A/PS[]^e[];lmrtuy;{,};!FreeQ[Fibonacci@Range[3#],#]&

작업 4 : 힘의 합

!###&;23/39;A@F;F[P[Q[]]];Raabccegiilnnorrty;Sum[e^e,{e,#}]&

각 제출은 주어진 작업을 구현하는 명명되지 않은 함수 다음에 무시되는 일련의 표현식입니다.

나는 주석을 붙여서 원시 솔루션을 "최적 적으로"결합 하는 간단한 CJam 스크립트 를 작성 했습니다 . 그런 다음 각 주석을 수동으로 제거하여 3 바이트를 절약했습니다 (각각 유효한 구문을 얻기 위해 약간의 재 배열이 필요했습니다). 이 스크립트를 통해 솔루션의 간단한 변형을 시도하여 전체 점수를 낮출 수 있는지 확인하는 것이 훨씬 쉬워졌습니다. 스크립트를 직접 사용하십시오.


의견이 있지만 코드 자체에 관한 것이 아닙니다 : P. (좋은 답변, btw). 귀하의 CJam 스크립트는 간단한 결함을 내려다 : 내가 입력 한 경우 abba스크립트로, 그것은 나를 줄 것이다 (**)ab(**)ba대신, ab하고 ba.
HyperNeutrino

@AlexL. 예, 또한 (**)다른 프로그램에서 사용 된 문자 자체를 다루는 데 사용될 수 있다는 사실도 고려하지 않습니다 .
Martin Ender

9

MATL , 29 28 26 자

작업 1 (모든 세 번째 복합 번호)

6*:tZp~)G:3*q)%G"$]vwm^sl+

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

작업 2 (곱하기 표)

:l$*%6*tZp~)G:3q)G"]vwm^s+

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

작업 3 (피보나치 감지기)

l6Zp~G:"3q$t+]vGwm%):*)^s*

피보나치 / 비 피보나치 각각에 대해 1/ 0를 표시합니다 .

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

작업 4 (권한의 합)

:t^s%6*Zp~)G:3*q)G"$]vwml+

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

검사

이 프로그램 은 4 개의 문자열을 입력하고 정렬하여 표시하여 동일한 문자를 사용하는지 육안으로 확인합니다.

설명

%주석 기호입니다. 오른쪽에있는 모든 것은 무시됩니다.

작업 1 (모든 세 번째 복합 번호)

6*    % Input N. Multiply by 6
:     % Range [1 2 ... 6*N]. This is enough because every even number is composite,
      % so this contains at least 3*N composite numbers
t     % Duplicate
Zp    % Isprime
~     % Negate
)     % Use as index to select composite numbers, including 1, from [1 2 ... 6*N]
G:    % Push [1 2 ... N]
3*q   % Multiply by 3 and subtract 1: gives [2 5 ... 3*N-1]
)     % Pick those composite numbers. Implicitly display

작업 2 (곱하기 표)

:     % Input N. Range [1 2 ... N]
l     % Push 1
$     % Specify that next function will take 1 input
*     % Product of array. With 1 input it produces all pair-wise products
      % Implicitly display

작업 3 (피보나치 감지기)

l     % Push 1
6     % Push 6
Zp    % Isprime. Gives false
~     % Negate. Gives true, or 1
G:    % Push [1 2 ... N], where N is the input
"     % For each
  3q  %   3, subtract 1
  $   %   Specify that next function will take 2 inputs
  t   %   Duplicate the top two elements of the stack
  +   %   Add
]     % End
v     % Vertically concatenate the entire stack. This produces a column vector
      % with a sufficient amount of Fibonacci numbers
G     % Push input N
w     % Swap
m     % Ismember. Gives true if input is in the vector of Fibonacci numbers
      % Implicitly display

작업 4 (권한의 합)

:     % Implicitly input N. Push [1 2 ... N]
t     % Duplicate
^     % Power, element-wise
s     % Sum of array. Implicitly display

내가 처음 도전을 보았을 때, 나는 Hey MATL would be perfect for this!당신이 나를 이길 것이라고 생각 했습니다. +1
DJMcMayhem

@DJMcMayhem 죄송합니다. 답변이 많은 편입니다. 다음에 저를 핑하고 당신이 그것을하고 있다면 삼가하겠습니다 :-) 어쨌든, 계속하지 않겠습니까? 아마 당신은 이것을 능가 할 수있다
Luis Mendo

3
@DJMcMayhem, Luis를 능가하지 않더라도 답변을 게시 하십시오 . 더 많은 사람들이 첫 번째 언어를 능가하지 않아도 이미 사용 된 언어로 답변을 게시하기를 바랍니다.
Stewie Griffin

@stewiegriffin Haha, 알았어. 아직 유효한 답변이 없지만 하나를 얻으면 (그리고 충분히 다릅니다) 게시합니다.
DJMcMayhem

7

펄 6 , 61 바이트

{(4..*).grep(!*.is-prime)[0,3...^*>=$_*3]}#$$&+1==>X[]__oot{}
{[X*](1..$_,!0..$_).rotor($_)}#&***+-..334===>>[]^eegiimpps{}
{(1,&[+]...*>=$_)[*-!0]==$_}#$()**....334>X^_eegiimoopprrst{}
{[+]((1..$_)>>.&{$_**$_})}#!**,-....0334===X[]^eegiimoopprrst

두 번째는 ((1,2,3,4),(2,4,6,8),(3,6,9,12),(4,8,12,16))주어진 때 반환4

Perl 6에는 실제로 최대 정수가 없지만 세 번째 정수는 입력으로 즉시 작동합니다 15156039800290547036315704478931467953361427680642. 유일한 제한 요소는 메모리와 시간입니다.

그렇지 않으면 필요한 것 이상으로 입력에 대해 모두 "즉시"실행됩니다.

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


6

자바 스크립트 (ES6) 101 100 95 93 91 바이트

(n,r=[],a=(y,m)=>n?y%m?a(y,++m):a(y+1,2,y==m||n--%3||r.push(y)):r)=>a(4,2,n*=3)//>....p*A&&
n=>[...Array(n)].map((r,y,m)=>m.map((s,n)=>y*++n,y+=1))//22334(,,,,===ayy)??%%::||||--uh*&&
r=(n,y=1,a=2)=>n==y||n>y&&r(n,a,y+a)//2334((((,,,,r=[]ayymmmm))))>??%%++::||--.....ppush**A
r=y=>y&&y**y+r(y-1)//22334(((((nnnn,,,,,,,,r=====[]aaaaymmmm)))))>>??%%++::||||-.....ppushA

편집 : 0피보나치 숫자로 지원하지 않음으로써 1 바이트를 저장했습니다 . 변수 이름을 바꾸어 5 바이트와 추가 2 바이트 (@Arnauld 덕분에 1 개)를 절약했습니다. 을 전환하여 2 바이트를 저장 +1, +++=1.


c변수 의 모든 발생을 A바꾸면 1 바이트를 저장해야합니다.
Arnauld 2012 년

(난 당신이 또한 대체 할 수 있음을 시사하고 있었다 d함께 y,하지만 d당신은 아마 첫 번째 문제를 해결 할 수 있도록, 현재 버전에 정의되어 있지 않습니다)
Arnauld

@Arnauld 지적 해 주셔서 감사하지만, 이름 a을 바꾸어 문제를 해결하고 추가 바이트를 절약했습니다 m.
Neil

4

MATL , 30 자

내가 함께 한 문자 세트는 다음과 같습니다.

!%))*+001233::<=GGQZ\]^`pstvyy~

다른 MATL 답변을 능가 할 수는 없었지만이 솔루션을 사용하는 것이 재미있었습니다.

작업 1 :

세 번째 복합 숫자.

4t^:QtZp~)G3*:3\1=)%!`yy+<]vGs

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

작업 2 :

곱셈 구구표. MATL 작동 방식으로 인해 가장 쉬운 작업

:t!*%4QZp~)G3:3\1=)`yy+<]vGs^t

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

작업 3 :

피보나치 테스터. 정확한 입력의 경우 양의 정수 (1 또는 2)를 인쇄하고 잘못된 입력의 경우 0을 인쇄합니다.

1t`yy+tG<]vG=s%4:QZp~)3*:3\)!^

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

작업 4 :

힘의 합

:t^s%1`yy+tG<]vG=4QZp~)3*:3\)!

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

나중에 더 자세한 설명을 게시 할 것이지만 지금 %은 주석 문자 라는 점에 유의해야 합니다. 따라서 프로그램은 실제로 다음과 같습니다.

4t^:QtZp~)G3*:3\1=)
:t!*
1t`yy+tG<]vG=s
:t^s

4

PowerShell , 95 94 바이트

( TimmyD는 또 다시 베이컨을 먹었다 )

작업 1 :

(""..999|?{'1'*$_-match'^(?=(..+)\1+$)..'})[(0..("$args"-1)|%{$_*3})]#|$$$$===ss%``iiex!!nnnq;

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


작업 2 :

($s=1.."$args")|%{"`$s|%{$_*`$_}"|iex}#0113999((((......??''''*$$$--match^===++))))\[]i!!nnnq;

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


작업 3 :

!!(($i="$args")..($s=1)|?{($n=($s+=$n)-$n)-eq$i})#0113999......||?{''''**__match^+\}[""%%]``x;

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


작업 4 :

"$args"..1|%{$s+="$_*"*$_+1|iex};$s#013999(((((......|??{''''$$$--match^===)))))\}[%]``i!!nnnq

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


아, 문자열 화 (stringification)는 "$args"대신 $args[0]화려한이다. 여기서부터 사용하겠습니다.
AdmBorkBork

@TimmyD 그래, 나는 단일 매개 변수가있는 모든 것에 단일 바이트 절약을 위해 그것을 사용 해왔다.
briantist

@TimmyD 좋은 지적! 그래도 모든 것을 다시 작성해야하지만 다시 방문하여 적용 할 수 있습니다. 내가 4를 모두 마치고 나면 최적화의 관점에서 나갔습니다.
briantist

글쎄, 나는 TIO 링크와 그와 같은 것을 다시 할 것을 의미했지만 FINE @TimmyD 나는 게으 르기를 멈추고 내가 만드는만큼 많은 일이 아닌 관대 한 제안을 사용할 것입니다! (편집) - P
briantist

;계산을 조작하여 ("$args"..1|%{$s+="$_*"*$_+1|iex})-(-$s)다른 전체 바이트를 저장 하여 작업 4에서 작업을 제거 할 수 있습니다 .
AdmBorkBork

3

Haskell , 77 76 자

m n=[[x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]!!y|y<-[1,4..3*n]]--2 n===y();^
s n=[(*y)<$>[1..n]|y<-[1..n]]--0112234mmm  ====[[[xxxx||<<--..]]],,/uod!!y;^
n x|x<2=1|1<3=sum(n<$>[x-1,x-2]);d y=[0|m<-[1..y],y==n m]--4[[[....]]]/o!!*^
o n=sum[x^x|x<-[1..n]]--01112234mm  n====[[[[x||<<<--....]]]],,/d$>!!yyy*();

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

--행 주석을 시작하므로 4 개의 프로그램이 모두 형식 <program>--<unused chars>입니다.

작업 1 :

m n=[[x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]!!y|y<-[1,4..3*n]]

가장 긴 프로그램. [x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]무한한 합성 수 목록과 10 인덱싱을 수정 하는 시작 을 제공합니다. 용법:

Prelude> m 5
[4,9,14,18,22]

작업 2 :

s n=[(*y)<$>[1..n]|y<-[1..n]]

용법:

Prelude> s 5
[[1,2,3,4,5],[2,4,6,8,10],[3,6,9,12,15],[4,8,12,16,20],[5,10,15,20,25]]

작업 3 :

n x|x<2=1|1<3=sum(n<$>[x-1,x-2]);d y=[0|m<-[1..y],y==n m]

[0]진실하고 허위로 돌아 []옵니다. 용법:

Prelude> d 5
[0]
Prelude> d 6
[]

작업 4 :

o n=sum[x^x|x<-[1..n]]

용법:

Prelude> o 5
3413

3

05AB1E , 21 바이트

작업 1

3ÅFOL¦DâPÙï{3ôø¬¹£qåm

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

작업 2

LDâP¹ôq3m¦Ùï{3ø¬£ÅFåO

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

작업 3

3mÅF¹åqL¦DâPÙï{3ôø¬£O

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

작업 4

LDmOq3¦âPÙï{3ôø¬¹£ÅFå

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

설명

모든 작업 q에서 프로그램을 종료하므로 다음 코드는 절대 실행되지 않습니다.

작업 1

이것은 가장 큰 바이트 호그입니다. 약간의 개선은 먼 길을 갈 수 있습니다.

3ÅFO                 # sum the first 4 fibonacci numbers
    L¦               # range [2 ... above]
      Dâ             # cartesian product with itself
        P            # product
         Ù           # remove duplicates
          ï{         # sort
            3ô       # split in pieces of size 3
              ø      # transpose
               ¬     # get the first lits
                ¹£   # get the first input-nr elements of the list

작업 2

L       # range [1 ... input]
 D      # duplicate
  â     # cartesian product
   P    # product
    ¹ô  # split in pieces of input size

작업 3

3m      # input**3
  ÅF    # get a list of that many (+1) fibonacci numbers
    ¹å  # check if input is in that list

작업 4

L     # range [1 ... input]
 D    # duplicate
  m   # elementwise power of ranges
   O  # sum

1

루비, 83 82 80 78 자

->m{'*+-=';[*0..m-1].map{|b|(4..516).select{|p|(2...p).any?{|n|p%n==0}}[3*b]}}
->n{'()%**+--......00123456==?[[]]clmnsty{||}';(b=1..n).map{|e|b.map{|p|e*p}}}
->m{'%+-......001236bclnnpt[[]]{{||||}}';(1..e=m*m).any?{|p|(p*p-5*e).abs==4}}
->n{'%*.......023456=?[]abbceelnsty{{||||}}';((m=0)..n).map{|p|m+=p**p}[-1]-1}

참고 : Wikipedia에 설명 된 완벽한 제곱 법을 사용하는 피보나치 수 탐지기 : https://en.wikipedia.org/wiki/Fibonacci_number#Recognizing_Fibonacci_numbers


구울 문자가 있다면 문자열 대신 끝에 주석을 사용하지 않겠습니까? 그것은 줄 당 2 문자를 절약 '';#
알렉시스 Andersen

고마워,하지만 나에게 속임수 같은 느낌.
GB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.