Desta vez, seu objetivo é encontrar o máximo de 3 números inteiros (de - (2 ^ 31) a 2 ^ 31 - 1 no complemento binário de 2) sem usar ramificações ou loops.
Você só pode usar
Desigualdade / A igualdade (
==
,>
,>=
,<
,<=
,!=
) Estes contagem como 2 fichas.Aritmética (
+
,-
,*
,/
)Operadores lógicos (
!
não,&&
e,||
ou)Bit a bit Operadores (
~
não,&
e,|
ou,^
xor,<<
,>>
,>>>
mudanças certas aritmética e lógica esquerda e)Constantes. 0 fichas
Atribuição variável. 0 fichas
Insira 3 variáveis como a
, b
e c
. Emita o número máximo.
Aplicam-se regras atômicas de código-golfe padrão. Se você tiver alguma dúvida, deixe-a nos comentários. Um token é um dos itens acima com regras especiais.
Respostas:
Javascript 10 tokens
Editar Usando <e * em vez de mexer com bits - como apontado nos comentários, as operações de bits podem falhar na entrada perto do limite do intervalo (acima de 30 bits)
Tokens C 8
Linguagem independente de fato, qualquer linguagem semelhante ao C serve. Para ser exigente, no padrão C não é portátil porque a mudança à direita pode não estender o sinal (mas em implementações comuns).
Em C (e C ++, C # e Java, eu acho), podemos lidar facilmente com problemas de estouro usando valores temporários maiores:
fonte
int
s, seu código não funciona para x = 2147483647, y = -2, z = 0. Sua escolha se você quiser mudá-loJavascript
6 fichas
fonte
&&
e||
provavelmente era uma supervisão, que deveria ser apontada, e não explorada.&&
, 2<
e>
. O=
é usado como uma tarefa e conta como 0C: 10 fichas
Inspirado na resposta de @ openorclose, mas convertido em C e tornado sem ramificação usando multiplicação em vez de operadores booleanos de curto-circuito.
fonte
Javascript
14 fichas
fonte
Muitos idiomas (Python) (10 tokens)
https://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax
Ah, alguém já postou :)
fonte
You are only allowed to have one function, the one that takes the 3 inputs and outputs.
Isso é exatamente o que esta resposta tem. As 2 impressões são apenas casos de testemax2(max2(x,y),z)
inicialmente :)C ++ 11: 15 tokens
Usando apenas operadores aritméticos e bit a bit (já que os operadores de igualdade e lógica booleana facilitam muito) ...
fonte
J (Não competindo)
Eu só estava me perguntando como seria a solução em J. Isso usa a
,
e a#
embora, portanto, não estará competindo.Isso competiria, mas é muito longo, com 9 tokens:
fonte
temos as seguintes suposições:
max (a; b) = (a + b + | ab |) / 2
max (a; b; c) = max (max (a; b); c)
(a) = (a + (a >> 31)) ^ (a >> 31)
podemos usar o pseudo-código:
fonte
C # (segunda tentativa)
Entendi ... Sem funções integradas ...
Mas é permitido usar outros tipos de dados integrados ou simplesmente int? Se permitido, proporia:
fonte
javascript 8 tokens
embora semelhante à resposta do @ openorclose, na verdade eu uso os operadores lógicos para a atribuição em si.
violino
fonte
R (10 fichas)
fonte
Brainfuck (Não competindo)
fonte
TIS-100, 8 operações
O provedor (UP) apenas realiza MOVs, de modo que não sejam mostrados no código. Talvez não funcione quando estiver muito próximo da borda 999
fonte
VBA (6 tokens)
não tenho certeza se isso não está ramificando.
fonte
IIf
, Inline-If. Na maioria dos idiomas, é, por exemploa>=b ? a : b
,. Está se ramificando de fato.JavaScript: 4 tokens (** com base na ampla interpretação de "atribuição"!)
Obviamente, minha pontuação de 4 é extremamente generosa / branda!
Para chegar a essa pontuação, assumi que "atribuição" (no valor de 0 fichas na pergunta) inclui itens como atribuição aditiva, atribuição subtrativa, atribuição multiplicativa e atribuição XOR-ing (
^=
)Se essas tarefas realmente contarem, a pontuação é 14 :)
fonte
d -= b
na verdade é o mesmod = d - b
, eu diria que você usa aritmética e que deve contar isso como um token.