Se você acha que isso pode ser divertido, mas dá muito trabalho, considere participar desse desafio muito menor.
Um pouco de diversão (e possivelmente frustração!) Para 2016 ... o "quebra-cabeça do ano" de Dyalog . Apreciar!
O objetivo
Encontre expressões Dyalog APL ( download ) (outros idiomas são permitidos, consulte Elegibilidade abaixo) envolvendo exatamente os dígitos 2 0 1 6 nessa ordem para igualar os números de 0 a 100. Por exemplo:
20=16
×2016
2⌊016
2+0+1*6
...
O objetivo é usar o mínimo de caracteres possível em cada expressão (o número mínimo de caracteres para uma expressão é 5 - os quatro dígitos 2 0 1 6 e uma única função / operador primitivo).
As regras
- Cada expressão deve conter os dígitos 2 0 1 6 (nessa ordem) e nenhum outro dígito. Constantes e variáveis predefinidas também não são permitidas.
- Além dos quatro dígitos 2 0 1 6, apenas símbolos e nomes embutidos, parênteses / chaves, espaços, sinais de menos altos e pontos decimais podem ser usados. As expressões resultantes devem ser determinísticas (ou seja, fornecer o mesmo resultado em avaliações repetidas). Para não APLs, funções / operadores com um nome também são permitidos; mesmas regras que aqui .
- Suponha todas as configurações padrão para o seu idioma. Para o Dyalog APL, isso significa
⎕ML
e⎕IO
são ambos 1 e⎕PP
é 10. - Cada entrada que compreende expressões corretas para todos os números de 0 a 100 inclusive será classificada de acordo com o número de caracteres usados por essas expressões, excluindo espaços redundantes (mínimo 505 para todas as 101 expressões).
Elegibilidade
Qualquer um pode entrar. Você pode responder em qualquer idioma, mas apenas as respostas da APL serão consideradas para aceitação. Se você usar outro idioma que não o APL, poderá usar trechos, programas, funções etc. como alternativas às expressões e poderá imprimir, deixar o número em um local de memória acessível ou retornar o resultado, desde que seu código seja diretamente avalia o número desejado como qualquer tipo de dado numérico padrão para o seu idioma.
Data de encerramento
30 de novembro de 2016.
Prémios
- Aceite sua resposta
- Seja imortalizado no Hall of Fame de Dyalog 2016!
Como enviar sua inscrição
Após 30 de novembro de 2016, aceitarei a resposta mais curta e enviá -la-ei em seu nome ao Hall da Fama de Dyalog 2016.
Perguntas frequentes
- É permitido
J
(por exemplo, 37 =⌈⍟!20J16
)? - Não: além dos quatro dígitos 2 0 1 6, somente símbolos e nomes internos, parênteses / colchetes, espaços, sinais de menos e pontos decimais podem ser usados.
- A saída como uma string é aceitável?
- Não: igual aos números de 0 a 100.
- Dígitos físicos ou dígitos de dados?
- Dígitos de dados, conforme OP: mesmas regras que aqui , onde um dos exemplos contém
LOG10(
. - É
a+16+a←20
permitido atribuir variáveis e usá-las como parte da expressão (por exemplo, 56 = ) permitido? - Sim, mas você não pode usar uma atribuição de uma expressão em outra.
Eu tenho permissão explícita por escrito para postar esse desafio aqui, do autor original desse desafio. Sinta-se livre para verificar, seguindo o link fornecido e entrando em contato com o autor. Dei ao autor original do concurso o link para esta página no minuto em que o publiquei, para que eles possam verificar se eu envio a resposta de alguém como minha.
⎕ML
e⎕IO
(supostamente1
)?Respostas:
Geléia, 686 bytes
Escrevi cerca de 50 delas e, em seguida, gerou automaticamente o restante anexando
Ḥ
(× 2) e‘’
(± 1) conforme necessário. Eu os melhorarei mais tarde!fonte
201ÆCo6
. Eu não acho que você pode usarṾ
(que foi implementado em fevereiro), mas20|16Ḥ‘Ḥ
e20|16‘ḤḤ’
são igualmente curto.Ḥ
excesso de‘’
46, entre outros quatro números, deveria ter um caractere menor. Eu substituí-o pelo2016½Ċ‘
qual é contanto que o seu.Hexagonia , 888 bytes
Ok, primeiro algumas regras básicas do Hexagony, caso alguém queira superar isso:
2|016
22), mas parece mais com o espírito do desafio.Então aqui está a lista. Eu testei a maioria deles, mas não todos (alguns são modificações triviais de outros), então espero não ter cometido erros:
Fiquei um pouco preguiçoso no final, então tenho certeza de que isso não é o ideal. Pode ser interessante (e possível) forçá-los a força bruta.
fonte
J,
1041... 838 bytes981961952860859Fiquei um pouco preguiçoso até o fim, mas deveria ser mais fixo que menos.
Acho que nunca superarei o Hexagony, mas você nunca sabe!batendo hexagonia! Economizou 9 bytes graças ao Zgarb! e muito mais para Lynn!Destaques e Notas
Eu usei muito números primos nisso. De fato, eu usei
p:
(a enésima enésima) função 37 vezes nessa coisa.90 foi feito usando um garfo. Yay! É aproximado a isso:
Traduzido como
54 usa um desfile de modelagem!
É equivalente a
fonte
!20-16
54:<.^20-16
55:>.^20-16
97:p:!20-16
+:p:-2-016
(4 bytes mais curto)?2]01+6
, 8 pode ser2%~016
e 12 podem ser2*01]6
.JavaScript, 1021 bytes
Corrigido e salvo dois bytes graças a Charlie Wynn e ETHProductions .
fonte
2-~01+6
como 10, e-~!2016
como 1.JavaScript (ES7), 836 bytes
Tudo deve funcionar em qualquer navegador, exceto 81, 88 e 97, que usa o novo
**
operador.Principalmente tudo aqui foi feito à mão. Eu tenho trabalhado em um bruto para melhorar qualquer coisa que possa ser melhorada. Atualmente, ele salvou 103 bytes em vários itens.
Forçador bruto
Não é o código mais bonito, mas isso não parece importar nessas partes.
AVISO: Não execute a menos que esteja preparado para o seu navegador / mecanismo congelar por alguns minutos. Ninguém gosta de calcular 7 loops aninhados.
fonte
PowerShell v3 +,
15751499 bytesGolfe 100% manual - não há programas de força bruta ou outros auxílios alistados.
Eu sinto que 1500 talvez esteja ao alcance doSub-1500 alcançado! Vamos ver o quão bem eu posso fazer para diminuir isso. (NB - Isso foi testado apenas na v4, mas deve funcionar na v3 e v5 sem modificação. Não funcionará na v2 ou v1, pois essas versões não tinham operadores de deslocamento bit a bit.)
Os pontos principais estão marcados com
##.hashes.##
no código acima.# 11 é a primeira atribuição à variável
$a
. Ao contrário de outros idiomas, as variáveis não precisam ser pré-inicializadas para análise, e somente durante a execução as variáveis são resolvidas. Como o($a=01)
é cercado por parênteses, ele é avaliado primeiro e, portanto, o segundo-$a
é equivalente a-1
. Isso é usado extensivamente daqui em diante e é uma das maiores coisas que mantém o número de bytes baixo.# 17 mostra o primeiro uso de
!
para booleano não. No PowerShell, os tipos são muito pouco expressos; portanto, se a conversão puder ser implícita, funcionará. Aqui, estamos usando o fato de que!!20
iguais!$false
, o que é$true
, que podem ser expressos implicitamente como[int]1
, o que resulta em17
. Isso é usado várias vezes para obter outro1
ou fazer com que uma parte vá para0
.# 22 mostra o
0x
operador hexadecimal elenco, aqui transformando0x16
em22
. No entanto, como0x16
é o único número que podemos obter, sua utilidade é limitada.O número 23 tem o
-bor
operador, para "binário ou". No entanto, como ambos-bor
e-bxor
têm precedência menor que os operadores aritméticos simples, seu uso geralmente requer parênteses, o que limita severamente a utilidade. Este é o único que encontrei, onde é mais curto usar o binário ou o operador (eliminei o operador de 22).-bxor
# 30 é a primeira vez que o
-bnot
operador é apresentado. Este é o operador "binário não" e funciona de maneira semelhante ao~
(por exemplo) JavaScript. No entanto, geralmente precisa de parênteses, pois a negação será exibida--bnot
e resultará em um erro de análise / sintaxe, e, como são cinco caracteres em comparação a um~
, é usado com moderação.# 39 é o primeiro uso de nossos operadores de turno binário,
-shl
e-shr
. Eles são semelhantes<<
ou>>
em outros idiomas, mas são explicitamente diádicos, o que significa que precisamos de um número de ambos os lados para que eles funcionem, o que limita sua utilidade nesse desafio. Além disso, sua precedência não é explicitamente citada na documentação, mas o teste mostra que eles são inferiores à aritmética simples, o que significa que os parênteses precisam ser usados livremente, para que não pareçam tanto quanto em outras respostas de idiomas.fonte
CJam,
792791 bytesEu fiquei meio preguiçoso perto do fim, muitos deles acabaram sendo incrementos e decrementos (101 é muito!), Embora eu não tenha certeza se existe outra maneira de alguns números. Ainda há muito tempo para jogar golfe, se eu precisar.
Em torno de # 40 há alguns rostos piscantes;)
fonte
Mathematica,
2912250222822180 bytesDefinitivamente poderia ser jogado ainda mais. Principalmente resolve apenas algumas equações separadas de Frobenius, que produzem soluções de comprimento O ( n ). O resto foi gerado pelo meu brute-forcer.
fonte
c
de16
quando o número é ainda e grande? Como para 96, etc. Não sabe ao certo como o solucionador de equações funciona, mas o usoa=20
também deve ser útil para vários deles?Dyalog APL (Esta é uma piada, não envie), 25.957 bytes.
Sim, é uma entrada de brincadeira, precisamos de uma solução de APL, mesmo que seja completamente horrível. Funciona incrementando
≢⍬
(0
) osn
tempos. Não quero revelar segredos da minha apresentação real.Obviamente, poderia ser jogado muito mais.
fonte
JavaScript, 5244 caracteres
Provavelmente poderia ser jogado muito mais longe. Teste no console do Chrome. Eu meio que desisti às 10.
fonte
Java 7, 1.083 bytes
Para a contagem de bytes, contei apenas as expressões entre parênteses. Então eu excluídos os
System.out.println
s eclass
. Incluindo esses, seriam 3.049 bytes .PS: Não tenho certeza se a conversão para int
72
é válida. Embora adicione 5 bytes de qualquer maneira ..Ungolfed & código de teste:
Experimente aqui.
fonte