Dada uma equação linear mx+n
, retorne n
e m
. No entanto, a equação pode estar em qualquer um dos seguintes formatos:
5x+2 -> 5 2
5x-2 -> 5 -2
5x -> 5 0
-2 -> 0 -2
x -> 1 0
Aqui estão os formatos, onde cada um ?
representa um número inteiro positivo escrito sem zeros à esquerda
?x+?
?x-?
-?x+?
-?x-?
x+?
x-?
?
-?
?x
-?x
x
Todos esses casos devem ser tratados.
Especificações:
- Você pode assumir que a equação está em um dos formatos acima, ou seja, corresponde ao regex
^(-?[123456789]\d*)?x([+-][123456789]\d*)?|-?[123456789]\d*$
.
Casos de teste:
-2x+3 -> -2 3
44x -> 44 0
-123 -> 0 -123
x -> 1 0
-1x -> -1 0
1 +2
seria uma saída válida para1x+2
?L
final ao número se ele for muito grande. Isso deve ser permitido?7x
saída é como7 0
mas7
é a saída como justa7
?Respostas:
Python 2 , 55 bytes
Experimente online!
Usa a avaliação de código interna do Python. A entrada é formatado como um número complexo por substituição
x
comj
, unidade complexa do Python. Como apenas literais como2j
são reconhecidos, mas nãoj
ou-j
, a variávelj
é atribuída1j
para cobrir esses.Infelizmente, o Python não parece ter um built-in para converter um número complexo em um par de reais.
fonte
Mathematica, 16 bytes
Inspirado na resposta Python 2 do xnor :
Recebe a entrada como uma expressão literal (não uma string) e retorna um par de números. Ele funciona criando
x
um número complexo e depois pegando as partes reais e imaginárias - o único bit não óbvio é multiplicar por i para começar, para obter a saída na ordem certa.Também podemos usar
por 14 bytes (empatado com Jelly!), mas definir
x
igual -i antes de receber a entrada, em vez de apenas substituí-lax
depois, parece trapaça ...fonte
ReIm
soube que tinha uma função, sempre fiz{Re[#],Im[#]}&
. Você ajudou muito lá.ReIm
foi introduzido apenas na versão 10.1, portanto, é possível que sua cópia do Mathematica não a tenha.JavaScript (ES6),
5348 bytesCasos de teste
Mostrar snippet de código
fonte
-x
tentar a minha regex-x
não é uma entrada válida.sed ,
4442 bytesExperimente online!
E / S: um por linha.
-2 bytes graças a @KritixiLithos.
fonte
t
e:
em vez de usar oa
rótuloGeléia ,
1814 bytesConjunto de testes em Experimente online!
Quão?
fonte
PHP, 73 bytes
Experimente online!
PHP, 91 bytes
trabalha também com
-x
Experimente online!
fonte
Mathematica, 23 bytes
Experimente online
copie e cole com ctrl-v esse código
e pressione Shift + Enter para executar
fonte
Python 2 , 71 bytes
Experimente online!
fonte
Mathematica, 33 bytes
Função pura pegando uma expressão no formato esperado (nota: não uma sequência, mas uma expressão pura como
-2x+3
) e retornando um par ordenado de números inteiros com o coeficiente constante aparecendo primeiro (por exemplo,-2x+3
retornos{3,-2}
).O interno
CoefficientList
(que funciona para polinômios de qualquer grau) faz o trabalho pesado; seu comportamento padrão é retornar constantes como listas de tamanho 1,/.{a_}:>{a,0}
substituindo isso e fazendo com que o0
coeficientex
apareça explicitamente.fonte
Retina , 38 bytes
Definitivamente pode ser melhorado.
Possivelmente esticando como temos permissão para formatar a saída. Ele apenas gera uma equação completa, como em
n
em
separado porx+
Experimente online!
fonte
x-1
[^+-]*
com\w*
Oitava , 45 bytes
Experimente online!
Avalie a expressão
x
substituída por complexj
. Octave é muito flexível quando se trata de expressões complexas, comj
,1j
,i
e1i
todos equivalentes (com a vantagem de que1j
e1i
não podem ser substituídos por variáveis, mas isso é irrelevante para este desafio). A expressão embutida é usada para criar uma lista[imag(u) real(u)]
comu
o número complexo.Inicialmente, eu queria tentar uma abordagem mais idiomática, usando o built-in
sym2poly
. Por exemplo (já em 47 bytes para garantir que0*x
seja tratado):No entanto, este falhou no caso de
x
sem coeficiente. No final, uma configuração real / complexa, comoxnor
se mostrou ótima.fonte
MATL , 12 bytes
Experimente online!
Porto da minha resposta Oitava, mas é claro adaptado para compacidade em MATL. Explicação:
fonte
C (gcc) ,
145138112 bytesExperimente online!
Definitivamente pode ser encurtado, mas não o veja agora!
fonte
char *s
2. Você não pode remover o espaço em branco?printf("%d %d",s[i]-'x'?:a,s[i=L?L-s:i]-'x'?a:b);
vez deif(L!=0)i=(int)(L-s);printf("%d %d",s[i]=='x'?a:0,s[i]=='x'?b:a);
e emindex()
vez destrchr()