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-1
iguais 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, emy/x
vez dex/y
), desde que seja consistente para todas as seis saídas! (Portanto, você não tem permissão para usary-x
ex/y
na 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 é código-golfe , 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/x
em 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
1
, outras0
, outras algo a mais0^0
ou 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.y-x
,y/x
,y^x
ey%x
em vez dex-y
,x/y
,x^y
ex%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ãoy-x
ex/y
na mesma resposta).Respostas:
Japonês , 45 bytes
Colaborou com @ETHproductions
Execute-o online!
Toma entrada como:
"+"
para adição"-"
para subtração"*"
para multiplicação"/"
para divisão"p"
para exponenciação"%"
para móduloExplicação (com atalhos expandidos):
fonte
JavaScript (ES7), 128 bytes
A embalagem especial
0^0
me custou 8 bytes.fonte
^
), mas obrigado!Linguagem de script da operação Flashpoint ,
343333303301 bytesLigue para:
Ungolfed:
Resultado:
operador +
operador -
operador *
operador /
operador ^
operador%
fonte
Python 2 ,
240231226224203202200197 bytesExperimente online!
Recebe a entrada como um de "+", "-", "*", "/", "^" ou "%".
Editar% s
-9-16 com agradecimentos a @FelipeNardiBatista por ótimas dicasAbaixo de 221 com mais ajuda de @FelipeNardiBatista e depois de 203, perdendo
and E(c)==int(E(c))
. Se estamos verificando seE(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.
fonte
('**',i)[i<'^']
e(i<'^'or x>0 or b>0)
salva 4 bytesa=i=input()
comfor z in R:a+=' '+`z`
para algum extra bytes salvos vsa=i+' 0 1 2 3 4 5 6 7 8 9'
1.
vs1.0
eE(c)in R
vs-1<E(c)<10
durante 2 bytesx+b>0
vsx>0 or b>0
and"b%s(x*1.)"%('**',i)[i<'^']
vs"b"+('**',i)[i<'^']+"(x*1.)"
(
,)
em suas juntar-se para 223 bytesMathematica, 150 bytes
Define uma função unária,
±
recebendo um dos caracteres+-*/^%
como entradai
(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 golfeSubtract,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 resultadoNull
ou""
se não for um dígito (/._@__->""
é necessário porque alguns resultados como1/0
não podem ser processados pelas desigualdades0<=#<=9
). Por fim, anexamos os vários cabeçalhos e rodapés e exibimos a resposta.fonte
0^0
. " O Mathematica não produz nada no padrão para este caso de aresta?0^0
comoIndeterminate
, o que nos dá um resultado infeliz e não avaliado noIf[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.#^0=1
e0^#
= 0` estão ocorrendo0^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.±"^"
.Python 3,
343335363362 bytesA parte mais triste sobre isso é que uma resposta do Java está me derrotando ... Vou jogar mais isso pela manhã.
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
==0
para<1
graças a @StewieGriffinfonte
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.)Java 7,
312305 bytesNão usa linhas horizontais / verticais, e os caracteres são mostrados nos exemplos de desafios (
+-*/^%
).Usa um índice de
0-5
para os seis operandos matemáticos como entrada.-7 bytes graças a @Frozn .
Explicação:
Código do teste:
Experimente aqui.
fonte
b
como adouble
parap
e se livrarr
atribuindo o valor do ternário acorrentado ab
.Haskell,
230199182 +534746 + 1 byte do separador =284247232229 bytesFunçã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!
fonte
!
Testes mais curtos :e<-a`div`b,e*b==a=e
ou(e,0)<-a`divMod`b=e
.(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
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.k<-[o x y]
é mais curto que alet
.Python 2 , 197 bytes
Experimente online!
Entrada: Python 2
'+'
Adição'-'
Sbtraction'*'
Multiplicação'/'
Divisão'**'
Exponenciação'%'
MóduloPython 3 , 200 bytes
Experimente online!
Entrada: Python 3
+
Adição-
Sbtraction*
Multiplicação//
Divisão**
Exponenciação%
MóduloExplicação
armazenando
range(10)
em uma variávelr
, podemos obter a primeira linha de saída do formatomapeando cada int na
r
string e juntando-se à lista de strings['0','1','2','3','4','5','6','7','8','9']
com espaços
com op
operadorCom isso, para cada
i
inr
(intervalo), para cadaj
avaliaçãoi
ej
com seu operadoraqui, 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
),Imprimindo assim a tabela aritmética!
Feliz codificação!
fonte
APL (Dyalog) ,
6876 bytesRequer
⎕IO←0
qual é o padrão em muitos sistemas. Solicita entrada e espera um único caractere representando o operando.Experimente online!
Grande parte do código é para contornar que os resultados da APL para
÷0
e0*0
e 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 :Experimente online!
fonte
R ,
194177 bytes-17 bytes alternando para manipular a saída da matriz
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
substr
truque por causa do%%
operador mod. Continuarei a cortar isso quando eu tiver uma chance, ainda parece muito complicado lidar com casos especiais.fonte
PHP, 191 bytes
**
em vez de^
como entrada+ - / % * **
Versão on-line de ambas as versões
PHP, 245 bytes sem avaliação
entrada
+ - / % * ^
use em
bcpowmod($c,1,$r)
vez debcmod($c,$r)
porque preciso de um terceiro parâmetro na entrada da divisão.$c**1%$r==$c%$r
BC Math Functions
fonte
05AB1E ,
5655 bytesSaídas sem linhas e com
x
e invertidoy
. 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
,%0
e0^0
que resultam em0
,0
e,1
respectivamente em 05AB1E .. Aqui, sem que a parte ( 34 bytes ):Experimente online ou tente todas as tabelas .
Explicação:
fonte