Punteros, punteros, punteros!

46

Introducción

En las salidas de error de algunos lenguajes, como Java, se muestra un puntero para darle al programador una idea exacta de dónde se produjo el error.

Tome este ejemplo en Ideone:

Main.java:12: error: ';' expected
    Invalid Java!
                ^

¿Observe que el cursor muestra dónde está el código no válido?

Desafío

Su reto es: número dado N y la cadena S , coloque un puntero en el N º personaje en S .

Ejemplos

Entrada :2, "Lorem ipsum, dollar sit amet."

Salida :

Lorem ipsum, dollar sit amet.
 ^

Reglas

  • La entrada se recibe a través de STDIN o parámetros de función
  • La salida se imprime en la consola o returned
  • Se permiten nuevas líneas, espacios, etc. en la salida
  • El carácter del puntero debe ser un ^ caret y debe estar en una nueva línea.
  • Este es el código de golf, por lo que gana la respuesta más corta. ¡Buena suerte!
monkeyonkeyboard
fuente
16
Siento que este es un problema extremadamente simple, por lo que no estoy seguro de que se reciba demasiado bien. Es posible que desee probar el sandbox una vez que tenga suficiente representante.
FryAmTheEggman
66
Creo que esto podría haberse hecho un poco más interesante si la entrada tuviera varias líneas, por lo que tuvo que insertar una nueva línea, espacios y quilates en la (s) posición (es) correcta (s). Honestamente, la especificación realmente no dice que será una sola línea, pero creo que imponer eso ahora invalidará algunas respuestas injustamente, ya que no hay ningún ejemplo que lo demuestre.
Geobits
3
Como dije, el gato probablemente está fuera de la bolsa en este caso. Los cambios de reglas después de publicar respuestas válidas generalmente no funcionan bien. Vive y aprende;)
Geobits
1
@SohamChowdhury Voy a fingir que fue intencional;) ​​¿Quieres que lo arregle?
monkeyonkeyboard
99
Si bien esto puede ser muy simple, ¡ciertamente lo has hecho bien para un primer desafío! Tiene + 16 / -0 votos, 1,300 visitas y 28 respuestas (al momento de escribir este artículo) y ha hecho la lista de Preguntas de la Red Caliente. ¡Buen trabajo!
Alex A.

Respuestas:

36

C 33

Si solo se permite una función, incluso c puede competir.

(Para el registro, 2 bytes guardaron thx en @Cool Guy. El comentario de Mt thx se evaporó inesperadamente).

1 char más guardado gracias a @Mig

f(a,c){printf("%s\n%*c",a,c,94);}
edc65
fuente
19
C siempre puede competir, simplemente no siempre puede ganar. ;)
Alex A.
3
@AlexA. <shrug> parece que me está ganando ;-)
Digital Trauma
3
Guardar 1 char:f(a,c){printf("%s\n%*c",a,c,94);}
Michael M.
Si fuera una persona cínica, diría que todavía es aproximadamente 4 veces más larga que la respuesta más corta en un idioma de golf. Que se trata de negocios como siempre. ;) Esto es inteligente, sin embargo. Creo que había visto la *opción en la cadena de formato antes, pero me había olvidado por completo. Podría ser útil para algunos de los desafíos del arte ascii en el futuro.
Reto Koradi
35

Brainf * ck - 133 bytes

+++++>>+>>+++>>+++++++++<<<<<<[[->++++++++++<]>>]<++++<<++<<<<--<,>[->+<<->]>>>,<<[->>-<<]<<[->>>>++++++++++<<<<]>>+[,.]>.>[->.<]>>>.

Espera entrada como, [0-9]{2}.*por ejemplo, "¡¡¡Hola mundo !!!" produciría

¡¡¡Hola Mundo!!!
 ^
sudo rm -rf slash
fuente
¡Bienvenido a Programming Puzzles y Code Golf! Esta es una excelente primera publicación, ¡buen trabajo! : D
Alex A.
El problema es que nadie sabe si este es un código válido, y mucho menos resuelve el problema :)
Simon
Sí, creo que hay un error uno por uno aquí. El cursor debe estar debajo de een el ejemplo. Al costo de 1 byte, esto se puede solucionar agregando un -frente a[->.<]
FryAmTheEggman
@FryAmTheEggman tienes razón: mira la edición. Originalmente lo tenía debajo de la e como está ahora, pero me confundí al usar dos IDEs con diferentes fuentes.
sudo rm -rf slash
25

Código de máquina IA-32, 24 bytes

Hexdump:

66 b8 5e 00 42 38 22 75 fb 66 c7 02 0d 0a 42 42
c6 02 20 e2 fa 89 02 c3

Es una función (usando la fastcallconvención de MS ) que actualiza la cadena en el lugar:

__declspec(naked) void __fastcall carrot(int n, char* s)

Código de montaje:

    mov ax, '^'; // ah = 0, al = '^'

mystrlen:
    inc edx;
    cmp [edx], ah;
    jne mystrlen;

    mov word ptr [edx], '\r\n'; // append a newline
    inc edx;

mymemset:
    inc edx;
    mov byte ptr [edx], ' ';
    loop mymemset;

    mov [edx], eax; // append a caret and terminate the string
    ret;

Utiliza datos de WORDtamaño (16 bits) en algunos lugares. Esto tiene una penalización (prefijo de 1 byte) en el código de 32 bits, pero de todos modos hace que el código sea más pequeño: ¡usar datos de 32 bits colocaría dos bytes cero en el código!

Al final, escribe 4 bytes ( eax) en lugar de 2 bytes ( ax): el código es más pequeño de esa manera y 2 bytes adicionales de basura van después de la terminación de la cadena, por lo que nadie los nota.

Uso:

int main()
{
    char s[100] = "Lorem ipsum, euro sit amet.";
    carrot(2, s); // credit to Digital Trauma for the name
    puts(s);
}
anatolyg
fuente
1
La instrucción se 66 b8 5e 00mueve 0x5ea al, no a ah, y a cero en ahlugar de al, por lo que su comentario en el código de ensamblaje es engañoso.
Ruslan
@Ruslan ¡Gracias! Fijo. Eso fue un remanente de una versión anterior.
anatolyg
¿Por qué está nakedahí? ¿Y por qué es lo primero que vi?
caird coinheringaahing
Es Microsoft quien decidió poner el nakedfrente: msdn.microsoft.com/en-us/library/h5w10wxs.aspx
anatolyg
20

Pyth , 8

zp\^*tQd

Esta solución ya no funciona, ya que la confirmación después de la que he vinculado cuando el nombre del idioma cambió pa arity 1. Hay varias otras formas de lograr una puntuación similar en Pyth que todavía funcionan hoy en día, como zp+*dQ\^.

Si la cadena necesita comillas, agregar val principio del código funciona. Si tiene que estar separado por comas, sube a 10 bytes:

eQp\^*dthQ
FryAmTheEggman
fuente
Creo que este es el más corto hasta ahora. Bien hecho.
monkeyonkeyboard
El algoritmo me parece incorrecto, creo ^que siempre estará bajo el primer carácter. Y, por cierto, los parámetros de entrada se dan en el orden incorrecto al intérprete en línea (por lo que no se ejecuta).
Jim
1
@ Jim Esta respuesta utilizó una versión anterior de pyth, donde ptenía arity 1. Esto causó que la primera línea de la salida se imprimiera primero y luego el cursor en la siguiente línea seguido de los espacios. Ahora puede hacerlo z+*dQ\^para una puntuación más corta pero con una nueva línea final, o agregar un pantes +para eliminarlo. No estoy seguro de qué hacer aquí, ya que las personas votaron por esta versión de la respuesta, creo que intentaré encontrar la versión en la que funcionó.
FryAmTheEggman
16

T-SQL, 90

Si bien es una pregunta bastante simple, siempre es interesante probarlos en idiomas que realmente no tienden a admitirlos bien o jugar bien al golf.

Esta respuesta está casi garantizada como la más larga.

Esto crea una función de tabla en línea para SQL Server que toma @n y @ como parámetros y devuelve los resultados como una columna. El retorno de carro es significativo, de lo contrario necesitaría usar char (13).

CREATE FUNCTION G(@N INT,@ VARCHAR(MAX))RETURNS TABLE RETURN SELECT @+'
'+SPACE(@n-1)+'^'R

Se usa de la siguiente manera

SELECT R 
FROM (VALUES
    (1,'This is test 1'),
    (2,'This is test 2'),
    (3,'This is test 3'),
    (4,'This is test 4'),
    (5,'This is test 5')
    )T(n,S)
    CROSS APPLY G(n,S)

Y vuelve

R
---------------
This is test 1
^
This is test 2
 ^
This is test 3
  ^
This is test 4
   ^
This is test 5
    ^
MickyT
fuente
Uso muy creativo de un lenguaje no realmente diseñado para jugar al golf;) +1
monkeyonkeyboard
14

Python, 27

lambda n,s:s+'\n%%%dc'%n%94

Esto utiliza dos niveles de formato de cadena.

Y aquí hay una solución de 25 bytes parcialmente robada de la respuesta de feersum (con el orden de los argumentos invertido):

lambda*p:'%s\n%%%dc'%p%94
grc
fuente
12

Bash, 27

printf %s\\n%$[$1-1]s^ "$2"

Salida

$ ./carrot.sh 2 "Lorem ipsum, dollar sit amet."
Lorem ipsum, dollar sit amet.
 ^$ 
Trauma digital
fuente
¿Zanahoria? Además, ¿cuál es el dólar al final?
Scimonster
77
El dólar parece ser el indicador de la concha.
M.Herzkamp
3
@Scimonster Carrot fue mi intento de hacer una broma: vea mi edición de la pregunta . Y sí, $al final es el indicador de comandos de shell. La pregunta especifica que las nuevas líneas finales están permitidas, pero no dice que sean necesarias.
Trauma digital
10

Python, 29

lambda n,s:s+'\n'+' '*~-n+'^'

Concatena la cadena, una nueva línea, n-1espacios y a ^.

xnor
fuente
2
Si tan solo rjustno fuera tanto tiempo ...
Sp3000
10
Ah, el operador renacuajo.
user253751
10

sed, 16

2y/1/ /;2s/ $/^/

Esto es algo así como un caso de prueba de esta meta respuesta . Específicamente, estoy requiriendo que el número N se ingrese en unario. Por ejemplo, para el cursor en la posición 2, la entrada para N sería 11. Además, no se especifica estrictamente qué orden deben ser S y N , por lo que aquí S va primero, seguido de N unario en una nueva línea, todo a través de STDIN.

Salida:

$ { echo "Lorem ipsum, dollar sit amet."; echo 11; } | sed '2y/1/ /;2s/ $/^/'
Lorem ipsum, dollar sit amet.
 ^
$
Trauma digital
fuente
1
2y/1/ /;2s/ $/^/
manatwork
@manatwork ¡Buena llamada!
Trauma digital
9

JavaScript (ES6): 63 62 56 52 32 bytes

Gracias a nderscore por reducir en gran medida el tamaño del código.

p=(a,b)=>b+`\n${' '.repeat(a)}^`

Versión que funciona en más navegadores (47 bytes):

p=function(a,b){return b+`\n${' '.repeat(a)}^`}
adroitwhiz
fuente
1. La pregunta utiliza indexación basada en 1, por lo que necesita Array(a-1). 2. Las funciones anónimas están permitidas de manera predeterminada, por lo que no es necesario point=. 3. Para la versión ES6, puede deshacerse de la returndeclaración y las llaves. Solo úsalo (a,b)=>b+"\n"+Array(a-1).join(" ")+" ^".
Dennis
1
33 bytes: (reemplazar \ncon una nueva línea real)p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
nderscore
@dennis La indexación funciona perfectamente para mí: i.stack.imgur.com/Tdejc.png
adroitwhiz
@Dennis Array(1).join(' ')da como resultado una cadena vacía :)
nderscore
@nderscore No puedo encontrar una manera de usar una nueva línea real sin que cause un salto de línea en el fragmento de código, y la indexación sigue el ejemplo dado: i.stack.imgur.com/Tdejc.png
adroitwhiz
7

CJam, 9 bytes

q~N@(S*'^

Pruébalo en línea.

Cómo funciona

q~  e# Read the input from STDIN and interpret it.
    e# This pushes the integer and the string on the stack.
N@  e# Push a linefeed an rotate the integer on top of it.
(S* e# Subtract 1 and push a string consisting of that many spaces.
'^  e# Push a caret.
Dennis
fuente
6

Python, 29

Aquí hay una forma más divertida de hacerlo en 29:

lambda*p:'%s\n%*s'%(p+('^',))

Ejemplo de uso:

>>> f=lambda*p:'%s\n%*s'%(p+('^',))
>>> print f('lorem',5)
lorem
    ^
Feersum
fuente
5

TI-BASIC, 10 (?) Bytes

Disp Ans
Output(3,N,"^

La entrada se da en la variable N, como se hace en la pregunta, pero no se puede usar la letra var S como una cadena. En lugar de eso, se toma la entrada de la cadena de Ans, por lo que para ejecutar el ejemplo en el PO: 2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>.

Sin embargo, soy consciente de que eso probablemente no cuenta, ya que cada segmento delimitado por dos puntos es técnicamente una declaración separada; aquí hay un programa de 46 bytes que toma la entrada como N "S"( 2 "Lorem ipsum, dollar sit amet.")

Input Str1
2+inString(Str1," 
//^there's a space after the quote
Disp sub(Str1,Ans,length(Str1)-Ans
Output(4,expr(sub(Str1,1,1)),"^

Ambos suponen que la pantalla se ha borrado antes de ejecutarse.

MI Wright
fuente
Sería mejor tomar la entrada de Entrada para el número y Ans para la cadena.
lirtosiast
El primero tampoco funciona si el nombre del programa, la asignación y la cadena combinados son más largos que 16 caracteres.
lirtosiast
@ThomasKwa 26, en realidad, ya que tengo una calculadora de color: P Técnicamente funciona, si cuenta sobrescribir parte de la entrada como 'trabajando'.
MI Wright
El primero funciona si agrega un ClrHome: Entrada N, porque el voto actual sobre meta para mezclar métodos de E / S está en +7.
lirtosiast
5

dc, 19

?pr256r^255/32*62+P

La entrada es de STDIN. dclas cadenas son definiciones de macro y están contenidas en [ ]. La cadena de espacios se genera calculando el número que cuando se expresa como un flujo base de 256 bytes proporciona la cadena que necesitamos. El calculo es ((n ^ 256) / 255) * 32). Esto proporciona nespacios (carácter ASCII 32), pero necesitamos n-1seguirlos ^, por lo que simplemente agregamos 62 a la última base de 256 dígitos.

Salida

$ dc -e '?pr256r^255/32*62+P' <<< "2 [Lorem ipsum, dollar sit amet.]"
Lorem ipsum, dollar sit amet.
 ^$
Trauma digital
fuente
4

C, 59 57 47 bytes

f(a,c){for(puts(a);--c;putchar(32));puts("^");}

Muy claro. Versión sin golf:

f(char* a,int c){
    puts(a);        //Print the string first

    for(;--c;)      //Until number-1 is not 0
        putchar(32);//Print a space
    puts("^");      //Print a caret
}

Probarlo aquí
Gracias a @anatolyg para el ahorro de 10 bytes!

Spikatrix
fuente
Es más hermoso moverse puts(a)y putchar(32)entrar entre paréntesis del forbucle: ¡hay exactamente 2 lugares vacíos allí! Además, no creo que necesite declarar el tipo de ay c, solo use lo implícito intpara ellos, funcionará si no lo hace #include <stdio.h>.
anatolyg
@anatolyg, gracias! No pensé que omitir los tipos funcionaría, pero para mi sorpresa, lo hizo.
Spikatrix
4

C # 55

Una función, concepto similar a mi respuesta C, pero esta vez el retorno es más corto que el resultado.

string f(string a,int b){return a+'\n'+"^".PadLeft(b);}
edc65
fuente
4

SAS, 35 bytes

%macro a(n,s);put &s/@&n."^";%mend;

Ese es el equivalente SAS de una función desnuda; agregar el paso de datos para llamarlo (equivalente a la función principal de C para llamarlo) sería un poco más (9 bytes más - Ty Alex), pero creo que eso no es necesario para este propósito. Cómo se llamaría:

data;
%a(3,"My String");
run;

Hay una implementación de solo macro, pero es mucho más larga, incluso si le permite dar una advertencia sobre parámetros no válidos en n = 1.

Si pudiéramos usar parámetros predefinidos, SAS sería bastante corto comparativamente en este caso, lo cual es una rareza para un lenguaje que definitivamente no pretende ser corto.


Si se permite que un conjunto de datos sea la fuente de entrada, que es la forma en que 'lo haría' en SAS (o por% sentencias let), pero probablemente no está permitido, esto es aún más corto ( 27 bytes , que en realidad podría ser 25 si garantizó que el conjunto de datos se construyó inmediatamente antes de ejecutar esto [como podría usar set;]]:

(conjunto de datos preexistente)

data b;
  n=3;
  s="My String";
run;

(código real)

data;set b;put s/@n"^";run;
Joe
fuente
Es bueno ver al experto SAS residente de SO aquí en PPCG. :)
Alex A.
Estoy bastante seguro de que algunos de los veteranos que conocen las secuencias de comandos DM podrían mejorar este puntaje ... Y mis habilidades de cmdmac apestan.
Joe
Siempre olvido que DM existe, ¡y ni siquiera sé qué es cmdmac! Por cierto, cuando estás contando bytes para todo el paso de datos, no necesitas data a;, solo puedes hacer data;lo que ahorrará 2 bytes. Pero como dijiste, no es necesario para este propósito de todos modos.
Alex A.
Sí, mis reflejos SAS incrustados no me dejan usar eso intuitivamente, supongo :). Gracias.
Joe
Hablando de los viejos tiempos, creo que podría guardar un par de bytes desafiando toda intuición SAS y usando una macro de estilo antiguo. Sin embargo, no recuerdo si pueden aceptar parámetros.
Alex A.
3

Matlab / Octave, 41

@(n,s)sprintf('%s\n%s^',s,ones(1,n-1)+31)

Esta es una función anónima que devuelve la cadena. Esto produce una advertencia, que se puede suprimir llamando previamente warning off.

FryAmTheEggman
fuente
¿Te refieres a la advertencia del editor o realmente imprime una advertencia para ti? Además, te gané por 16 caracteres ;-) Pero el mío imprime el ans =bit, así que después de arreglar eso, solo hay 10 caracteres de diferencia.
Oebele
@Oebele imprime una advertencia, pero la cadena devuelta no se ve afectada.
FryAmTheEggman
3

K, 21 bytes

{y,"\n",1_|"^",x#" "}

Ejemplo:

ryan@DevPC-LX:~/golf/caret$ rlwrap k
K Console - Enter \ for help

  `0:{y,"\n",1_|"^",x#" "}[2;"Lorem ipsum, dollar sit amet."]
Lorem ipsum, dollar sit amet.
 ^  

Explicación ( xes el número, yes la cadena):

{                   }   enclosing function
               x#" "    repeat the space `x` times
           "^",         prepend the caret
          |             reverse the string to put the caret at the end
        1_              drop the extra space
   "\n",                prepend a newline
 y,                     prepend the text
kirbyfan64sos
fuente
3

R, 49 48 46

Como una función sin nombre que sale a STDOUT. Gracias a @Flounderer por la mejora.

usa strwrap ahora para identificar el cursor a n-1. cat usa un separador de \ n en lugar de una cadena vacía.

function(n,s)cat(s,strwrap('^',,n-1),sep='\n')

Prueba de funcionamiento

> f=function(n,s)cat(s,strwrap('^',,n-1),sep='\n')
> f(29,'The caret should point here v hopefully')
The caret should point here v hopefully
                            ^
>
MickyT
fuente
La función (n, x) cat (x, "\ n", rep ("", n-1), "^", sep = "") tiene 48 caracteres
Flounderer
@Flounderer Gracias por eso ... mi idea original era similar a esa, pero no lo hice tan bien
MickyT
Puede que con dos espacios iniciales, esto funciona: function(n,x)cat(" ",x,"\n",rep("",n),"^")y ahorra unos cuantos personajes
Flounderer
@Flounderer Sospecho que no. strwrap también tiene algunas posibilidades, pero probablemente terminaría por más tiempo.
MickyT
1
¡Eso es bueno! Nunca he visto la strwrapfunción antes. ¿Hay una manera simple de decir lo que hace? No puedo entenderlo de la documentación.
Flounderer
3

Python3, 38 36 bytes

def f(s,i):return s+'\n'+' '*~-i+'^'

# OR 

def f(s,i):print(s+'\n'+' '*~-i+'^')

Probarlo aquí
Gracias a @Dennis para el ahorro de 2 bytes!

Spikatrix
fuente
(i-1)->~-i
Dennis
Soy débil con operaciones de bit y matemáticas ... ¡Gracias de todos modos! :-D
Spikatrix
2

Julia, 27 bytes

(n,s)->s*"\n"*" "^(n-1)*"^"

Esto crea una función sin nombre que acepta un entero y una cadena como entrada y devuelve una cadena. Para llamarlo, dale un nombre, por ejemplo f=(n,s)->....

Todo lo que sucede aquí es que estamos agregando una nueva línea, n-1espacios y el cursor. La concatenación de cadenas se realiza utilizando *y la repetición de cadenas con ^.

Sin golf:

function f(n, s)
    s * "\n" * " "^(n-1) * "^"
end

Ejemplo:

julia> println(f(2, "Lorem ipsum, dollar sit amet."))
Lorem ipsum, dollar sit amet.
 ^
Alex A.
fuente
2

PHP (CLI) - 42

<?=sprintf("%s\n%$argv[1]s",$argv[2],'^');

Llámalo desde la línea de comando:

php pointer.php 2 "Lorem ipsum, dollar sit amet."
HamZa
fuente
Solo lo he notado ahora. Pero tu respuesta es exactamente como mi segunda opción. Estoy ofreciendo a usted: <?printf("$S\n%{$P}s",'^');. Reemplace el \ncon una nueva línea real . El total es de 5 bytes. Eso solo funciona en PBP4.1 y versiones inferiores.
Ismael Miguel
Wow, tantos errores en ese comentario ... Quise decir que tiene 26 bytes de largo y eso solo funciona en PHP4.1. ¡Y es tuyo!
Ismael Miguel
2

Matlab, 25

Este es extremadamente descarado. Aparentemente muestra impresiones de caracteres no imprimibles como espacios. El siguiente código define una función llamada ans, que cumple con las especificaciones.

@(N,S)[S 10 ones(N-1) 94]

llamando a esta función así:

ans(2, 'Lorem ipsum, dollar sit amet.')

da la salida:

ans =

Lorem ipsum, dollar sit amet.
 ^

Siempre me desagrada la ans =parte de las respuestas de Matlab. Si esto es un problema, necesito agregar 6 bytes ... pero siempre lo he visto así en las respuestas de Matlab. Tenga en cuenta que la ejecución de este código sobrescribe la variable ans, por lo que debe redefinir la función si desea usarla por segunda vez.

Oebele
fuente
¡Muy agradable! No sabía que poner una cadena en un vector funcionaba así. Comprendí que, dado que esta es una función, la cadena le devuelve el valor significativo y el entorno de respuesta de MATLAB simplemente la imprime. es decir, si lo haces x=ans(2, 'asdf');, no obtienes un ans = cosa.
FryAmTheEggman
2

Mi primer tiro al codegolf

Java, 133 65

String g(int i,String s){for(s+="\n";--i>0;)s+=" ";return s+"^";}

Estoy seguro de que se puede reducir aún más.

Código antiguo

public void go(int i,String s){System.out.println(s);IntStream.range(1,i).forEach(j->System.out.print(" "));System.out.println("^");}
pallavt
fuente
¿Se puede almacenar en System.outalguna parte?
Ismael Miguel
2
No hay necesidad de public. Y cambia IntStream.range(1,i).forEach(j->System.out.print(" "));afor(;--i>0;)System.out.print(" ");
Spikatrix
@CoolGuy aha! a veces simple es mejor
pallavt
¿Puedes mover el s+="\n"interior de la for()inicialización para usar el punto y coma allí?
lirtosiast
@ThomasKwa 1 byte menos
pallavt
2

Swift, 41

Es decepcionante que Swift no tiene operador *en Arrayo String.

{$1+reduce(0..<$0,"\n",{$0.0+" "})+"^"}
Xplorld
fuente
Para Swift 2.0:{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
Kametrixom
1

SpecBAS - 34

1 INPUT n,s$: PRINT s$'TAB n-1;"^"

Apostrophe en PRINTfuerza una nueva línea, luego solo tiene que mover el cursor para corregir la posición.

Brian
fuente
1

GolfScript 11

n@~(' '*'^'

Prueba aquí .

Cristian Lupascu
fuente
1

JavaScript: 52 bytes

Aquí está el mío, es bastante simple.

function f(n,s){return s+"\n"+Array(n).join(" ")+"^"}

Uso:

$ console.log(f(7, "Any string at all"))

Any string at all
      ^

Apunta al séptimo personaje.

Florrie
fuente
Bien guardado Scimonster O_O
Florrie
1
Puedes escribirlo como alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^"). Y ahorras 2 bytes. Además, puede convertirlo en un stasksnippet para mostrar el código en ejecución. Eso espera que la cuerda llegue primero, luego la posición
Ismael Miguel
1

Perl 5, 31

sub{"$_[0]
"." "x($_[1]-1)."^"}
hobbs
fuente
Puedes guardar 2-3 caracteres. Suelte la nueva línea final ya que no es necesaria, luego cambie la primera línea nueva a una nueva línea literal. (Perl está bien con cadenas de varias líneas)
Sr. Llama
@ Sr.Llama gracias, esos son buenos.
hobbs