Introdução
Eu tropecei nesse padrão (inútil) outro dia enquanto estava assistindo TV. Eu o chamei de "o padrão 9" porque o primeiro número a usá-lo foi 9. A essência é que você digita um número (digamos x ) e depois volta:
- x
- x + ( x / 3) [vamos chamar isso de y ]
- dois terços de y [vamos chamar isso de z ]
- z + 1
Então, se eu colocar dentro desse padrão o número 9 como x , é isso que sairia:
- 9 ( 9 )
- 12 ( 9 + 9/3 ) [9 acima de 3 é 3 e 9 + 3 é 12]
- 8 ( 12 vezes dois terços) [um terço de 12 é 4 e 4 * 2 é 8]
- 9 ( 8 + 1 é 9)
Desafio
Escreva-me uma função (em qualquer linguagem de programação) que capte um número e produza uma matriz inteira usando o padrão.
Um pouco como este código psuedo:
function ninePattern(int myInt) returns IntegerArray {
int iterationA = myInt + (myInt / 3);
int iterationB = iterationA * (2 / 3);
int iterationC = iterationB + 1;
IntegerArray x = [myInt, iterationA, iterationB, iterationC];
return x;
}
Esclarecimentos
Discussões têm despertado comentários sobre as especificações da questão. Esta seção pretende esclarecer alguns deles.
"melhor contar em bytes do que caracteres"
Escolhi personagens porque (pelo menos para mim) seria mais fácil julgar. Claro, não posso mudar isso agora. (muitas respostas já foram postadas)
"arredondamento"
O arredondamento segue esta rima:
Se for 5 ou mais, aumente a pontuação
Se for 4 ou menos, deixe descansar
Simplificando, se for algo como 4.7 ou 3.85, arredonde-os para 5 e 4, respectivamente.
Exemplos
Input => Result
9 => [9, 12, 8, 9]
8 => [8, 11, 7, 8]
6 => [6, 8, 5, 6]
23 => [23, 31, 21, 22]
159 => [159, 212, 141, 142]
Se, no entanto, os números forem algo como 2.3 ou 10.435446, arredonde-os para 2 e 10, respectivamente.
"suporte de linguas"
Você é livre para não usar funções e / ou matrizes SE E SOMENTE SE O idioma de sua escolha não os suportar. Se isso acontecer (mesmo que isso aumente a contagem de caracteres), você deve usá-los .
fonte
Respostas:
MarioLANG,
659621591582556543516458418401352308369 byteso arredondamento é bastante caro: /
Experimente online
Bem, isso foi mais divertido do que o esperado, provavelmente não é o ideal, mas acho que estou chegando lá.
Tempo de explicação:
(para a versão de 352 bytes)
primeiro obtemos o argumento e o imprimimos:
simples o suficiente
passamos para a maior parte do programa: a entrada de divisão / 3
que é uma conversão ligeiramente modificada da divisão brainfuck
que levam para entrada
e te devolver
uma vez que temos a divisão podemos usá-lo para obter a soma de n e n / d e imprimi-lo
então precisamos fazer outra divisão: (2 * (n + n / d)) / 3
então obtemos (2 * (n + n / d)
e colocá-lo com 3 de volta na divisão
nesse ponto, tudo explode, mario fica preso em um loop infinito, fazendo divisão em um número cada vez maior, para sempre.
e para consertar que precisamos de uma maneira de diferenciar entre a primeira e a segunda divisão, acaba que, oh alegria, temos uma maneira
basicamente, olhamos se o x em
é 0, se é que estamos na primeira divisão
caso contrário, estamos na segunda divisão e apenas imprimimos o resultado da divisão, adicione 1 e imprima novamente
e voilà fácil como torta.
fonte
Emotinomicon 99 bytes, 33 caracteres
Explicação:
fonte
MATL, 14 bytes
Experimente Online
Muito simples,
v
concatena a pilha em uma matriz.Xo
converte em um tipo de dados inteiro e todas as operações subsequentes são operações inteiras.fonte
Queijo Cheddar , 27 bytes
$0
é variável com entrada. O Cheddar simplesmente não é um idioma de golfe ¯ \ _ (ツ) _ / ¯, também não é competitivo porque a funcionalidade de entrada do Cheddar foi criada após esse desafio.Ungolfed:
fonte
Java,
86828485 caracteresA letra
d
colocada logo após um número inteiro torna o número inteiro adouble
.Ungolfed:
Sem a classe (
class c{}
tem 8 caracteres), ela é reduzida para 76 caracteres:Versão mais precisa em 110 caracteres (118 com o enum) - usa
float
s porque ninguém tem espaço para a transmissãoMath#round(double)
:fonte
I + (I / 3)
está usando uma divisão inteira, o que significa que as frações são descartadas e, portanto, o resultado não é arredondado corretamente.Java,
5680 bytesComo alguns usuários apontaram, essa solução (como outras em java) não arredonda os dados corretamente. Então agora estou apresentando uma solução um pouco mais longa que deve retornar o resultado correto
versão lamda de 60 ou 60 bytes
Versão Golfede ungolfed
ou 36 bytes definidos como lambda
fonte
Java, 64 bytes
Notas
Ungolfed
Saída com i = 9
fonte
Zero, 33 bytes
Solicita entrada, conjuntos
a
para entrada arredondados, conjuntosb
ec
suas respectivas alterações e, em seguida, diz todos os quatro números, separados por vírgulas.fonte
Java 8 lambda,
109817975 caracteresPorque ... você sabe ... até Java pode jogar golfe ...
Lambda ungolfed na classe:
Suponho que tenho permissão para usar longs, pois eles também são do tipo inteiro. Infelizmente, é necessário arredondar números inteiros corretamente e, portanto, uma conversão "curta" não funciona. Usando longs, não precisamos converter os resultados de arredondamento de volta para ints.Atualizar
Usando o pequeno truque + 0.5 e lançando depois, mantemos o arredondamento correto e economizamos 2 caracteres!
Além disso, esse truque não requer mais o uso de long, portanto, podemos voltar para o corte de ints de mais 4 caracteres.
fonte
a->{
o final}
para -5 bytes.Mathematica - 21 bytes
Acabei de adquirir o Mathematica dos meus irmãos RPi, então tente por diversão, e que melhor maneira do que um desafio PPCG.
Define uma função anônima. Experimente como:
fonte
Python 3, 45 bytes
Veja este código em execução no ideone.com
fonte
Lua, 52 bytes
Este programa pega um número pelo argumento da linha de comando e retorna a matriz correspondente. Programas em lua são tecnicamente funções, pois o intérprete sempre os encapsulará em uma função. Este também é esse mecanismo usado quando você "chama" códigos em outros arquivos (basicamente usa
loadfile
/dofile
).fonte
Na verdade, 21 bytes
Este programa declara uma função que executa as operações necessárias no valor da pilha superior.
Experimente online! (o Extra
.
no final avalia a função e imprime o resultado)Explicação:
fonte
Mathcad, [tbd] bytes
A equivalência de bytes do codegolf do Mathcad ainda não foi determinada. Tomando uma contagem de teclado como um equivalente aproximado, a solução tem aproximadamente 40 bytes.
fonte
05AB1E , 15 bytes
Código:
Usa a codificação CP-1252 . Experimente online! .
fonte
Pyke, 11 bytes
Experimente aqui!
fonte
Javascript, 50 bytes
Eu converti minha solução java para JavaScript e a reduzi um pouco.
fonte
C ++ 0x -
95102185189109129 caracteresDegolfed
fonte
p+(p/3)*(2/3)
que é emp+(2*p/9)
vez de(p+(p/3))*(2/3)
Erlang, 80 bytes
Para executar, salve como f.erl , compile e chame a função Ele retornará uma lista de ints:
Observe que o Erlang converte automaticamente int s em caracteres ASCII se você estiver no intervalo de valores ASCII, porque o Erlang não possui um tipo de caractere . Chamar a função com 100 fornece a melhor legibilidade [100,133,88,89] .
Ungolfed:
fonte
Erlang, 46 bytes
Resposta inspirada em @ fxk8y (não consegui postar um comentário na resposta dele)
Além disso, você pode ver os resultados com:
fonte
Pitão, 20 bytes
Explicação:
Teste aqui
fonte
Jolf, 17 bytes
Define uma função
Ώ
. Ele recebe entrada implicitamente, portanto também funciona como um programa completo. Experimente aqui!fonte
Mathematica, 51 bytes
Função anônima em conformidade com a versão atual (no momento da postagem) da postagem, que implica arredondamentos a cada etapa.
FoldList
é uma operação típica em programação. Ele é chamadoFoldList[f, list]
e aplica a função de dois argumentosf
repetidamente ao resultado (ou o primeiro elemento da lista na primeira iteração), tomando o próximo elemento da lista como seu segundo argumento.Ungolfed:
#2 @ # &
é uma função anônima que aplica seu segundo argumento ao primeiro. Portanto, o argumento da listaFoldList
consiste nas funções sucessivas a serem aplicadas à entrada.Como a entrada é um número inteiro e as divisões são 3, nunca haverá um resultado como 4,5; portanto, não há necessidade de se preocupar com regras de arredondamento quando o último dígito é um
5
: sempre estará claramente mais próximo de um número inteiro ou outro.fonte
Dyalog APL , 33 bytes
fonte
Desmos, 37 bytes
Experimente on-line
Yay para idiomas não convencionais!
fonte
CJam, 21 bytes
Comentários são bem-vindos
Explicação
qi__
- Leia a entrada como um número inteiro e duplique-a duas vezes3D/+mo
- Divida uma instância da entrada por 3 e adicione-a à segunda instância para criar y_2d3/*i
- Duplique y e multiplique por 0,6Edit: Esqueci de fazer os três primeiros um duplo, então o programa foi quebrado. Fixo.
fonte
Axioma, 59 bytes
teste
fonte
PHP, 60 bytes
Experimente online!
fonte
PHP, 67 bytes
fonte