O iOS 11 possui um bug que faz com que o resultado de 1 + 2 + 3 seja 24 . Isso está relacionado à velocidade da animação, mas de qualquer maneira:
A tarefa é fazer 1 + 2 + 3 == 24
. Mas só isso. Portanto, você deve fornecer uma função que resume corretamente a maioria das seqüências, mas retorna 24
quando os argumentos são 1
, 2
e 3
em qualquer ordem.
Exemplo de entradas:
1 2 => 3
3 4 => 7
1 2 3 4 5 6 7 8 9 => 45
3 2 1 => 24
2 1 3 => 24
1 1 => 2
1 2 3 => 24
40 2 => 42
1 2 2 4 => 9
1 2 3 4 1 2 3 => 16
1 => 1
1 23 => 24
0 1 2 => 3
3 2 3 => 8
A entrada pode estar em qualquer formato, desde que seu código aceite qualquer número de argumentos.
- Não é necessário suporte para números negativos (todos os números não negativos são necessários para o trabalho, incluindo 0)
- Assumimos entrada correta
Diferenças de outra pergunta semelhante: "O que você ganha quando multiplica 6 por 9? (42)" :
- Nesse caso, sua função é obrigada a aceitar qualquer número de argumentos. A pergunta antiga especifica exatamente 2.
- Nesse caso, a ordem não importa, enquanto a pergunta antiga especifica que a ordem
6 9
é necessária e9 6
deve ser avaliada corretamente.
Respostas:
MATL ,
1110 bytesExperimente online! ou verifique todos os casos de teste
Explicação
fonte
05AB1E , 9 bytes
Explicação:
Experimente online!
fonte
Java 8,
1091061019075747166 bytes-12 bytes graças a @ OlivierGrégoire .
-31 bytes graças a @Nevay .
Explicação:
Experimente aqui.
Prova (ineficiente) de que apenas
[1,2,3]
(em qualquer ordem) serão os resultados possíveis quandop
for0b1110
(p==14
) e a soma for inferior a 6 ou inferior (s<7
): Experimente aqui.Resposta antiga de 71 bytes :
Prova de que para quaisquer três números naturais diferentes de zero, apenas
[1,2,3]
(em qualquer ordem) terá uma soma igual ao seu produto (1+2+3 == 1*2*3
) (com uma soma positiva):Quando a soma é igual ao produto de Leo Kurlandchik e Andrzej Nowicki
(Ineficiente) prova que apenas
[1,2,3]
(em qualquer ordem) e[0,0,0]
serão os resultados possíveis com números não negativos e um comprimento de 3: Experimente aqui.Então a
s*4
vontade se torna6*4 = 24
para[1,2,3]
e0*4 = 0
para[0,0,0]
.fonte
Gelatina , 8 bytes
Experimente online!
fonte
MATL , 13 bytes
Experimente online!
É dois bytes mais longo que a outra resposta MATL, mas usa uma abordagem completamente diferente (e IMO mais interessante), então achei que vale a pena postar.
Explicação:
Esta solução usa o fato de que:
Isso pega a entrada, calcula a soma
s
e a duplicat
. Em seguida, verifica se a soma é igual ao produtoGp=
. Multiplicamos o booleano1/0
por 18,18*
e verifica se há valores não idênticos no vetorda*
(novamente, multiplique por um booleanoany(diff(x))
. Depois multiplicamos os dois e adicionamos o último número à soma original.Uma explicação passo a passo:
Suponha que a entrada seja
[1, 2, 3]
:fonte
Python 2 , 39 bytes
Experimente online!
Usa um método alternativo de adicionar 18 se a entrada classificada
[1, 2, 3]
exceder a outra resposta Python por um byte.fonte
sorted(a)==[1,2,3]
pode tornarset(a)=={1,2,3}
- se para salvar 3 bytes.[1, 2, 3, 3]
Haskell , 37 bytes
Experimente online!
Usamos a correspondência de padrões para capturar o caso excepcional.
Haskell não tem classificação interna. A igualdade
2^a+2^b+2^c==14
é satisfeita apenas por[a,b,c]
uma permutação de[1,2,3]
números inteiros não negativos. Um mais curtoa+b+c=a*b*c
quase funciona, mas é satisfeito[0,0,0]
e, ao anexar a verificação,,a>0
fica 1 byte mais longo.fonte
Oitava , 34 bytes
Experimente online!
ou
Experimente online!
ou
Esta é mais curto do que a abordagem de outro uso:
@(x){24,sum(x)}{2-isequal(sort(x),1:3)}
.Explicação:
Ele pega a soma do vetor e adiciona 18 se o vetor classificado for igual a
1,2,3
. Isso fornecerá6+18=24
se o vetor é uma permutação de1,2,3
e apenas a soma do vetor, se não.fonte
PHP, 116 bytes
Esta é a minha primeira tentativa de desafio de golfe, e é PHP, uma linguagem que aparentemente é péssima no golfe, já que raramente a vejo aqui, então ... hum, eu tentei?
Nota: eu não incluí o comentário no bytecount.
Ungolfed
Não é nada de especial:
Se você quiser testar isso no PHPFiddle e não no console, obviamente poderá substituir
$i
por qualquer coisa que desejar.Agradeço a Olivier Grégoire, que me informou sobre a combinação de cordas
[0,3,3]
que retornou 24 antes e também me ajudou a economizar alguns caracteres armazenandoarray_sum
e retornando isso em vez de executar a função novamente.fonte
[0, 3, 3]
? Além disso, você não pode salvar o resultado dearray_sum($a)
uma variável e reutilizá-lo?R,
47 bytes34 bytes36 bytesExperimente online!
Soma a entrada e adicione 18 se o conjunto de entradas for 1: 3.
Graças a @mlt por jogar fora de 11 bytes. Obrigado a Ayb4btu por identificar um erro com o código sobrecarregado
fonte
Javascript ES6, 39 bytes
Obrigado a @Herman Lauenstein
Resposta anterior
Javascript ES6, 66 bytes
Tente
fonte
a=>(Array.sort(a).join()=="1,2,3"?24:a.reduce((x,y)=>x+y))
a.sort()=="1,2,3"
trabalho.a=>a.sort()=="1,2,3"?24:eval(a.joinBT+BT)
(substitua BT por backticks)Swift, 67 bytes
Poderia chegar a 27 bytes com extensões em [Int], mas isso seria trapaça :(
fonte
func z(i:[Int]){print(i.sorted()==[1,2,3] ?24:i.reduce(0,+))}
.{$0.sorted()==[1,2,3] ?24:$0.reduce(0,+)}as([Int])->Int
como funções anônimas são permitidas por nossas regras padrão. Você pode ver como isso funciona aqui .as
:)Mathematica, 28 bytes
Experimente online!
fonte
J, 17 bytes
-6 bytes graças ao Frowny Frog
Soma todos os números
+/
e multiplique o resultado por (pseudocódigo)1 + 3*(is123 ? 1 : 0)
. Ou seja, retorne os resultados inalterados, a menos que a lista classificada esteja1 2 3
nesse caso, multiplicando o resultado por 4.Experimente online!
resposta original
Verifique se a entrada classificada é
1 2 3
- se sim, chame a função constante 24 (24"_
); caso contrário, retorne a soma+/
Experimente online!
fonte
1 2 3
→i.3
?i.3
produz0 1 2
, então você teria que fazer o1+i.3
que não salva caracteres, mas é menos claro.[:+/8"0^:(1 2 3-:/:~)
+/@,[*3*1 2 3-:/:~
C # (.NET Core) , 57 + 18 = 75 bytes
Experimente online!
+18 para
using System.Linq;
fonte
Lua ,
11681 bytes-7 bytes graças a Jonathan
Recebe entrada como argumentos de linha de comando
Experimente online!
Explicação:
Funciona criando uma matriz esparsa
S
e adicionando zeros nos índices correspondentes aos valores de entrada. Se os parâmetros forem3, 4, 7
a matriz esparsa, somente haverá números nesses índices. Com essa matriz, podemos obtê-lo de comprimento com o operador#
que conta de índice1
até o índice mais elevado que tem um valor nela, se este comprimento é exatamente3
, isso significa que havia elementos na posição1
,2
e3
wich é o que nós somos procurando por. O comprimento da matriz esparsa será sempre entre0
eN
ondeN
está o número de parâmetros. Portanto, basta verificar se o comprimento da matriz de parâmetros e da matriz esparsa é3
.fonte
#args
Lua é um pouco pesado demais para bytes? Nesse caso, você pode reverter para a sua resposta de 90 bytes, eu acho .. :(R ,
55455449575448 bytesEconomizou muitos
bytes esoluções incorretas graças ao Ayb4btu.Economizou
39 bytes graças a Giuseppe. Eu continuo aprendendo novas maneiras de abusar do fato dissoF==0
.Experimente online!
A outra resposta R venceu no final.
fonte
[0,0,0]
: retorna em24
vez de0
.c(1,1,2,3)
retorna em28
vez de7
x=scan();s=sum(x);"if"(s-prod(x)|s-6|length(x)-3,s,24)
é 54 bytes trocando a condição e usando em|
vez de,&
para que possamos subtrair.C (gcc) ,
1361311259791 bytesExperimente online!
fonte
Retina , 21 bytes
Experimente online!
A entrada é separada por avanço de linha, mas o conjunto de testes usa separação por vírgula por conveniência.
Explicação
Classificar os números (lexicographically, na verdade, mas que só se preocupam com o caso de que as entradas são
1
,2
,3
de alguma forma, quando isso não faz diferença).Se a entrada for
1,2,3
(em alguma ordem), substitua-a por 24.Converta cada número em unário.
Conte o número de
1
s, que adiciona os números unários e os converte novamente em decimal.fonte
1
s neste caso). Retina sempre faz isso para uma única linha final? Ou também é possível contar todos os1
s em algum lugar no meio e, depois disso, continuar com o resultado para fazer outra coisa (que usa duas linhas novamente para ações de substituição)? Além disso, outra questão relacionada: quais funções no Retina requerem apenas uma única linha? A classificação (O`
) é uma delas e a outra também; mas algum outro? Apenas tentando entender um pouco mais a Retina. :)M`
. É apenas se houver uma única linha à direita que Retina padrãoM
atch em vez deR
substituir.AGMTS
são todos estágios de linha única,R
são duas linhasO
eD
são uma ou duas linhas, dependendo de a$
opção ser usada (que os transforma em estágios de classificação / desduplicação por ). Sinta-se livre para me pingar na sala de chat Retina se você tiver mais perguntas: chat.stackexchange.com/rooms/41525/retinaHaskell , 44 bytes
Experimente online!
As permutações de
[1,2,3]
são as únicas partições de6
cujo produto está6
, exceto em6
si. (Isso pressupõe que as entradas não são negativas, o que parece ser o caso para todos os casos de teste ... perguntei ao OP sobre isso.)fonte
PL / SQL -
135123 bytesAssumindo i como uma entrada de matriz inteira de qualquer tamanho:
fonte
C ++ 17,
56.54 bytesExperimente online!
Observe que o objeto de função criado é utilizável em tempo de compilação; portanto, os testes são executados pelo compilador sem a necessidade de executar um programa.
Explicação:
Prova de que o único não negativo
i...
para o qual(-i&...)
é igual a -4 e(~i*...)
é igual a -24 são as permutações de1, 2, 3
:Primeiro observamos que, como
-0
=0
, se houveri
=0
então(-i&...) = 0
, concluímos que todosi
são positivos.Agora, observe que no complemento de 2
-i
é equivalente~(i - 1)
e~i
é equivalente a-(i + 1)
. Aplicando a regra de De Morgan, achamos que(-i & ...)
=~((i - 1) | ...)
=-(((i - 1) | ...) + 1)
, então((i - 1) | ...) = 3
; Da mesma-1 ** n * ((i + 1) * ...) = -24
forman
,, então, é estranho e((i + 1) * ...) = 24
.Os fatores primos de 24 são 2 ** 3 * 3, então
n
<= 4. Sen
= 1, temosi - 1 = 3
ei + 1 = 24
, entãon
= 3. Escreva oi
wlog comoa <= b <= c
, então claramentea
= 1 como contrário(a + 1)(b + 1)(c + 1)
> = 27. Tambémc
<= 4 como caso contrário,(a - 1)|(b - 1)|(c - 1)
> = 4.c
não pode ser 4, pois 5 não é um fator de 24, entãoc
<= 3. Então, para satisfazer(a - 1)|(b - 1)|(c - 1) = 3
c = 3, b = 2, conforme necessário.fonte
Casca , 9 bytes
Experimente online!
Explicação
Solução anterior
Dá o resultado errado para [2,2], e provavelmente outras entradas também, mas foi mais interessante.
Experimente online!
fonte
Pushy , 12 bytes
Experimente online!
Isso funciona ordenando a entrada e, se for igual a
[1, 2, 3]
, acrescentando 18. Em seguida, a soma é calculada e impressa, o rendimento de 24 é 18 foi acrescentado e a resposta normal, caso contrário.fonte
Pitão , 9 bytes
Verifique todos os casos de teste.
fonte
Python 2 ,
4139 bytes-1 byte graças a caird
-1 por inspiração da resposta do FlipTack
Experimente online!
Solução alternativa de 39 bytes
fonte
Geléia ,
109 bytesExperimente online!
-1 byte graças a Erik
Alternativa (por Mr. Xcoder ), também para 9 bytes:
Experimente online!
Como funciona
fonte
Ṣ24S⁼?3R¤
por 9 bytes.3R⁼Ṣ×18+S
por 9 bytes também.Pitão , 9 bytes
Abordagem diferente da outra resposta de Pyth.
Explicação:
Uma porta da minha resposta Python
Experimente online!
fonte
PowerShell , 44 bytes
Experimente online!
Algoritmo semelhante às respostas Python e JavaScript. Recebe a entrada como uma matriz literal
$a
. Em seguida, soma-se imediatamente$a
, que forma o operador esquerdo do+
.O lado direito é o
diff
(apelido paraCompare-Object
) de1,2,3
e$a
- este é um array vazio se eles forem iguais ou um array não vazio dos itens diferentes se não forem iguais - incluído em um Boolean-not. Então, se eles são iguais, isso transforma a matriz vazia (um valor de falsey)$true
.Isso é multiplicado pelo
18
que implica implicitamente$true
para1
e$false
para0
. Portanto, o lado direito será18
se as matrizes forem iguais e0
caso contrário. Isso fornece o resultado correto de24
se a matriz de entrada está1,2,3
em alguma permutação e a soma da matriz de entrada de outra forma.fonte
Kotlin ,
4644 bytesExperimente online!
Editar% s
fonte
listOf(1,2,3)
para salvar 2 bytes? Não conheço Kotlin, então não tenho certeza.