# Pointers, pointers, pointers!

## Introduction

In the error outputs of some languages such as Java, a pointer is shown to give the programmer an idea of exactly where the error went wrong.

Take this example on Ideone:

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


Notice the caret shows where the invalid code is?

## Challenge

Your challenge is: given number N and string S, place a pointer on the Nth character in S.

## Examples

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

Output:

Lorem ipsum, dollar sit amet.
^


## Rules

• Input is received via STDIN or function parameters
• Output is printed out to the console or returned
• Trailing new lines, spaces etc are allowed in the output
• The pointer character must be a ^ caret and must be on a new line.
• This is code golf, so the shortest answer wins. Good luck!
• I feel like this is an extremely simple problem, so I am not certain it will be received overly well. You might want to try the sandbox once you have enough rep. – FryAmTheEggman Jun 10 '15 at 1:08
• I think this could have been made a bit more interesting if the input had multiple lines, so that you had to insert a newline, spaces, and carat at the correct position(s). Honestly, the spec doesn't really say it will be a single line, but I think enforcing that now will invalidate a few answers unfairly, since there's no example that shows this. – Geobits Jun 10 '15 at 2:04
• Like I said, the cat's probably out of the bag on this one. Rule changes after valid answers are posted usually don't work out well. Live and learn ;) – Geobits Jun 10 '15 at 3:06
• @SohamChowdhury I'll just pretend that was intentional ;) Do you want me to fix it? – Matt Y Jun 10 '15 at 9:36
• While this may be very simple, you've certainly done well for a first challenge! You have +16/-0 votes, 1,300 views, and 28 answers (as of this writing) and you've made the Hot Network Questions list. Nice job! – Alex A. Jun 10 '15 at 14:50

# PHP 4.1, 35 31 bytes

This one was really simple, but still fun!

<?="$S ",str_pad('^',$P,' ',0);


You can pass the values over POST, GET, SESSIONS, ...

The key S must contain the string, while the key P must contain the character number where you want the ^.

<?="$S ",str_repeat(' ',--$P),'^';


# Batch, 56 Bytes

@set/p=
@for /l %%a in (2,1,%1)do @cd|set/p=.<BS>
@echo ^^


This code contains two points of interest. First, it takes input from both StdIn and command line arguments. The string is read from StdIn while the index of the caret is taken as a parameter. Second, Batch doesn't play nice when it come to outputting a single space character (U+0020) so a bit of a work around is required: cd|set/p=.<BS> In this line <BS> stands in for the backspace character (U+0008) and the last character is a space. This is accounted for in the byte count.

# SAS, 22

macro a put &s/@&n'^'%


Usage:

%let s="Lorem ipsum dolor sit amet";
%let n=2;
data;a;run;


Output:

Lorem ipsum dolor sit amet
^


If running in 'batch' mode, the run is not required so the code in needed to produce the function and run it (just not setting the inputs) would be 30 bytes

macro a put &s/@&n'^'% data;a;


So, it may be cheating... this style macro(function) definition in SAS does not have parameters, so the inputs are defined separately, in Usage as two %let statements. Parsing from STDIN would substantially lengthen the solution and only works when running SAS in 'batch' mode, which is not necessarily commonplace.

# Javascript, 50 bytes

Code

function f(n,s){return s+'\n'+s.substr(0,n-1)+'^'}

Output

console.log(f(2, "hello"));
hello
h^


This approach takes advantage of the fact that you do not specify an empty string preceding the caret, only a caret pointing to the index in the input string and anything following that. If you happen to have a caret in your input string and an error there then it might get a little bit confusing :)

For example

console.log(f(3, "he^lo"));
he^lo
he^


or

console.log(f(3, "he^"));
he^
he^


# Pyth, 8 bytes

z+*dtQ\^


Takes inputs separated by a newline (i.e. 2\nLorem ipsum).
Try it online!

Explanation:

z           The second input, implicitly printed with trailing newline
*d__      The space character, __ times
tQ        where __ is the first input -1
+    \^    Append a literal carat character and printed


# Vim, 7 keystrokes (buffer input/output, excluding input keystrokes)

o<Esc> + input number + i <Esc>r^

## Explanation

• o<Esc> creates a new line
• #i <Esc> creates # spaces
• r^ replaces the last space by ^

Note: This answers does not write the output to stdout (:w !tee, + 6 keystrokes) - so maybe it will be considered invalid.

# C++14, 45 bytes

As unnamed lambda modifying its input, assuming s is similar to std::string (has operator+=):

[](int n,auto&s){for(s+=10;--n;s+=32);s+=94;}


Usage:

#include<string>
#include<iostream>

auto f =
[](int n,auto&s){for(s+=10;--n;s+=32);s+=94;}
;

int main() {
std::string s = "abcdefghijk";
f(2,s);
std::cout << s << std::endl;
}


# SmileBASIC, 26 bytes

INPUT N,S$?S$?" "*(N-1);"^


• Note that you only want N-1 spaces before the caret. – Nick Matteo Feb 2 '17 at 23:08

# tcl, 47

gets stdin s
'^'|% *ft $args[0]  Try it online! -2 bytes thanks to Mazzy! • – mazzy Nov 10 '20 at 10:17 # Japt-R, 5 bytes -1 byte if we can take the string input as a singleton array. ·p^ùV  Try it # 05AB1E, 6 bytes ,'^ú¦,  Try it online! , # output with trailing newline... # implicit input , # output with trailing newline... '^ # "^"... ú # with... # implicit input... ¦ # minus 1... ú # spaces in front  # Haskell, 38 bytes n!s=s++'\n':g n g 1="^" g n=' ':g(n-1)  Try it online! # Gol><> (Golfish), 14 bytes ^IMR aTiEHot  Explanation ^ # push caret I # read input as number M # subtract 1 R # pop N, and Repeatedly push a space, N times a # push 10 (ASCII newline) T # set teleport pad i # input character EH # if EOF, output stack and halt o # otherwise, output the character just read t # teleport back to pad  • Why is this non-competing? – pppery Nov 22 '20 at 16:49 • I think it used features which were added to the language after this question was asked. – Nick Matteo Nov 22 '20 at 21:54 • In that case the annotation is no longer necessary and I've removed it. The reason I asked is that "non-competing" has been historically misused to mean "this answer doesn't actually meet the challenge requirements and should be deleted". – pppery Nov 23 '20 at 0:16 # Red, 35 bytes func[n s][prin[s lf pad/left"^^"n]]  Try it online! # Stax, 5 bytes P'^)p  Run and debug it # APL (Dyalog Classic), 14 bytes {↑⍺((-⍵)↑'^')}  Try it online! A port of @FrownyFrog J answer # Zsh-F, 20 bytes printf %s\\n%*c$@ ^


Try it online!

Method stolen from the C answer.

# Jelly, 7 bytes

ṄṛṬị⁾^


Try it online!

Same length, but different to, Erik's existing answer

## How it works

ṄṛṬị⁾^  - Main link. Takes S on the left and N on the right
Ṅ       - Print S with a newline
ṛ      - Discard it and yield N
Ṭ     - Yield a list with a 1 at the Nth index and 0s otherwise
ị⁾^  - Index into "^ "