Bloco de dígitos


18

Saída / impressão deste bloco de texto:

1234567890
2468013579
3691470258
4815926037
5049382716
6172839405
7306295184
8520741963
9753108642
0987654321

Os formatos aceitáveis ​​incluem:

  • Trailing newlines / espaço em branco
  • Lista de strings
  • Lista de listas de caracteres
  • Lista de listas de números inteiros

No entanto, a lista de números inteiros não é aceitável porque a última linha não é um número inteiro.

Isso é . A resposta mais curta em bytes vence. Aplicam-se brechas padrão .

Respostas:






5

MATL , 12 11 bytes

Guardou um byte graças a Luis. Eu continuo esquecendo que &é um atalho para duplicar e transpor.

10:&*11\10\

Experimente online!

Usando o algoritmo de @ Martin: x*y % 11 % 10

Explicação:

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 

O mesmo bytecount:

10t:&*11\w\

Você pode salvar um byte substituindo t!*por&*
Luis Mendo

1
@LuisMendo backticks duplos, se você tiver uma barra invertida no final do snippet de código nos comentários.
Martin Ender

@MartinEnder Thanks! Eu nunca me lembro como isso funciona, então eu fui para o caminho mais fácil :-)
Luis Mendo

@LuisMendo sim, é um pouco confuso com postagens e comentários usando sintaxe diferente.
Martin Ender

Obrigado @LuisMendo! Isso não está na documentação, está?
Stewie Griffin



2

Retina , 59 bytes

A contagem de bytes assume a codificação ISO 8859-1.


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

,(1*)
$.1

Experimente online!

Explicação

Outra implementação do ...% 11% 10 . A parte divertida de fazer isso com um regex é que podemos cuidar dos dois cálculos de módulo de uma só vez.


10$*

Inicialize a string para dez 1s.

1
,1$`

Substitua cada uma delas por vírgula, uma e o prefixo na frente dessa. Isso dá ,1,11,...,1111111111, ou seja, um alcance unário.

,1+
$_¶

Agora substitua cada um dos elementos do intervalo pela sequência inteira seguida por um avanço de linha. Isso nos fornece uma grade de 10x10 de números unários, indicando a coluna atual.

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

Combine cada um 1e determine em qual linha está repetindo o grupo um várias vezes. Substitua 1por tantos 1s. Isso multiplica os valores em cada linha pelo índice baseado em 1 da linha.

1{10}1?

Agora vamos fazer o mod 11, o mod 10 em uma etapa. Para fazer o mod 11 , normalmente removíamos tudo 1{11}da string a ser deixada com o restante. E depois removeríamos 1{10}depois disso. Mas se apenas removermos dez 1s mais outro, se possível, a ganância do mecanismo de expressão regular fará o mod 11 por nós o máximo de tempo possível; caso contrário, tentará pelo menos o mod 10 .

,(1*)
$.1

Finalmente, apenas convertemos cada número em decimal, substituindo-o pelo seu comprimento.



2

Haskell, 43 bytes

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

2

Javascript (ES6), 70 64 56 bytes

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

Economizou 4 bytes graças a Shaggy e 8 bytes graças a Arnauld.


1
66 bytes: _=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10)). Você me salvar 4 bytes, eu te salvar 4 bytes :)
Shaggy

Muito obrigado. Também fixa um bug, então eu raspei mais 2 bytes de sua solução ;-)
Lucas

1
Você pode salvar 5 bytes usando o terceiro parâmetro do retorno de chamada no primeiro map()e mais 3 bytes usando em 1e9+''vez de Array(10). Isso leva a _=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10)).
Arnauld

@ Arnauld: Obrigado pelo 1e9truque. Eu não conhecia esse. Pensei em usar o terceiro argumento, mas por algum motivo não o usei.
Luke

Recentemente, compilei uma lista de truques semelhantes aqui .
precisa

2

Japonês , 16 12 11 bytes

Acontece que esta foi a minha resposta 200 (não excluída) aqui :)

Parece que esta é a mesma fórmula que Martin viu .

Aõ
£®*X%B%A

Teste ( -Rsinalize apenas para fins de visualização)

  • 4 bytes salvos graças a Luke, apontando que o retorno de uma matriz de matrizes era permitido.

Explicação

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

Me derrote ... Você pode soltar os dois últimos caracteres e usar a -Rbandeira
Luke

1
Melhor ainda, solte os últimos quatro caracteres. Parece que é permitido ...
Lucas

Sim, parece que você está bem, obrigado, @Luke :)
Shaggy

1

Java 8, 84 bytes

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

Usa o mesmo algoritmo da resposta do Mathematica do @MartinEnder : 1-indexado x*y%11%10.

Explicação:

Experimente aqui.

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

Carvão , 30 29 19 bytes

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

Experimente online!

Usa a fórmula de Martin .

  • 10 bytes salvos graças a Neil, provando mais uma vez que ainda tenho muito a aprender ...

Você não precisa se arrastar se, »enquanto você pode usar, em ωvez de ””salvar um monte de bytes, use ⸿como ele se torna Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿. (Antes que eu sabia sobre o ⸿que eu teria sugerido J⁰ιque ainda teria salvou um número de bytes.)
Neil

@ Neil O ⸿operador é o reverso, o que ele faz no final do seu código sem argumentos? Está documentado?
Charlie

1
Não, é o operador Reverso, ⸿é o move cursor to start of next linecaractere (como mas pode estar em uma sequência separada).
Neil


0

QBIC , 17 bytes

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

Obviamente, isso usa o método de Martin. É traduzido para esse código QBasic .

Explicação

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

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

O mesmo algoritmo da maioria das outras respostas e essencialmente a porta C # da resposta do @Kevins Java.



0

GolfScript , 37 24 bytes

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

Experimente online!

-13, graças a um truque inteligente sugerido por Martin Ender .


se você transformá-lo em um programa completo ( {-> ;, }-> `), você pode pelo menos largar o primeiro [.
Martin Ender

É muito mais curto usar um loop aninhado simples em vez da técnica de zip:{){\)*11%10%}+10,/n}10,/
Martin Ender

@MartinEnder Umm ... você parece estar usando demais /. ;)
Erik the Outgolfer

@MartinEnder Oh, eu vejo o que você fez ... você usou int blk +-> {int space contents-of-blk}.
Erik the Outgolfer

@MartinEnder ok Eu implementei seu +truque ... embora eu tenha alterado um pouco o código #
Erik the Outgolfer




0

Pyke, 13 bytes

TS F~u0+*i>i%

Experimente aqui!

TS            -  [1, 2, 3, 4, 5, 6, 7, 8, 9]
   F~u0+*i>i% - for i in ^:
    ~u0+      -     "01234567890"
        *     -    ^ * i
         i>   -   ^[i:]
           i% -  ^[::i]



0

TECO, 45 bytes

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

Uma implementação (bastante) direta da resposta de 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!

O uso de inserções terminadas com <ESC> e um caractere de controle para o comando ^ T economizaria outros três cinco bytes, à custa da legibilidade.

O uso da fórmula mod-11 / mod-10 de Martin na verdade aumenta em 43 bytes usando os controles para ^ A e ^ T, principalmente porque o TECO não possui um operador mod.

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

O Mod 11 é feito de maneira contínua, incrementando o número em qn em -11 sempre que excede 10. A qn\r0a^Tsequência insere o número no buffer de edição como dígitos decimais, reverte o último dígito, recupera-o do buffer e digita-o, essencialmente fazendo mod-10.

Eu esperava que fosse mais curto. Ah bem.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.