자릿수


18

이 텍스트 블록을 출력 / 인쇄하십시오 :

1234567890
2468013579
3691470258
4815926037
5049382716
6172839405
7306295184
8520741963
9753108642
0987654321

허용되는 형식은 다음과 같습니다.

  • 후행 줄 바꿈 / 공백
  • 문자열 목록
  • 문자 목록
  • 정수 목록

그러나 마지막 행이 정수가 아니므로 정수 목록은 허용되지 않습니다.

이것은 입니다. 바이트 단위의 최단 답변이 이깁니다. 표준 허점이 적용됩니다.

답변:






5

MATL , 12 11 바이트

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!*에 의해&*
루이스 Mendo

1
주석에서 코드 스 니펫 끝에 백 슬래시가 있으면 @LuisMendo 이중 백틱이 표시됩니다.
Martin Ender 2016 년

@MartinEnder 감사합니다! 나는 그것이 어떻게 작동하는지 결코 기억하지 못한다. 그래서 나는 쉬운 길을 갔다 :-)
Luis Mendo

@LuisMendo 예, 다른 구문을 사용하는 게시물 및 댓글과 약간 혼동됩니다.
Martin Ender 2016 년

감사합니다 @LuisMendo! 그건 문서에 없습니까?
Stewie Griffin



2

망막 , 59 바이트

바이트 수는 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 진수로 변환합니다.




2

자바 스크립트 (ES6), 70 64 56 바이트

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

Shaggy 덕분에 4 바이트를 절약하고 Arnauld 덕분에 8 바이트를 절약했습니다.


1
66 바이트 : _=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10)). 당신은 나를 4 바이트 저장, 나는 당신에게 4 바이트 저장 :)
Shaggy

고마워 또한 버그를 수정 했으므로 솔루션의 다른 2 바이트를 면도했습니다. ;-)
Luke

1
대신 콜백의 3 번째 매개 변수를 사용하여 5 바이트를 절약 map()하고 1e9+''대신 3 바이트를 더 사용할 수 Array(10)있습니다. 그로 이어집니다 _=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10)).
Arnauld

@Arnauld : 1e9트릭 주셔서 감사합니다 . 나는 그것을 몰랐다. 세 번째 인수를 사용하려고 생각했지만 어떤 이유로 든 사용하지 않았습니다.
Luke

최근에 비슷한 트릭 목록을 여기 에 컴파일했습니다 .
Arnauld 2016 년

2

apt , 16 12 11 바이트

이것은 내 200 (삭제되지 않은) 대답이었습니다. :)

이것은 마틴이 발견 한 것과 같은 공식 입니다.

Aõ
£®*X%B%A

테스트 ( -R시각화 목적으로 만 플래그 지정)

  • 배열 배열을 반환하는 것이 허용된다고 Luke가 지적한 덕분에 4 바이트가 절약 되었습니다.

설명

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플래그 를 사용할 수 있습니다
Luke

1
더 좋은 방법은 마지막 4자를 삭제하십시오. 허용 된 것 같습니다 ...
Luke

네, 당신이 옳은 것 같습니다, 감사합니다, @Luke :)
Shaggy

1

자바 8, 84 바이트

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

1

파이썬 2 , 58 52 바이트

offcialaimm 덕분에 -6 바이트

그가 어떻게 그렇게 빨리 생각해 냈는지 이해하지 못하는 Martin의 알고리즘을 사용합니다. o0

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

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


1
속기 r=range(1,11)는 6 바이트를 절약
officialaimm

2
내가 수식을 너무 빨리 발견 한 이유 중 하나는 이 math.SE 내 질문과 orlp의 의견 입니다.
Martin Ender



1

, 30 29 19 바이트

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

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

Martin의 공식을 사용합니다 .

  • Neil 덕분에 10 바이트가 절약되어 여전히 배울 점이 많이 있습니다.

당신은 후행하지 않아도 »사용할 수있는 반면들과 ω대신 ””사용하여 바이트의 전체 무리를 절약 할 수 있습니다 당신 ⸿이 다음수록 Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿. (내가 알기 전에 아직도 많은 바이트를 절약 할 ⸿것을 제안했을 J⁰ι것입니다.)
Neil

@Neil ⸿리버스 연산자입니다. 인수없이 코드 끝에서 무엇을합니까? 문서화되어 있습니까?
Charlie

1
아니, 그 반대 연산자 ⸿는 IS move cursor to start of next line문자 (같은 있지만, 별도의 문자열에있을 수 있습니다).
Neil


0

QBIC , 17 바이트

[|?[|?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

0

C #, 81 바이트

_=>{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 # 포트와 동일한 알고리즘 입니다.



0

GolfScript , 37 24 바이트

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

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

Martin Ender가 제안한 영리한 트릭 덕분에 -13 .


전체 프로그램 ( {-> ;, }-> `)으로 바꾸면 적어도 첫 번째 프로그램을 삭제할 수 있습니다 [.
마틴 엔더

zip 기술 대신 간단한 중첩 루프를 사용하는 것이 훨씬 짧습니다.{){\)*11%10%}+10,/n}10,/
Martin Ender

@MartinEnder Umm ... 너무 많이 사용하고있는 것 같습니다 /. ;)
Outgolfer Erik

@MartinEnder 오, 당신이 한 일을 보았습니다 ... 당신은 int blk +-> 사용했습니다 {int space contents-of-blk}.
아웃 골퍼 에릭

@MartinEnder 확인 나는 당신의 구현했습니다 +난 당신의 코드를 약간 변경 있지만 ... 트릭을
에릭 Outgolfer







0

TECO, 45 바이트

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을하고 있습니다.

나는 그것이 더 짧을 것으로 예상했다. 아

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