Blocco di cifre


18

Stampa / stampa questo blocco di testo:

1234567890
2468013579
3691470258
4815926037
5049382716
6172839405
7306295184
8520741963
9753108642
0987654321

I formati accettabili includono:

  • Trailing newlines / whitespace
  • Elenco di stringhe
  • Elenco di elenchi di caratteri
  • Elenco di elenchi di numeri interi

Tuttavia, l'elenco di numeri interi non è accettabile perché l'ultima riga non è un numero intero.

Questo è . Vince la risposta più breve in byte. Si applicano scappatoie standard .

Risposte:


20

Mathematica, 33 byte

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

Provalo online! (Usando la matematica.)

La cella nell'indice basato su 1 (x,y)ha valore((x*y) % 11) % 10





5

MATL , 12 11 byte

Salvataggio di un byte grazie a Luis. Continuo a dimenticare che &è una scorciatoia per la duplicazione e la trasposizione.

10:&*11\10\

Provalo online!

Utilizzando l'algoritmo di @ Martin: x*y % 11 % 10

Spiegazione:

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 

Stesso conto:

10t:&*11\w\

È possibile salvare un byte sostituendolo t!*con&*
Luis Mendo il

1
@LuisMendo doppi backtick se hai una barra rovesciata alla fine dello snippet di codice nei commenti.
Martin Ender,

@MartinEnder Grazie! Non ricordo mai come funziona, quindi sono andato per la via semplice :-)
Luis Mendo,

@LuisMendo sì, è un po 'confuso con post e commenti che usano una sintassi diversa.
Martin Ender,

Grazie @LuisMendo! Non è nei documenti, vero?
Stewie Griffin,



2

Retina , 59 byte

Il conteggio dei byte presuppone la codifica ISO 8859-1.


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

,(1*)
$.1

Provalo online!

Spiegazione

Un'altra implementazione dell'algoritmo ...% 11% 10 . La parte divertente di farlo con una regex è che possiamo occuparci di entrambi i calcoli del modulo contemporaneamente.


10$*

Inizializza la stringa su dieci 1s.

1
,1$`

Sostituisci ciascuno di questi con una virgola, una e il prefisso davanti a quella. Questo dà ,1,11,...,1111111111, cioè un intervallo unario.

,1+
$_¶

Ora sostituisci ciascuno degli elementi dell'intervallo con l'intera stringa seguita da un avanzamento riga. Questo ci dà una griglia 10x10 di numeri unari che indicano la colonna corrente.

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

Abbina ciascuno 1e determina su quale riga si trova ripetendo il gruppo uno più volte. Sostituisci il 1con tanti 1s. Ciò moltiplica i valori in ciascuna riga per l'indice basato su 1 della riga.

1{10}1?

Ora facciamo mod 11, mod 10 in un solo passaggio. Per fare la mod 11 , normalmente rimuoveremmo tutto 1{11}dalla stringa da lasciare con i resti. E dopo lo rimuoveremmo 1{10}. Ma se rimuoviamo solo dieci 1s più un altro, se possibile, l'avidità del motore regex farà la mod 11 per noi il più a lungo possibile, e in caso contrario, proverà almeno la mod 10 .

,(1*)
$.1

Infine, convertiamo ogni numero in decimale sostituendolo con la sua lunghezza.



2

Haskell, 43 byte

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

2

Javascript (ES6), 70 64 56 byte

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

Salvato 4 byte grazie a Shaggy e 8 byte grazie ad Arnauld.


1
66 byte: _=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10)). Mi salvi 4 byte, io ti salvo 4 byte :)
Shaggy,

Molte grazie. Hai anche corretto un bug, quindi ho rasato altri 2 byte della tua soluzione ;-)
Luca

1
È possibile salvare 5 byte utilizzando il 3o parametro del callback nel primo map() e 3 byte in più usando 1e9+''invece di Array(10). Questo porta a _=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10)).
Arnauld,

@Arnauld: grazie per il 1e9trucco. Non lo sapevo. Ho pensato di usare il terzo argomento, ma per qualche ragione non l'ho usato.
Luca,

Di recente ho compilato un elenco di trucchi simili qui .
Arnauld,

2

Japt , 16 12 11 byte

Si è scoperto che questa era la mia risposta 200 (non eliminata) qui :)

Sembra che questa sia la stessa formula individuata da Martin .

Aõ
£®*X%B%A

Test ( -Rflag solo a scopo di visualizzazione)

  • 4 byte salvati grazie a Luke che sottolineava che era consentito restituire una serie di array.

Spiegazione

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

Sconfiggimi ... Puoi lasciare cadere gli ultimi due personaggi, e invece usa la -Rbandiera
Luca

1
Ancora meglio, rilascia gli ultimi quattro caratteri. Sembra che sia permesso ...
Luke,

Sì, sembra che tu abbia ragione, grazie @Luke :)
Shaggy,

1

Java 8, 84 byte

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

Utilizza lo stesso algoritmo di risposta Mathematica di @MartinEnder : 1-indicizzatox*y%11%10.

Spiegazione:

Provalo qui.

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

Carbone , 30 29 19 byte

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

Provalo online!

Usa la formula di Martin .

  • 10 byte salvati grazie a Neil, dimostrando ancora una volta che ho ancora così tanto da imparare ...

Non hai bisogno di messaggi finali »e mentre puoi usare ωinvece di ””te puoi salvare un sacco di byte usando ⸿come diventa Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿. (Prima di sapere ⸿che avrei suggerito J⁰ιche avrebbe comunque salvato un numero di byte.)
Neil

@Neil ⸿È l'operatore inverso, cosa fa alla fine del codice senza argomenti? È documentato?
Charlie,

1
No, è l'operatore Reverse, ⸿è il move cursor to start of next linecarattere (come ma può essere in una stringa separata).
Neil,


0

QBIC , 17 byte

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

Questo, ovviamente, usa il metodo di Martin. Si traduce in questo codice QBasic .

Spiegazione

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

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

Stesso algoritmo della maggior parte delle altre risposte ed essenzialmente la porta C # della risposta Java di @Kevins .



0

GolfScript , 37 24 byte

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

Provalo online!

-13 grazie a un trucco intelligente suggerito da Martin Ender .


se lo trasformi in un programma completo ( {-> ;, }-> `), puoi almeno eliminare il primo [.
Martin Ender,

È molto più breve utilizzare un semplice ciclo nidificato invece della tecnica zip:{){\)*11%10%}+10,/n}10,/
Martin Ender,

@MartinEnder Umm ... sembra che tu stia abusando /. ;)
Erik the Outgolfer,

@MartinEnder Oh, vedo cosa hai fatto ... hai usato int blk +-> {int space contents-of-blk}.
Erik the Outgolfer,

@MartinEnder ok Ho implementato il tuo +trucco ... anche se ho modificato un po 'il tuo codice
Erik the Outgolfer,




0

Pyke, 13 byte

TS F~u0+*i>i%

Provalo qui!

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 byte

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

Un'implementazione (abbastanza) semplice della risposta Python di Rod.

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!

L'uso di inserti terminati con <ESC> e un carattere di controllo per il comando ^ T salverebbero altri tre cinque byte, a spese della leggibilità.

L'uso della formula mod-11 / mod-10 di Martin in realtà lo rende più lungo a 43 byte usando i controlli per ^ A e ^ T, principalmente perché TECO non ha un operatore mod.

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

La mod 11 viene eseguita in modo continuo aumentando il numero in qn di -11 ogni volta che supera 10. La qn\r0a^Tsequenza inserisce il numero nel buffer di modifica come cifre decimali, inverte oltre l'ultima cifra, lo recupera dal buffer e lo digita, essenzialmente facendo mod-10.

Mi aspettavo che fosse più breve. Oh bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.