부분적으로리스트와 배열


14

이 과제에서는 특정 방식으로 해결해야하는 4 가지의 서로 관련이 있지만 다소 관련된 작업이 있습니다. 먼저 작업을 설명하고 어떻게 해결해야하는지 설명합니다.

코드는 네 작업은 입력으로 두 개의 양의 정수를 취해야한다 위해 : n,m여기서 n<m. 모든 작업은 동일한 언어로 해결해야합니다. 행렬의 방향은 선택 사항입니다 (n-m-m은 "n 행, m 열"또는 "n 열, m 행"으로 해석 될 수 있음).

작업 1 :

다음 요소로 구성된 벡터 / 목록을 생성 (및 출력 / 인쇄)합니다 n, n+1 ... m-1, m. 따라서에 대해 n=4, m=9다음을 출력해야합니다 4,5,6,7,8,9..

작업 2 :

다음과 같이 행렬 / 배열 / 목록 목록 (또는 동등한 항목)을 생성 (및 출력 / 인쇄)하십시오.

n,   n+1, ... m-1, m
n+1, n+2, ... m-1, m+1
...
n+m, n+m+1, ... 2*m-1, 2*m

들어 n=4, m=9당신이 출력해야한다 :

4, 5, 6, 7, 8, 9
5, 6, 7, 8, 9, 10
...
13, 14, 15, 16, 17, 18

작업 3 :

nxm 곱셈 테이블을 작성하고 (출력 / 인쇄) 적절한 형식으로 작성하십시오. 예 n=4, m=9:

1   2   3  4
2   4   6  8
3   6   9  12
4   8  12  16
5  10  15  20
6  12  18  24
7  14  21  28
8  16  24  32
9  18  27  36

작업 4 :

작업 3의 곱셈표의 요소로 구성된 벡터 / 목록을 오름차순으로 정렬하여 중복 값을 유지하면서 벡터 / 목록을 출력 / 인쇄하십시오. 의 경우 n=4, m=9다음을 출력해야합니다 1, 2, 2, 3, 3, 4, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 9, 9, 10, 12, 12, 12, 14, 15, 16, 16, 18, 18, 20, 21, 24, 24, 27, 28, 32, 36..

도전 과제 :

이제 위의 모든 작업은 매우 간단합니다. 여기서 과제는 태스크 2의 코드가 태스크 1의 코드로 시작해야하고 태스크 3의 코드는 태스크 2의 코드로 시작해야하고 태스크 4의 코드는 태스크 3의 코드로 시작해야한다는 것입니다.

더 명확하게하려면 :

작업 1코드가 다음과 같다고 가정합니다 (옥타브에서 작동).

@(n,m)(n:m)

그런 다음 작업 2코드는 다음과 같습니다 (옥타브에서 작동).

@(n,m)(n:m)+(0:m)'

작업 3 의 코드 는 옥타브에서 작동하지 않아야합니다.

@(n,m)(n:m)+(0:m)'"Code_for_task_3"

마지막으로 작업 4 의 코드 는 옥타브에서 작동하지 않아야합니다.

@(n,m)(n:m)+(0:m)'"Code_for_task_3""Code_for_task_4"

이것은 이므로 각 언어에서 작업 4에 대해 가장 짧은 코드로 제출하면 승리합니다. 항상 그렇듯이 : 설명은 적극 권장됩니다.


분명히, 이것이 도전의 정신에 위배된다고 추측 할 것입니다. 그러나 >2;이전 작업 코드가 본질적으로 작동하지 않도록 STDERR로 리디렉션하여 다음 작업 코드를 시작할 수 있습니까?
AdmBorkBork

1
@AdmBorkBork, PPCG의 "도전의 정신"과 같은 것은 없습니다 .P 예, 괜찮습니다 .
Stewie Griffin

곱셈 테이블을 멋지게 채워야합니까?
HyperNeutrino

1
@HyperNeutrino, 아니오.
Stewie Griffin

"양의 정수"라고 말하면 0<n<m또는 의미 0<=n<m합니까?
Value Ink

답변:


6

젤리 , 12 바이트

작업 1

r

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

작업 2

r+þ0r$}

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

작업 3

r+þ0r$}
×þ

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

작업 4

r+þ0r$}
×þFṢ

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

작동 원리

작업 1

r는 IS 이항 범위 원자 작업이 요청 정확히 않습니다.

작업 2

3 개의 dyadic 링크로 시작하는 2 차원 체인은 포크입니다 . 가장 바깥 쪽 링크가 먼저 평가 된 다음 중간 링크가 양쪽으로 결과와 함께 인수로 호출됩니다.

  • r이전과 같이 동작하여 [n,…, m]을 생성 합니다.

  • 0r$} 빠른 링크입니다 (또는 빠른 빠른 링크입니다).

    $(모나 디크 체인)은 링크 0(수율 0 ) 및 r(이변 범위)를 소비하여 모나드 체인으로 바꿉니다. 인자로 호출 할 때 K , 이렇게 수득한다 [0, ..., K를] .

    빠른 }(오른쪽 인수)에 의해 생성 된 퀵 링크를 소요 $하고로 바뀝니다 이항 링크 해당 통화 0r$0r$}의 오른쪽 인자.

    0r$}왼쪽 인수 n 및 오른쪽 인수 m 으로 호출 되므로 0r$인수 m 과 함께 [0,…, m]이 됩니다.

  • 또 다른 빠른 링크입니다. þ(테이블)은 +왼쪽 인수의 모든 요소와 오른쪽 인수의 모든 요소에 대해 (추가)를 호출 하여 각 오른쪽 인수의 결과를 단일 행으로 그룹화합니다.

    왼쪽 인수 [n,…, m] 및 오른쪽 인수 [0,…, m] 과 함께 호출되어 원하는 테이블이 생성됩니다.

작업 3

Jelly 프로그램의 모든 라인은 다른 링크를 정의합니다. 마지막 링크기본 링크 이며 C의 main기능 과 마찬가지로 기본적으로 실행되는 유일한 링크입니다. 나머지 링크는 기본 링크에서 호출 할 수 있지만 여기서는 수행하지 않습니다.

이전과 같이 þ(table)은 ×왼쪽 인수의 모든 요소와 오른쪽 인수의 모든 요소에 대해 (추가)를 호출 하여 각 오른쪽 인수의 결과를 단일 행으로 그룹화합니다.

두 인수가 ×þ모두 정수이므로 þ인수 nm[1,…, n][1,…, m] 로 변환하여 범위로 캐스트합니다 .

작업 4

×þ이전과 같이 작동합니다. 다음 링크는 모나 딕 ( mondic)으로 , atops , 즉 이전 링크 위에 적용됩니다.

실행 한 후 ×þ, F생성 된 2 차원 어레이를 병합 한 결과 1D 배열을 정렬한다.


5

05AB1E , 18 17 바이트

작업 1

Ÿ

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

작업 2

Ÿ²FD>})

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

작업 3

Ÿ²FD>})v¹LN*})¦

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

작업 4

Ÿ²FD>})v¹LN*})¦˜{

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

설명

작업 1

Ÿ     # range[n ... m]

작업 2

Ÿ        # range[n ... m]
 ²F      # m times do:
   D     # duplicate
    >    # increment
     }   # end loop
      )  # wrap in list

작업 3

v          # for each list in result of Task 2 do
 ¹L        # push range[1 ... n]
   N*      # multiply by index
     }     # end loop
      )    # wrap in list
       ¦   # discard first element

작업 4

˜          # flatten the result from Task 3
 {         # sort

3

MATL , 18 17 바이트

작업 1

&:

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

작업 2

&:O2G:h!+

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

작업 3

&:O2G:h!+:7M!*

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

작업 4

&:O2G:h!+:7M!*1eS

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

설명

작업 1

&:    % Binary range [n n+1 ... m] from implicit inputs n, m

작업 2

      % ... Stack contains [n n+1 ... m]
O     % Push 0
2G    % Push second input, m
:     % Unary range: gives [1 2 ... m]
h     % Concatenate horizontally: gives [0 1 2 ... m]
!     % Transpose into a column vector
+     % Add with broadcast

작업 3

      % ... Stack contains matrix from task 2
:     % Unary range. For matrix input it uses its (1,1) entry. So this gives [1 2 ... n]
7M    % Push [1 2 ... m] again
!     % Transpose into a column vector
*     % Multiply with broadcast

작업 4

      % ... Stack contains matrix from task 3
1e    % Linearize into a row vector
S     % Sort

3

매스 매 티카, 84 77 바이트

편집 : 7 바이트를 절약 한 Martin Ender에게 감사드립니다.

작업 1 :

{n,m}n~Range~m

Function인수 n와 함께 m어떤 출력 n~Range~m, 순수한 형태의 Range[n,m].

작업 2 :

{n,m}n~Range~m~Table~(m+1)//0~Range~m+#&

n~Range~m~Table~(m+1)m+1행 이있는 2D 배열을 작성합니다 . 여기서 각 행은 이전 작업의 출력입니다. 그런 //0~Range~m+#&함수의 후위 애플리케이션이다 0~Range~m+#&효과적으로 추가 0첫번째 행이 1두번째 행 등으로해서 m위한 m+1행째.

작업 3 :

{n,m}n~Range~m~Table~(m+1)//0~Range~m+#&//1##&~Array~{n,m}&

이것은 단지 1##&~Array~{n,m}&이전 함수 의 출력에 상수 함수 를 적용합니다 .

작업 4 :

{n,m}n~Range~m~Table~(m+1)//0~Range~m+#&//1##&~Array~{n,m}&//Flatten//Sort

Flattens와는 Sort곱셈 테이블이야.


2

파이썬, 183 바이트

작업 1, 29 바이트

r=range
a=lambda n,m:r(n,m+1)

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

작업 2, 84 바이트

r=range
a=lambda n,m:r(n,m+1)
s=lambda n,m:[[w+i for w in r(n,m)] for i in a(0,m+1)]

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

작업 3, 137 바이트

r=range
a=lambda n,m:r(n,m+1)
s=lambda n,m:[[w+i for w in r(n,m)] for i in a(0,m+1)]
d=lambda n,m:[[w*i for w in a(1,n)] for i in a(1,m)]

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

작업 4, 183 167 바이트

r=range
a=lambda n,m:r(n,m+1)
s=lambda n,m:[[w+i for w in r(n,m)] for i in a(0,m+1)]
d=lambda n,m:[[w*i for w in a(1,n)] for i in a(1,m)]
f=lambda(z):sorted(sum(z,[]))

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

설명:

작업 1 :

간단한만큼, 그것은 생성 nm사용 목록 파이썬의 내장 range기능.

작업 2 :

모든 수의 경우 0m+1, 그것은에서 목록의 각 항목에 해당 번호에 추가 n로를 m.

작업 3 :

에서 1~ m까지의 각 숫자에 대해 목록에서 1~ 까지의 모든 숫자에 해당 숫자를 곱합니다 n.

작업 4 :

이것은 sorted리스트를 최소에서 최대로 정렬하는 파이썬의 내장 함수를 사용합니다 . 함수의리스트 이해는리스트를 평평하게하는 데 사용됩니다. 태스크 3이 제공 한 목록의 모든 항목에있는 모든 항목의 목록을 작성합니다.

  • @math_junkie 덕분에 많은 바이트를 절약했습니다.
  • @ThisGuy 덕분에 16 바이트 절약

@math_junkie 덕분에 많은 바이트를 절약했습니다.


익명 함수를 사용할 수 없거나 람다는 실제로 짧지 않습니까? (나의 수에 의하여 그들은있는 것처럼 보인다)
cole

일반적으로 Python asnwers에 허용됩니까? 예를 들어, 태스크 2의 코드는 입력 및 출력을 포함하는 완전한 프로그램이 아니며 함수 또는 함수 정의도 아닙니다.
ngenisis

@Cole 나중에 익명 코드에서 사용할 수 있도록 비 익명 함수를 사용해야했습니다.
동지 SparklePony

OP는 작업 2의 코드가 작업 1의 코드로 시작해야하고 작업 2의 코드가 작업 1의 코드 def s(n,m):return [[w+i for w in r(n,m)] for i in a(0,m+1)]가 정의되면 완전한 기능 이라고 말했기 때문에 괜찮습니다 .
동지 SparklePony

a=lambda n,m:...각 함수 정의에 대해 비슷한 작업을 수행 할 수 있습니다 . 익명 함수는 파이썬에서 항상 짧습니다
math junkie

2

PHP 7, 200 바이트

출력 버퍼를 사용하여 이전 출력을 지 웁니다.

작업 1

[,$n,$m]=$argv;ob_start();eval($s='echo join(" ",$v?:range($n+$i,$m+$i)),"
";');

$s나중에 재사용 할 수 있도록 코드를 저장합니다 . $v변수는 마지막 작업입니다.

작업 2

[,$n,$m]=$argv;ob_start();eval($s='echo join(" ",$v?:range($n+$i,$m+$i)),"
";');for(;++$i<=$m;)eval($s);

나머지 줄을 인쇄합니다.

작업 3

[,$n,$m]=$argv;ob_start();eval($s='echo join(" ",$v?:range($n+$i,$m+$i)),"
";');for(;++$i<=$m;)eval($s);for(($c=ob_clean)();++$j<=$m;print"
")for(;++$$j<=$n;sort($v))echo$v[]=$j*$$j,' ';

출력 버퍼를 지우고 곱셈 테이블을 인쇄하여 숫자를에 저장합니다 $v.

작업 4

[,$n,$m]=$argv;ob_start();eval($s='echo join(" ",$v?:range($n+$i,$m+$i)),"
";');for(;++$i<=$m;)eval($s);for(($c=ob_clean)();++$j<=$m;print"
")for(;++$$j<=$n;sort($v))echo$v[]=$j*$$j,' ';$c();eval($s);

출력 버퍼를 다시 지우고 인쇄합니다 $v.


1

PowerShell , 126 바이트

작업 1

param($n,$m)$n..$m

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

..내장 범위 연산자를 사용합니다 . 묵시적 기본 동작 Write-Output은 요소 사이에 개행을 삽입하므로 출력이 개행으로 구분되어 표시됩니다.


작업 2

param($n,$m)$n..$m>2;0..$m|%{$i=$_;($n..$m|%{$_+$i})-join','}

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

와 STDERR에 첫 번째 작업 덤프 >2;, 다음에서 루프 0$m, 각 반복 설정 도우미 $i에서 다시 반복하기 전에 $n$m의해 각각의 수를 증가를 $i. 그것들은 -join쉼표와 함께 ed, 그렇지 않으면 이것은 모호한 긴 긴 요소 당 한 줄 출력입니다.


작업 3

param($n,$m)$n..$m>2;0..$m|%{$i=$_;($n..$m|%{$_+$i})-join','}>2;(1..$m|%{$i=$_;(1..$n|%{$_*$i})-join' '})

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

>2;이전을 STDERR에 덤프하는 것과 같은 종류의 것 . 그런 다음 우리는 단순히에서 더블 루프 1$m다음 1으로는 $n, 헬퍼를 설정 $i, 길을 따라 곱셈 값을, 그리고 -join공백을 표하기 위해. 캡슐화 패런은 다음 작업에서 작동하지만 여기서는 출력이 파이프 라인에 출력되도록합니다 (이미있을 수 있으므로 중복 임).


작업 4

param($n,$m)$n..$m>2;0..$m|%{$i=$_;($n..$m|%{$_+$i})-join','}>2;(1..$m|%{$i=$_;(1..$n|%{$_*$i})-join' '})-split' '|%{+$_}|sort

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

아하! 마지막으로 일부 중복성. 이전 작업에는 괄호가 있으므로 -split걱정하지 않고 공백을 처리하고 각을 정수로 캐스트 한 |%{+$_}다음 |sort. 출력은 다시 개행으로 분리됩니다.


내가 생각하는 더 나은 활용 작업 사이의 중복 몇 가지 방법이있다 - 아직도 일부 골프.


1

ES2016 틱, 401 개 384 문자

첫 번째 시도가 있습니다. 나는 그것이 약간 응축 될 수 있다고 확신하지만 꽤 짧습니다. 화살표 기능 FTW! (그 암시 적 반환 문을 좋아하십시오.) 템플릿 문자열로 새롭고 향상되었습니다!

작업 1

var a=Array,l=console.log,f=(n,m)=>a.from(a(1+m-n),(w,i)=>n+i),z=(n,m)=>l(f(n,m).join`, `)

통화 z(n,m)로그 출력. (나중에 골프를 치기 위해 console.log의 별칭을 지정하고 있습니다.)

작업 2

두 번째 구절 ... 첫 번째 구절이 확장됩니다.

var a=Array,l=console.log,f=(n,m)=>a.from(a(1+m-n),(w,i)=>n+i),z=(n,m)=>l(f(n,m).join`, `),p,o,g=(n,m)=>{p=n,o=m;return [...a(m+1).keys()].map((d)=>f(d+p,d+o))},y=(n,m)=>l(g(n,m).join`\n`

이제 전화하십시오 y(n,m). 예쁜가요?

작업 3

기존 기능의 대부분을 우회해야합니다 <sadface />.

var a=Array,l=console.log,f=(n,m)=>a.from(a(1+m-n),(w,i)=>n+i),z=(n,m)=>l(f(n,m).join`, `),p,o,g=(n,m)=>{p=n,o=m;return [...a(m+1).keys()].map((d)=>f(d+p,d+o))},y=(n,m)=>l(g(n,m).join`\n`,h=(n,m)=>[...a(m).keys()].map((d)=>(d+1)*n).join`\t`,i=(n,m)=>[...a(n).keys()].map((d)=>h((d+1),m)),v=(n,m)=>i(n,m).join`\n`

이제 메소드 이름은 v입니다. 같은 방식으로 부르십시오.

작업 4

이제 다시 재사용 할 수 있습니다.

var a=Array,l=console.log,f=(n,m)=>a.from(a(1+m-n),(w,i)=>n+i),z=(n,m)=>l(f(n,m).join`, `),p,o,g=(n,m)=>{p=n,o=m;return [...a(m+1).keys()].map((d)=>f(d+p,d+o))},y=(n,m)=>l(g(n,m).join`\n`,h=(n,m)=>[...a(m).keys()].map((d)=>(d+1)*n).join`\t`,i=(n,m)=>[...a(n).keys()].map((d)=>h((d+1),m)),v=(n,m)=>i(n,m).join`\n`,t=(n,m)=>l(v(n,m).match(/\d+/g).sort((a,b)=>+a>+b||+(a===b)*2-1).join(`, `)

u내 방법 을 건너 뛰어야 했습니다 t. String.match반환 값을 문자열로 반환 하기 때문에 해당 정렬 함수를 넣어야한다는 것을 알았습니다 .


0

루비, 121103 바이트

루비에서 모든 제외 truthy입니다 nilfalse작업이 수포하지만 잘 배치와 함께 이전 입력 무시하도록 설정 될 수있는 수단, and/을 &&.

작업 1

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

n,m=$*.map &:to_i
p [*n..m]

작업 2

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

n,m=$*.map &:to_i
p [*n..m]&&(0..m).map{|i|[*n+i..m+i]}

작업 3

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

n,m=$*.map &:to_i
p [*n..m]&&(0..m).map{|i|[*n+i..m+i]}&&(1..m).map{|i|(1..n).map{|j|i*j}}

작업 4

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

n,m=$*.map &:to_i
p [*n..m]&&(0..m).map{|i|[*n+i..m+i]}&&(1..m).map{|i|(1..n).map{|j|i*j}}.flatten.sort
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.