Sản xuất n bình phương số nguyên với phép quay * trong các góc trực quan


9

Mục tiêu là tạo ra đầu ra của n bình phương (nxn) của các số nguyên ngẫu nhiên ( 0-9) với một chuyển *động xoay theo chiều kim đồng hồ quanh các góc, bắt đầu từ trên cùng bên trái. Các hình vuông nên cạnh nhau và cách nhau bởi một khoảng trống.

Nếu n = 0, đầu ra nên trống.

Đầu ra cho n=1:

*

Đầu ra cho n=2:

*3 4*
14 07

Đầu ra cho n=3:

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

Đầu ra cho n=4:

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

Lưu ý cách *xoay (xung quanh các góc của hình vuông), từ trái sang phải, như thế này: trên cùng bên trái, trên cùng bên phải, dưới cùng bên phải, dưới cùng bên trái, trên cùng bên trái, vv (theo chiều kim đồng hồ)

nhập mô tả hình ảnh ở đây

Câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.


5
Xin vui lòng cho tôi hiểu điều này
Rohan Jhunjhunwala

1
Bỏ phiếu để mở lại. Điều này là hoàn toàn rõ ràng với tôi. Đã thực hiện một số chỉnh sửa nhỏ. ("Hình vuông hoàn hảo" nghe có vẻ giống như thuật ngữ đại số đối với tôi)
Level River St

2
Làm thế nào "ngẫu nhiên" làm số ngẫu nhiên cần phải được? Có lẽ cũng đáng để nói rõ ràng trong câu hỏi của bạn về thực tế là các số cần dài chính xác N chữ số, tính các dấu sao là chữ số.
Jesse Amano

1
<Shrug> Có lẽ tôi đang chậm, nhưng nó vẫn chưa rõ ràng với tôi. Bạn có thể giải thích việc đặt *s trong n=4ví dụ không? Có lẽ đưa ra một số ví dụ nữa?
Chấn thương kỹ thuật số

2
@DigitalTrauma tôi không thể tìm ra hoặc cho đến khi tôi nhận ra rằng bạn đang không in one "đồng hồ", bạn in ấn đang n đồng hồ side-by-side (mà không phải là ở tất cả rõ ràng từ các câu hỏi). Vì vậy, trong ví dụ n = 4, bạn thấy bốn "đồng hồ" đầu tiên với hàng trên cùng *153, thứ hai với hàng trên cùng *135, v.v.
Jordan

Câu trả lời:


4

05AB1E , 50 49 byte

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

Giải trình

Ví dụ cho đầu vào = 4.

Đầu tiên chúng ta tạo một chuỗi đầu vào ^ 3 số ngẫu nhiên trong khoảng từ 0 đến 9.

3mF9Ý.R}J

sản xuất

6799762549425893341317984133999075245812305412010122884262903656

Sau đó, chúng tôi chia thành từng phần kích thước của đầu vào.
Đó là tiếp tục chia thành các phần đầu vào.

¹ô¹ä

Điều này cho chúng ta một ma trận số.

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

Sau đó chúng tôi lặp qua các hàng của ma trận, chèn các dấu sao vào đúng chỗ.

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

Bây giờ chúng ta có ma trận với "*" trên mỗi hàng, nhưng chúng ta muốn có dấu hoa thị trên mỗi cột.

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

Vì vậy, chúng tôi nén danh sách này biến hàng thành cột và ngược lại.

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

Tất cả những gì còn lại bây giờ là định dạng đầu ra.

vyðý}»

Việc nối các hàng trên dấu cách và các cột trên dòng mới cho chúng ta kết quả cuối cùng.

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

Hãy thử trực tuyến!

Giải pháp 50 byte cũ

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

4

APL Dyalog , 57 byte

Đòi hỏi ⎕IO←0 đó là mặc định trên nhiều hệ thống.

Giả sử khoảng cách đôi được cho phép, theo ví dụ đầu tiên của OP.

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

Dùng thử trực tuyến!

Giải pháp 49 byte không cạnh tranh (Dyalog APL 16.0):

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

3

Java 7, 372 370 366 byte

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;}

Có thể có thể chơi gôn nhiều hơn bằng cách đặt các dấu sao và tạo đầu ra cùng một lúc, thay vì từng cái một.

Mã thử nghiệm & mã hóa:

Hãy thử nó ở đây.

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();
    }
  }
}

Sản lượng có thể:

(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 

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.