Usando nossos familiares símbolos matemáticos: +, x, parênteses e qualquer número racional, é fácil criar expressões que sejam avaliadas para um número desejado. Por exemplo: 1+(2x3)=7
, (1+2)+(3x6.5)=22.5
e assim por diante. Chato o suficiente.
Neste desafio, usaremos um novo operador: ±
. O uso de ±
em uma expressão significa que você precisa avaliar a expressão substituindo os ±
's por +
ou -
de todas as maneiras possíveis e retornando o conjunto de todos os valores possíveis. Por exemplo:
1±2±3 = {-4,0,2,6}
porque1±2±3
pode ser qualquer um1+2+3
,1+2-3
,1-2+3
e1-2-3
e os seus valores são6,0,2,-4
respectivamente.(±2)x(2±3) = {-10,-2,2,10}
por razões semelhantes.
Agora, como se vê, dado qualquer conjunto de números reais distintos, é possível criar uma expressão com +
, x
, (
, )
, ±
, e números reais que avalia o conjunto dado.
Tarefa
Sua tarefa é escrever um programa ou função em um idioma de sua escolha, que leva uma seqüência (lista / array / qualquer formato conveniente) de números inteiros e produz uma expressão (como uma string), constituído por +
, x
, (
, )
, ±
, e números racionais que avalia o conjunto dos números fornecidos.
- Observe que o caractere exato
±
não importa; você pode usar qualquer outro caractere de sua escolha, desde que seja distinguível dos outros caracteres que estiver usando. Mas você deve mencionar qual personagem está usando em sua submissão. - É permitido que a entrada consista em aproximações decimais (até precisão razoável) dos números racionais utilizados.
- A entrada e a saída podem ser obtidas de qualquer uma das maneiras padrão.
- As brechas padrão são proibidas.
- Você pode assumir que os números inteiros fornecidos serão distintos e fornecidos em ordem crescente.
- A saída pode conter espaços e novas linhas.
Critério vencedor
Isso é código-golfe , então o código mais curto em bytes vence.
Exemplos
Entrada | Saída possível ------------- + ----------------------------- [1,2,3] 2 ± 0,5 ± 0,5 [-7, -3,1,21] | (1 ± 2) x (3 ± 4)
Ideia tirada de uma pergunta no Torneio das Cidades, outono de 2015 .
fonte
Respostas:
Python 2 , 56 bytes
Experimente online!
O
?
significa±
. Exemplo de uso:A idéia é que podemos pegar uma expressão
E
e juntar um novo valorh
ao seu conjunto de valores fazendo(.5±.5)*(E+-h)+h
.fonte
+-h
e não apenas-h
? Ou seja, por que não fazer a+
um-
e remover o-
que está atualmente no programa?-
operador na expressão.Haskell , 52 bytes
Experimente online!
Usa
?
para±
. Exemplo:A função
shows
funcionashows a b=(show a)++b
, um truque que aprendi com Lynn.fonte
Haskell , 58 bytes
Usando
#
para±
, como é um byte a menos.f
pega uma lista de números inteiros e retorna uma string.Resultado é o formato
n+(.5#.5)x(rest)
, onden
é o primeiro elemento da lista erest
é a representação de todos os outros comn
subtraídos de cada um.Experimente online!
fonte
Gelatina , 29 bytes
Imprime v + (0,5¤0,5) × (i 1 + (0,5¤0,5) × ((i 2 + (0,5¤0,5) × (... (i n ) ...)))) em que v é o primeiro número em a matriz de entrada e i n é o n th diferença incremental entre os elementos da matriz de entrada.
Experimente online!
Quão?
fonte
05AB1E , 25 bytes
Experimente online!
Explicação
Infelizmente, construir a expressão da direita acaba com a mesma contagem de bytes
0¸«¥¤s¨RvX;Dy"ÿ+(ÿ±ÿ)*(ÿ)
. Os 8 bytes usados para a instalação são o grande desperdício aqui.fonte
Haskell, 54 bytes
o sinal + - é
'?'
. exemplo:fonte
JavaScript (ES6),
5651 bytesCom base na fórmula de @ JonathanAllan.
@
apoia±
.fonte