Cifre intere delle tabelle aritmetiche


17

Sfida:

Emette le "cifre intere" di una delle seguenti sei tabelle aritmetiche basate sull'input:
- addition ( +);
- sottrazione ( -);
- moltiplicazione ( *);
- divisione ( /);
- esponenziazione ( ^);
- operazione modulo (% ).

Regole:

  • Quello che faccio a definire come 'interi-cifre': ogni risultato dell'operando aritmetica che è esattamente uno dei seguenti: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Ciò significa che si esclude ogni risultato di 10o superiore, ogni risultato di -1o inferiore e ogni risultato non intero.
  • Come calcoliamo i risultati aritmetici: utilizzando prima la cifra in alto, quindi l'operando con la cifra a sinistra. Puoi farlo viceversa (cioè y/xinvece di x/y), purché tu sia coerente per tutte e sei le uscite! (Quindi non ti è permesso usare y-xe x/ynella stessa risposta.)
  • Non forniremo nulla per dividere per 0 casi di test (per le tabelle di operazioni di divisione e modulo)
  • Non verrà emesso nulla per il caso limite 0^0.

Produzione:

Quindi emetti il ​​seguente (il formato della tabella è alquanto flessibile (vedi sotto): quindi le linee sono opzionali e principalmente aggiunte per la leggibilità dei casi di test):

aggiunta:

+ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 | 1 2 3 4 5 6 7 8 9
2 | 2 3 4 5 6 7 8 9
3 | 3 4 5 6 7 8 9
4 | 4 5 6 7 8 9
5 | 5 6 7 8 9
6 | 6 7 8 9
7 | 7 8 9
8 | 8 9
9 | 9

Sottrazione:

- | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 |   0 1 2 3 4 5 6 7 8
2 |     0 1 2 3 4 5 6 7
3 |       0 1 2 3 4 5 6
4 |         0 1 2 3 4 5
5 |           0 1 2 3 4
6 |             0 1 2 3
7 |               0 1 2
8 |                 0 1
9 |                   0

Moltiplicazione:

* | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 0 0 0 0 0 0 0 0 0
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 2 4 6 8
3 | 0 3 6 9
4 | 0 4 8
5 | 0 5
6 | 0 6
7 | 0 7
8 | 0 8
9 | 0 9

Divisione:

/ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0   1   2   3   4
3 | 0     1     2     3
4 | 0       1       2
5 | 0         1
6 | 0           1
7 | 0             1
8 | 0               1
9 | 0                 1

potenza:

^ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 |   1 1 1 1 1 1 1 1 1
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 1 4 9
3 | 0 1 8
4 | 0 1
5 | 0 1
6 | 0 1
7 | 0 1
8 | 0 1
9 | 0 1

Modulo:

% | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 
1 | 0 0 0 0 0 0 0 0 0 0
2 | 0 1 0 1 0 1 0 1 0 1
3 | 0 1 2 0 1 2 0 1 2 0
4 | 0 1 2 3 0 1 2 3 0 1
5 | 0 1 2 3 4 0 1 2 3 4
6 | 0 1 2 3 4 5 0 1 2 3
7 | 0 1 2 3 4 5 6 0 1 2
8 | 0 1 2 3 4 5 6 7 0 1
9 | 0 1 2 3 4 5 6 7 8 0

Regole della sfida:

  • Le nuove righe finali e gli spazi finali sono facoltativi
  • Le linee orizzontali e verticali nei casi di test sono opzionali. Li ho aggiunti solo per una migliore leggibilità.
  • Gli spazi tra ogni risultato NON sono opzionali.
  • Il simbolo per l'aritmetica può essere diverso, purché sia ​​chiaro quale sia. Cioè ×o ·invece che *per la moltiplicazione; ÷anziché /per divisione; ecc.
    E purché sia ​​un singolo personaggio, mi dispiace per Python **.
  • Il formato di input è flessibile. È possibile scegliere un indice da 0-5 o 1-6 per le sei tabelle corrispondenti; potresti inserire il simbolo dell'operando; ecc. (A differenza di quello che visualizzi nel risultato, puoi inserire stringhe complete, o **nel caso di Python.)
    Assicurati solo di indicare quale formato di input usi nella tua risposta!

Regole generali:

  • Questo è , quindi vince la risposta più breve in byte.
    Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione.
  • Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti, programmi completi. La tua chiamata.
  • Sono vietate le scappatoie predefinite .
  • Se possibile, aggiungi un link con un test per il tuo codice.
  • Inoltre, si prega di aggiungere una spiegazione, se necessario.

† Esempio di output valido senza linee orizzontali e verticali, ÷come simbolo e utilizzo al y/xposto di x/y:

÷ 0 1 2 3 4 5 6 7 8 9
0   0 0 0 0 0 0 0 0 0
1   1
2   2 1
3   3   1
4   4 2   1
5   5       1
6   6 3 2     1
7   7           1
8   8 4   2       1
9   9   3           1

Dare un risultato va bene per divisione per zero se questo è il risultato nella nostra lingua? Ad esempio in APL, 0 ÷ 0 è 1 per impostazione predefinita e N mod-0 è N? Si può anche scegliere uno schema diverso in cui la divisione per zero è sempre zero.
Adám,

È consentito più di uno spazio tra le colonne?
Adám,

@ Adám Ci scusiamo per l'ultima risposta. Per quanto riguarda la tua prima domanda: nessuna scusa. So che alcune lingue stampano 1, altre 0, altre qualcos'altro per 0^0o divide / mod 0, ma dovrai aggirare il problema. Per quanto riguarda la tua seconda domanda: sì certo, finché le cifre sono ancora nelle stesse colonne / righe puoi usare tutti gli spazi che vuoi.
Kevin Cruijssen,

L'ordine degli argomenti è importante per le operazioni non commutative?
Adám,

@ Adám Quindi vuoi dire che sarò uscita la griglia di y-x, y/x, y^xe y%xinvece di x-y, x/y, x^ye x%y? Hmm, immagino che potrebbe andare bene. Lo modificherò nella risposta; purché tu sia coerente per tutti e sei (quindi no y-xe x/ynella stessa risposta).
Kevin Cruijssen,

Risposte:


7

Japt , 45 byte

Collaborato con @ETHproductions

AÆAÇU¥'p«Z«XªOvZ+U+X)+P r"..+"SÃuXÃuAo uU)m¸·

Eseguilo online!

Accetta input come:

"+" per aggiunta

"-" per sottrazione

"*" per moltiplicazione

"/" per divisione

"p" per esponenziazione

"%" per modulo

Spiegazione (con scorciatoie estese):

AÆ  AÇ  U¥ 'p«  Z«  Xª OvZ+U+X)+P r"..+"SÃ uXÃ uAo uU)m¸  ·
AoX{AoZ{U=='p&&!Z&&!X||OvZ+U+X)+P r"..+"S} uX} uAo uU)mqS qR

A                                                             // By default, 10 is assigned to A
 o                                                            // Create a range from [0...9]
  X{                                         }                // Iterate through the range, X becomes the iterative item
    Ao                                                        //   Create another range [0...9]
      Z{                                 }                    //   Iterate through the range, Z becomes the iterative item
                                                              //     Take:
        U=='p                                                 //       U (input) =="p"
             &&!Z                                             //       && Z != 0
                 &&!X                                         //       && X != 0
                     ||                                       //     If any of these turned out false, instead take
                       Ov                                     //       Japt Eval:
                         Z+U+X                                //         Z{Input}X
                              )+P                             //     Whichever it was, convert to a string
                                  r"..+"S                     //     Replace all strings of length 2 or more with " "
                                                              //     (this makes sure the result !== "false" and has length 1)
                                           uX                 //   Insert X (the row number) into the front of the row
                                               u              // Insert at the beginning the first row:
                                                Ao            //   [0...9]
                                                   uU)        //   with the input inserted at the beginning
                                                      mqS     // Join each item in the final array with " "
                                                          qR  // Join the final array with "\n"

8

JavaScript (ES7), 128 byte

f=
c=>[...c+`0123456789`].map((r,_,a)=>a.map(l=>l==c?r:r==c?l:/^\d$/.test(l=c<`^`?eval(l+c+r):l|c?l**r:l/r)?l:` `).join` `).join`
`
<select onchange=o.textContent=f(this.value)><option>><option>+<option>-<option>*<option>/<option>%<option>^<option>&<option>,<option>.</select><pre id=o>

Il case speciale 0^0mi è costato 8 byte.


Molto interessante il modo in cui hai aggiunto operandi aggiuntivi come OR ed AND al tuo frammento di test. +1
Kevin Cruijssen,

@KevinCruijssen Ho dovuto rimuovere OR per salvare un byte (tutti gli altri operatori hanno ordinato prima ^), ma grazie!
Neil,

5

Operazione linguaggio di scripting Flashpoint , 343 333 303 301 byte

f={o=_this;s=o+" 0 1 2 3 4 5 6 7 8 9\n";i=0;while{i<10}do{j=0;s=s+format["%1",i];if(i<1&&(o=="/"||o=="%"||o=="^"))then{if(o=="^")then{if(j<1)then{s=s+"  ";j=1}}else{s=s+"\n1";i=1}};while{j<10}do{r=call format["%1%2%3",j,o,i];if(r>9||r<0||r%1>0)then{r=" "};s=s+format[" %1",r];j=j+1};s=s+"\n";i=i+1};s}

Chiama con:

hint ("+" call f)

Ungolfed:

f=
{
    o=_this;
    s=o+" 0 1 2 3 4 5 6 7 8 9\n";
    i=0;
    while{i<10}do
    {
        j=0;
        s=s+format["%1",i];
        if(i<1&&(o=="/"||o=="%"||o=="^"))then
        {
            if(o=="^")then{if(j<1)then{s=s+"  ";j=1}}
            else{s=s+"\n1";i=1}
        };
        while{j<10}do
        {
            r=call format["%1%2%3",j,o,i];
            if(r>9||r<0||r%1>0)then{r=" "};
            s=s+format[" %1",r];
            j=j+1
        };
        s=s+"\n";
        i=i+1
    };
    s
}

Produzione:

operatore +

operatore -

operatore *

operatore /

operatore ^

operatore%


5

Python 2 , 240 231 226 224 203 202 200 197 byte

a=i=input()
R=range(10)
for z in R:a+=' '+`z`
print a
for x in R:
 try:
	d=`x`
	for b in R:c=eval("b%s(x*1.)"%('**',i)[i<'^']);d+=' '+(' ',`int(c)`)[(i<'^'or x+b>0)and c in R]
 except:pass
 print d

Provalo online!

Accetta input come "+", "-", "*", "/", "^" o "%".

Le modifiche

-9 -16 grazie a @FelipeNardiBatista per alcuni ottimi suggerimenti

Fino a 221 con più aiuto da @FelipeNardiBatista e poi fino a 203 perdendo and E(c)==int(E(c)). Se stiamo verificando se E(c)è presenterange(10) sarà sempre un numero intero se è lì. Non è necessario il controllo duplicato.

Questo deve andare sotto 200 senza passare a Python 3 e dichiarareP=print . Qualche idea? Sono sempre felice di imparare.

Yesss! Sapevo che poteva essere fatto. 197. Adesso è ora di andare a letto. Ho trascorso abbastanza tempo su questo. Grazie per l'interessante sfida @KevinCruijssen.


1
('**',i)[i<'^']e (i<'^'or x>0 or b>0)salva 4 byte
Felipe Nardi Batista

1
a=i=input()con for z in R:a+=' '+`z`qualche byte extra salvato controa=i+' 0 1 2 3 4 5 6 7 8 9'
Felipe Nardi Batista,

1
1.vs 1.0e E(c)in Rvs -1<E(c)<10per 2 byte
Felipe Nardi Batista

1
x+b>0vs x>0 or b>0and "b%s(x*1.)"%('**',i)[i<'^']vs"b"+('**',i)[i<'^']+"(x*1.)"
Felipe Nardi Batista

1
c'è un set di paren extra (, )nel tuo join per 223 byte
Felipe Nardi Batista,

4

Mathematica, 150 byte

r=0~Range~9;p=Prepend;±i_:=Grid@p[p[If[0<=#<=9,#]/._@__->""&/@<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>[i][r,#],#]&/@r,r~p~i]

Definisce una funzione unaria che ±prende uno dei caratteri +-*/^%come input i(quindi per esempio ±"^") e restituisce un Gridoggetto che assomiglia esattamente all'ultimo output nell'OP.

<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>associa, ad ogni possibile carattere di input, la funzione binaria (elencabile) corrispondente (dove #-#2&,1##&,#/#2&sono le versioni golfed Subtract,Times,Divide); <|...|>[i][r,#]calcola quindi l'operazione binaria con tutti i possibili primi argomenti e #come secondo argomento. If[0<=#<=9,#]/._@__->""&converte ogni risultato in un Nullo ""se non è un risultato a una cifra ( /._@__->""è necessario perché alcuni risultati come 1/0non possono essere elaborati dalle disuguaglianze 0<=#<=9). Infine, anteponiamo le varie intestazioni e piè di pagina e visualizziamo la risposta.


Bella risposta e spiegazione. Hai forse un link Try-it-online? E una domanda / nota, non vedo alcuna menzione della regola del caso limite: " Non emetteremo nulla per il caso limite0^0 " . Mathematica non produce nulla in default per questo caso limite?
Kevin Cruijssen,

1
Ho aggiunto un link sopra. Mathematica valuta 0^0a Indeterminate, che ci dà un infelice non valutata risultato If[0<=Indeterminate<=9, Indeterminate]metà del calcolo; ma /._@__->""è una regola che accetta qualsiasi funzione non valutata e i suoi argomenti e la modifica in una stringa invisibile.
Greg Martin,

Ah ok, quindi Mathematica restituisce correttamente che si stanno verificando due regole in conflitto #^0=1e 0^#= 0` 0^0. Bene ora e conveniente per questa sfida. :) A proposito, il tuo link non sembra funzionare. Viene visualizzato un errore per il quale non ho l'autorizzazione per accedervi.
Kevin Cruijssen,

Ok, dovrai andare su sandbox.open.wolframcloud.com e incollare il codice in te stesso, quindi chiamarlo con un comando simile ±"^".
Greg Martin,

4

Python 3, 343 335 363 362 byte

La parte più triste di questo è che una risposta Java mi sta picchiando ... Lo golfò di più al mattino.

o=input()
r=range(10)
g=[['']*10 for i in r]
for x in r:
 for y in r:exec('if"/"!=o and(o!="%"or x)and(o!="**"or x or y):k=str(y'+o+'x);g[x][y]=k')
if'/'==o:
 for x in r:
  for y in r:
   if x and y%x<1:g[x][y]=str(round(y/x))
if'**'==o:o='^'
print('\n'.join([' '.join([o]+list(map(str,r)))]+[' '.join([str(q)]+[' 'if len(x)!=1else x for x in g[q]])for q in r]))

ReplIT

-8 byte passando alla comprensione dell'elenco anziché a doppio loop
+28 byte per evitare il caso limite 0 ^ 0. -.-
-1 byte cambiando ==0in <1grazie a @StewieGriffin


" La parte più triste di questo è che una risposta Java mi sta battendo ... " Questa parte mi ha fatto ridere ... xD Mi piace come stai controllando la lunghezza del numero per determinare se è nell'intervallo di 0-9. A proposito, umm .. ho notato un errore nel tuo Repl. Attualmente emette **invece ^per esponenziazione. (Inoltre, puoi inserire **, ma non visualizzarlo nella tabella dei risultati. Attualmente hai il contrario.)
Kevin Cruijssen,

1
@KevinCruijssen Whoops. Risolto correttamente, nessuna modifica del conteggio dei byte. Grazie per la segnalazione!
HyperNeutrino,

@StewieGriffin Sì. Grazie.
HyperNeutrino,

4

Java 7, 312 305 byte

String c(int o){String r=("+-*/^%".charAt(o))+" 0 1 2 3 4 5 6 7 8 9\n";for(int i=0,j,p;i<10;i++){r+=i+" ";for(j=0;j<10;r+=p<0|p>9?"  ":p+" ")p=p(o,i,j++);r+="\n";}return r;}int p(int o,int a,double b){b=o<1?b+a:o<2?b-a:o<3?b*a:o<4&a>0?b/a:o<5&(a!=0|b!=0)?Math.pow(b,a):a>0?b%a:-1;return b%1==0?(int)b:-1;}

Non utilizza linee orizzontali / verticali e i personaggi sono come visualizzati negli esempi di sfida ( +-*/^%).
Utilizza un indice di 0-5per i sei operandi matematici come input.

-7 byte grazie a @Frozn .

Spiegazione:

String c(int o){                   // Method with integer parameter and String return-type
  String r = ("+-*/^%".charAt(o))  //  Get the current mathematical operand character based on the input index
    + " 0 1 2 3 4 5 6 7 8 9\n";    //  Append the column header and a new-line
  for(int i=0,j,p; i<10; i++){     //  Loop over the rows
    r += i+" ";                    //   Append the left-side row-nr
    for(j=0; j<10;                 //   Inner-loop over the columns of the current row
        r += p<0|p>9?"  ":p+" ")   //     And after every iteration, append the result with either a space or an integer
      p = p(o,i,j++);              //    Calculate the current sum-result
                                   //   End of inner-loop (implicit / single-line body)
    r+="\n";                       //   Append result with new-line
  }                                //  End of loop
  return r;                        //  Return result String
}                                  // End of method

int p(int o,int a,double b){       // Separate method with two integer and a double parameters and integer return-type
  b = o<1 ?                        //  If the given operand is 0:
       b+a                         //   Use addition
      : o<2 ?                      //  Els-if the given operand is 1:
       b-a                         //   Use subtraction
      : o<3 ?                      //  Else-if the given operand is 2:
       b*a                         //   Use multiplication
      : o<4 & a>0 ?                //  Else-if the given operand is 3 and `a` is above 0:
       b/a                         //   Use division
      : o<5 & (a!=0|b!=0) ?        //  Else-if the given operand is 4 and not both `a` and `b` are 0:
       Math.pow(b,a)               //   Use exponentiation
      : a>0 ?                      //  Else-if the given operand is 5:
       b%a                         //   Use modulo
      :                            //  Else:
       -1;                         //   Use -1 as result
  return b%1 == 0 ?                //  If the result is not a decimal number:
     (int)b                        //   Return the result
    :                              //  Else:
     -1;                           //   Return -1 as result
}                                  // End of separate method

Codice di prova:

Provalo qui.

class M{
  String c(int o){String r=("+-*/^%".charAt(o))+" 0 1 2 3 4 5 6 7 8 9\n";for(int i=0,j,p;i<10;i++){r+=i+" ";for(j=0;j<10;r+=p<0|p>9?"  ":p+" ")p=p(o,i,j++);r+="\n";}return r;}int p(int o,int a,double b){b=o<1?b+a:o<2?b-a:o<3?b*a:o<4&a>0?b/a:o<5&(a!=0|b!=0)?Math.pow(b,a):a>0?b%a:-1;return b%1==0?(int)b:-1;}

  public static void main(String[]a){
    M m = new M();
    System.out.println(m.c(0)); // +
    System.out.println(m.c(1)); // -
    System.out.println(m.c(2)); // *
    System.out.println(m.c(3)); // /
    System.out.println(m.c(4)); // ^
    System.out.println(m.c(5)); // %
  }
}

1
Forse potresti passare bcome un doubleto pe liberarti rassegnando il valore del ternario incatenato a b.
Frozn,

3

Haskell, 230 199 182 + 53 47 46 + 1 byte di separatore = 284 247 232 229 byte

f=head.show
g=[0..9]
h=(:" ")
y(%)s=unlines$(s:map f g>>=h):[f y:[last$' ':[f(x%y)|x%y`elem`g]|x<-g]>>=h|y<-g]
0?0=10;a?b=a^b
a!0=10;a!b|(e,0)<-a`divMod`b=e|1>0=10
a&0=10;a&b=mod a b

La funzione è (zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!), che da sola occupa 53 byte, dove 0 è addizione, 1 è sottrazione, 2 è moltiplicazione, 3 è divisione, 4 è esponenziazione e 5 è modulo.

Provalo online!

Spiegazione

Prossimamente (forse). . . . Per ora alcuni piccoli bocconcini:? è l'operatore esponenziale,! è l'operatore di divisione e & è l'operatore mod.

EDIT: Parte del grosso potrebbe essere perché la maggior parte (?) Delle altre risposte usa eval, che Haskell non ha senza una lunga importazione.

EDIT2: Grazie Ørjan Johansen per -31 byte (Wow!) Per il codice e -6 byte per la funzione! Anche alcuni degli 11 a 10 sono cambiati per motivi di coerenza. Prova la versione aggiornata online!

EDIT3: stessa persona, diciassette byte in più! Prova la versione aggiornata, aggiornata online!


1
!Test più brevi : e<-a`div`b,e*b==a=eo (e,0)<-a`divMod`b=e.
Ørjan Johansen

1
Funzione più breve:(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
Ørjan Johansen

Prove di retromarcia + un trucco da golf "standard" last$f k:[' '|k<0||k>9]. Infine (forse), [0..9]è abbastanza lungo da pagare per definirlo come un nome quando lo si utilizza due volte.
Ørjan Johansen

No, un altro: k<-[o x y]è più corto di un let.
Ørjan Johansen

Una sola parola: Wow! :)
Nome visualizzato generico

2

Python 2 , 197 byte

p=input()
r=range(10)
s=' '
print p+s+s.join(map(str,r))
for i in r:print str(i)+s+s.join(eval(("s","str(j"+p+"i)")[i and(j%i==0 and'/'==p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r])for j in r)

Provalo online!

Input: Python 2

'+' aggiunta

'-' Sbtraction

'*' Moltiplicazione

'/' Divisione

'**' elevamento a potenza

'%' Modulo

Python 3 , 200 byte

p=input()
r=range(10)
s=' '
print(p+s+s.join(map(str,r)))
for i in r:print(str(i)+s+s.join(eval(("s","str(j"+p+"i)")[i and(j%i==0 and'/'in p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r])for j in r))

Provalo online!

Input: Python 3

+ aggiunta

- Sbtraction

* Moltiplicazione

// Divisione

** elevamento a potenza

% Modulo

Spiegazione

memorizzando range(10)in una variabile r, possiamo ottenere la prima riga di output del formato

operator 0 1 2 3 4 5 6 7 8 9

mappando ogni int nella rstringa e unendo l'elenco delle stringhe ['0','1','2','3','4','5','6','7','8','9']con spazio scon l' poperatore

p+s+s.join(map(str,r)

Con quello, per ogni iin r(gamma), per ogni jvalutazione ie jcon il tuo operatore

eval("j"+p+"i")

qui, un'eccezione potrebbe essere generata se non gestita - divisione o modulo per 0. Per gestire questo caso ( i and(j%i==0 and'/'==p or'%'==p)) e il formato di output descritto nell'istruzione del problema (il risultato per ogni valutazione non dovrebbe essere un numero negativo né un numero maggiore di 10 - eval("j"+p+"i")in r),

i and(j%i==0 and'/'==p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r

Così stampando il tavolo aritmetico!

Buona programmazione!


Bella risposta Python 2. Indovina a 197 che ci rende uguali. Mi ci sono voluti ancora qualche tentativo. Molto bene. Leggero problema. Per / la tabella mostra .0 e non numeri interi. Sicuro che sia facilmente corretto :)
ElPedro

Scusate ma ho ritirato il mio voto una volta che l'ho visto, lo aggiungerò di nuovo una volta che avrete avuto la possibilità di correggerlo :)
ElPedro,

Grazie! Ma Python 2 stampa int e python 3 stampa in virgola mobile se si utilizza '/' come input. Fir python 3 devi usare '//'. L'ho detto chiaramente.
Keerthana Prabhakaran,

E sembra che qualcuno stia modificando il mio link e il link te python 2 è stato cambiato in python 3. L'ho ripristinato ora.
Keerthana Prabhakaran,

Ho avuto questo problema prima. È perché hai 2 collegamenti TOI sulla stessa pagina. Quando si fa clic su uno dei due collegamenti, verrà aperta la prima definizione di collegamento trovata. Aggira rinominando il secondo link per "provalo online 3" o qualcosa del genere e rinomina anche la definizione del link. Dovrebbe funzionare bene allora.
ElPedro

2

APL (Dyalog) , 68 76 byte

Richiede il ⎕IO←0valore predefinito su molti sistemi. Richiede input e si aspetta un singolo carattere che rappresenta l'operando.

t'|'=w←⎕
(w,n),n⍪⍉⍣t∘.{(⍺w⍵≡0'*'0)∨(t∧⍵≡0)∨⍺w0'÷':⍬
n∊⍨r←⍵(⍎w)⍺:r
⍬}⍨n←⍳10

Provalo online!

La maggior parte del codice è di aggirare che i risultati di APL per ÷0e 0*0e per contrastare quel modulo di APL ( |) ha i suoi argomenti invertito rispetto alla maggior parte degli altri linguaggi. Altrimenti sarebbero stati solo 41 byte :

w←⎕
(w,n),n⍪∘.{0::⍬
÷n∊⍨r←⍵(⍎w)⍺:r}⍨n←⍳10

Provalo online!


Wow! e dopo tutto il mio duro lavoro sulla mia risposta Python. Correttezza.
ElPedro,

1

R , 194 177 byte

-17 byte che passano alla manipolazione dell'output della matrice

function(o){s=0:9
y=sapply(s,function(x)Reduce(o,x,init=s))
dimnames(y)=list(s,rep('',10))
y[!y%in%s|!is.finite(y)]=' '
if(o=='^')y[1]=' '
cat(substr(o,1,1),s)
print(y,quote=F)}

Provalo online!

Il passaggio a questo approccio ha alcuni aspetti negativi, vale a dire che non può essere ottimizzato utilizzando pryr ed è un po 'ingombrante per impostare la matrice originale, ma può essere emesso perfettamente con alcuni spazi finali sulla prima riga.

Devo ancora usare il substrtrucco a causa %%dell'operatore mod. Continuerò a sistemarlo quando ne avrò la possibilità, mi sento ancora molto goffa nel trattare i casi speciali.


0

PHP, 191 byte

**invece che ^come input+ - / % * **

echo$k=$argn,$k=="**"?"":" ",join(" ",$d=range(0,9));foreach($d as$r){echo"\n$r";foreach($d as$c){echo" ";($k=="/"|($m=$k=="%"))&$r<1?print" ":eval("echo in_array($c$k$r,\$d)?$c$k$r:' ';");}}

Versione online di entrambe le versioni

PHP, 245 byte senza valutazione

ingresso + - / % * ^

utilizzare bcpowmod($c,1,$r)anziché bcmod($c,$r)perché ho bisogno di un terzo parametro nell'input di divisione. $c**1%$r==$c%$r

BC Funzioni matematiche

echo$k=$argn," ".join(" ",$d=range(0,9));foreach($d as$r){echo"\n$r";foreach($d as$c)echo" ",in_array($s=($k=="/"|($m=$k=="%"))&$r<1?-1:("bc".["+"=>add,"-"=>sub,"/"=>div,"*"=>mul,"^"=>pow,"%"=>powmod][$k])($c,$m?1:$r,$m?$r:9),$d)?round($s):" ";}

0

05AB1E , 56 55 byte

9ÝDãεðýì„/%Iåyθ_*I'mQyO_*~iðë.VD9ÝQàiïëð]«TôεN<š}®I:ðý»

Uscite senza linee e con invertito xe y. Input / output si utilizza +, -, *, /, m, %.

Provalo online o verifica tutti i tavoli .

21 byte sono utilizzati per casi correzione bordo /0, %0e 0^0che determinano 0, 0e 1rispettivamente in 05AB1E .. Qui senza quella parte ( 34 byte ):

9ÝDãεðýì.VD9ÝQàiïëð]«TôεN<š}®I:ðý»

Provalo online o prova tutti i tavoli .

Spiegazione:

9Ý                     # Push list [0,1,2,3,4,5,6,7,8,9]
  D                    # Duplicate it (for the header later on)
   ã                   # Take the cartesian product with itself (creating all pairs):
                       #  [[0,0],[0,1],[0,2],...,[9,7],[9,8],[9,9]]
ε                      # Map each pair `y` to:
 ðý                    #  Join the pairs with a space
   ì                   #  Prepend it before the (implicit) input-char 
 „/%Iå                 #   If the input is "/" or "%"
         *             #   and
      yθ_              #   The last value of the pair is exactly 0
                  ~    #  OR
          I'mQ        '#   If the input is "m"
                 *     #   and
              yO_      #   The sum of the pair is exactly 0 (thus [0,0])
 i                     #  If that is truthy:
  ð                    #   Push a space character " "
 ë                     #  Else:
  .V                   #   Execute the string as 05AB1E code
    D                  #   Duplicate the result
     9ÝQài             #   If it's in the list [0,1,2,3,4,5,6,7,8,9]:
          ï            #    Cast it to an integer to remove any trailing ".0"
                       #    (since dividing always results in a float)
         ë             #   Else:
          ð            #    Push a space character " "
]                      # Close both the if-else clauses and the map
 «                     # Merge the resulting list with the duplicated [0,1,2,3,4,5,6,7,8,9]
  Tô                   # Split the list in parts of size 10
    ε   }              # Map each list to:
     N<                #  Get the map-index + 1
       š               #  And prepend it at the front of the list
         ®I:           # Then replace the "-1" with the input-character
ðý                     # And finally join every inner list by spaces
  »                    # And join the entire string by newlines (which is output implicitly)
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.