모서리에서 직사각형 배열을 다시 작성


30

한때 아름다운 직사각형 배열이있었습니다. 매우 대칭 적이지만 불행히도 떨어져 나갔고 이제 왼쪽 상단 만 있습니다. 당신의 임무는 원래 배열을 다시 작성하는 것입니다.

프로그램은 2 차원 정수 배열을받습니다. 구문 분석을 쉽게하기 위해 모두 1과 9 사이에 있다고 가정 할 수 있습니다. 작업은 배열의 열, 행 및 둘 모두를 반대로하고 결과 코너를 연결하고 결과 배열을 반환하는 것입니다.

배열 크기가 1x1 이상이라고 가정 할 수 있습니다.

테스트 사례 :

Input:
1 2 3
4 5 6

Output:
1 2 3 3 2 1
4 5 6 6 5 4
4 5 6 6 5 4
1 2 3 3 2 1

Input:
1

Output:
1 1
1 1

Input:
9
9
9

Output:
9 9
9 9
9 9
9 9
9 9
9 9

이것은 이며 가장 적은 바이트 수입니다!


1
나는 숯불이 10 세 미만에서 이것을 할 수있을 것이다
FantaC

1
@tbfninja chat.stackexchange.com/transcript/message/43184083#43184083 그러나 다른 입력 형식으로 더 짧을 수 있습니다.
Pavel

@MagicOctopusUrn yes
Pavel

2
WS⟦ι⟧‖M→↓아마 @tfbninja ? 5 바이트는 입력을 읽고 4 바이트는 입력을 읽습니다.
Neil

4
나는 99 % 가이 (또는 비슷한 캐릭터)로 이것을하는 랭이 어떤 것을 기억할 수 없다고 확신한다 : c
Rod

답변:


1

양성자 , 29 바이트

a=>[b+b[by-1]for b:a+a[by-1]]

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

그래도 몇 가지 다른 흥미로운 접근법이 있습니다.

양성자 , 29 바이트

a=>map(g,(g=x=>x+x[by-1])(a))

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

gProton 때문에 미러 하위 기능 을 인라인으로 정의 할 수 있습니다 . 짧지는 않습니다.

양성자 , 36 바이트

(a=>[x[0]for x:zip(*(a+a[by-1]))])*2

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

이것은 (a=>zip(*(a+a[by-1])))*224 바이트 여야 하지만 zip 함수는 완전히 손상되었습니다. 기본적으로, 그것을 미러링하고 압축 한 다음 두 번 수행하십시오 (함수에 양의 정수를 곱하여 함수를 여러 번 적용 할 수 있음).




5

파이썬 3, 38 바이트

lambda a:[b+b[::-1]for b in a+a[::-1]]

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

리스트리스트를 받아서리스트리스트를 리턴합니다.

설명:

lambda a:                              # anonymous lambda function
                   for b in a+a[::-1]  # for each row in the array and the upside-down array
          b+b[::-1]                    # the row with its reverse appended
         [                           ] # return in a list


5

레티 나 , 13 바이트

\%`$
$^$`
Vs`

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

설명

\%`$
$^$`

각 줄 ( %)에서 줄 끝 ( )을 맞추고 전체 줄 ( ) $의 역 ( $^)을 삽입하고 $`후행 줄 바꿈 ( \)으로 결과를 인쇄하십시오 . 수직 축을 따라 반사하고 출력의 전반부를 인쇄합니다.

Vs`

이것은 180도 회전 또는 우리의 경우 (수평 대칭으로 인해) 수평 축을 따라 반사되는 전체 스트링을 반대로합니다. 이것이 작동하는 방식은 V(역) 기본 정규 표현식은 (?m:^.*$)일반적으로 문자열의 각 줄과 일치합니다. 그러나, 우리는 만일 Singleline 옵션을 활성화 s한다, .잘 따라서이 기본 정규식이 실제로 전체 문자열을 일치로 일치 줄 바꿈을.

이것의 결과는 프로그램의 끝에 자동으로 인쇄되어 출력의 후반부를 제공합니다.


이것은 내가 아는 정규 표현식 맛처럼 보이지 않습니다 : P
Pavel

@Pavel Retina는 정규 표현식이 아니기 때문입니다. :)
Outgolfer Erik

@Pavel 실제 정규 표현식 인 코드의 유일한 부분은 $첫 번째 줄에 있습니다. ;) 나중에 설명을 추가하겠습니다.
Martin Ender

5

05AB1E , 2 바이트

∞∊

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


   # Input:Array of String | ['12','34']
---#-----------------------+------------------------------------------
∞  # Mirror horizontally.  | [12,34]       -> [1221,3443]
 ∊ # Mirror vertically.    | [1221,3443]   -> [1221\n3443\n3443\n1221]

신용 씨 Xcoder은 문자열의 배열은 2 차원 배열과로 계산 수 있음을 지적 파벨 를 확인합니다.



구문 분석을 쉽게하기 위해 모두 1과 9 사이라고 가정 할 수 있습니다. 따라서 이것이 유효하다고 생각합니다. 파벨의 확인을 기다리는 것 같아요
씨 Xcoder

내가 처음에 가지고 있던 @ Mr.Xcoder, 입력으로 TIO 2D 배열이 이상했습니다 ... 그래서 헤더 항목을 생각해 내야했습니다.
Magic Octopus Urn

문자열은 문자 배열이므로 문자열 목록은 여전히 ​​2d 배열입니다. @ Mr.Xcoder의 솔루션이 유효합니다.
Pavel

Coolio, 저에게 효과적입니다.
Magic Octopus Urn






3

awk, 88 바이트

{s="";for(i=NF;i>0;i--)s=" "$i s" "$i;a[FNR]=s;print s}END{for(i=NR;i>0;i--)print a[i]}

3
PPCG에 오신 것을 환영합니다! 좋은 첫 번째 답변 :)
HyperNeutrino

2

삼각 , 31 바이트

...)...
..IEM..
.DRs+}.
DRs+...

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

설명

패딩을 구성하는 문자를 제거하면 다음과 같이 프로그램이 수행합니다.

)IEMDRs+}DRs+ – Full program. Takes a matrix as a 2D list from STDIN.
)             – Push a 0 onto the stack.
 I            – Take the input at that index.
  E           – Evaluate it.
   M    }     – For each row...
    DR        – Duplicate and replace the second copy by its reverse.
      s+      – Swap and append.
         DR   – Duplicate the result and replace the second copy by its reverse.
           s+ – Swap and append.


2

APL + WIN, 11 바이트

정수의 2 차원 배열을 프롬프트합니다.

m⍪⊖m←m,⌽m←⎕

2

Stax , 5 바이트

:mm:m

온라인으로 실행 및 디버깅

:m미러를 의미합니다 input.concat(reverse(input)). m,이 문맥에서 적용 후 각 줄을 출력하는 것을 의미합니다 ...

따라서 행 배열을 미러링 한 다음 각 행과 출력을 미러링하십시오.






2

루비 , 35 바이트

->a{r=->b{b+b.reverse}
r[a].map &r}

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

2D 배열을 수락하고 2D 배열을 반환하는 람다. 그것은 간단하지만 어쨌든 ungolfed 버전은 다음과 같습니다.

->a{
  r=->b{ b+b.reverse } # r is a lambda that returns the argument and its reverse
  r[a].map &r          # Add the array's reverse, then add each row's reverse
}

2

자바 8 140 131 바이트

m->{String r="";for(int a=m.length,b=m[0].length,i=a+a,j;i-->0;r+="\n")for(j=b+b;j-->0;)r+=m[i<a?i:a+a+~i][j<b?j:b+b+~j];return r;}

설명:

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

m->{                      // Method with integer-matrix parameter and String return-type
  String r="";            //  Result-String, starting empty
  for(int a=m.length,     //  Amount of rows of the input-matrix
          b=m[0].length,  //  Amount of columns of the input-matrix
          i=a+a,j;        //  Index integers
      i-->0;              //  Loop over double the rows
      r+="\n")            //    After every iteration: append a new-line to the result
     for(j=b+b;j-->0;)    //   Inner loop over double the columns
       r+=                //    Append the result with:
          m[i<a?          //     If `i` is smaller than the amount of rows
             i            //      Use `i` as index in the input-matrix
            :             //     Else:
             a+a+~i]      //      Use `a+a+i-1` as index instead
           [j<b?          //     If `j` is smaller than the amount of columns
             j            //      Use `j` as index in the input-matrix
            :             //     Else:
             b+b+~j];     //      Use `b+b+j-1` as index instead
  return r;}              //  Return the result-String


2

SNOBOL4 (CSNOBOL4) , 119 (113) 바이트

	T =TABLE()
I	X =X + 1
	I =INPUT	:F(D)
	OUTPUT =T<X> =I REVERSE(I)	:(I)
D	X =X - 1
	OUTPUT =GT(X) T<X>	:S(D)
END	

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

공백없이 STDIN에서 문자열로 입력을받습니다. 숫자가 1-9있고 그렇지 않으면 실패 하기 때문에 작동합니다 .


사람들이 더 이상이 언어를 사용하지 않는 이유를 알 수 있습니다. 너무 이상하다.
Pavel

1
@Pavel SNOBOL은 정말 끔찍한 언어입니다. 이것은보다 현대적인 C 구현으로 다음과 같은 추가 내장 함수를 가지고 있습니다 REVERSE. 내가 알 수있는 한 원래의 정수 산술도 지원했습니다.
Giuseppe

2

C (gcc) , 114111 바이트

j,i;f(A,w,h)int*A;{for(i=h+h;i-->0;puts(""))for(j=w+w;j-->0;)printf("%d,",A[(i<h?i:h+h+~i)*w+(j<w?j:w+w+~j)]);}

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

C (gcc) , 109 바이트 (분석 용이성)

  • 한 자릿수 입력 정수만 허용하도록 제안한 Kevin Cruijssen 에게 감사합니다 . 2 바이트를 저장했습니다.
j,i;f(A,w,h)int*A;{for(i=h+h;i-->0;puts(""))for(j=w+w;j-->0;)putchar(A[(i<h?i:h+h+~i)*w+(j<w?j:w+w+~j)]+48);}

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


루프를 반전시켜 3 바이트를 절약 할 수 있습니다. for(i=h+h;i-->0;puts(""))for(j=w+w;j-->0;)
Kevin Cruijssen

사양을 충족하지 않습니다. 배열을 반환하지 않고 인쇄합니다.

" 파싱을 쉽게하기 위해 모두 1과 9 사이에 있다고 가정 할 수 있으므로 printf("%d"추가 -1 바이트에 대해 쉼표를 제거 할 수 있습니다 .
Kevin Cruijssen

@Rogem 배열 인쇄가 허용되는 I / O에 해당한다고 말하고 싶습니다.
Jonathan Frech

1
@KevinCruijssen 감사합니다. 구문 분석의 용이성을 사용하여 다른 바이트를 제거했습니다.
Jonathan Frech

2

, 5 바이트

θ‖C→↓

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

더 나은 입력 형식을위한 ASCII 전용 덕분 입니다.


Charcoal이 다른 방법으로 입력을 처리 할 수 ​​없기 때문에이 입력 형식이 유효한지 궁금합니다. 그렇지 않은 경우이 답변을 행복하게 삭제하겠습니다.
Outgolfer Erik

유효한 I / O입니다.
Pavel

@Pavel 나는 방금 "프로그램이 2 차원 정수 배열을 수신 할 것"이라고 말했기 때문에 궁금했습니다. 문자열은 1 차원입니다 (그리고 외부 []는 정확하게 2D로 만들지 않습니다).
Outgolfer Erik

@ASCII 전용 차콜은 더 나은 I / O 방법이 필요합니다 ...
Neil

@ 닐 그는 여기에서 핑을받지 않았지만 나는 그를 TNB로 핑했다. :)
Outgolfer Erik



1

V , 12 바이트

yGæGPÎy$æ_|P

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

설명:

yG              " Yank every line
  æG            " Reverse the order of the lines
    P           " Paste what we yanked
     Î          " On every line:
      y$        "   Yank the whole line
        æ_      "   Reverse the whole line
          |     "   Move to the beginning of the line
           P    "   Paste what we yanked
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.