답변:
Mod[1##,11]~Mod~10&~Array~{10,10}
온라인으로 사용해보십시오! (수학 사용)
1 기반 인덱스의 셀 (x,y)에는 값이 있습니다((x*y) % 11) % 10
Luis 덕분에 바이트를 절약했습니다. 나는 그것을 &복제하고 바꾸는 지름길을 잊어 버린다.
10:&*11\10\
@Martin의 알고리즘 사용 : x*y % 11 % 10
설명:
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
동일한 바이트 수 :
10t:&*11\w\
t!*에 의해&*
10|11|∘.×⍨⍳10
내 Mathematica 답변 의 포트 .
∘.×⍨ ⍝ Multiplication table of...
⍳10 ⍝ The list from 1 to 10.
11| ⍝ mod 11.
10| ⍝ mod 10.
바이트 수는 ISO 8859-1 인코딩을 가정합니다.
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
... % 11 % 10 알고리즘 의 다른 구현 . 정규식으로 그것을하는 재미있는 부분은 두 모듈로 계산을 한 번에 처리 할 수 있다는 것입니다.
10$*
문자열을 10 1초로 초기화하십시오 .
1
,1$`
각각을 쉼표, 하나 및 그 앞에있는 접두어로 바꾸십시오. 이것은 ,1,11,...,1111111111단항 범위를 제공합니다.
,1+
$_¶
이제 각 범위 요소를 전체 문자열과 줄 바꿈으로 바꿉니다. 이것은 현재 열을 나타내는 10x10의 단항 숫자 그리드를 제공합니다.
(?<=(¶?.+)+)1
$#1$*
각각을 일치 1시키고 그룹을 여러 번 반복하여 행을 결정하십시오. 1를 여러 개로 바꿉니다 1. 각 행의 값에 행의 1 기반 인덱스를 곱합니다.
1{10}1?
이제 한 단계에서 mod 11, mod 10을 해 봅시다 . mod 11 을 수행하려면 일반적으로 1{11}나머지 부분과 함께 남겨 둘 문자열에서 모두 제거합니다 . 그리고 나서 그 1{10}후에 제거 합니다. 그러나 가능한 경우 10 1초와 다른 것을 제거 하면 정규식 엔진의 욕심은 가능한 한 오랫동안 모드 11 을 수행 하고, 그렇지 않으면 적어도 모드 10을 시도 합니다.
,(1*)
$.1
마지막으로 각 숫자를 길이로 바꾸어 각 숫자를 10 진수로 변환합니다.
_=>[...1e9+''].map((_,a,b)=>b.map((_,c)=>-~a*++c%11%10))
Shaggy 덕분에 4 바이트를 절약하고 Arnauld 덕분에 8 바이트를 절약했습니다.
_=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10)). 당신은 나를 4 바이트 저장, 나는 당신에게 4 바이트 저장 :)
map()하고 1e9+''대신 3 바이트를 더 사용할 수 Array(10)있습니다. 그로 이어집니다 _=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10)).
1e9트릭 주셔서 감사합니다 . 나는 그것을 몰랐다. 세 번째 인수를 사용하려고 생각했지만 어떤 이유로 든 사용하지 않았습니다.
이것은 내 200 (삭제되지 않은) 대답이었습니다. :)
이것은 마틴이 발견 한 것과 같은 공식 입니다.
Aõ
£®*X%B%A
테스트 ( -R시각화 목적으로 만 플래그 지정)
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
-R플래그 를 사용할 수 있습니다
o->{String r="";for(int x=0,y;++x<11;r+="\n")for(y=0;++y<11;r+=x*y%11%10);return r;}
@MartinEnder 와 동일한 알고리즘을 사용합니다. 의 Mathematica answer : 1-indexedx*y%11%10 .
설명:
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
offcialaimm 덕분에 -6 바이트
그가 어떻게 그렇게 빨리 생각해 냈는지 이해하지 못하는 Martin의 알고리즘을 사용합니다. o0
r=range(1,11)
print[[x*y%11%10for y in r]for x in r]
r=range(1,11)는 6 바이트를 절약
1:10%o%1:10%%11%%10
내가 작성한 R 코드 중 가장 "R"이 가장 적은 비트입니다. Martin Ender의 답변 과 같은 알고리즘을 사용합니다 (그리고 거의 모든 다른 답변도). x %o% y와 동일합니다 outer(x, y).
»사용할 수있는 반면들과 ω대신 ””사용하여 바이트의 전체 무리를 절약 할 수 있습니다 당신 ⸿이 다음수록 Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿. (내가 알기 전에 아직도 많은 바이트를 절약 할 ⸿것을 제안했을 J⁰ι것입니다.)
⸿리버스 연산자입니다. 인수없이 코드 끝에서 무엇을합니까? 문서화되어 있습니까?
⮌그 반대 연산자 ⸿는 IS move cursor to start of next line문자 (같은 ¶있지만, 별도의 문자열에있을 수 있습니다).
f(x,y){for(x=0;x++<10;puts(""))for(y=0;y++<10;putchar(x*y%11%10+48));}
[|?[|?a*b%11%z';
물론 이것은 Martin의 방법을 사용합니다. 이 QBasic 코드로 번역됩니다 .
[| 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
_=>{var r="";for(int x=0,y;++x<11;r+="\n")for(y=0;++y<11;r+=x*y%11%10);return r;}
대부분의 다른 답변과 기본적으로 @Kevins Java 답변 의 C # 포트와 동일한 알고리즘 입니다.
12345678902468013579369147025848159260375049382716
.*
$&$&
O$^50>`.
.{10}
$&¶
{-> ;, }-> `)으로 바꾸면 적어도 첫 번째 프로그램을 삭제할 수 있습니다 [.
{){\)*11%10%}+10,/n}10,/
/. ;)
int blk +-> 사용했습니다 {int space contents-of-blk}.
+난 당신의 코드를 약간 변경 있지만 ... 트릭을
10$*T
M!&`T+
m`$
;110$*T10$*
1
09876543210
m`(?<=^\1;\1{0,9}(T+))T
C
(?<!C.{108})\S
TS F~u0+*i>i%
TS - [1, 2, 3, 4, 5, 6, 7, 8, 9]
F~u0+*i>i% - for i in ^:
~u0+ - "01234567890"
* - ^ * i
i> - ^[i:]
i% - ^[::i]
for(;9>=$y++||9>=$x+=$y=print"
";)echo($x+1)*$y%11%10;
for(;$x++<=9;print"
")for($y=0;$y++<=9;)echo$x*$y%11%10;
().
for(;<0>$y++||10>$x+=$y=print"\n";)echo($x+1)*$y%11%10;
for($x=1;11>++$y||11>$x+=$y=print"\n";)echo$x*$y%11%10;
1un@i/
/10<@i/01234567890/jl10<qnc0a^t>jtl%n>
Rod의 Python 답변을 (정당하게) 간단하게 구현했습니다.
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!
<ESC>로 끝나는 삽입과 ^ T 명령에 제어 문자를 사용하면 가독성을 희생시키면서 3 바이트를 5 바이트 더 절약 할 수 있습니다.
Martin의 mod-11 / mod-10 수식을 사용하면 ^ A 및 ^ T에 대한 컨트롤을 사용하여 실제로 43 바이트에서 더 길어집니다. 대부분 TECO에는 mod 연산자가 없기 때문입니다.
0ur10<%run10<qn-10"g-11%n'qn\r0a^Tqr%n>^a
^A>
Mod 11은 qn의 숫자가 10을 초과 할 때마다 -11 씩 증가하여 지속적인 방식으로 수행됩니다. qn\r0a^T 시퀀스는 편집 버퍼에 숫자를 10 진수로 삽입하고 마지막 자리를지나 반전하며 버퍼에서 검색하여 입력합니다. 본질적으로 mod-10을하고 있습니다.
나는 그것이 더 짧을 것으로 예상했다. 아