연속적인 모서리에서 회전 *를 사용하여 n n 제곱의 정수를 생성합니다.


9

목표는 왼쪽 위부터 시작하여 모퉁이를 중심으로 시계 방향으로 회전 0-9하면서 n 제곱 (nxn)의 임의의 정수 ( )를 출력하는 것 *입니다. 사각형은 나란히 있어야하며 단일 공간으로 구분되어야합니다.

인 경우 n = 0출력이 비어 있어야합니다.

에 대한 출력 n=1:

*

에 대한 출력 n=2:

*3 4*
14 07

에 대한 출력 n=3:

*34 82* 291
453 224 924
145 158 57*

에 대한 출력 n=4:

*153 135* 0154 0235
2352 5604 3602 2065
2245 6895 3561 7105
7225 5785 479* *662

*왼쪽 위, 오른쪽 위, 오른쪽 아래, 왼쪽 아래, 왼쪽 위 등 (시계 방향)과 같이 왼쪽에서 오른쪽으로 회전 하는 방법 (사각형 모서리 주위)을 확인하십시오.

여기에 이미지 설명을 입력하십시오

가장 짧은 답변 (바이트 단위로 측정)이 이깁니다.


5
제발 이해해주세요
Rohan Jhunjhunwala

1
재개 투표. 이것은 나에게 분명하다. 약간의 수정이있었습니다. ( "정사각형은"나에게 너무 많은 대수 용어처럼 소리)
레벨 강 세인트

2
난수는 어떻게 "무작위"여야합니까? 별표를 숫자로 세어 숫자가 정확히 N 자릿수 여야한다는 사실에 대해 귀하의 질문에 명시 할 가치가 있습니다.
Jesse Amano

1
<Shrug> 어쩌면 나는 느리고 있지만 여전히 명확하지 않습니다. 예제 에서 *s 배치를 설명 할 수 있습니까 n=4? 아마도 몇 가지 예를 더 제시 하시겠습니까?
Digital Trauma

2
@DigitalTrauma 나는 당신이 하나의 "시계"를 인쇄하지 않는다는 것을 깨달을 때까지 그것을 알아낼 수 없었습니다. 당신은 n 개의 시계를 나란히 인쇄하고 있습니다 . 따라서 n = 4의 예에서는 네 개의 "시계"(첫 번째는 맨 위 행 *153, 두 번째는 맨 위 행 *135등)를 볼 수 있습니다.
Jordan

답변:


4

05AB1E , 50 49 바이트

3mF9Ý.R}J¹ô¹ävy`¦'*ìN4%©>ir}®iRr}®<iR})ˆ}¯øvyðý}»

설명

입력 예 = 4

먼저 0에서 9 사이의 입력 ^ 3 난수 문자열을 만듭니다.

3mF9Ý.R}J

생산

6799762549425893341317984133999075245812305412010122884262903656

그런 다음 입력 크기별로 조각으로 나눕니다.
그것은 입력 조각으로 더 나뉩니다.

¹ô¹ä

이것은 우리에게 숫자의 행렬을 제공합니다.

[['6799', '7625', '4942', '5893'], 
 ['3413', '1798', '4133', '9990'], 
 ['7524', '5812', '3054', '1201'], 
 ['0122', '8842', '6290', '3656']]

그런 다음 행렬의 행을 반복하여 올바른 위치에 별표를 삽입합니다.

v                          } # for each row in matrix 
 y`                          # flatten list to stack
   ¦'*ì                      # replace the first digit of the last number with "*"
       N4%©>ir}              # if row-nr % 4 == 0, move the number with "*" to the front
               ®iRr}         # if row-nr % 4 == 1, move the number with "*" to the front
                             # and reverse the number, moving "*" to the numbers right side
                    ®<iR}    # if row-nr % 4 == 2, reverse the number, moving "*" 
                             # to the numbers right side
                         )ˆ  # wrap row in a list and add to global array

이제 각 행에 "*"가있는 행렬이 있지만 열당 별표가 필요합니다.

[['*893', '4942', '7625', '6799'], 
 ['099*', '4133', '1798', '3413'], 
 ['7524', '5812', '3054', '102*'], 
 ['0122', '8842', '6290', '*656']]

따라서이 목록을 압축하여 행을 열로 바꾸거나 그 반대로합니다.

[['*893', '099*', '7524', '0122'], 
 ['4942', '4133', '5812', '8842'], 
 ['7625', '1798', '3054', '6290'], 
 ['6799', '3413', '102*', '*656']]

이제 남은 것은 출력을 포맷하는 것입니다.

vyðý}»

공백의 행과 개행의 열을 결합하면 최종 결과가 나타납니다.

*893 099* 7524 0122
4942 4133 5812 8842
7625 1798 3054 6290
6799 3413 102* *656

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

오래된 50 바이트 솔루션

F¹Fõ¹F9Ý.R«}}¦'*ì})¹ävyN4%©>iR}®iíÁ}®<ií}})øvyðý}»

4

Dyalog APL , 57 바이트

⎕IO←0많은 시스템에서 기본값이 필요합니다 .

OP의 첫 번째 예에 따라 이중 간격이 허용된다고 가정합니다.

{A←⊃∘⍕¨?10⍴⍨3⍴⍵⋄A[(⍳⍵),¨⍵⍴2↑¨1⍵(⍵ ⍵)(1⍵)-1]←'*'⋄⍉⎕FMT A}

TryAPL 온라인!

비경쟁 49 바이트 솔루션 (Dyalog APL 16.0) :

{⍉⎕FMT'*'@((⍳⍵),¨⍵⍴2↑¨1⍵(⍵ ⍵)(1⍵)-1)⊃∘⍕¨?10⍴⍨3⍴⍵}

3

자바 7 372 370 366 바이트

String c(int i){String s="*",a[][]=new String[i][i],t,r="";int j=0,k,z=i-1,m=(int)Math.pow(10,z);for(;j<i;j++)for(k=0;k<i;a[j][k++]=(new java.util.Random().nextInt((int)Math.pow(10,i)-m+1)+m)+"");for(j=0;j<i;k=j%4,t=a[m=k<2?0:z][k],a[m][j++]=k<1|k>2?s+t.substring(1,i):t.substring(0,z)+s);for(j=0;j<i;j++,r+="\n")for(k=0;k<i;r+=a[j][k++]+" ");return i<1?"":i<2?s:r;}

별표를 배치하고 한 번에 하나씩 대신에 동시에 출력을 만들어서 더 골프를 칠 수 있습니다.

언 골프 및 테스트 코드 :

여기에서 시도하십시오.

class M{
  static String c(int i){
    String s = "*",
           a[][] = new String[i][i],
           t,
           r = "";
    int j = 0,
        k,
        z = i-1,
        m = (int)Math.pow(10, z);
    for(; j < i; j++){
      for(k = 0; k < i; a[j][k++] = (new java.util.Random().nextInt((int)Math.pow(10, i) - m + 1) + m)+"");
    }
    for(j = 0; j < i; k = j % 4,
                      t = a[m = k < 2 ? 0 : z][k],
                      a[m][j++] = k < 1 | k > 2
                                   ? s + t.substring(1, i)
                                   : t.substring(0, z) + s);

    for(j = 0; j < i; j++,
                      r += "\n"){
      for(k = 0; k < i; r += a[j][k++] + " ");
    }
    return i < 1
            ? ""
            : i < 2
               ? s
               : r;
  }

  public static void main(String[] a){
    for (int i = 0; i < 6; i++) {
      System.out.println(c(i));
      System.out.println();
    }
  }
}

가능한 출력 :

(empty)

*

*9 4* 
92 47 


*25 55* 754 
910 197 108 
635 439 35* 


*512 407* 9646 5017 
1663 3847 9772 3149 
7796 2997 5494 1362 
7283 9720 242* *539 


*0726 7743* 52096 50958 *0726 
60322 20914 76387 92716 41579 
89994 18781 33379 84189 31777 
11781 89323 12180 51814 63536 
58411 32935 5168* *6597 43216 

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