O desafio
No menor número de caracteres possível, encontre o valor de i ^ n, dado n, um número inteiro positivo maior que 0. Isso deve ser gerado como uma String.
Para aqueles que não sabem, i é definido de forma que i ^ 2 = -1. Tão:
- i ^ 1 = i
- i ^ 2 = -1
- i ^ 3 = -i
- i ^ 4 = 1
Isso então se repete ..
Regras
- Se o seu idioma suportar números complexos, não use nenhuma função ou aritmética que possa resolver isso.
- Imprecisões de ponto flutuante são boas para respostas que retornariam decimais de qualquer maneira, mas entradas inteiras devem fornecer resultados exatos
Pontos bônus
-5 se você puder calcular o valor em que n também é negativo
-15 se você puder calcular o valor para qualquer número real (esse bônus inclui -5 do bônus acima)
Boa sorte!
code-golf
math
arithmetic
complex-numbers
Kezz101
fonte
fonte
Respostas:
Pontuação Ruby -2
(13 bytes, -15 de bônus)
Os recursos incluem: sem erros de arredondamento! (se você passar a entrada como um Rational)
publicado pelo autor, Kezz101
Pontuações negativas fazem minha adrenalina avançar. Assim, as regras
são abusadassão utilizadas para atingir esse objetivo nobre.Cria uma função anônima e gera uma matriz com 2 entradas que representam um número complexo na forma polar (unidade angular: graus).
fonte
CJam, 12 caracteres - 5 = 7
Teste aqui.
Suporta entradas negativas.
O resultado é impresso automaticamente no final do programa.
Mathematica,
222019 caracteres - 15 = 4Esta é uma função anônima, que você pode usar como
(Ou atribua-o a
f
dizer e façaf[15]
.)Suporta reais e fornece resultados exatos para entrada inteira.
Observe que não
i
é o complexo i do Mathematica (que é ). É apenas uma variável indefinida.I
Além disso, apesar da ordem da expressão, o Mathematica reordenará a saída em
R+Ci
forma.fonte
4%
. Isso pode ser feito automaticamente.f@15
vez def[15]
.Python 2 - (24-5) = 19
A maior parte do crédito pertence a @ user2357112, apenas respondi um pouco mais a resposta dele nos comentários sobre essa resposta .
Explicação: Inicia no índice
n%4
na sequência'1i--'
. Em seguida, itera para trás em etapas de dois sobre cada letra da string. Assim, por exemplo,n=6
começaria no índice 2, o primeiro-
, depois ignorariai
e pegaria o1
, para retornar-1
.@xnor apontou uma solução do mesmo comprimento:
Pitão - (14-5) = 9
Eu só consigo obter 14, não importa como eu tente inverter / cortar / etc. : '(
Que é essencialmente o mesmo que a resposta python acima, mas em 2 etapas, porque o pyth não suporta as opções de indexação completas do python. Experimente online.
Vou conversar com isaacg sobre a indexação Pyth;)
fonte
lambda
precisa ser atribuído a uma variável? No mínimo, para chamá-lo, você precisará colocá-lo entre parênteses, adicionando dois bytes para que ele possa ser chamado(lambda...)(n)
.map
esorted
.TI-BASIC (NSpire) - 5 (20 caracteres-15)
Se você deseja receber um valor de retorno complexo, substitua
i
no final por
(complexo i).fonte
por um normali
. Se a variáveli
não estiver definida, você obterá o número complexo, apenas com emi
vez de
. Estou apenas calculando as partes reais e imaginárias separadamente.i
qualquer maneira. O complexo i nem mesmo é o personagem que a pergunta pede, e você economizará dois bytes, então você pelo menos amarraria comigo;).Marbelous , 43 bytes
Não é realmente um vencedor, mas Marbelous é divertido. :)
Este é um programa que lê a entrada como um único inteiro a partir do primeiro argumento da linha de comando. Observe que a entrada é obtida no módulo 256, mas isso não afeta a validade do resultado para entradas maiores que 255, porque 256 é divisível por 4.
Explicação
Marbelous é uma linguagem de programação 2D, que simula "bolinhas de gude" (valores de bytes) caindo em vários dispositivos. O quadro é composto de células largas de 2 caracteres (os dispositivos), que podem processar os mármores. Tudo o que cai do fundo de um quadro é impresso em STDOUT.
Vamos examinar os dispositivos em uso:
}0
é onde o primeiro argumento da linha de comando vai. Eu usei duas instâncias deste dispositivo, então recebo duas cópias do valor de entrada (ao mesmo tempo).^n
verifica on
th bit do mármore de entrada (onden=0
é o bit menos significativo) e produz1
ou0
depende do bit.=0
verifica a igualdade com0
. Se o mármore de entrada for igual, ele simplesmente cai direto, se não for, é empurrado para a direita.\/
é uma lata de lixo, apenas engole o mármore de entrada e nunca produz nada.2D
é o código ASCII de-
,31
é o código ASCII de1
e69
é o código ASCII dei
.&n
são sincronizadores. Os sincronizadores paralisam uma bola de gude até que todos os sincronizadores com a mesman
bola segurem uma bola de gude, altura em que todos deixarão cair a bola de gude armazenada.Portanto, na verdade, o que faço é manter os três caracteres relevantes em três sincronizadores e liberá-los, dependendo de como os bits menos significativos são definidos na entrada.
Para mais informações, consulte o rascunho das especificações .
fonte
JavaScript (ES6) 29-5 = 24
Suporta energia negativa.
ES5:
fonte
f=n=>[1,'i',-1,'-i'][n%4]
). Mas é menos sexy e não suporta poderes negativos. Depende do bônus, eu acho.&
operador bit a bit ? Nesse caso, você pode fazer&3
uma verdadeira operação no módulo-4. Edit: parece que ele faz, como&2
é usado em sua resposta ...Python 28 bytes - 5 = 23
Suporta entradas -ve.
Supondo que as funções lambda sejam aceitáveis (Obrigado FryAmTheEggman!):
caso contrário, 31 bytes - 5 = 26
fonte
foo=...
, ou você poderia fazermap(<your lambda>,range(10))
para obter uma lista de valores dei^n
from0-9
.lambda n:'--1i'[n%4-2::2]
,.'--1i'
começando no índicen%4-2
. Quando o python obtém um índice negativo, ele inicia muitas posições restantes do final da matriz e depois sobe0
. Desta forma,0
e1
não nunca atingiu os-
sinais, enquanto3
e4
fazer.lambda n:n%4/2*'-'+'1i'[n%2]
Remove o espaço e é mais curto :)(Emacs) Lisp - 34
Apenas por diversão, no (Emacs) Lisp:
Se você deseja usá-lo, use a
defun
ou usefuncall
:fonte
APL (Dyalog) , 8 caracteres - 15 de bônus = pontuação -7
A função interna (e, portanto, proibida) é
0J1*⊢
, mas ela usa o método de @ blutorange .O autor do desafio, Kezz101, escreveu :
Isso retorna um número complexo no formulário,
aJb
que é a maneira normal de o APL exibir números complexos.Experimente online!
Explicação
¯12○
encontre o vetor unitário que tem o ângulo em radianos de.5×
vezes e meia○
o argumento multiplicado por 𝜋 (a constante do círculo)fonte
Festa pura, 29 bytes - 5 = 24
Suporta entradas -ve.
fonte
Befunge-98,
41-5 = 3635-5 = 3032-5 = 27Suporta números inteiros negativos. Não vou ganhar nenhum prêmio com esta solução, mas tanto faz.
Ele apenas aceita um número como entrada, faz alguns truques no módulo (que, frustrantemente, não funciona como o módulo habitual para números negativos no intérprete que eu o testei) para fazer os negativos funcionarem e, em seguida, faz algumas condições tolas para decida o que cada personagem deve ser.
Tenho certeza que isso pode ser jogado muito mais longe. Por enquanto, aqui está outra solução que não aceita negativos, mas compensa a perda do bônus sendo mais curta:
Befunge-98,
322623Editar - Agora aproveita o fato de que "-" está a 13 (0xd) caracteres de "".
Editar 2 - Agora, novamente, aproveita o fato de que "i" está a 56 (0x38 ou
'8
) caracteres de "1".fonte
Java 8 Pontuação: 72
Em Java, a pior linguagem de golfe de todos os tempos! Golfe:
Expandido:
Nota: Não estou acostumado ao Java 8. Também não tenho o tempo de execução para isso. Por favor, diga-me se houver algum erro de sintaxe. Este também é o meu primeiro golfe.
Editar: Removido
import
.Editar: declaração de classe removida.
Outra resposta com pontuação = 87 - 15 = 72
Expandido:
fonte
java.util.function
não está no pacotejava.util
(ou estou errado?).java.util.*
a.*
tudo, a importação, no âmbito do pacote. Assim como você está importando todas as classes nofuction
pacote.import
importa apenas as classes nesse pacote. Ele não importa nenhuma das classes dos pacotes nesse pacote. Por exemplo, a classeFunction
está no pacote,java.util.function
mas não no pacotejava.util
.MATLAB, 33 bytes - 5 = 28
Mesmo com alguns bytes a mais (37-5 = 32), eu realmente gosto mais dessa abordagem:
fonte
i^3
é-i
, em vez dei
, acho que apenas adiciona 1 caractere. - Sidenote para outros leitores: sem a primeira regra do desafio, a solução Matlab teria apenas 3 caracteres.C 77
Melhorado graças a Ruslan
C 74-5 = 69
Ah, e claro, a abordagem mais óbvia
fonte
n%2
e usá- los , em~
vez de!
negarn
primeiro; em seguida,%
inar com 2 dará o mesmo resultado, pelo menos paran<(1<<32)-1
. E C não exige definir explicitamente o tipo de retorno para a função, para que você possa removerint
no início. E também use em0
vez de'\0'
. Assim -9 caracteres.OCaml 47
Não é uma solução premiada, mas esta é minha primeira vez em código de golfe, por isso não tenho exatamente certeza do que estou fazendo. Tentei usar a correspondência de padrões, mas isso me deu mais de 58 anos.
fonte
Pari / GP , 19 bytes - 5 = 14
O
i
aqui é apenas um símbolo, não a unidade imaginária (que estáI
em Pari / GP).Experimente online!
fonte
Ruby 32-5 = 27
Funciona para poderes negativos!
fonte
puts %w[1 i -1 i][gets.to_i % 4]
.Perl, 26-5 = 21
funciona como um programa independente (argumento na linha de comando) ou no corpo de uma função.
fonte
Java:
151131-5 = 126Golfe:
Ungolfed:
Como função: 72-5 = 67
Golfe:
Ungolfed:
Sim, mais uma resposta do Java - e jogou ainda pior do que nunca. Mas você trabalha com o que pode ...
EDIT : versão da função adicionada.
EDIT 2 : então, depois de algumas tentativas e erros, aqui está uma versão que tenta fazer isso pelo livro, sem explorar a brecha do ciclo. Tão…
Java com cálculo de valor: 146-15 = 131
Golfe:
Ungolfed:
(pelo menos, acho que posso reivindicar o bônus máximo, me corrija o contrário)
fonte
int n = Integer.parseInt(a[0])
Python - 31
Apenas recentemente comecei a aprender python. Mesmo sabendo que não é bom, é o melhor que posso fazer.
fonte
Haskell GHCi, 29 bytes - 15 = 14
Uso:
fonte
R , 29-5 = 24 bytes
Experimente online!
O mesmo que a maioria dos métodos acima, pega um módulo de 4 e aumenta em 1, porque as matrizes de R são indexadas em 1. Também funciona para números inteiros negativos.
Eu estava preocupado com saídas mistas aqui, mas Giuseppe apontou que R restringe tipos numéricos a tipos de string quando eles são misturados.
fonte
numeric
tiposcharacter
quando eles são misturados! O livro de Hadley explica isso muito bem - apenas Ctrl + F para "Coercion" e você verá, mas o livro inteiro vale a pena ser lido (principalmente para fins não relacionados ao golfe, mas às vezes você aprende um truque ou dois, heheh )PowerShell , 28 bytes -5 = 23
Experimente online!
Porta de toda a indexação cíclica
fonte
Haskell, 29 bytes - 5 = 24
Funciona para poderes negativos.
Eu tinha uma versão sem pontos elaborada, mas na verdade é mais longa.
fonte
Clojure (
645431 caracteres)Editar
Por sugestão do @ SeanAllred, aqui está uma versão que usa um vetor literal em vez de uma
case
função:Editar 2
Contando com o REPL para imprimir a coleção resultante e codificando a função usando o
#()
atalho, podemos reduzi-la para(Na verdade, é muito mais Clojure / Lisp-ish, pois a função agora realmente retorna o resultado gerado, permitindo que a função seja usada com
map
, como emque imprime
Compartilhe e curta.
fonte
Groovy: 27-5 = 22
fonte
C 105, era 117
fonte
:
em?:
instruções simples C. Além disso, qual é o sentido de usar0==0
quando você pode usar um único caractere1
? E não há necessidade de parênteses antes?
. Além disso, a última?:
declaração pode ser abreviada parac[j]=i&1?'i':'1';
.0==0
quando é idêntico1
? Observe que==
tem maior precedência do que&
, caso contrário, seu (suposto) teste de(i&0)==0
sempre seria verdadeiro.PARI / GP , 26 - 5 = 21
n->cos(t=Pi*n/2)+I*sin(t)
é um caractere mais curto, mas não lida com respostas exatas. É claro quen->I^n
não é permitido e, presumivelmente, também é do PARIpowIs
.fonte
Gelatina , 2 - 20 = -18 bytes
Experimente online!
Ele não usa um
i ^ x
builtin, mas usa builtins para1j
e,**
portanto, não tem certeza se é permitido.fonte
1j
literal é banido também?*
) é.1j
literais.05AB1E , pontuação 5 (10 bytes - bônus 5)
Experimente online ou verifique mais alguns casos de teste .
Explicação:
fonte