O quebra - cabeça de quatro quatros é um quebra-cabeça matemático recreativo popular que envolve o uso exato de quatro 4s (e nenhum outro número) e um conjunto definido de operações para atingir cada número de 0 a um determinado máximo.
Nesta versão, os únicos operadores a seguir são permitidos:
- Quaisquer símbolos de agrupamento podem ser usados
- Adição (
+
), Subtração (-
), Multiplicação (*
), Divisão (/
) - Fatorial (
!
), Função gama (Γ
) - Exponenciação (
^
), Raiz quadrada (√
) - Concatenação (por exemplo,
44
é dois4
s) - Ponto decimal (por exemplo,
4.4
dois4
s), Overbar (por exemplo.4~ = 4/9
)
A ordem padrão de operações se aplica.
Seu programa deve gerar, dada uma entrada entre 0 e 100 inclusive, uma solução correta para essa entrada. Se o programa gerar uma solução inválida para qualquer entrada, esse programa é inválido.
Por exemplo, com uma entrada de 0
, seu programa pode gerar 44-44
.
O uso de módulos externos não é permitido. Somente _.4~
é permitido para o operador da barra de barra - ou seja, apenas um 4
pode estar atrás do ponto decimal.
Isso é código de golfe, então a solução mais curta vence.
Editar : Para ser mais claro, o programa deve gerar um conjunto das operações acima aplicadas a exatamente quatro 4
s - nem mais nem menos. Além disso, .4 = 4/10
é um termo válido e conta como usando apenas um 4
.
fonte
!(4)
vez de(4)!
)?Respostas:
GolfScript (129 caracteres *)
O tempo de execução é da ordem de 4 minutos no meu PC. Uma aceleração moderada pode ser obtida ao custo de dois caracteres, adicionando uma operação de exclusividade
.&
imediatamente após o%+
.I usar expressões pré-codificado para
1
,2
,4
,6
,24
,120
, e44
, e construir a descansar daqueles usando apenas+
,*
e-
. Dessa forma, não preciso fazer nenhuma aritmética não inteira no próprio programa. Tentei obter expressões mais simples colocando os valores pré-codificados mais simples no início.Todos esses valores são necessários † e é necessário suportar as duas direções da subtração (
complex_expression - simple_expression
e vice-versa). Também é necessário incluir algumas operações que exigem parênteses (especificamentea*(b-c)
), para que eu agrupe todas as subexpressões indiscriminadamente.* Estou contando pontos de código Unicode assumindo que o programa está codificado em UTF-8 e escovando o tapete do fato de que, a menos que você esteja usando uma versão recente do Ruby para executar o intérprete, está realmente tratando-o como caracteres ASCII. Se você está muito preocupado com isso, use
G
para Gamma ev
sqrt.† Bem, estritamente eu poderia remover
44
em troca de11
como44/4
e71
como√(Γ√4+(ΓΓ4+Γ√4)!)
, mas isso não é uma boa escolha.fonte
Python 155 bytes
Os três primeiros bytes (
\xEF\xBB\xBF
) são a marca de pedido de UTF-8 bytes, embora o arquivo deva ser salvo no formato ANSI. Oû
eâ
será interpretado como√
eΓ
respectivamente nos cp437 e cp850 , que devem funcionar em praticamente qualquer caixa do Windows.O tempo de execução é de cerca de 0,4s no meu computador.
Uso de amostra (nomeie o arquivo
four_fours.py
):Resultados para 0..100 . Devido à maneira como o hash é iterado, ele prefere usar o
4!
mais rápido possível.Editar: salvou um número de bytes adicionando
Γ√4 = 1
, o que elimina a necessidade de qualquer agrupamento, e removendo√4 = 2
, o que não era mais necessário.fonte
J,
175161 caracteresO formato verificado é
(v op v) op (v op v)
ondev={0.4 4/9 1 2 4 6 24}
eop={+ - * /}
0..100 resultados
fonte
.4
seja um número válido para este jogo.