Blok cyfr

18

Wydrukuj / wydrukuj ten blok tekstu:

1234567890
2468013579
3691470258
4815926037
5049382716
6172839405
7306295184
8520741963
9753108642
0987654321

Dopuszczalne formaty obejmują:

  • Końcowe znaki nowej linii / białe znaki
  • Lista ciągów
  • Lista list znaków
  • Lista list liczb całkowitych

Jednak lista liczb całkowitych jest niedopuszczalna, ponieważ ostatni wiersz nie jest liczbą całkowitą.

To jest . Najkrótsza odpowiedź w bajtach wygrywa. Obowiązują standardowe luki .

Leaky Nun
źródło

Odpowiedzi:

20

Mathematica, 33 bajty

Mod[1##,11]~Mod~10&~Array~{10,10}

Wypróbuj online! (Korzystanie z matematyki.)

Komórka o indeksie 1 (x,y)ma wartość((x*y) % 11) % 10

Martin Ender
źródło
11

Python 2 , 48 46 bajtów

n=10
while n:print('00987654321'*n)[n::n];n-=1

Wypróbuj online!

mdahmoune
źródło
6
Witamy w PPCG i niesamowita pierwsza odpowiedź! Mamy nadzieję, że zostaniesz i
wniesiesz
@ETHproductions thanx :)))
mdahmoune
5

MATL , 12 11 bajtów

Zaoszczędzony bajt dzięki Luisowi. Ciągle zapominam, że &jest to skrót do powielania i transponowania.

10:&*11\10\

Wypróbuj online!

Za pomocą algorytmu @ Martin: x*y % 11 % 10

Wyjaśnienie:

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 

Ten sam bytecount:

10t:&*11\w\
Stewie Griffin
źródło
Można zapisać bajt zastąpiono t!*przez&*
Luis Mendo
1
@LuisMendo podwójne wstawki wsteczne, jeśli masz odwrotny ukośnik na końcu fragmentu kodu w komentarzach.
Martin Ender
@MartinEnder Thanks! Nigdy nie pamiętam, jak to działa, więc wybrałem prosty sposób :-)
Luis Mendo
@LuisMendo tak, to trochę mylące z postami i komentarzami używającymi innej składni.
Martin Ender
Dzięki @LuisMendo! To nie jest w dokumentach, prawda?
Stewie Griffin
2

Siatkówka , 59 bajtów

Liczba bajtów zakłada kodowanie ISO 8859-1.


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

,(1*)
$.1

Wypróbuj online!

Wyjaśnienie

Kolejna implementacja ...% 11% 10 algorytmu. Zabawne jest to, że wykonywanie wyrażeń regularnych polega na tym, że możemy zająć się oboma obliczeniami modulo naraz.


10$*

Zainicjuj ciąg do dziesięciu 1sekund.

1
,1$`

Zastąp każdy z nich przecinkiem, jednym i przedrostkiem przed tym. Daje to ,1,11,...,1111111111, tj. Jednoargumentowy zasięg.

,1+
$_¶

Teraz zamień każdy z elementów zakresu na cały ciąg znaków, a następnie na linię. To daje nam siatkę 10x10 liczb jednostkowych wskazujących bieżącą kolumnę.

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

Dopasuj każdy 1i określ, który wiersz jest włączony, powtarzając grupę jeden razy. Zamień na 1tyle 1s. Mnoży to wartości w każdym wierszu przez indeks oparty na 1 wierszu.

1{10}1?

Teraz zróbmy mod 11, mod 10 w jednym kroku. Aby wykonać mod 11 , zwykle po prostu usuwamy wszystko 1{11}z łańcucha, który ma pozostać z resztą. A potem usuwamy 1{10}. Ale jeśli po prostu usuniemy dziesięć 1s plus inne, jeśli to możliwe, zachłanność silnika regex zrobi dla nas mod 11 tak długo, jak to możliwe, a jeśli nie, to spróbuje przynajmniej mod 10 .

,(1*)
$.1

Na koniec konwertujemy każdą liczbę na dziesiętną, zastępując ją długością.

Martin Ender
źródło
2

05AB1E , 14 bajtów

11GTLN*11%T%})

Wypróbuj online!

Wykorzystuje algorytm Martina, jak zwykle.

Erik the Outgolfer
źródło
Och, istnieje algorytm dla tego wzorca. To wyjaśnia, dlaczego jestem o 30 bajtów powyżej średniej odpowiedzi.
Magic Octopus Urn
2

Haskell, 43 bajty

l=[1..10]
f=[[x*i`mod`11`mod`10|i<-l]|x<-l]
Siracusa
źródło
2

JavaScript (ES6), 70 64 56 bajtów

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

Zaoszczędź 4 bajty dzięki Shaggy i 8 bajtów dzięki Arnauld.

Łukasz
źródło
1
66 bajtów: _=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10)). Zapisujesz mi 4 bajty, ja oszczędzam 4 bajty :)
Shaggy
Wielkie dzięki. Naprawiłeś także błąd, więc ogoliłem kolejne 2 bajty twojego rozwiązania ;-)
Luke
1
Możesz zapisać 5 bajtów, używając trzeciego parametru wywołania zwrotnego w pierwszym map()i jeszcze 3 bajty, używając 1e9+''zamiast Array(10). To prowadzi do _=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10)).
Arnauld
@Arnauld: Dzięki za 1e9podstęp. Nie znałem tego. Myślałem o użyciu trzeciego argumentu, ale z jakiegoś powodu go nie użyłem.
Luke
I niedawno przygotował listę podobnych sztuczek tutaj .
Arnauld
2

Japt , 16 12 11 bajtów

Okazuje się, że to była moja 200 (nieodwołana) odpowiedź tutaj :)

Wygląda na to, że to ta sama formuła, którą zauważył Martin .

Aõ
£®*X%B%A

Przetestuj ( -Rflaga tylko do celów wizualizacji)

  • 4 bajty zaoszczędzone dzięki Łukaszowi wskazującemu, że zwracanie tablicy tablic jest dozwolone.

Wyjaśnienie

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
Kudłaty
źródło
Pobij mnie do tego ... Możesz upuścić dwie ostatnie postacie i zamiast tego użyć -Rflagi
Luke
1
Co więcej, upuść cztery ostatnie postacie. Wydaje się, że jest to dozwolone ...
Luke
Tak, wygląda na to, że masz rację, dziękuję, @Luke :)
Shaggy
1

Java 8, 84 bajtów

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

Używa tego samego algorytmu, co odpowiedź Mathematica @MartinEnder : 1-indeksowana x*y%11%10.

Wyjaśnienie:

Wypróbuj tutaj.

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
Kevin Cruijssen
źródło
1

Python 2 , 58 52 bajtów

-6 bajtów dzięki offcialaimm.

Wykorzystuje algorytm Martina, którego nie rozumiem, skąd tak szybko go wymyślił. o0

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

Wypróbuj online!

całkowicie ludzki
źródło
1
Stenografia r=range(1,11)oszczędza 6 bajtów
officialaimm
2
Jednym z powodów, dla których tak szybko zauważyłem formułę, jest moje pytanie matematyczne. Moje pytanie i komentarz Orlpa tam .
Martin Ender
1

Pyth, 13 bajtów

mme%*kd11STST

Wypróbuj tutaj

-1 dzięki KarlKastor .

Let's duuuuuuupe!

Erik the Outgolfer
źródło
Zaoszczędź jeden bajt, jeśli używasz ezamiast% T
KarlKastor
@KarlKastor ... i pamiętałem to ._.
Erik the Outgolfer
1

R , 19 bajtów

1:10%o%1:10%%11%%10

Wypróbuj online!

Najmniej wyglądający „R” fragment kodu R, jaki kiedykolwiek napisałem. Wykorzystuje ten sam algorytm, co odpowiedź Martina Endera (i prawie wszystkie pozostałe odpowiedzi). x %o% yjest taki sam jak outer(x, y).

użytkownik2390246
źródło
1

Węgiel drzewny , 30 29 19 bajtów

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

Wypróbuj online!

Korzysta ze wzoru Martina .

  • 10 bajtów zaoszczędzonych dzięki Neilowi, kolejny raz udowadniając, że wciąż muszę się wiele nauczyć ...
Charlie
źródło
Nie potrzebujesz końcowych znaków »s i chociaż możesz użyć ωzamiast tego ””, możesz zapisać całą wiązkę bajtów, używając ⸿tego, co wtedy się stanie Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿. (Zanim się dowiem, ⸿zasugerowałbym, J⁰ιco pozwoliłoby zaoszczędzić wiele bajtów.)
Neil
@ Neil ⸿Jest operatorem odwrotnym, co robi na końcu kodu bez argumentów? Czy to jest udokumentowane?
Charlie
1
Nie, jest operatorem odwrotnym, ⸿jest move cursor to start of next lineznakiem (podobnie jak, ale może być w osobnym ciągu).
Neil
0

C (gcc) , 70 bajtów

f(x,y){for(x=0;x++<10;puts(""))for(y=0;y++<10;putchar(x*y%11%10+48));}

Wypróbuj online!

Giacomo Garabello
źródło
0

QBIC , 17 bajtów

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

To oczywiście wykorzystuje Metodę Martina. To tłumaczy na ten kod QBasic .

Wyjaśnienie

[|               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
Steenbergh
źródło
0

C #, 81 bajtów

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

Ten sam algorytm jak większość innych odpowiedzi i zasadniczo port C # odpowiedzi Java @Kevins .

TheLethalCoder
źródło
0

GolfScript , 37 24 bajtów

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

Wypróbuj online!

-13 dzięki sprytnej sztuczce, którą zasugerował Martin Ender .

Erik the Outgolfer
źródło
jeśli zmienisz go w pełny program ( {-> ;, }-> `), możesz przynajmniej upuścić pierwszy [.
Martin Ender
Znacznie krócej jest jednak użyć prostej zagnieżdżonej pętli zamiast techniki zip:{){\)*11%10%}+10,/n}10,/
Martin Ender
@MartinEnder Umm ... wydajesz się nadużywać /. ;)
Erik the Outgolfer
@MartinEnder Och, widzę, co zrobiłeś ... użyłeś int blk +-> {int space contents-of-blk}.
Erik the Outgolfer
@MartinEnder ok Wdrożyłem twoją +sztuczkę ... chociaż nieco
zmieniłem
0

Pyke, 13 bajtów

TS F~u0+*i>i%

Wypróbuj tutaj!

TS            -  [1, 2, 3, 4, 5, 6, 7, 8, 9]
   F~u0+*i>i% - for i in ^:
    ~u0+      -     "01234567890"
        *     -    ^ * i
         i>   -   ^[i:]
           i% -  ^[::i]
niebieski
źródło
0

PHP , 54 bajty

for(;9>=$y++||9>=$x+=$y=print"
";)echo($x+1)*$y%11%10;

Wypróbuj online!

PHP , 56 bajtów

for(;$x++<=9;print"
")for($y=0;$y++<=9;)echo$x*$y%11%10;

Wypróbuj online!

Jörg Hülsermann
źródło
1
Możesz upuścić nawiasy ().
Christoph
-2 bajty:for(;<0>$y++||10>$x+=$y=print"\n";)echo($x+1)*$y%11%10;
Titus
... lubfor($x=1;11>++$y||11>$x+=$y=print"\n";)echo$x*$y%11%10;
Titus
0

TECO, 45 bajtów

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

(Dość) prosta implementacja odpowiedzi Rod's 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!

Użycie wstawianych końców <ESC> i znaku kontrolnego dla polecenia ^ T pozwoliłoby na zapisanie innego trzy pięć bajtów, kosztem czytelności.

Użycie formuły mod-11 / mod-10 Martina faktycznie wydłuża go do 43 bajtów przy użyciu elementów sterujących dla ^ A i ^ T, głównie dlatego, że TECO nie ma operatora mod.

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

Mod 11 jest wykonywany w sposób ciągły, zwiększając liczbę w qn o -11, gdy tylko przekroczy 10. qn\r0a^TSekwencja wstawia liczbę do bufora edycyjnego jako cyfry dziesiętne, cofa się za ostatnią cyfrę, pobiera ją z bufora i wpisuje, zasadniczo robi mod-10.

Spodziewałem się, że będzie krótszy. No cóż.

JoeT
źródło