Блок цифр


18

Виведіть / надрукуйте цей блок тексту:

1234567890
2468013579
3691470258
4815926037
5049382716
6172839405
7306295184
8520741963
9753108642
0987654321

Допустимі формати включають:

  • Зміна нових рядків / пробілів
  • Список рядків
  • Список списків символів
  • Список списків цілих чисел

Однак список цілих чисел неприйнятний, оскільки останній рядок не є цілим числом.

Це . Найкоротша відповідь у байтах виграє. Застосовуються стандартні лазівки .

Відповіді:






5

MATL , 12 11 байт

Збережено байт завдяки Луїсу. Я забуваю, що &це ярлик для дублювання та переміщення.

10:&*11\10\

Спробуйте в Інтернеті!

Використання алгоритму @ Мартіна: 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!*його&*
Луїс Мендо,

1
@LuisMendo подвійні зворотні посилання, якщо у кінці фрагмента коду у коментарях є зворотна косої риски.
Мартін Ендер

@MartinEnder Дякую! Ніколи не пам’ятаю, як це працює, тому я пішов на простий шлях :-)
Луїс Мендо,

@LuisMendo так, це трохи заплутано в публікаціях та коментарях, використовуючи різні синтаксиси.
Мартін Ендер

Дякую @LuisMendo! Це не в документах, чи не так?
Стюі Гріффін



2

Сітківка , 59 байт

Кількість байтів передбачає кодування ISO 8859-1.


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

,(1*)
$.1

Спробуйте в Інтернеті!

Пояснення

Ще одна реалізація алгоритму ...% 11% 10 . Найцікавіше, що робити це за допомогою регулярного вираження - це те, що ми можемо подбати про обидва модульні обчислення одночасно.


10$*

Ініціалізуйте рядок до десяти 1с.

1
,1$`

Замініть кожного з них комою, одиницею та префіксом перед цим. Це дає ,1,11,...,1111111111, тобто одинарний діапазон.

,1+
$_¶

Тепер замініть кожен з елементів діапазону на весь рядок, за яким слідує подача рядків. Це дає нам сітку 10х10 одиничних чисел, що вказують на поточний стовпець.

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

Зрівняйте кожен 1і визначте, на якому рядку він повторюється, повторивши груповий той, що багато разів. Замініть на 1стільки 1с. Це помножує значення в кожному рядку на індекс на основі рядка.

1{10}1?

Тепер давайте зробимо mod 11, mod 10 в один крок. Щоб зробити модуль 11 , ми зазвичай просто видалимо все, 1{11}що залишилося з залишками. І тоді ми зняли б 1{10}після цього. Але якщо ми просто видалимо десять 1s плюс іншу, якщо можливо, жадібність двигуна регулярного вимикання зробить mod 11 для нас якомога довше, а якщо ні, то він спробує принаймні mod 10 .

,(1*)
$.1

Нарешті, ми просто перетворюємо кожне число в десятковий, замінюючи його на його довжину.




2

Javascript (ES6), 70 64 56 байт

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

Збережено 4 байти завдяки Шаггі та 8 байтів завдяки Арнольду.


1
66 байт: _=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10)). Ви врятуєте мене 4 байти, я заощаджую вас 4 байти :)
Шагі

Дуже дякую. Ви також виправили помилку, тому я поголив ще 2 байти вашого рішення ;-)
Лука

1
Ви можете зберегти 5 байт, використовуючи 3-й параметр зворотного виклику в першому map()та ще 3 байти, використовуючи 1e9+''замість Array(10). Це призводить до _=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10)).
Арнольд

@Arnauld: Дякую за 1e9трюк. Я цього не знав. Я думав про те, щоб використовувати третій аргумент, але я чомусь не користувався ним.
Лука

Я недавно склав список подібних трюків тут .
Арнольд

2

Japt , 16 12 11 байт

Виявляється, це було моєю 200 (невизначеною) відповіддю тут :)

Схоже, це та сама формула, яку помітив Мартін .

Aõ
£®*X%B%A

Тестуйте його ( -Rпрапор лише для цілей візуалізації)

  • 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прапор
Лука

1
Ще краще, киньте останні чотири символи. Здається, це дозволено ...
Люк

Так, схоже, ти маєш рацію, дякую, @Luke :)
Shaggy

1

Java 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 відповідь «s : 1-індексуються x*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 байти

-6 байт завдяки offcialaimm.

Використовує алгоритм Мартіна, який я не розумію, як він так швидко його придумав. 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
Частина причини, по якій я так швидко помітив формулу, - це питання математики .
Мартін Ендер



1

Вугілля деревне , 30 29 19 байт

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

Спробуйте в Інтернеті!

Використовує формулу Мартіна .

  • 10 байт збереглися завдяки Нілу, підтвердивши ще раз, що мені ще дуже багато чого навчитися ...

Вам не потрібні трейлінг »і, хоча ви можете використовувати ωзамість них, ””ви можете зберегти цілу купу байтів, використовуючи, ⸿як це стає потім Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿. (Перш ніж я про це знав, ⸿я б підказав, J⁰ιякий би все-таки зберег би кількість байтів.)
Ніл,

@Neil Це ⸿оператор зворотного зв'язку, що він робить в кінці коду без аргументів? Це документально підтверджено?
Чарлі

1
Ні, це оператор Reverse, ⸿це move cursor to start of next lineсимвол (як, але може бути в окремому рядку).
Ніл


0

QBIC , 17 байт

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

Для цього, звичайно, використовується метод Мартіна. Це перекладається на цей 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;}

Той самий алгоритм, що і більшість інших відповідей, і по суті є C # портом @Kevins відповіді Java.



0

GolfScript , 37 24 байт

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

Спробуйте в Інтернеті!

-13 завдяки розумній хитрість запропонував Мартін Ендер .


якщо ви перетворите його на повну програму ( {-> ;, }-> `), ви можете принаймні скинути першу [.
Мартін Ендер

Набагато коротше використовувати простий вкладений цикл замість zip-техніки:{){\)*11%10%}+10,/n}10,/
Мартін Ендер,

@MartinEnder Umm ... ти, схоже, перестараєшся /. ;)
Ерік Аутгольфер

@MartinEnder О, я бачу, що ти робив ... ти використовував int blk +-> {int space contents-of-blk}.
Ерік Аутгольфер

@MartinEnder Ок, я реалізував ваш +трюк ... хоча я трохи змінив ваш код
Ерік the Outgolfer





0

PHP , 54 байти

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

Спробуйте в Інтернеті!

PHP , 56 байт

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

Спробуйте в Інтернеті!


1
Ви можете опустити дужки ().
Крістоф

-2 байти: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;
Тіт


0

TECO, 45 байт

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

(Досить) прямо реалізація відповіді Рода на 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 дозволить зберегти іншу три п’ять байтів за рахунок читабельності.

Використання формули Мартина mod-11 / mod-10 фактично збільшує її на 43 байти, використовуючи елементи керування ^ A і ^ T, здебільшого тому, що TECO не має оператора моди.

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

Мод 11 робиться постійно, збільшуючи число в qn на -11, коли воно перевищує 10. qn\r0a^TПослідовність вставляє число в буфер редагування у вигляді десяткових цифр, повертає повз останню цифру, витягує її з буфера і вводить її, по суті робить мод-10.

Я очікував, що це буде коротше. Що ж, добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.