Wskaźniki, wskaźniki, wskaźniki!

46

Wprowadzenie

W wynikach błędów niektórych języków, takich jak Java, wyświetlany jest wskaźnik , który daje programiście pojęcie, gdzie dokładnie popełnił błąd.

Weź ten przykład na Ideone:

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

Zauważ, że kursor pokazuje, gdzie jest nieprawidłowy kod?

Wyzwanie

Twoim wyzwaniem jest: dana liczba N i łańcuch S , umieść wskaźnik na N th znaków w S .

Przykłady

Wejście :2, "Lorem ipsum, dollar sit amet."

Wyjście :

Lorem ipsum, dollar sit amet.
 ^

Zasady

  • Wejście jest odbierane przez STDIN lub parametry funkcji
  • Dane wyjściowe są drukowane na konsoli lub returnedytowane
  • Końcowe nowe wiersze, spacje itp. Są dozwolone w danych wyjściowych
  • Znak wskaźnika musi być ^ daszkiem i musi znajdować się w nowej linii.
  • To jest golf golfowy, więc wygrywa najkrótsza odpowiedź. Powodzenia!
monkeyonkeyboard
źródło
16
Wydaje mi się, że jest to niezwykle prosty problem, więc nie jestem pewien, czy zostanie zbyt dobrze przyjęty. Możesz wypróbować piaskownicę, gdy będziesz mieć wystarczającą liczbę powtórzeń.
FryAmTheEggman
6
Myślę, że mogłoby to być nieco bardziej interesujące, gdyby dane wejściowe zawierały wiele wierszy, tak że trzeba wstawić nowy wiersz, spacje i karat we właściwej pozycji (pozycjach). Szczerze mówiąc, specyfikacja tak naprawdę nie mówi, że będzie to pojedynczy wiersz, ale myślę, że wymuszenie tego teraz unieważni kilka odpowiedzi niesprawiedliwie, ponieważ nie ma takiego przykładu.
Geobits
3
Tak jak powiedziałem, kot prawdopodobnie wyszedł z torby. Zmiany reguł po opublikowaniu prawidłowych odpowiedzi zwykle nie działają dobrze. Żyj i ucz się;)
Geobits
1
@SohamChowdhury Po prostu udam, że to było zamierzone;) Chcesz, żebym to naprawił?
monkeyonkeyboard,
9
Choć może to być bardzo proste, z pewnością dobrze poradziłeś sobie z pierwszym wyzwaniem! Masz + 16 / -0 głosów, 1300 wyświetleń i 28 odpowiedzi (na dzień dzisiejszy) i utworzyłeś listę pytań Hot Network. Dobra robota!
Alex A.

Odpowiedzi:

36

C 33

Jeśli dozwolona jest tylko funkcja, nawet c może konkurować.

(Dla przypomnienia, 2 bajty zapisane dzięki @Cool Guy. Komentarz Mt dzięki niespodziewanie wyparował.)

Jeszcze 1 znak oszczędzony dzięki @Mig

f(a,c){printf("%s\n%*c",a,c,94);}
edc65
źródło
19
C zawsze może konkurować, po prostu nie zawsze może wygrać. ;)
Alex A.,
3
@AlexA. <shrug> wygląda mi na wygraną ;-)
Digital Trauma
3
Zaoszczędź 1 znak:f(a,c){printf("%s\n%*c",a,c,94);}
Michael M.
Gdybym był osobą cyniczną, powiedziałbym, że jest to około 4 razy dłużej niż najkrótsza odpowiedź w języku golfowym. Co dotyczy biznesu jak zwykle. ;) To jednak sprytne. Myślę, że widziałem już tę *opcję w ciągu formatu, ale zupełnie o niej zapomniałem. Może się przydać w przypadku niektórych wyzwań związanych ze sztuką ascii w przyszłości.
Reto Koradi,
35

Brainf * ck - 133 bajty

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

Oczekuje danych wejściowych takich jak [0-9]{2}.*np. „02Hello world !!!” produkuje

Witaj świecie!!!
 ^
sudo rm -rf slash
źródło
Witamy w Programowaniu zagadek i Code Golf! To świetny pierwszy post, niezła robota! : D
Alex A.
Problem w tym, że nikt nie wie, czy to w ogóle poprawny kod, nie mówiąc już o rozwiązaniu problemu :)
Simon
Tak, myślę, że tutaj jest błąd off-by-one. Karetka powinna być pod etym przykładem. Kosztem 1 bajtu można to naprawić, dodając -przed[->.<]
FryAmTheEggman
@FryAmTheEggman masz rację - zobacz edycję. Pierwotnie miałem go pod literą e taką, jak jest teraz, ale pomyliłem się, używając dwóch IDE z różnymi czcionkami.
sudo rm -rf slash
25

Kod maszynowy IA-32, 24 bajty

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

Jest to funkcja (wykorzystująca fastcallkonwencję MS ), która aktualizuje ciąg w miejscu:

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

Kod zestawu:

    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;

W WORDkilku miejscach wykorzystuje dane o rozmiarze (16 bitów). Ma to karę (przedrostek 1-bajtowy) w kodzie 32-bitowym, ale i tak zmniejsza kod - użycie danych 32-bitowych spowodowałoby umieszczenie dwóch zerowych bajtów w kodzie!

Na koniec zapisuje 4 bajty ( eax) zamiast 2 bajtów ( ax) - kod jest w ten sposób mniejszy, a 2 dodatkowe bajty śmieci przechodzą po zakończeniu łańcucha, więc nikt ich nie zauważa.

Stosowanie:

int main()
{
    char s[100] = "Lorem ipsum, euro sit amet.";
    carrot(2, s); // credit to Digital Trauma for the name
    puts(s);
}
anatolig
źródło
1
Instrukcja 66 b8 5e 00przesuwa się 0x5edo al, a nie do ah, a zero do ahzamiast al, więc Twój komentarz w kodzie zestawu jest mylący.
Ruslan
@Ruslan Thanks! Naprawiony. To była pozostałość z poprzedniej wersji.
anatolyg
Dlaczego nakedtam jest I dlaczego to pierwsza rzecz, którą zobaczyłem?
caird coinheringaahing
Microsoft zdecydował się umieścić na nakedpierwszym miejscu: msdn.microsoft.com/en-us/library/h5w10wxs.aspx
anatolyg
20

Pyth , 8

zp\^*tQd

To rozwiązanie już nie działa, ponieważ zatwierdzenie po tym, z którym się połączyłem, gdy nazwa języka zmieniła się pna arity 1. Istnieje kilka innych sposobów na uzyskanie podobnego wyniku w Pyth, które nadal działają, na przykład zp+*dQ\^.

Jeśli ciąg wymaga cudzysłowu, dodawanie vna początku kodu działa. Jeśli musi być oddzielony przecinkami, idzie do 10 bajtów:

eQp\^*dthQ
FryAmTheEggman
źródło
Myślę, że jest to jak dotąd najkrótszy. Dobra robota.
monkeyonkeyboard,
Algorytm wydaje mi się zły, myślę, że ^zawsze będzie pod pierwszym znakiem. A tak na marginesie, parametry wejściowe są podawane tłumaczowi online w niewłaściwej kolejności (więc nie działa).
Jim
1
@Jim W tej odpowiedzi użyto starszej wersji pyta, w której pistniał arity 1. To spowodowało, że pierwszy wiersz wydruku został wydrukowany jako pierwszy, a następnie daszek w następnym wierszu, a po nim spacje. Teraz możesz zrobić z+*dQ\^dla krótszego wyniku, ale z końcowym znakiem nowej linii lub dodać pprzed, +aby go usunąć. Nie jestem pewien, co robić tutaj, ponieważ ludzie ocenili tę wersję odpowiedzi, myślę, że spróbuję znaleźć wersję, nad którą działała.
FryAmTheEggman
16

T-SQL, 90

Chociaż jest to dość proste pytanie, zawsze interesujące jest wypróbowanie ich w językach, które tak naprawdę nie wspierają ich dobrze lub golfa w tej kwestii.

Ta odpowiedź jest prawie na pewno najdłuższa.

Tworzy to wbudowaną funkcję tabel dla SQL Server, która przyjmuje @n i @ jako parametry i zwraca wyniki jako kolumnę. Zwrot karetki jest znaczący, w przeciwnym razie musiałbym użyć char (13).

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

Jest używany w następujący sposób

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)

I wraca

R
---------------
This is test 1
^
This is test 2
 ^
This is test 3
  ^
This is test 4
   ^
This is test 5
    ^
MickyT
źródło
Bardzo kreatywne użycie języka, który nie został specjalnie zaprojektowany do gry w golfa;) +1
monkeyonkeyboard
14

Python, 27

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

Wykorzystuje dwa poziomy formatowania ciągów.

A oto 25-bajtowe rozwiązanie częściowo skradzione z odpowiedzi feersum (z odwróconą kolejnością argumentów):

lambda*p:'%s\n%%%dc'%p%94
grc
źródło
12

Bash, 27

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

Wynik

$ ./carrot.sh 2 "Lorem ipsum, dollar sit amet."
Lorem ipsum, dollar sit amet.
 ^$ 
Cyfrowa trauma
źródło
Marchewka? Ponadto, jaki jest dolar na końcu?
Scimonster,
7
Dolar wydaje się być podpowiedź muszli.
M.Herzkamp
3
@ Scimonster Marchewka była moją próbą żartu - zobacz moją edycję pytania . I tak, $na końcu jest znak zachęty powłoki. Pytanie określa, że ​​końcowe znaki nowej linii są dozwolone, ale nie mówi, że są konieczne.
Cyfrowa trauma
10

Python, 29

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

Łączy ciąg, nowy wiersz, n-1spacje i a ^.

xnor
źródło
2
Gdyby rjustnie było tak długo ...
Sp3000,
10
Ach, operator kijanki.
user253751
10

sed, 16

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

To coś w rodzaju testu tej meta odpowiedzi . W szczególności wymagam, aby liczba N była wprowadzana jednostronnie. Np. Dla karetki w pozycji 2 wejściem dla N byłoby 11. Również nie jest ściśle określone, która kolejność S i N powinna być, więc tutaj S jest pierwsze, a następnie jednoargumentowe N w nowej linii, wszystkie przez STDIN.

Wynik:

$ { echo "Lorem ipsum, dollar sit amet."; echo 11; } | sed '2y/1/ /;2s/ $/^/'
Lorem ipsum, dollar sit amet.
 ^
$
Cyfrowa trauma
źródło
1
2y/1/ /;2s/ $/^/
manatwork
@manatwork Dobra rozmowa!
Cyfrowa trauma
9

JavaScript (ES6): 63 62 56 52 32 bajty

Dzięki nderscore za znaczne zmniejszenie rozmiaru kodu.

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

Wersja działająca w większej liczbie przeglądarek (47 bajtów):

p=function(a,b){return b+`\n${' '.repeat(a)}^`}
adroitwhiz
źródło
1. Pytanie wykorzystuje indeksowanie 1, więc potrzebujesz Array(a-1). 2. Funkcje anonimowe są domyślnie dozwolone, więc nie potrzebujesz point=. 3. W przypadku wersji ES6 możesz pozbyć się returninstrukcji i nawiasów klamrowych. Po prostu użyj (a,b)=>b+"\n"+Array(a-1).join(" ")+" ^".
Dennis
1
33 bajty: (zamień \nna nowy wiersz)p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
nderscore
@dennis Indeksowanie działa dla mnie idealnie: i.stack.imgur.com/Tdejc.png
adroitwhiz
@Dennis Array(1).join(' ')skutkuje pustym ciągiem :)
nderscore
@nderscore Nie mogę znaleźć sposobu na użycie nowej linii bez spowodowania przerwania wiersza we fragmencie kodu, a indeksowanie jest zgodne z podanym przykładem: i.stack.imgur.com/Tdejc.png
adroitwhiz
7

CJam, 9 bajtów

q~N@(S*'^

Wypróbuj online.

Jak to działa

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
źródło
6

Python, 29

Oto zabawniejszy sposób na zrobienie tego w 29:

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

Przykładowe użycie:

>>> f=lambda*p:'%s\n%*s'%(p+('^',))
>>> print f('lorem',5)
lorem
    ^
feersum
źródło
5

TI-BASIC, 10 (?) Bajtów

Disp Ans
Output(3,N,"^

Dane wejściowe podano w zmiennej N, jak pyta pytanie, ale nie można użyć litery var S jako łańcucha. W miejscu, że to trwa wejście ciąg z Ans, tak aby uruchomić przykład w PO: 2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>.

Wiem jednak, że to chyba się nie liczy, ponieważ każdy segment rozdzielany dwukropkami jest technicznie odrębnym stwierdzeniem; oto 46-bajtowy program, który pobiera dane wejściowe jako 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)),"^

Oba zakładają, że ekran został wyczyszczony przed uruchomieniem.

MI Wright
źródło
Lepiej skorzystaj z wprowadzania danych wejściowych dla liczby i Ans dla łańcucha.
lirtosiast
Pierwszy nie działa również, jeśli nazwa programu, przypisanie i ciąg znaków są dłuższe niż 16 znaków.
lirtosiast
@ThomasKwa 26, właściwie, ponieważ mam kalkulator kolorów: P Technicznie to działa, jeśli liczymy nadpisywanie części danych wejściowych jako „działające”.
MI Wright,
Pierwszy działa, jeśli dodasz ClrHome: Input N, ponieważ obecny głos na meta do miksowania metod We / Wy wynosi +7.
lirtosiast
5

dc, 19

?pr256r^255/32*62+P

Dane wejściowe pochodzą ze STDIN. dcciągi są definicjami makr i są zawarte w [ ]. Ciąg spacji jest generowany przez obliczenie liczby, która wyrażona jako podstawowy strumień 256 bajtów daje potrzebny ciąg. Obliczenia są następujące ((n ^ 256) / 255) * 32). Daje to nspacje (znak ASCII 32), ale n-1po nim ^musimy dodać, więc po prostu dodajemy 62 do ostatniej podstawowej 256 cyfry.

Wynik

$ dc -e '?pr256r^255/32*62+P' <<< "2 [Lorem ipsum, dollar sit amet.]"
Lorem ipsum, dollar sit amet.
 ^$
Cyfrowa trauma
źródło
4

C, 59 57 47 bajtów

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

Całkiem proste. Wersja bez golfa:

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
}

Przetestuj tutaj
Dzięki @anatolyg za zapisanie 10 bajtów!

Spikatrix
źródło
To piękniejsze, aby przenieść puts(a)i putchar(32)do nawiasów w forpętli - są tam dokładnie 2 pustych miejsc! Ponadto nie sądzę, że musisz zadeklarować typ ai c- po prostu użyj intdla nich ukrytego - zadziała, jeśli tego nie zrobisz #include <stdio.h>.
anatolyg
@anatolyg, dzięki! Nie sądziłem, że pominięcie typów zadziała, ale ku mojemu zaskoczeniu tak się stało.
Spikatrix,
4

C # 55

Funkcja, koncepcja podobna do mojej odpowiedzi w języku C, ale ten czas powrotu jest krótszy niż wynik.

string f(string a,int b){return a+'\n'+"^".PadLeft(b);}
edc65
źródło
4

SAS, 35 bajtów

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

To jest odpowiednik nagiej funkcji SAS; dodanie kroku danych w celu jego wywołania (odpowiednik głównej funkcji C do wywołania go) byłoby nieco więcej (9 bajtów więcej - Ty Alex), ale myślę, że nie jest to konieczne w tym celu. Jak by to się nazywało:

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

Istnieje implementacja zawierająca tylko makra, ale jest znacznie dłuższa, nawet jeśli pozwalasz ostrzec ją o niepoprawnych parametrach na n = 1.

Gdybyśmy mogli użyć predefiniowanych parametrów, SAS byłby stosunkowo krótki w stosunku do tego, co jest rzadkością dla języka, który zdecydowanie nie jest krótki.


Jeśli zestaw danych może być źródłem danych wejściowych, tak właśnie zrobiłbyś to w SAS (lub za pomocą instrukcji% let), ale prawdopodobnie nie jest dozwolony, jest to nawet krótszy ( 27 bajtów , co w rzeczywistości mogłoby wynosić 25 jeśli masz pewność, że zestaw danych został zbudowany bezpośrednio przed uruchomieniem tego [jak możesz wtedy po prostu użyć set;]):

(wcześniej istniejący zestaw danych)

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

(aktualny kod)

data;set b;put s/@n"^";run;
Joe
źródło
Miło widzieć tutaj eksperta SAS od SO na PPCG. :)
Alex A.
Jestem całkiem pewien, że niektórzy ze starych timerów, którzy znają skrypty DM, mogliby uzyskać najlepszy wynik ... I moje umiejętności cmdmac są do kitu.
Joe
Zawsze zapominam, że DM istnieje, a nawet nie wiem, co to jest cmdmac! Przy okazji, gdy liczysz bajty dla całego kroku danych, nie potrzebujesz data a;, możesz po prostu zrobić, data;co pozwoli zaoszczędzić 2 bajty. Ale jak powiedziałeś, i tak nie jest to konieczne.
Alex A.
Tak, moje odruchy SAS nie pozwalają mi intuicyjnie korzystać :) Dzięki.
Joe
Mówiąc o starych licznikach, myślę, że można zaoszczędzić kilka bajtów, przeciwstawiając się wszelkiej intuicji SAS i używając makra w starym stylu. Nie pamiętam jednak, czy mogą zaakceptować parametry.
Alex A.
3

Matlab / Octave, 41

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

Jest to anonimowa funkcja zwracająca ciąg. Powoduje to wyświetlenie ostrzeżenia, które można wyłączyć przez wcześniejsze wywołanie warning off.

FryAmTheEggman
źródło
Czy masz na myśli ostrzeżenie redaktora, czy rzeczywiście drukuje to ostrzeżenie? Poza tym pobiłem cię 16 znakami ;-) Ale mój drukuje ans =kawałek, więc po naprawieniu różnica wynosi tylko 10 znaków.
Oebele,
@Oebele wyświetla ostrzeżenie, ale nie ma to wpływu na zwracany ciąg.
FryAmTheEggman
3

K, 21 bajtów

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

Przykład:

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.
 ^  

Objaśnienie ( xjest liczbą, yjest łańcuchem):

{                   }   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
źródło
3

R, 49 48 46

Jako nienazwana funkcja, która wyświetla dane wyjściowe do STDOUT. Dzięki @Flounderer za ulepszenie.

używa teraz strwrap do identyfikacji karetki na n-1. cat używa separatora \ n zamiast pustego ciągu.

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

Testowe uruchomienie

> 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
źródło
funkcja (n, x) cat (x, "\ n", rep ("", n-1), "^", sep = "") ma 48 znaków
Flądrowiec
@ Założyciel Dziękuję za to ... mój oryginalny pomysł był podobny do tego, ale nie zrobiłem tego tak ładnie
MickyT
Jeśli wolno mi dwa początkowe spacje, to działa: function(n,x)cat(" ",x,"\n",rep("",n),"^")i zapisuje kilka znaków
Flądrowiec
@ Założyciel Podejrzewam, że nie. strwrap ma również pewne możliwości, ale prawdopodobnie skończyłoby się to dłużej.
MickyT,
1
To miłe! Nigdy wcześniej nie widziałem tej strwrapfunkcji. Czy istnieje prosty sposób powiedzenia, co robi? Nie mogę tego rozgryźć na podstawie dokumentacji.
Flądrowiec,
3

Python3, 38 36 bajtów

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

# OR 

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

Przetestuj tutaj
Dzięki @Dennis za zapisanie 2 bajtów!

Spikatrix
źródło
(i-1)->~-i
Dennis
Jestem słaby z operacjami bitowymi i matematyką ... W każdym razie dzięki! :-D
Spikatrix
2

Julia, 27 bajtów

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

Spowoduje to utworzenie nienazwanej funkcji, która przyjmuje liczbę całkowitą i ciąg jako dane wejściowe i zwraca ciąg. Aby to nazwać, nadaj mu nazwę, np f=(n,s)->....

Wszystko, co się tutaj dzieje, polega na dodawaniu nowego wiersza, n-1spacji i karetki. Łączenie łańcuchów odbywa się za pomocą *i powtarzania łańcuchów za pomocą ^.

Nie golfowany:

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

Przykład:

julia> println(f(2, "Lorem ipsum, dollar sit amet."))
Lorem ipsum, dollar sit amet.
 ^
Alex A.
źródło
2

PHP (CLI) - 42

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

Wywołaj to z wiersza poleceń:

php pointer.php 2 "Lorem ipsum, dollar sit amet."
HamZa
źródło
Dopiero teraz to zauważyłem. Ale twoja odpowiedź jest dokładnie taka, jak moja druga opcja. Daję ci to: <?printf("$S\n%{$P}s",'^');. Wymienić \nz rzeczywistym linią. Łącznie jest to 5 bajtów. Działa to tylko na PBP4.1 i niższych.
Ismael Miguel,
Wow, tyle błędów w tym komentarzu ... Miałem na myśli, że ma on 26 bajtów i działa tylko na PHP4.1. I to jest twoje!
Ismael Miguel,
2

Matlab, 25

Ten jest wyjątkowo bezczelny. Najwyraźniej wyświetla znaki niedrukowalne jako spacje. Poniższy kod definiuje funkcję o nazwie ansspełniającą specyfikację.

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

więc wywołanie tej funkcji w ten sposób:

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

daje wynik:

ans =

Lorem ipsum, dollar sit amet.
 ^

Zawsze nie podoba mi się ta ans =część odpowiedzi Matlaba. Jeśli jest to problem, muszę dodać 6 bajtów ... ale zawsze widziałem to w odpowiedziach Matlaba. Zauważ, że uruchomienie tego kodu zastępuje zmienną ans, więc musisz ponownie zdefiniować funkcję, jeśli chcesz użyć jej po raz drugi!

Oebele
źródło
Bardzo dobrze! Nie wiedziałem, że umieszczenie sznurka w wektorze tak działa. Zrozumiałem, że ponieważ jest to funkcja, ciąg znaków zwraca jej znaczącą wartość, a środowisko replikacji MATLAB-a właśnie ją wydrukowało. tzn. jeśli to zrobisz x=ans(2, 'asdf');, nie dostaniesz ans = rzecz.
FryAmTheEggman
2

Mój pierwszy strzał w codegolf

Java, 133 65

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

Jestem pewien, że można to jeszcze bardziej zmniejszyć.

Stary kod

public void go(int i,String s){System.out.println(s);IntStream.range(1,i).forEach(j->System.out.print(" "));System.out.println("^");}
pallavt
źródło
Czy możesz System.outgdzieś przechowywać ?
Ismael Miguel,
2
Nie ma potrzeby public. I zmień IntStream.range(1,i).forEach(j->System.out.print(" "));nafor(;--i>0;)System.out.print(" ");
Spikatrix
@CoolGuy aha! czasem proste jest lepsze
pallavt
Czy możesz przenieść s+="\n"wewnątrz for()inicjalizacji, aby użyć tam średnika?
lirtosiast
@ThomasKwa 1 bajt mniej
pallavt
2

Szybki, 41

To rozczarowujące, że Swift nie ma operatora *na Arraylub String.

{$1+reduce(0..<$0,"\n",{$0.0+" "})+"^"}
Xplorld
źródło
Dla Swift 2.0:{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
Kametrixom
1

SpecBAS - 34

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

Apostrof PRINTwymusza nową linię, a następnie wystarczy przesunąć kursor do właściwej pozycji.

Brian
źródło
1

GolfScript 11

n@~(' '*'^'

Przetestuj tutaj .

Cristian Lupascu
źródło
1

JavaScript - 52 bajty

Oto moje, to całkiem proste.

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

Stosowanie:

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

Any string at all
      ^

Wskazuje siódmą postać.

Florrie
źródło
Fajne uratuj Scimonster O_O
Florrie
1
Możesz to napisać jak alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^"). I oszczędzasz 2 bajty. Możesz także przekształcić go w stasksnippet, aby pokazać działający kod. Oczekuje się, że najpierw pojawi się struna, a potem pozycja
Ismael Miguel
1

Perl 5, 31

sub{"$_[0]
"." "x($_[1]-1)."^"}
Hobbs
źródło
Możesz zapisać 2-3 znaki. Upuść ostatnią nową linię, ponieważ nie jest to wymagane, a następnie zmień pierwszą nową linię na dosłowną nową linię. (Perl jest w porządku z ciągami wieloliniowymi)
Mr. Llama
@ Mr.Llama dzięki, te są dobre.
hobbs