Dígitos inteiros das tabelas aritméticas

17

Desafio:

Envie os 'dígitos inteiros' de uma das seis tabelas aritméticas a seguir, com base na entrada:
- adição ( +);
- subtração ( -);
- multiplicação ( *);
- divisão ( /);
- exponenciação ( ^);
- operação do módulo ( %).

Regras:

  • O que eu defino como 'inteiros dígitos': cada resultado do operando aritmética que é exatamente uma das seguintes opções: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Isso significa que você exclui todos os resultados iguais10 ou superiores, todos os resultados -1iguais ou inferiores e todos os resultados não inteiros.
  • Como calculamos os resultados aritméticos: Usando o dígito superior primeiro e depois o operando com o dígito esquerdo. Você tem permissão para fazer isso vice-versa (ou seja, em y/xvez de x/y), desde que seja consistente para todas as seis saídas! (Portanto, você não tem permissão para usar y-xe x/yna mesma resposta.)
  • Não produziremos nada para dividir por 0 casos de teste (para as tabelas de operações de divisão e módulo)
  • Não produziremos nada para o caso de ponta 0^0.

Resultado:

Portanto, imprima o seguinte (o formato da tabela é um pouco flexível (veja abaixo): as linhas são opcionais e adicionadas principalmente para facilitar a leitura dos casos de teste):

Adição:

+ | 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

Subtração:

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

Multiplicação:

* | 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

Divisão:

/ | 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

Exponenciação:

^ | 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

Módulo:

% | 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

Regras do desafio:

  • Linhas à direita e espaços à direita são opcionais
  • As linhas horizontais e verticais nos casos de teste são opcionais. Eu apenas os adicionei para melhor legibilidade.
  • Os espaços entre cada resultado NÃO são opcionais.
  • O símbolo da aritmética pode ser diferente, desde que fique claro qual é. ×Ou seja, ou em ·vez de *multiplicação; ÷em vez de /divisão; etc.
    E desde que seja um único personagem, desculpe pelo Python **.
  • O formato de entrada é flexível. Você pode escolher um índice de 0-5 ou 1-6 para as seis tabelas correspondentes; você pode inserir o símbolo do operando; etc. (ao contrário do que é exibido no resultado, você pode inserir seqüências completas ou **no caso do Python.)
    Apenas certifique-se de indicar qual formato de entrada você usa na sua resposta!

Regras gerais:

  • Isso é , então a resposta mais curta em bytes vence.
    Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação.
  • As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados, programas completos. Sua chamada.
  • As brechas padrão são proibidas.
  • Se possível, adicione um link com um teste para o seu código.
  • Além disso, adicione uma explicação, se necessário.

Exemplo † de saída válida sem linhas horizontais e verticais, ÷como o símbolo e utilizando y/xem vez de 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
Kevin Cruijssen
fonte
Está dando um resultado aceitável para a divisão por zero se esse for o resultado em nosso idioma? Por exemplo, no APL, 0 ÷ 0 é 1 por padrão e N mod-0 é N? Pode-se também escolher um esquema diferente, onde a divisão por zero é sempre zero.
Adám 03/04/19
É permitido mais de um espaço entre as colunas?
Adám 03/04/19
@ Adám Desculpe pela última resposta. Quanto à sua primeira pergunta: não, desculpe. Eu sei que algumas linguagens imprimem 1, outras 0, outras algo a mais 0^0ou dividem / mod 0, mas você terá que contornar isso. Quanto à sua segunda pergunta: Sim, claro, contanto que os dígitos ainda estejam nas mesmas colunas / linhas, você poderá usar quantos espaços quiser.
Kevin Cruijssen
A ordem dos argumentos é importante para operações não comutativas?
Adám 05/04/19
@ ADAM para você significa que você vai saída da grelha para y-x, y/x, y^xe y%xem vez de x-y, x/y, x^ye x%y? Hmm, acho que poderia ser bom. Vou editá-lo na resposta; contanto que você vai ser consistente para todos os seis deles (por isso não y-xe x/yna mesma resposta).
Kevin Cruijssen

Respostas:

7

Japonês , 45 bytes

Colaborou com @ETHproductions

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

Execute-o online!

Toma entrada como:

"+" para adição

"-" para subtração

"*" para multiplicação

"/" para divisão

"p" para exponenciação

"%" para módulo

Explicação (com atalhos expandidos):

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"
Oliver
fonte
8

JavaScript (ES7), 128 bytes

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>

A embalagem especial 0^0me custou 8 bytes.

Neil
fonte
Muito legal como você adicionou operandos adicionais como OR e AND ao seu snippet de teste. +1
Kevin Cruijssen
@KevinCruijssen tive que remover o OR para salvar um byte (todos os outros operadores ordenam antes ^ ), mas obrigado!
Neil
5

Linguagem de script da operação Flashpoint , 343 333 303 301 bytes

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}

Ligue para:

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
}

Resultado:

operador +

operador -

operador *

operador /

operador ^

operador%

Steadybox
fonte
5

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

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

Experimente online!

Recebe a entrada como um de "+", "-", "*", "/", "^" ou "%".

Editar% s

-9 -16 com agradecimentos a @FelipeNardiBatista por ótimas dicas

Abaixo de 221 com mais ajuda de @FelipeNardiBatista e depois de 203, perdendo and E(c)==int(E(c)). Se estamos verificando se E(c)está range(10), sempre será um número inteiro, se estiver lá. Não há necessidade de verificação duplicada.

Isso tem que ir abaixo de 200 sem mudar para Python 3 e declarar P=print. Alguma ideia? Fico sempre feliz em aprender.

Yesss! Eu sabia que isso poderia ser feito. 197. Hora de dormir agora. Eu gastei tempo suficiente neste. Obrigado pelo desafio interessante @KevinCruijssen.

ElPedro
fonte
11
('**',i)[i<'^']e (i<'^'or x>0 or b>0)salva 4 bytes
Felipe Nardi Batista
11
a=i=input()com for z in R:a+=' '+`z`para algum extra bytes salvos vsa=i+' 0 1 2 3 4 5 6 7 8 9'
Felipe Nardi Batista
11
1.vs 1.0e E(c)in Rvs -1<E(c)<10durante 2 bytes
Felipe Nardi Batista
11
x+b>0vs x>0 or b>0and "b%s(x*1.)"%('**',i)[i<'^']vs"b"+('**',i)[i<'^']+"(x*1.)"
Felipe Nardi Batista
11
há um conjunto de paren extras (, )em suas juntar-se para 223 bytes
Felipe Nardi Batista
4

Mathematica, 150 bytes

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]

Define uma função unária, ±recebendo um dos caracteres +-*/^%como entrada i(por exemplo, ±"^") e retornando umGrid objeto que se parece exatamente com a última saída no OP.

<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>associa, a cada caractere de entrada possível, a função binária correspondente (listável) (onde #-#2&,1##&,#/#2&estão as versões em golfe Subtract,Times,Divide); portanto, <|...|>[i][r,#]calcula a operação binária com todos os primeiros argumentos possíveis e #como o segundo argumento. If[0<=#<=9,#]/._@__->""&converte cada resultado em um resultado Nullou ""se não for um dígito ( /._@__->""é necessário porque alguns resultados como 1/0não podem ser processados ​​pelas desigualdades 0<=#<=9). Por fim, anexamos os vários cabeçalhos e rodapés e exibimos a resposta.

Greg Martin
fonte
Boa resposta e explicação. Você talvez tenha um link Try-it-online? E uma pergunta / nota, não vejo nenhuma menção à regra do caso de aresta: " Não produziremos nada para o caso de aresta 0^0. " O Mathematica não produz nada no padrão para este caso de aresta?
Kevin Cruijssen
11
Eu adicionei um link acima. O Mathematica avalia 0^0como Indeterminate, o que nos dá um resultado infeliz e não avaliado no If[0<=Indeterminate<=9, Indeterminate]meio da computação; mas /._@__->""é uma regra que pega qualquer função não avaliada e seus argumentos e a altera para uma sequência invisível.
Greg Martin
Ah, ok, então o Mathematica retorna corretamente que duas regras conflitantes #^0=1e 0^#= 0` estão ocorrendo 0^0. Bom até agora e conveniente para este desafio. :) Btw, seu link não parece funcionar. Eu recebo um erro que não tenho permissão para acessá-lo.
Kevin Cruijssen
Ok, você terá que ir para sandbox.open.wolframcloud.com e colar o código em si mesmo e chamá-lo com um comando como ±"^".
Greg Martin
4

Python 3, 343 335 363 362 bytes

A parte mais triste sobre isso é que uma resposta do Java está me derrotando ... Vou jogar mais isso pela manhã.

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 bytes, alternando para a compreensão da lista em vez de um loop duplo
+28 bytes para evitar arestas 0 ^ 0. -.-
-1 byte mudando ==0para <1graças a @StewieGriffin

HyperNeutrino
fonte
" A parte mais triste sobre isso é que uma resposta Java está me batendo ... " Essa parte me fez rir. XD Eu gosto de como você está verificando o tamanho do número para determinar se está no intervalo 0-9. Btw, umm .. Notei um erro no seu Repl. No momento, é emitido em **vez de ^exponenciação. (Além disso, você tem permissão para inserir **, mas não para produzi-lo na tabela de resultados. Atualmente, você tem o contrário.)
Kevin Cruijssen
11
@KevinCruijssen Whoops. Corrigido com sucesso, sem alteração na contagem de bytes. Obrigado por apontar isso!
HyperNeutrino
@StewieGriffin Sim. Obrigado.
HyperNeutrino
4

Java 7, 312 305 bytes

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;}

Não usa linhas horizontais / verticais, e os caracteres são mostrados nos exemplos de desafios ( +-*/^%).
Usa um índice de 0-5para os seis operandos matemáticos como entrada.

-7 bytes graças a @Frozn .

Explicação:

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

Código do teste:

Experimente aqui.

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)); // %
  }
}
Kevin Cruijssen
fonte
11
Talvez você possa passar bcomo a doublepara pe se livrar ratribuindo o valor do ternário acorrentado a b.
Frozn 03/04
3

Haskell, 230 199 182 + 53 47 46 + 1 byte do separador = 284 247 232 229 bytes

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

Função é (zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!) , que sozinha ocupa 53 bytes, onde 0 é adição, 1 é subtração, 2 é multiplicação, 3 é divisão, 4 é exponenciação e 5 é módulo.

Experimente online!

Explicação

Mais tarde (possivelmente). . . . Por enquanto, alguns pequenos petiscos:? é o operador de exponenciação,! é o operador de divisão e & é o operador mod.

EDIT: parte do volume pode ser porque a maioria (?) Das outras respostas usa eval, que Haskell não possui sem uma importação longa.

EDIT2: Obrigado Ørjan Johansen por -31 bytes (Uau!) Fora do código e -6 bytes fora da função! Também alterou alguns dos 11s para 10s para fins de consistência. Experimente a versão atualizada online!

EDIT3: Mesma pessoa, dezessete mais bytes! Experimente a versão atualizada e atualizada online!

Nome de exibição genérico
fonte
11
!Testes mais curtos : e<-a`div`b,e*b==a=eou (e,0)<-a`divMod`b=e.
Ørjan Johansen 04/04
11
Função mais curta:(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
Ørjan Johansen 04/04
Testes de reversão + um truque de golfe "padrão" dá last$f k:[' '|k<0||k>9]. Finalmente (talvez), [0..9]é apenas o tempo suficiente para ser definido como um nome ao usá-lo duas vezes.
Ørjan Johansen
Não, mais um: k<-[o x y]é mais curto que a let.
Ørjan Johansen
Uma palavra: Uau! :)
Nome de exibição genérico
2

Python 2 , 197 bytes

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)

Experimente online!

Entrada: Python 2

'+' Adição

'-' Sbtraction

'*' Multiplicação

'/' Divisão

'**' Exponenciação

'%' Módulo

Python 3 , 200 bytes

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))

Experimente online!

Entrada: Python 3

+ Adição

- Sbtraction

* Multiplicação

// Divisão

** Exponenciação

% Módulo

Explicação

armazenando range(10)em uma variável r, podemos obter a primeira linha de saída do formato

operator 0 1 2 3 4 5 6 7 8 9

mapeando cada int na rstring e juntando-se à lista de strings ['0','1','2','3','4','5','6','7','8','9']com espaço scom o poperador

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

Com isso, para cada iin r(intervalo), para cada javaliação ie jcom seu operador

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

aqui, uma exceção pode ser lançada se não for tratada - divisão ou módulo por 0. Para lidar com este caso ( i and(j%i==0 and'/'==p or'%'==p)) e o formato de saída descrito na declaração do problema (o resultado de cada avaliação não deve ser um número negativo nem um número maior que 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

Imprimindo assim a tabela aritmética!

Feliz codificação!

Keerthana Prabhakaran
fonte
Resposta agradável em Python 2. Acho que em 197 isso nos torna iguais. Levei mais algumas tentativas embora. Bem feito. Pequeno problema. Para / a tabela mostra .0 e não números inteiros. Claro que é facilmente corrigida :)
ElPedro
Desculpe, mas têm retraído meu upvote uma vez eu vi isso, iremos adicioná-lo novamente depois de ter tido a chance de corrigi-lo :)
ElPedro
Obrigado! Mas Python 2 imprime int e python 3 imprime float se você usar '/' como entrada. Fir python 3, você tem que usar '//'. Eu mencionei isso claramente.
Keerthana Prabhakaran
E parece que alguém está editando meu link e o link do python 2 foi alterado para python 3. Eu o reverti agora.
Keerthana Prabhakaran
Eu já tive esse problema antes. É porque você tem 2 links TOI na mesma página. Quando você clica em um link, ele abre a primeira definição de link encontrada. Evite renomear o segundo link para "experimente on-line 3" ou algo assim e também renomeie a definição de link. Deve funcionar bem então.
ElPedro 4/04
2

APL (Dyalog) , 68 76 bytes

Requer ⎕IO←0qual é o padrão em muitos sistemas. Solicita entrada e espera um único caractere representando o operando.

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

Experimente online!

Grande parte do código é para contornar que os resultados da APL para ÷0e 0*0e para contrariar que modulo da APL ( |) tem os seus argumentos invertida em comparação com a maioria das outras línguas. Caso contrário, teriam apenas 41 bytes :

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

Experimente online!

Adão
fonte
Uau! e depois de todo o meu trabalho duro na minha resposta Python. Jogo Justo.
ElPedro
1

R , 194 177 bytes

-17 bytes alternando para manipular a saída da matriz

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)}

Experimente online!

Mudar para essa abordagem tem algumas desvantagens, ou seja, não pode ser otimizado usando pryr e é um pouco complicado para configurar a matriz original, mas pode ser produzido perfeitamente com alguns espaços à direita na primeira linha.

Eu ainda tenho que usar o substrtruque por causa do %%operador mod. Continuarei a cortar isso quando eu tiver uma chance, ainda parece muito complicado lidar com casos especiais.

CriminallyVulgar
fonte
0

PHP, 191 bytes

**em vez de ^como entrada+ - / % * **

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:' ';");}}

Versão on-line de ambas as versões

PHP, 245 bytes sem avaliação

entrada + - / % * ^

use em bcpowmod($c,1,$r)vez de bcmod($c,$r)porque preciso de um terceiro parâmetro na entrada da divisão. $c**1%$r==$c%$r

BC Math Functions

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):" ";}
Jörg Hülsermann
fonte
0

05AB1E , 56 55 bytes

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

Saídas sem linhas e com xe invertido y. Entrada / saída estão usando +, -, *, /, m, %.

Experimente online ou verifique todas as tabelas .

21 bytes são usados para casos correcção de borda /0, %0e 0^0que resultam em 0, 0e, 1respectivamente em 05AB1E .. Aqui, sem que a parte ( 34 bytes ):

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

Experimente online ou tente todas as tabelas .

Explicação:

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)
Kevin Cruijssen
fonte