Encuentra i ^ n, dado n

27

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!

Kezz101
fuente
1
¿En qué formato devolvemos exactamente? ¿A través de la función de salida o stdout?
orgulloso Haskeller
@proudhaskeller La etiqueta wiki enumera los valores predeterminados para eso. A menos que se especifique lo contrario, las funciones y los programas están bien, se ingresan a través del argumento de la función, STDIN o argumento de línea de comandos y se envían a través de STDOUT o el valor de retorno de la función. Las funciones no tienen que ser nombradas.
Martin Ender
1
@ MartinBüttner, pero si elijo la salida de la función, ¿cómo debería formatearse / almacenarse la salida sin números complejos nativos en mi idioma?
orgulloso Haskeller
16
@BetaDecay ¿Qué son los enteros de coma flotante? oO
Martin Ender
2
@ MartinBüttner Haha palabra equivocada: / Número de punto flotante entonces
Decaimiento Beta

Respuestas:

15

Ruby, puntaje -2

(13 bytes, -15 bonus)

->n{[1,90*n]}

Las características incluyen: sin errores de redondeo! (si pasa la entrada como un racional)


publicado por el autor, Kezz101

Si admite cualquier número real, puede generarlo en cualquier forma compleja válida.

Los puntajes negativos hacen que mi adrenalina se dispare. Por lo tanto, las reglas de abuso se 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).

blutorange
fuente
44
"Ruby, -2 bytes" .....
FantaC
3
Entonces, ¿descargar esto 1,000,000,000,000 de veces me da 2TB de espacio libre en el disco duro? A mí me parece un buen trato.
Programas Redwolf
^ Mi navegador se descompuso antes de que pudiera hacerlo. Tal vez intente una "bomba zip" con el archivo dentro? (Extraerlo ahorra espacio.)
A̲̲
15

CJam, 12 caracteres - 5 = 7

1'iW"-i"]li=

Pruébalo aquí.

Admite entradas negativas.

1              "Push 1.";
 'i            "Push the character i.";
   W           "Push -1.";
    "-i"       "Push the string -i.";
        ]      "Wrap all four in an array.";
         li    "Read STDIN and convert to integer.";
           =   "Access array. The index is automatically taken module the array length.";

El resultado se imprime automáticamente al final del programa.

Mathematica, 22 20 19 caracteres - 15 = 4

Sin[t=π#/2]i+Cos@t&

Esta es una función anónima, que puede usar como

Sin[t=π#/2]i+Cos@t&[15]

(O asignarlo para fdecir, y luego hacer f[15]).

Admite reales y da resultados exactos para la entrada de enteros.

Tenga en cuenta que noi 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+Ciforma.

Martin Ender
fuente
No necesitas el 4%. Se puede hacer de forma automática.
jimmy23013
@ user23013 ingenioso :)
Martin Ender
8
¿No deberían las dos respuestas estar separadas?
Justin
@Quincunx Quizás ... originalmente ambos estaban en CJam, por eso los puse en la misma respuesta. Pero el segundo no era válido, así que lo porté a Mathematica, pero lo dejé donde estaba. Si la gente insiste, puedo dividirlos.
Martin Ender
Y puedes guardar un personaje al usarlo en f@15lugar de f[15].
orome
14

Python 2 - (24-5) = 19

lambda n:'1i--'[n%4::-2]

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%4de la cadena '1i--'. Luego, itera hacia atrás en pasos de dos sobre cada letra de la cadena. Entonces, por ejemplo, n=6comenzaría en el índice 2, el primero -, luego omitiría iy tomaría el 1, para regresar -1.

@xnor señaló una solución de la misma longitud:

lambda n:'--i1'[~n%4::2] 

Pyth - (14-5) = 9

Parece que solo puedo obtener 14, no importa cómo intente revertir / cortar / etc. : '(

%_2<"1i--"h%Q4

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;)

FryAmTheEggman
fuente
¿La pitón no lambdanecesita 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).
mbomb007
@ mbomb007 Según el meta esto es aceptable. El código aquí crea una función que realiza la tarea requerida. Las lambdas anónimas se usan con relativa frecuencia en Python para funciones como mapy sorted.
FryAmTheEggman
11

TI-BASIC (NSpire) - 5 (20 caracteres-15)

cos(nπ/2)+sin(nπ/2)i

Si desea recibir un valor de retorno complejo, reemplace ial final con (complejo i).

Shujal
fuente
@ MartinBüttner TI-Basic parece utilizar algún tipo de tipo 'Expresión', y los métodos integrados devuelven resultados exactos para estos.
Shujal el
Ya veo, todo bien entonces. ;)
Martin Ender
¿Qué pasa con la regla "Si su idioma admite números complejos, no use ninguna función o aritmética que pueda resolver esto". + i es aritmética
edc65
@ edc65 El + es en realidad una operación compleja. Sin embargo, si no le gusta eso, reemplace el con un normal i. Si la variable ino está definida, obtendrá el número complejo, solo con en ilugar de . Solo estoy calculando las partes reales e imaginarias por separado.
Shujal
1
@Shujal En ese caso, creo que deberías usar de itodos 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;).
Martin Ender
7

Maravilloso , 43 bytes

No es realmente un ganador, pero Marbelous es divertido. :)

}0
^0
=0&2
&1
}0
^1\/
=0&02D3169
\/\/&0&1&2

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:

  • }0es 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).
  • ^ncomprueba el nbit th de la canica de entrada (donde n=0es el bit menos significativo) y produce 1o 0depende del bit.
  • =0comprueba la igualdad con 0. 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.
  • 2Des el código ASCII de -, 31es el código ASCII de 1y 69es el código ASCII de i.
  • El &nson sincronizadores. Los sincronizadores detienen una canica hasta que todos los sincronizadores con la misma nsostienen 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 .

Martin Ender
fuente
1
¡Realmente me gusta esta! Marbelous suena fabuloso. Tendré que echarle un vistazo pronto :)
Kezz101
3
@ Kezz101 Tenemos un borrador de especificaciones aquí
Martin Ender
¡Oh bien! Se ve muy interesante
Kezz101
No olvide que puede dar entradas a la placa principal en la línea de comando, por lo que esta placa podría usarse tal cual.
Sparr
1
@overactor Hm, no sé ... la salida de caracteres adicionales (incluso si no se pueden imprimir) todavía parece violar el formato de salida para mí. Sin embargo, podría valer una meta pregunta.
Martin Ender
6

JavaScript (ES6) 29-5 = 24

Apoya el poder negativo.

f=n=>(n&2?'-':'')+(n&1?'i':1)

ES5:

function f(n){return (n&2?'-':'')+(n&1?'i':1)}
Michael M.
fuente
Sí, más corto ( f=n=>[1,'i',-1,'-i'][n%4]). Pero es menos sexy y no admitirá poderes negativos. Depende de la bonificación, supongo.
Michael M.
Nop, 29 bytes. Negativo son compatibles con este código.
Michael M.
¿JS tiene un &operador bit a bit ? Si es así, puede hacerlo &3para una verdadera operación de módulo 4. Editar: parece que hace lo que &2se usa en su respuesta ...
feersum
5

Python 28 bytes - 5 = 23

Admite entradas -ve.

Asumiendo que las funciones lambda son aceptables (¡Gracias FryAmTheEggman!):

lambda n:n%4/2*'-'+'1i'[n%2]

de lo contrario 31 bytes - 5 = 26

print[1,"i",-1,"-i"][input()%4]
Trauma digital
fuente
1
No puedes llamarlo exactamente. Tienes que almacenarlo en algún lugar al que puedas acceder. Entonces podría hacerlo foo=..., o podría hacerlo map(<your lambda>,range(10))para obtener una lista de valores de i^nfrom 0-9.
FryAmTheEggman
2
Básicamente, está haciendo un puntero de función, si eso está más claro: P
FryAmTheEggman
3
@DigitalTrauma: Sí, aunque es posible que pueda hacerlo mejor con trucos de corte de cuerdas. Por ejemplo, lambda n:'--1i'[n%4-2::2].
user2357112 es compatible con Monica el
2
Para traducir la publicación de user2357112: Elimina todos los demás caracteres desde el '--1i'índice n%4-2. Cuando python obtiene un índice negativo, comenzará la cantidad de posiciones restantes desde el final de la matriz y luego irá a 0. De esta manera, 0y 1no golpear siempre las -señales, mientras que 3y 4hacer.
FryAmTheEggman
1
lambda n:n%4/2*'-'+'1i'[n%2]Elimina el espacio y es más corto :)
FryAmTheEggman
4

(Emacs) Lisp - 34

Solo por diversión, en (Emacs) Lisp:

(lambda(n)(elt[1 i -1 -i](% n 4)))

Si desea usarlo, use a defuno use funcall:

(funcall
 (lambda (n) (elt [1 i -1 -i] (% n 4)))
 4) => 1

(mapcar
 (lambda(n)(elt[1 i -1 -i](% n 4)))
 [0 1 2 3 4 5 6 7 8])
 => (1 i -1 -i 1 i -1 -i 1)
Sean Allred
fuente
4

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 .

¯12○.5×○

El autor del desafío, Kezz101, escribió :

Si admite cualquier número real, puede generarlo en cualquier forma compleja válida.

Esto devuelve un número complejo en la forma aJbque 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)

Adán
fuente
3

Golpe puro, 29 bytes - 5 = 24

Admite entradas -ve.

a=(1 i -1 -i)
echo ${a[$1%4]}
Trauma digital
fuente
3

Befunge-98, 41-5 = 36 35-5 = 30 32-5 = 27

&4%:01-`!4*+:2%'8*'1+\2/d*' +,,@

Soporta 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, 32 26 23

&4%:2%'8*'1+\2/d*' +,,@

Editar : 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".

Kasran
fuente
3

Puntuación Java 8: 72

¡En Java, el peor lenguaje de golf de todos los tiempos! Golfizado:

java.util.function.Function s=n->{new String[]{"i","-1","-i","1"}[n%4]};

Expandido:

class Complex{

    java.util.function.Function s = n -> {new String[]{"i","-1","-i","1"}[n%4]};

}

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

java.util.function.Function s=n->{Math.cos(n*Math.PI/2)+"+"+Math.sin(n*Math.PI/2)+"i"};

Expandido:

class Complex{

    java.util.function.Function s = n -> {Math.cos(n * Math.PI/2) + " + " + Math.sin(n * Math.PI/2) + "i"};

}
El numero uno
fuente
Puede guardar algunos con "import java.util. *"
Anubian Noob
@Anubian Noob Class Function está en el paquete java.util.functionno java.util(¿o estoy equivocado?
TheNumberOne el
Pero si haces java.util.*los .*medios, importa todo lo que esté debajo del paquete. Al igual que actualmente está importando todas las clases en el fuctionpaquete.
Anubian Noob
55
@ Anubian Noob importsolo importa las clases en ese paquete. No importa ninguna de las clases de los paquetes en ese paquete. Por ejemplo, la clase Functionestá en el paquete java.util.functionpero no en el paquete java.util.
TheNumberOne
Oh mi mal, lo siento por eso.
Anubian Noob
3

MATLAB, 33 bytes - 5 = 28

x={'i','-1','-i','1'};x(mod(n,4))

Aunque son unos pocos bytes más (37-5 = 32), en realidad me gusta más este enfoque:

x='1i -';x((mod([n/2,n],2)>=1)+[3,1])
Stewie Griffin
fuente
i^3es -i, en lugar de i, 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.
Dennis Jaheruddin
Sí, eso fue un error tipográfico. ¡Fijo! Gracias por notar ... Al menos el segundo enfoque (un poco más interesante) es correcto =)
Stewie Griffin
3

C 77

main(){int n;scanf("%d",&n);char c[]={n%4>1?'-':' ',~n%2?'1':'i',0};puts(c);}

Mejorado gracias a Ruslan

C 74-5 = 69

Ah, y por supuesto, el enfoque más obvio

main(){unsigned n,*c[]={"1","i","-1","-i"};scanf("%d",&n);puts(c[n%4]);}
Rames
fuente
2
Puede eliminar los paréntesis n%2y usarlos en ~lugar de hacerlo !porque negarlos nprimero, luego %, con 2 dará el mismo resultado, al menos para n<(1<<32)-1. Y C no requiere definir explícitamente el tipo de retorno para la función, por lo que puede eliminarlo int al principio. Y también usar en 0lugar de '\0'. Así -9 caracteres.
Ruslan
3

OCAML 47

let m n=List.nth["1";"i";"-1";"-i"](n mod 4);;

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.

número de usuario
fuente
3

Pari / GP , 19 bytes - 5 = 14

Como un anillo do es isomorfo a R[X]/ /(X2+1).

n->Str(i^n%(i^2+1))

El iaquí es solo un símbolo, no la unidad imaginaria (que está Ien Pari / GP).

Pruébalo en línea!

alephalpha
fuente
2

Rubí 32-5 = 27

puts(%w[1 i -1 -i][gets.to_i%4])

¡Funciona para poderes negativos!

MegaTom
fuente
Trivialmente puedes jugar más con esto puts %w[1 i -1 i][gets.to_i % 4].
histocrat
2

Perl, 26 - 5 = 21

say qw(1 i -1 -i)[pop()%4]

funciona como un programa independiente (argumento en la línea de comandos) o el cuerpo de una función.

hobbs
fuente
2

Java: 151 131-5 = 126

Golfizado:

class A{public static void main(String[]a){int n=Integer.parseInt(a[0]);System.out.print(n%4==0?"1":n%4==1?"i":n%4==2?"-1":"-i");}}

Sin golf:

class A {
    public static void main(String[] a) {
        int n = Integer.parseInt(a[0]);
        System.out.print(n % 4 == 0 ? "1" : n % 4 == 1 ? "i" : n % 4 == 2 ? "-1" : "-i");
    }
}

Como una función: 72-5 = 67

Golfizado:

void f(int n){System.out.print(n%4==0?"1":n%4==1?"i":n%4==2?"-1":"-i");}

Sin golf:

public void f(int n) {
    System.out.print(n % 4 == 0 ? "1" : n % 4 == 1 ? "i" : n % 4 == 2 ? "-1" : "-i");
}

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:

class B{public static void main(String[]a){float n=Float.parseFloat(a[0]);System.out.print(Math.cos((n*Math.PI)/2)+Math.sin((n*Math.PI)/2)+"i");}}

Sin golf:

class B {
    public static void main(String[] a) {
        float n = Float.parseFloat(a[0]);
        System.out.print(Math.cos((n * Math.PI) / 2) + Math.sin((n * Math.PI) / 2) + "i");
    }
}

(al menos, creo que puedo reclamar el bono superior, corrígeme de lo contrario)

Rodolfo Dias
fuente
podría reducir su código si lo pasa a main como argumento.
user902383
@ user902383 Siempre pude hacer una función, de hecho. Probablemente publicará ambas versiones también.
Rodolfo Dias
De hecho, estaba pensando en analizarlo, así que tendrásint n = Integer.parseInt(a[0])
user902383
@ user902383 Daaaaamn, ni siquiera lo recordaba. aprobado
Rodolfo Dias
2

Python - 31

print[1,'i',-1,'-i'][input()%4]

Hace poco comencé a aprender Python. Aunque sé que no es bueno, es lo mejor que puedo hacer.

kukac67
fuente
2

Haskell GHCi, 29 Bytes - 15 = 14

i p=[cos(p*pi/2),sin(p*pi/2)]

Uso:

*Main> i 0
[1.0,0.0]
*Main> i pi
[0.22058404074969779,-0.9753679720836315]
*Main> i (-6.4)
[-0.8090169943749477,0.5877852522924728]
Rentsy
fuente
2

R , 29 - 5 = 24 bytes

c(1,"i",-1,"-i")[scan()%%4+1]

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.

Sumner18
fuente
@Giuseppe totalmente en blanco en eso. Mi preocupación con eso es que la salida es técnicamente mixta, mitad cadena, mitad numérica.
Sumner18
¡No, R coacciona automáticamente los numerictipos charactercuando 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 )
Giuseppe
1

Haskell, 29 bytes - 5 = 24

f n=words"1 i -1 -i"!!mod n 4

Funciona para poderes negativos.

Tuve una versión sin problemas, pero resultó que en realidad es más larga.

f=(words"1 i -1 -i"!!).(`mod`4)
colevk
fuente
1

Clojure ( 64 54 31 caracteres)

(defn i2n[n](println(case(mod n 4) 1 "i" 2 "-1" 3 "-i" 0 "1")))

Editar

Según la sugerencia de @ SeanAllred, aquí hay una versión que usa un vector literal en lugar de una casefunción:

(defn i2n[n](println (["1" "i" "-1" "-i"] (mod n 4))))

Editar 2

Al contar con REPL para imprimir la colección resultante y codificar la función utilizando el #()acceso directo, podemos reducirlo a

#(["1" "i" "-1" "-i"](mod % 4))

(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 en

(map #(["1" "i" "-1" "-i"](mod % 4)) [0 1 2 3 4 5 6 7 8])

que imprime

("1" "i" "-1" "-i" "1" "i" "-1" "-i" "1")

Comparte y Disfruta.

Bob Jarvis - Restablece a Monica
fuente
En lugar de usar una estructura de selección, ¿no puedes usar algún tipo de matriz explícita como en mi respuesta ?
Sean Allred
1

Groovy: 27-5 = 22

f={n->[1,'i',-1,'-i'][n%4]}
Armand
fuente
1

C 105, tenía 117

char c[2];
int main()
{
int n,i,j=0;scanf("%d",&n);i=n%4;
i>1?c[j++]='-':c[j+1]='\0';
c[j]=i&1?'i':'1';
puts(c);
}
bacchusbeale
fuente
Ni siquiera se compila porque debes poner entre paréntesis las asignaciones después :de las ?:declaraciones en el plano C. Además, ¿cuál es el punto de usar 0==0cuando puedes usar un solo carácter 1? Y no hay necesidad entre paréntesis antes ?. Además, la última ?:declaración podría acortarse a c[j]=i&1?'i':'1';.
Ruslan
@Ruslan En CodeBlocks Mingw solo hay 1 advertencia alrededor de i & 0. i & 0 == 0 es una prueba para pares, si es par el resultado es 0 más es 1.
bacchusbeale
Sí, pero ¿de qué sirve usar 0==0cuando es idéntico 1? Tenga en cuenta que ==tiene mayor prioridad que &, de lo contrario, su (supuesta) prueba de (i&0)==0siempre sería cierta.
Ruslan
1

PARI / GP , 26 - 5 = 21

n->Str([1,I,-1,-I][n%4+1])

n->cos(t=Pi*n/2)+I*sin(t)es un carácter más corto, pero no maneja respuestas exactas. Por supuesto n->I^n, no está permitido, y presumiblemente también PARI's powIs.

Charles
fuente
1

Gelatina , 2-20 = -18 bytes

ı*

Pruébalo en línea!

No utiliza una i ^ xorden interna pero utiliza órdenes internas para 1jy **así que no sé si está permitido.

Erik el Outgolfer
fuente
"Si su idioma admite números complejos, no use ninguna función o aritmética que pueda resolver esto". Creo que está bastante claro ...
totalmente humano
@totallyhuman Bueno, ¿no estoy seguro si el 1j literal está prohibido?
Erik the Outgolfer
Sí, pero la aritmética ( *) es.
totalmente humano
1
@totallyhuman Hm, tal vez agregaré otra versión a continuación, aunque "no use ninguna función o aritmética que pueda resolver esto" parece sugerir que no puedo usar una función integrada para hacer esta tarea exacta ... Por cierto, la forma en que lo expresa me hace pensar que te animan a usar 1jliterales.
Erik the Outgolfer
1

05AB1E , puntaje 5 (10 bytes - 5 bonus)

'i®„-i1)Iè

Pruébelo en línea o verifique algunos casos de prueba más .

Explicación:

'i         '# Push character "i"
  ®         # Push -1
   „-i      # Push string "-i"
      1     # Push 1
       )    # Wrap everything on the stack into a list: ["i", -1, "-i", 1]
        Iè  # Use the input to index into it (0-based and with automatic wrap-around)
            # (and output the result implicitly)
Kevin Cruijssen
fuente