El reto
En el menor número de caracteres posible, encuentre el valor de i ^ n, dado n, un número entero positivo mayor que 0. Esto debería salir como una Cadena.
Para aquellos que no saben, i se define de modo que i ^ 2 = -1. Asi que:
- i ^ 1 = i
- i ^ 2 = -1
- i ^ 3 = -i
- i ^ 4 = 1
Esto luego se repite ..
Reglas
- Si su idioma admite números complejos, no use ninguna función o aritmética que pueda resolver esto.
- Las inexactitudes de punto flotante están bien para respuestas que de todas formas devolverían decimales, pero las entradas enteras deberían dar resultados exactos
Puntos extra
-5 si puedes calcular el valor donde n también es negativo
-15 si puede calcular el valor de cualquier número real (este bono incluye el -5 del bono anterior)
¡Buena suerte!
code-golf
math
arithmetic
complex-numbers
Kezz101
fuente
fuente
Respuestas:
Ruby, puntaje -2
(13 bytes, -15 bonus)
Las características incluyen: sin errores de redondeo! (si pasa la entrada como un racional)
publicado por el autor, Kezz101
Los puntajes negativos hacen que mi adrenalina se dispare. Por lo tanto, las reglas de
abusose utilizan para lograr este noble objetivo.Crea una función anónima y genera una matriz con 2 entradas que representan un número complejo en forma polar (unidad angular: grados).
fuente
CJam, 12 caracteres - 5 = 7
Pruébalo aquí.
Admite entradas negativas.
El resultado se imprime automáticamente al final del programa.
Mathematica,
222019 caracteres - 15 = 4Esta es una función anónima, que puede usar como
(O asignarlo para
f
decir, y luego hacerf[15]
).Admite reales y da resultados exactos para la entrada de enteros.
Tenga en cuenta que no
i
es el complejo i de Mathematica (que sí lo es ). Es solo una variable indefinida.I
Además, a pesar del orden de la expresión, Mathematica reordenará la salida en
R+Ci
forma.fuente
4%
. Se puede hacer de forma automática.f@15
lugar def[15]
.Python 2 - (24-5) = 19
La mayor parte del crédito pertenece a @ user2357112, acabo de leer un poco más su respuesta de los comentarios sobre esta respuesta .
Explicación: comienza en el índice
n%4
de la cadena'1i--'
. Luego, itera hacia atrás en pasos de dos sobre cada letra de la cadena. Entonces, por ejemplo,n=6
comenzaría en el índice 2, el primero-
, luego omitiríai
y tomaría el1
, para regresar-1
.@xnor señaló una solución de la misma longitud:
Pyth - (14-5) = 9
Parece que solo puedo obtener 14, no importa cómo intente revertir / cortar / etc. : '(
Que es esencialmente lo mismo que la respuesta anterior de python, pero en 2 pasos, porque pyth no admite todas las opciones de indexación de python. Pruébalo en línea.
Voy a hablar con Isaac sobre la indexación Pyth;)
fuente
lambda
necesita ser asignada a una variable? Como mínimo, para llamarlo, necesitaría rodearlo con paréntesis, agregando dos bytes para que se pueda llamar(lambda...)(n)
.map
ysorted
.TI-BASIC (NSpire) - 5 (20 caracteres-15)
Si desea recibir un valor de retorno complejo, reemplace
i
al final con
(complejo i).fuente
con un normali
. Si la variablei
no está definida, obtendrá el número complejo, solo con eni
lugar de
. Solo estoy calculando las partes reales e imaginarias por separado.i
todos modos. El complejo i ni siquiera es el personaje que pide la pregunta, y te ahorrará dos bytes, por lo que al menos me vincularías;).Maravilloso , 43 bytes
No es realmente un ganador, pero Marbelous es divertido. :)
Este es un programa que lee la entrada como un entero entero del primer argumento de línea de comandos. Tenga en cuenta que la entrada se toma el módulo 256, pero esto no afecta la validez del resultado para entradas mayores que 255, porque 256 es divisible por 4.
Explicación
Marbelous es un lenguaje de programación 2D, que simula "canicas" (valores de bytes) que caen a través de un montón de dispositivos. El tablero está compuesto por celdas de 2 caracteres de ancho (los dispositivos), que pueden procesar las canicas. Todo lo que se cae del fondo de un tablero se imprime en STDOUT.
Veamos los dispositivos en uso:
}0
es donde va el primer argumento de la línea de comandos. He usado dos instancias de este dispositivo, por lo que obtengo dos copias del valor de entrada (al mismo tiempo).^n
comprueba eln
bit th de la canica de entrada (donden=0
es el bit menos significativo) y produce1
o0
depende del bit.=0
comprueba la igualdad con0
. Si la canica de entrada es igual, simplemente cae directamente, si no es así, se empuja hacia la derecha.\/
es un bote de basura, por lo que se traga la canica de entrada y nunca produce nada.2D
es el código ASCII de-
,31
es el código ASCII de1
y69
es el código ASCII dei
.&n
son sincronizadores. Los sincronizadores detienen una canica hasta que todos los sincronizadores con la misman
sostienen una canica, en cuyo punto todos dejarán caer su canica almacenada.En efecto, lo que hago es mantener los tres caracteres relevantes en tres sincronizadores y liberarlos dependiendo de cómo se establezcan los bits menos significativos en la entrada.
Para obtener más información, consulte el borrador de la especificación .
fuente
JavaScript (ES6) 29-5 = 24
Apoya el poder negativo.
ES5:
fuente
f=n=>[1,'i',-1,'-i'][n%4]
). Pero es menos sexy y no admitirá poderes negativos. Depende de la bonificación, supongo.&
operador bit a bit ? Si es así, puede hacerlo&3
para una verdadera operación de módulo 4. Editar: parece que hace lo que&2
se usa en su respuesta ...Python 28 bytes - 5 = 23
Admite entradas -ve.
Asumiendo que las funciones lambda son aceptables (¡Gracias FryAmTheEggman!):
de lo contrario 31 bytes - 5 = 26
fuente
foo=...
, o podría hacerlomap(<your lambda>,range(10))
para obtener una lista de valores dei^n
from0-9
.lambda n:'--1i'[n%4-2::2]
.'--1i'
índicen%4-2
. Cuando python obtiene un índice negativo, comenzará la cantidad de posiciones restantes desde el final de la matriz y luego irá a0
. De esta manera,0
y1
no golpear siempre las-
señales, mientras que3
y4
hacer.lambda n:n%4/2*'-'+'1i'[n%2]
Elimina el espacio y es más corto :)(Emacs) Lisp - 34
Solo por diversión, en (Emacs) Lisp:
Si desea usarlo, use a
defun
o usefuncall
:fuente
APL (Dyalog) , 8 caracteres - 15 bonus = puntaje -7
La función incorporada (y por lo tanto prohibida) es
0J1*⊢
, pero utiliza el método de @ blutorange .El autor del desafío, Kezz101, escribió :
Esto devuelve un número complejo en la forma
aJb
que es la forma normal en que APL muestra números complejos.Pruébalo en línea!
Explicación
¯12○
encontrar el vector unitario que tiene el ángulo en radianes de.5×
la mitad de las veces○
el argumento multiplicado por 𝜋 (la constante del círculo)fuente
Golpe puro, 29 bytes - 5 = 24
Admite entradas -ve.
fuente
Befunge-98,
41-5 = 3635-5 = 3032-5 = 27Soporta enteros negativos. No voy a ganar ningún premio con esta solución, pero lo que sea.
Simplemente acepta un número como entrada, hace algunos trucos en el módulo (que, frustrantemente, no funciona como el módulo habitual para números negativos en el intérprete que solía probar) para hacer que los negativos funcionen, y luego hace algunos condicionales tontos para decide cuál debe ser cada personaje.
Estoy seguro de que esto se puede jugar mucho más. Por ahora, aquí hay otra solución que no acepta negativos, pero compensa la pérdida del bono al ser más corto:
Befunge-98,
322623Editar : ahora aprovecha el hecho de que "-" está a 13 (0xd) caracteres de "".
Edición 2 : ahora, nuevamente, aprovecha el hecho de que "i" está a 56 (0x38 o
'8
) caracteres de distancia de "1".fuente
Puntuación Java 8: 72
¡En Java, el peor lenguaje de golf de todos los tiempos! Golfizado:
Expandido:
Nota: No estoy acostumbrado a Java 8. Tampoco tengo el tiempo de ejecución. Por favor, dime si hay algún error de sintaxis. Este es también mi primer golf.
Editar: eliminado
import
.Editar: Se eliminó la declaración de clase.
Otra respuesta con puntaje = 87 - 15 = 72
Expandido:
fuente
java.util.function
nojava.util
(¿o estoy equivocado?java.util.*
los.*
medios, importa todo lo que esté debajo del paquete. Al igual que actualmente está importando todas las clases en elfuction
paquete.import
solo importa las clases en ese paquete. No importa ninguna de las clases de los paquetes en ese paquete. Por ejemplo, la claseFunction
está en el paquetejava.util.function
pero no en el paquetejava.util
.MATLAB, 33 bytes - 5 = 28
Aunque son unos pocos bytes más (37-5 = 32), en realidad me gusta más este enfoque:
fuente
i^3
es-i
, en lugar dei
, supongo que solo agrega 1 carácter. - Nota para otros lectores: sin la primera regla del desafío, la solución de Matlab solo tendría 3 caracteres.C 77
Mejorado gracias a Ruslan
C 74-5 = 69
Ah, y por supuesto, el enfoque más obvio
fuente
n%2
y usarlos en~
lugar de hacerlo!
porque negarlosn
primero, luego%
, con 2 dará el mismo resultado, al menos paran<(1<<32)-1
. Y C no requiere definir explícitamente el tipo de retorno para la función, por lo que puede eliminarloint
al principio. Y también usar en0
lugar de'\0'
. Así -9 caracteres.OCAML 47
No es una solución galardonada, pero esta es mi primera vez jugando al golf en código, así que no estoy exactamente seguro de lo que estoy haciendo. Traté de usar la coincidencia de patrones, pero eso me dio más de 58.
fuente
Pari / GP , 19 bytes - 5 = 14
Como un anillodo es isomorfo a R [x] / ( x2+ 1 ) .
El
i
aquí es solo un símbolo, no la unidad imaginaria (que estáI
en Pari / GP).Pruébalo en línea!
fuente
Rubí 32-5 = 27
¡Funciona para poderes negativos!
fuente
puts %w[1 i -1 i][gets.to_i % 4]
.Perl, 26 - 5 = 21
funciona como un programa independiente (argumento en la línea de comandos) o el cuerpo de una función.
fuente
Java:
151131-5 = 126Golfizado:
Sin golf:
Como una función: 72-5 = 67
Golfizado:
Sin golf:
Sí, otra respuesta más de Java, y jugó incluso peor que nunca. Pero trabajas con lo que puedes ...
EDITAR : versión de función agregada.
EDIT 2 : entonces, después de un poco de prueba y error, aquí hay una versión que intenta hacerlo por el libro, sin explorar la escapatoria del ciclo. Asi que…
Java con cálculo de valor: 146-15 = 131
Golfizado:
Sin golf:
(al menos, creo que puedo reclamar el bono superior, corrígeme de lo contrario)
fuente
int n = Integer.parseInt(a[0])
Python - 31
Hace poco comencé a aprender Python. Aunque sé que no es bueno, es lo mejor que puedo hacer.
fuente
Haskell GHCi, 29 Bytes - 15 = 14
Uso:
fuente
R , 29 - 5 = 24 bytes
Pruébalo en línea!
Igual que la mayoría de los métodos anteriores, toma un módulo de 4 y lo aumenta en 1, porque las matrices de R están indexadas en 1. Funciona para enteros negativos también.
Estaba preocupado por las salidas mixtas aquí, pero Giuseppe señaló que R obliga a los tipos numéricos a los tipos de cadenas cuando se mezclan.
fuente
numeric
tiposcharacter
cuando están mezclados! El libro de Hadley explica esto bastante bien: solo Ctrl + F a "Coerción" y lo verá, pero vale la pena leer todo el libro (para fines no relacionados con el golf en su mayoría, pero a veces usted elige un truco o dos, jejeh )Potencia Shell , 28 bytes -5 = 23
Pruébalo en línea!
Puerto de toda la indexación cíclica.
fuente
Haskell, 29 bytes - 5 = 24
Funciona para poderes negativos.
Tuve una versión sin problemas, pero resultó que en realidad es más larga.
fuente
Clojure (
645431 caracteres)Editar
Según la sugerencia de @ SeanAllred, aquí hay una versión que usa un vector literal en lugar de una
case
función:Editar 2
Al contar con REPL para imprimir la colección resultante y codificar la función utilizando el
#()
acceso directo, podemos reducirlo a(Que en realidad es mucho más Clojure / Lisp-ish ya que la función ahora devuelve el resultado generado, permitiendo que la función se use con
map
, como enque imprime
Comparte y Disfruta.
fuente
Groovy: 27-5 = 22
fuente
C 105, tenía 117
fuente
:
de las?:
declaraciones en el plano C. Además, ¿cuál es el punto de usar0==0
cuando puedes usar un solo carácter1
? Y no hay necesidad entre paréntesis antes?
. Además, la última?:
declaración podría acortarse ac[j]=i&1?'i':'1';
.0==0
cuando es idéntico1
? Tenga en cuenta que==
tiene mayor prioridad que&
, de lo contrario, su (supuesta) prueba de(i&0)==0
siempre sería cierta.PARI / GP , 26 - 5 = 21
n->cos(t=Pi*n/2)+I*sin(t)
es un carácter más corto, pero no maneja respuestas exactas. Por supueston->I^n
, no está permitido, y presumiblemente también PARI'spowIs
.fuente
Gelatina , 2-20 = -18 bytes
Pruébalo en línea!
No utiliza una
i ^ x
orden interna pero utiliza órdenes internas para1j
y**
así que no sé si está permitido.fuente
1j
literal está prohibido?*
) es.1j
literales.05AB1E , puntaje 5 (10 bytes - 5 bonus)
Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
fuente