Khối chữ số


18

Xuất / in khối văn bản này:

1234567890
2468013579
3691470258
4815926037
5049382716
6172839405
7306295184
8520741963
9753108642
0987654321

Các định dạng có thể chấp nhận bao gồm:

  • Trailing newlines / khoảng trắng
  • Danh sách các chuỗi
  • Danh sách các nhân vật
  • Danh sách các số nguyên

Tuy nhiên, danh sách các số nguyên không được chấp nhận vì dòng cuối cùng không phải là số nguyên.

Đây là . Câu trả lời ngắn nhất trong byte thắng. Tiêu chuẩn áp dụng.

Câu trả lời:






5

MATL , 12 11 byte

Đã lưu một byte nhờ Luis. Tôi tiếp tục quên mất &là một phím tắt để nhân đôi và hoán vị.

10:&*11\10\

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

Sử dụng thuật toán của @ Martin: x*y % 11 % 10

Giải trình:

10            % Pust 10 to the stack. Stack: 1
  :           % 1-based range. Stack: [1 2 3 ... 10]
   &          % Duplicate range. Stack: [1 2 3 ... 10],[1 2 3 ... 10]
              % Transpose last range. Stack [1 2 3 ... 10],[1;2;3 ...10]
    *         % Multiply with broadcasting. Stack: [1 2 3 ...;2 4 6...] (10-by-10 array)
     11       % Push 11 to the stack. Stack [1 2 3 ...;2 4 6 ...], 11
       \      % Modulus. 
        10    % Push 10 to the stack.
          \   % Modulus
              % Implicit display 

Tương tự bytecount:

10t:&*11\w\

Bạn có thể lưu một byte thay thế t!*bằng&*
Luis Mendo

1
@LuisMendo backticks gấp đôi nếu bạn có dấu gạch chéo ngược ở cuối đoạn mã trong các bình luận.
Martin Ender

@MartinEnder Cảm ơn! Tôi không bao giờ nhớ nó hoạt động như thế nào, vì vậy tôi đã đi một cách dễ dàng :-)
Luis Mendo

@LuisMendo vâng, nó hơi khó hiểu với các bài đăng và nhận xét sử dụng cú pháp khác nhau.
Martin Ender

Cảm ơn @LuisMendo! Điều đó không có trong tài liệu phải không?
Stewie Griffin



2

Võng mạc , 59 byte

Số lượng byte giả định mã hóa ISO 8859-1.


10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?

,(1*)
$.1

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

Giải trình

Một triển khai khác của thuật toán ...% 11% 10 . Điều thú vị khi thực hiện nó với regex là chúng ta có thể chăm sóc cả hai tính toán modulo cùng một lúc.


10$*

Khởi tạo chuỗi thành mười 1s.

1
,1$`

Thay thế từng cái bằng dấu phẩy, một và tiền tố ở phía trước cái đó. Điều này cho ,1,11,...,1111111111, tức là một phạm vi unary.

,1+
$_¶

Bây giờ thay thế từng thành phần phạm vi bằng toàn bộ chuỗi theo sau là một nguồn cấp dữ liệu. Điều này cung cấp cho chúng ta một lưới 10 x 10 số đơn vị cho biết cột hiện tại.

(?<=(¶?.+)+)1
$#1$*

Ghép từng hàng 1và xác định hàng nào trên đó bằng cách lặp lại nhóm một lần nhiều lần. Thay thế 1bằng nhiều 1s. Điều này nhân các giá trị trong mỗi hàng theo chỉ số dựa trên 1 của hàng.

1{10}1?

Bây giờ chúng ta hãy làm mod 11, mod 10 trong một bước. Để thực hiện mod 11 , thông thường chúng ta chỉ cần xóa tất cả 1{11}khỏi chuỗi còn lại với phần còn lại. Và sau đó chúng tôi sẽ loại bỏ 1{10}sau đó. Nhưng nếu chúng ta chỉ loại bỏ mười 1giây cộng với nhau nếu có thể, sự tham lam của công cụ regex sẽ làm mod 11 cho chúng ta càng lâu càng tốt, và nếu không, thì nó sẽ thử ít nhất là mod 10 .

,(1*)
$.1

Cuối cùng, chúng tôi chỉ cần chuyển đổi từng số thành số thập phân bằng cách thay thế nó bằng độ dài của nó.



2

Haskell, 43 byte

l=[1..10]
f=[[x*i`mod`11`mod`10|i<-l]|x<-l]

2

Javascript (ES6), 70 64 56 byte

_=>[...1e9+''].map((_,a,b)=>b.map((_,c)=>-~a*++c%1‌​1%10))

Đã lưu 4 byte nhờ Shaggy và 8 byte nhờ Arnauld.


1
66 byte : _=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10)). Bạn tiết kiệm cho tôi 4 byte, tôi tiết kiệm cho bạn 4 byte :)
Shaggy

Cảm ơn rất nhiều. Bạn cũng đã sửa một lỗi, vì vậy tôi đã cạo thêm 2 byte giải pháp của bạn ;-)
Luke

1
Bạn có thể lưu 5 byte bằng cách sử dụng tham số thứ 3 của cuộc gọi lại trong lần đầu tiên map()và thêm 3 byte bằng cách sử dụng 1e9+''thay vì Array(10). Điều đó dẫn đến _=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10)).
Arnauld

@Arnauld: Cảm ơn vì 1e9mánh khóe. Tôi không biết điều đó. Tôi đã nghĩ về việc sử dụng đối số thứ ba, nhưng vì một số lý do tôi đã không sử dụng nó.
Luke

Gần đây tôi đã biên soạn một danh sách các thủ thuật tương tự ở đây .
Arnauld

2

Japt , 16 12 11 byte

Hóa ra đây là câu trả lời 200 (không thể xóa) của tôi ở đây :)

Hình như đây là công thức tương tự Martin phát hiện .

Aõ
£®*X%B%A

Kiểm tra nó ( -Rcờ cho mục đích trực quan hóa)

  • 4 byte được lưu nhờ Luke chỉ ra rằng việc trả về một mảng các mảng là được phép.

Giải trình

Aõ    :Generate an array of integers from 1 to 10, inclusive.
£     :Map over each element in the array, returning...
®     :Another map of the same array, which...
*X    :Multiplies the current element of the inner function by the current element of the outer function...
%B    :Modulus 11...
%A    :Modulus 10.
      :Implicit output of resulting 2D array

Hãy đánh bại tôi ... Bạn có thể thả hai nhân vật cuối cùng, và thay vào đó hãy sử dụng -Rcờ
Luke

1
Thậm chí tốt hơn, thả bốn nhân vật cuối cùng. Có vẻ như điều đó được cho phép ...
Luke

Yup, có vẻ như bạn đúng, cảm ơn, @Luke :)
Shaggy

1

Java 8, 84 byte

o->{String r="";for(int x=0,y;++x<11;r+="\n")for(y=0;++y<11;r+=x*y%11%10);return r;}

Sử dụng thuật toán tương tự như câu trả lời Mathicala của @MartinEnder : 1-index x*y%11%10.

Giải trình:

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

o->{                     // Unused Object parameter and String return-type
  String r="";           //  Result-String
  for(int x=0,y;++x<11;  //  Loop (1) from 1 to 11 (exclusive)
      r+="\n")           //    And append a new-line after every iteration
    for(y=0;++y<11;      //   Inner loop (2) from 1 to 11 (exclusive)
      r+=x*y%11%10       //    And append the result-String with `x*y%11%10`
    );                   //   End of inner loop (2)
                         //  End of loop (1) (implicit / single-line body)
  return r;              //  Return result-String
}                        // End of method

1

Python 2 , 58 52 byte

-6 byte nhờ offcialaimm.

Sử dụng thuật toán của Martin mà tôi không hiểu làm thế nào anh ta nghĩ ra nó nhanh như vậy. o0

r=range(1,11)
print[[x*y%11%10for y in r]for x in r]

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


1
Tốc ký r=range(1,11)tiết kiệm 6 byte
chính thức

2
Một phần lý do tôi phát hiện ra công thức rất nhanh là bài toán này. Câu hỏi của tôi và nhận xét của tôi ở đó .
Martin Ender



1

Than , 30 29 19 byte

Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿

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

Sử dụng công thức của Martin .

  • 10 byte được lưu nhờ Neil, chứng minh một lần nữa rằng tôi vẫn còn rất nhiều điều để tìm hiểu ...

Bạn không cần theo dõi »và trong khi bạn có thể sử dụng ωthay vì ””bạn có thể lưu cả đống byte bằng cách sử dụng ⸿khi điều này trở thành Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿. (Trước khi tôi biết về ⸿tôi sẽ đề xuất rằng J⁰ιvẫn sẽ lưu một số byte.)
Neil

@Neil ⸿Toán tử đảo ngược, nó làm gì ở cuối mã của bạn mà không có đối số? Nó được ghi nhận?
Charlie

1
Không, là toán tử Reverse, ⸿move cursor to start of next lineký tự (giống nhưng có thể ở một chuỗi riêng).
Neil


0

QBIC , 17 byte

[|?[|?a*b%11%z';

Điều này, tất nhiên, sử dụng Phương pháp của Martin. Nó dịch sang mã QBasic này .

Giải trình

[|               FOR A = 1 to 10 ([ starts a FOR loop, | delimits the list of arguments; 
                 a FOR loop with 0 args loops from 1 to 10 by default with increment 1.
  ?              PRINT a newline
   [|            Start a second FOR loop from 1-10, iterator b
     ?           PRINT
      a*b%11%z   the result of Martin's formula.
              '; and suppress newlines/tabs/spaces

0

C #, 81 byte

_=>{var r="";for(int x=0,y;++x<11;r+="\n")for(y=0;++y<11;r+=x*y%11%10);return r;}

Thuật toán giống như hầu hết các câu trả lời khác và về cơ bản là cổng C # của câu trả lời Java @Kevins .



0

GolfScript , 37 24 byte

10,{){\)*11%10%}+10,%}%`

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

-13 nhờ một mánh khóe thông minh mà Martin Ender gợi ý.


nếu bạn biến nó thành một chương trình đầy đủ ( {-> ;, }-> `), ít nhất bạn có thể bỏ chương trình đầu tiên [.
Martin Ender

Mặc dù vậy, việc sử dụng một vòng lặp lồng đơn giản thay vì kỹ thuật zip là rất ngắn:{){\)*11%10%}+10,/n}10,/
Martin Ender

@MartinEnder Umm ... bạn dường như đang quá lạm dụng /. ;)
Erik the Outgolfer

@MartinEnder Oh tôi thấy những gì bạn đã làm ... bạn đã sử dụng int blk +-> {int space contents-of-blk}.
Erik the Outgolfer

@MartinEnder ok Tôi đã thực hiện +thủ thuật của bạn ... mặc dù tôi đã thay đổi mã của bạn một chút
Erik the Outgolfer







0

TECO, 45 byte

1un@i/
/10<@i/01234567890/jl10<qnc0a^t>jtl%n>

Một cách thực hiện (khá) đơn giản cho câu trả lời Python của Rod.

1un           !initialize register n to 1!
@i/<nl>/      !insert a newline!
10<           !loop for 10 rows!
@i/01234567890/  !insert the mysterious string of digits!
j             !move point to start of buffer!
l             !move forward past the newline!
10<           !loop for 10 digits on a line!
qnc           !move point forward by n characters!
0a^t          !print the character at point!
>             !end inner loop!
j             !move point to start of buffer!
t             !print (empty) line!
l             !move to start of digit string!
%n            !increment register n (for next line)!
>             !end outer loop!

Sử dụng các phần chèn được tối ưu hóa <ESC> và ký tự điều khiển cho lệnh ^ T sẽ tiết kiệm được ba phần tử khác năm byte, với chi phí dễ đọc.

Sử dụng công thức mod-11 / mod-10 của Martin thực sự làm cho nó dài hơn ở mức 43 byte bằng cách sử dụng các điều khiển cho ^ A và ^ T, chủ yếu là do TECO không có toán tử mod.

0ur10<%run10<qn-10"g-11%n'qn\r0a^Tqr%n>^a
^A>

Mod 11 được thực hiện một cách liên tục bằng cách tăng số lượng trong qn lên -11 bất cứ khi nào vượt quá 10. qn\r0a^T tự chèn số trong bộ đệm chỉnh sửa dưới dạng chữ số thập phân, đảo ngược chữ số cuối cùng, lấy nó từ bộ đệm và gõ nó, thực chất là làm mod-10.

Tôi dự kiến ​​nó sẽ ngắn hơn. Ồ, tốt.

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.