Pointer, pointer, pointer!

46

pengantar

Dalam output kesalahan dari beberapa bahasa seperti Java, sebuah pointer ditampilkan untuk memberikan programmer ide dari mana kesalahan itu terjadi.

Ambil contoh ini di Ideone:

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

Perhatikan tanda sisipan menunjukkan di mana kode yang tidak valid?

Tantangan

Tantangan Anda adalah: diberi nomor N dan tali S , menempatkan pointer pada N th karakter dalam S .

Contohnya

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

Keluaran :

Lorem ipsum, dollar sit amet.
 ^

Aturan

  • Input diterima melalui STDIN atau parameter fungsi
  • Output dicetak ke konsol atau returned
  • Mengejar baris baru, spasi dll diizinkan dalam output
  • Karakter pointer harus a ^ caret dan harus di baris baru.
  • Ini kode golf, jadi jawaban tersingkat menang. Semoga berhasil!
papan monyet
sumber
16
Saya merasa ini adalah masalah yang sangat sederhana, jadi saya tidak yakin itu akan diterima dengan baik. Anda mungkin ingin mencoba kotak pasir setelah Anda memiliki cukup perwakilan.
FryAmTheEggman
6
Saya pikir ini bisa menjadi sedikit lebih menarik jika input memiliki beberapa baris, sehingga Anda harus memasukkan baris baru, spasi, dan karat pada posisi yang benar. Jujur, spek tidak benar-benar mengatakan itu akan menjadi satu baris, tapi saya pikir menegakkan bahwa sekarang akan membatalkan beberapa jawaban secara tidak adil, karena tidak ada contoh yang menunjukkan ini.
Geobits
3
Seperti yang saya katakan, kucing mungkin keluar dari tas yang satu ini. Perubahan aturan setelah jawaban yang valid diposting biasanya tidak berhasil dengan baik. Langsung dan pelajari;)
Geobits
1
@SohamChowdhury Saya hanya akan berpura-pura sengaja;) Apakah Anda ingin saya memperbaikinya?
monkeyonkeyboard
9
Meskipun ini mungkin sangat sederhana, Anda tentu berhasil dengan baik untuk tantangan pertama! Anda memiliki + 16 / -0 suara, 1.300 tampilan, dan 28 jawaban (saat tulisan ini dibuat) dan Anda telah membuat daftar Pertanyaan Jaringan Panas. Pekerjaan yang baik!
Alex A.

Jawaban:

36

C 33

Jika hanya fungsi yang diizinkan, maka bahkan c dapat bersaing.

(Sebagai catatan, 2 byte disimpan thx ke @Cool Guy. Komentar Mt thx tiba-tiba menguap.)

1 char lainnya disimpan thx @Mig

f(a,c){printf("%s\n%*c",a,c,94);}
edc65
sumber
19
C selalu bisa bersaing, tidak selalu menang. ;)
Alex A.
3
@AlexA. <shrug> sepertinya menang untukku ;-)
Digital Trauma
3
Simpan 1 char:f(a,c){printf("%s\n%*c",a,c,94);}
Michael M.
Jika saya orang yang sinis, saya akan mengatakan bahwa itu masih sekitar 4 kali lebih lama dari jawaban terpendek dalam bahasa golf. Yaitu tentang bisnis seperti biasa. ;) Tapi ini pintar. Saya pikir saya telah melihat *opsi dalam format string sebelumnya, tetapi telah sepenuhnya melupakannya. Mungkin berguna untuk beberapa tantangan seni ascii di masa depan.
Reto Koradi
35

Brainf * ck - 133 byte

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

Harapkan input sebagai [0-9]{2}.*mis. "02Hello world !!!" akan menghasilkan

Halo Dunia!!!
 ^
sudo rm -rf slash
sumber
Selamat Datang di Programming Puzzles dan Code Golf! Ini adalah posting pertama yang bagus, kerja bagus! : D
Alex A.
Masalahnya adalah, tidak ada yang tahu apakah ini bahkan kode yang valid, apalagi memecahkan masalah :)
Simon
Ya saya pikir ada kesalahan satu per satu di sini. Tanda sisipan harus di bawah edalam contoh. Dengan biaya 1 byte ini dapat diperbaiki dengan menambahkan -di depan[->.<]
FryAmTheEggman
@FryAmTheEggman Anda benar - lihat hasil edit. Saya awalnya memilikinya di bawah e seperti sekarang, tapi saya bingung dengan menggunakan dua IDE dengan font yang berbeda.
sudo rm -rf slash
25

Kode mesin IA-32, 24 byte

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

Ini adalah fungsi (menggunakan fastcallkonvensi MS ) yang memperbarui string di tempat:

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

Kode perakitan:

    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;

Ini menggunakan WORD-sized (16-bit) data di beberapa tempat. Ini memiliki penalti (awalan 1-byte) dalam kode 32-bit, tetapi tetap membuat kode lebih kecil - menggunakan data 32-bit akan menempatkan dua byte nol ke dalam kode!

Pada akhirnya, ia menulis 4 byte ( eax) dan bukannya 2 byte ( ax) - kodenya lebih kecil seperti itu, dan 2 byte tambahan junk digunakan setelah pemutusan string, jadi tidak ada yang memperhatikannya.

Pemakaian:

int main()
{
    char s[100] = "Lorem ipsum, euro sit amet.";
    carrot(2, s); // credit to Digital Trauma for the name
    puts(s);
}
anatolyg
sumber
1
Instruksi 66 b8 5e 00bergerak 0x5eke al, bukan ke ah, dan nol ke ahbukan al, sehingga komentar Anda dalam kode assembly menyesatkan.
Ruslan
@Ruslan Terima kasih! Tetap. Itu adalah sisa dari versi sebelumnya.
anatolyg
Kenapa ada nakeddi sana? Dan mengapa ini hal pertama yang saya lihat?
caird coinheringaahing
Ini Microsoft yang memutuskan untuk menempatkan nakeddi depan: msdn.microsoft.com/en-us/library/h5w10wxs.aspx
anatolyg
20

Pyth , 8

zp\^*tQd

Solusi ini tidak lagi berfungsi, karena komit setelah yang saya ptautkan sebagai nama bahasa diubah menjadi arity 1. Ada beberapa cara lain untuk mencapai skor serupa di Pyth yang masih berfungsi hingga sekarang zp+*dQ\^.

Jika string membutuhkan tanda kutip, menambah vawal kode berfungsi. Jika itu harus dipisahkan koma, itu naik hingga 10 byte:

eQp\^*dthQ
FryAmTheEggman
sumber
Saya pikir ini adalah yang terpendek sejauh ini. Sudah selesai dilakukan dengan baik.
monkeyonkeyboard
Algoritma sepertinya salah bagi saya, saya pikir ^akan selalu berada di bawah karakter pertama. Dan omong-omong parameter input diberikan dalam urutan yang salah ke penerjemah online (sehingga gagal mengeksekusi).
Jim
1
@ Jim Jawaban ini menggunakan versi pyth yang lebih lama, di mana pmemiliki arity 1. Ini menyebabkan baris pertama dari output dicetak pertama dan kemudian tanda sisipan pada baris berikutnya diikuti oleh spasi. Sekarang Anda dapat melakukannya z+*dQ\^untuk skor yang lebih pendek tetapi dengan baris baru, atau tambahkan psebelum +untuk menghapusnya. Saya tidak yakin apa yang harus saya lakukan di sini, karena orang mengangkat versi jawaban ini, saya pikir saya akan mencoba menemukan versi yang berfungsi.
FryAmTheEggman
16

T-SQL, 90

Sementara pertanyaan yang cukup sederhana, selalu menarik untuk mencoba ini dalam bahasa yang benar-benar tidak cenderung mendukung mereka dengan baik atau golf dengan baik dalam hal ini.

Jawaban ini hampir pasti yang paling lama.

Ini menciptakan fungsi tabel inline untuk SQL Server yang mengambil parameter @n dan @ sebagai dan mengembalikan hasilnya sebagai kolom. Pengembalian kereta signifikan, jika tidak saya harus menggunakan char (13).

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

Ini digunakan dengan cara berikut

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)

Dan kembali

R
---------------
This is test 1
^
This is test 2
 ^
This is test 3
  ^
This is test 4
   ^
This is test 5
    ^
MickyT
sumber
Penggunaan bahasa yang sangat tidak kreatif untuk golf;) +1
monkeyonkeyboard
14

Python, 27

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

Ini menggunakan dua tingkat pemformatan string.

Dan inilah solusi 25 byte yang sebagian dicuri dari jawaban feersum (dengan urutan argumen terbalik):

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

Bash, 27

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

Keluaran

$ ./carrot.sh 2 "Lorem ipsum, dollar sit amet."
Lorem ipsum, dollar sit amet.
 ^$ 
Trauma Digital
sumber
Wortel? Juga, berapa dolar pada akhirnya?
Scimonster
7
Dolar tampaknya menjadi prompt shell.
M.Herzkamp
3
@Scimonster Carrot adalah upaya saya untuk bercanda - lihat edit saya untuk pertanyaan itu . Dan ya, $pada akhirnya adalah prompt shell. Pertanyaannya menentukan bahwa membuntuti baris baru diperbolehkan, tetapi tidak mengatakan itu perlu.
Trauma Digital
10

Python, 29

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

Menggabungkan string, baris baru, n-1spasi, dan a ^.

Tidak
sumber
2
Kalau saja rjusttidak begitu lama ...
Sp3000
10
Ah, operator berudu.
user253751
10

sed, 16

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

Ini adalah semacam testcase dari jawaban meta ini . Khususnya saya mensyaratkan bahwa angka N adalah input di unary. Misalnya untuk tanda sisipan di posisi 2, input untuk N adalah 11. Juga tidak ditentukan secara spesifik urutan S dan N mana yang seharusnya, jadi di sini S berlaku terlebih dahulu, diikuti oleh unary N pada baris baru, semua melalui STDIN.

Keluaran:

$ { echo "Lorem ipsum, dollar sit amet."; echo 11; } | sed '2y/1/ /;2s/ $/^/'
Lorem ipsum, dollar sit amet.
 ^
$
Trauma Digital
sumber
1
2y/1/ /;2s/ $/^/
manatwork
@manatwork Panggilan bagus!
Trauma Digital
9

JavaScript (ES6): 63 62 56 52 32 byte

Terima kasih kepada nderscore untuk sangat mengurangi ukuran kode.

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

Versi yang berfungsi di lebih banyak browser (47 byte):

p=function(a,b){return b+`\n${' '.repeat(a)}^`}
cerdas
sumber
1. Pertanyaan menggunakan pengindeksan berbasis 1, jadi Anda perlu Array(a-1). 2. Fungsi anonim diizinkan secara default, jadi Anda tidak perlu point=. 3. Untuk versi ES6, Anda dapat menyingkirkan returnpernyataan dan kawat gigi. Gunakan saja (a,b)=>b+"\n"+Array(a-1).join(" ")+" ^".
Dennis
1
33 byte: (ganti \ndengan baris baru yang sebenarnya)p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
nderscore
@dennis Pengindeksan berfungsi dengan baik untuk saya: i.stack.imgur.com/Tdejc.png
adroitwhiz
@Dennis Array(1).join(' ')menghasilkan string kosong :)
nderscore
@nderscore Saya tidak dapat menemukan cara untuk menggunakan baris baru yang sebenarnya tanpa menyebabkan garis putus pada potongan kode, dan pengindeksan mengikuti contoh yang diberikan: i.stack.imgur.com/Tdejc.png
adroitwhiz
7

CJam, 9 byte

q~N@(S*'^

Cobalah online.

Bagaimana itu bekerja

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
sumber
6

Python, 29

Berikut cara yang lebih menyenangkan untuk melakukannya di 29:

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

Contoh penggunaan:

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

TI-BASIC, 10 (?) Byte

Disp Ans
Output(3,N,"^

Input diberikan dalam variabel N, saat pertanyaan diajukan, tetapi Anda tidak dapat menggunakan huruf var S sebagai string. Di tempat itu, dibutuhkan masukan string dari Ans, sehingga untuk menjalankan contoh di OP: 2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>.

Saya sadar bahwa itu mungkin tidak masuk hitungan, karena setiap segmen yang dibatasi usus besar secara teknis merupakan pernyataan yang terpisah; inilah program 46-byte yang mengambil input sebagai 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)),"^

Keduanya berasumsi bahwa layar telah dibersihkan sebelum berjalan.

MI Wright
sumber
Sebaiknya Anda mengambil input dari Input untuk nomor dan Ans untuk string.
lirtosiast
Yang pertama juga tidak berfungsi jika nama program, tugas, dan string yang digabungkan lebih dari 16 karakter.
lirtosiast
@ThomasKwa 26, sebenarnya, karena saya memiliki kalkulator warna: P Secara teknis tidak berfungsi, jika Anda menghitung menimpa bagian dari input sebagai 'berfungsi'.
MI Wright
Yang pertama tidak berfungsi jika Anda menambahkan ClrHome: Input N, karena suara saat ini pada meta untuk pencampuran metode I / O ada di +7.
lirtosiast
5

dc, 19

?pr256r^255/32*62+P

Masukan dari STDIN. dcstring adalah definisi makro dan terkandung dalam [ ]. String spasi dihasilkan dengan menghitung angka yang ketika dinyatakan sebagai basis 256 byte stream memberikan string yang kita butuhkan. Perhitungannya adalah ((n ^ 256) / 255) * 32). Ini memberikan nspasi (karakter ASCII 32), tetapi kita perlu n-1diikuti oleh ^, jadi kita cukup menambahkan 62 ke basis terakhir 256 digit.

Keluaran

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

C, 59 57 47 byte

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

Cukup mudah. Versi tidak disatukan:

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
}

Uji di sini
Terima kasih kepada @anatolyg karena telah menghemat 10 byte!

Spikatrix
sumber
Lebih indah untuk bergerak puts(a)dan putchar(32)masuk ke kurung forloop - ada persis 2 tempat kosong di sana! Juga, saya tidak berpikir Anda perlu menyatakan jenis adan c- cukup gunakan implisit intuntuk mereka - akan bekerja jika Anda tidak melakukannya #include <stdio.h>.
anatolyg
@anatolyg, Terima kasih! Saya tidak berpikir bahwa menghilangkan tipe akan berhasil, tetapi yang mengejutkan saya, itu berhasil.
Spikatrix
4

C # 55

Sebuah fungsi, konsep yang mirip dengan jawaban C saya, tetapi pengembalian kali ini lebih pendek dari output.

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

SAS, 35 byte

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

Itu setara dengan SAS dari fungsi telanjang; menambahkan langkah data untuk memanggilnya (setara dengan fungsi utama C menyebutnya) akan menjadi sedikit lebih (9 byte lebih - Ty Alex), tapi saya pikir itu tidak perlu untuk tujuan ini. Bagaimana itu disebut:

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

Ada implementasi makro saja tetapi jauh lebih lama, bahkan jika Anda mengizinkannya memberikan peringatan tentang parameter yang tidak valid pada n = 1.

Jika kita bisa menggunakan parameter yang telah ditentukan, SAS akan cukup pendek untuk yang satu ini, yang merupakan kelangkaan untuk bahasa yang pasti tidak dimaksudkan untuk menjadi pendek.


Jika dataset diizinkan menjadi sumber input, itulah cara Anda akan 'melakukannya' di SAS (atau dengan% biarkan pernyataan), tetapi mungkin tidak diizinkan, ini bahkan lebih pendek ( 27 byte , yang sebenarnya bisa 25 jika Anda menjamin dataset telah dibangun segera sebelum menjalankan ini [karena Anda dapat menggunakannya set;]):

(dataset yang sudah ada sebelumnya)

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

(kode aktual)

data;set b;put s/@n"^";run;
Joe
sumber
Senang melihat ahli SAS residen SO di PPCG. :)
Alex A.
Saya cukup yakin beberapa timer lama yang tahu scripting DM bisa skor terbaik ini ... Dan keterampilan cmdmac saya payah.
Joe
Saya selalu lupa bahwa DM bahkan ada, dan saya bahkan tidak tahu apa itu cmdmac! Btw, ketika Anda menghitung byte untuk seluruh langkah data, Anda tidak perlu data a;, Anda bisa melakukan data;yang akan menghemat 2 byte. Tetapi seperti yang Anda katakan, toh itu tidak perlu untuk tujuan ini.
Alex A.
Ya, refleks tertanam SAS saya jangan biarkan saya menggunakannya secara intuitif, saya kira :). Terima kasih.
Joe
Berbicara tentang timer lama, saya pikir Anda bisa menghemat beberapa byte dengan menentang semua intuisi SAS dan menggunakan makro gaya lama. Saya tidak ingat apakah mereka dapat menerima parameter.
Alex A.
3

Matlab / Oktaf, 41

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

Ini adalah fungsi anonim yang mengembalikan string. Ini menghasilkan peringatan, yang dapat ditekan dengan menelepon sebelumnya warning off.

FryAmTheEggman
sumber
Apakah yang Anda maksudkan peringatan editor, atau apakah itu benar-benar mencetak peringatan untuk Anda? Juga, saya mengalahkan Anda dengan 16 karakter ;-) Tapi saya mencetak ans =sedikit, jadi setelah memperbaikinya, itu hanya perbedaan 10 karakter.
Oebele
@ Oebele itu mencetak peringatan, tetapi string yang dikembalikan tidak terpengaruh.
FryAmTheEggman
3

K, 21 byte

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

Contoh:

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

Penjelasan ( xadalah nomor, yadalah string):

{                   }   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
sumber
3

R, 49 48 46

Sebagai fungsi tanpa nama yang di-output ke STDOUT. Terima kasih kepada @Flounderer untuk peningkatannya.

menggunakan strwrap sekarang untuk mengidentifikasi tanda sisipan ke n-1. cat menggunakan pemisah \ n daripada string kosong.

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

Uji coba

> 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
sumber
function (n, x) cat (x, "\ n", rep ("", n-1), "^", sep = "") adalah 48 karakter
Flounderer
@Flounderer Terima kasih untuk itu ... ide orisinal saya mirip dengan itu, tapi saya tidak melakukannya dengan baik
MickyT
Jika saya diizinkan dua spasi awal, ini berfungsi: function(n,x)cat(" ",x,"\n",rep("",n),"^")dan menyimpan beberapa karakter
Flounderer
@Flounderer Saya kira tidak. strwrap juga memiliki beberapa kemungkinan tetapi mungkin akan berakhir lebih lama.
MickyT
1
Itu bagus! Saya belum pernah melihat strwrapfungsinya sebelumnya. Apakah ada cara sederhana untuk mengatakan apa fungsinya? Saya tidak bisa mengetahuinya dari dokumentasi.
Flounderer
3

Python3, 38 36 byte

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

# OR 

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

Uji di sini
Terima kasih kepada @ Dennis karena telah menghemat 2 byte!

Spikatrix
sumber
(i-1)->~-i
Dennis
Saya lemah dengan operasi bit dan matematika .... Terima kasih! :-D
Spikatrix
2

Julia, 27 byte

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

Ini menciptakan fungsi tanpa nama yang menerima integer dan string sebagai input dan mengembalikan string. Untuk menyebutnya, berikan nama, mis f=(n,s)->....

Semua yang terjadi di sini adalah kita menambahkan baris baru, n-1spasi, dan tanda sisipan. Penggabungan string dilakukan menggunakan *dan pengulangan string dengan ^.

Tidak Disatukan:

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

Contoh:

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

PHP (CLI) - 42

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

Sebut saja dari baris perintah:

php pointer.php 2 "Lorem ipsum, dollar sit amet."
Hamza
sumber
Saya hanya memperhatikan sekarang. Tetapi jawaban Anda persis seperti pilihan saya yang ke-2. Saya menawarkan kepada Anda: <?printf("$S\n%{$P}s",'^');. Ganti \ndengan baris baru nyata . Totalnya adalah 5 byte. Itu hanya bekerja pada PBP4.1 dan di bawah ini.
Ismael Miguel
Wow, banyak sekali kesalahan dalam komentar itu ... Maksud saya panjangnya 26 byte dan hanya berfungsi di PHP4.1. Dan itu milikmu!
Ismael Miguel
2

Matlab, 25

Yang ini sangat kurang ajar. Tampaknya menampilkan cetakan karakter yang tidak dapat dicetak sebagai spasi. Kode berikut mendefinisikan fungsi bernama ans, yang memenuhi spesifikasi.

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

begitu memanggil fungsi ini seperti ini:

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

memberikan output:

ans =

Lorem ipsum, dollar sit amet.
 ^

Saya selalu tidak suka ans =bagian dalam jawaban Matlab. Jika ini masalah, saya perlu menambahkan 6 byte ... tapi saya selalu melihatnya seperti ini di jawaban Matlab. Perhatikan bahwa menjalankan kode ini menimpa variabel ans, jadi Anda perlu mendefinisikan ulang fungsi jika Anda ingin menggunakannya untuk kedua kalinya!

Oebele
sumber
Sangat bagus! Saya tidak tahu menempatkan string dalam vektor bekerja seperti itu. Pemahaman saya adalah bahwa karena ini adalah fungsi, string yang mengembalikannya nilai yang berarti, dan lingkungan repl MATLAB kebetulan mencetaknya. yaitu jika Anda melakukannya, x=ans(2, 'asdf');Anda tidak mendapatkan ans = hal.
FryAmTheEggman
2

Tembakan pertamaku pada codegolf

Jawa, 133 65

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

Saya yakin itu bisa dikurangi lebih banyak lagi.

Kode lama

public void go(int i,String s){System.out.println(s);IntStream.range(1,i).forEach(j->System.out.print(" "));System.out.println("^");}
pallavt
sumber
Bisakah kamu menyimpan di suatu tempat System.out?
Ismael Miguel
2
Tidak perlu public. Dan ubah IntStream.range(1,i).forEach(j->System.out.print(" "));kefor(;--i>0;)System.out.print(" ");
Spikatrix
@CoolGuy aha! terkadang sederhana lebih baik
pallavt
Bisakah Anda memindahkan bagian s+="\n"dalam for()inisialisasi untuk menggunakan titik koma di sana?
lirtosiast
@ThomasKwa 1 byte lebih sedikit
pallavt
2

Swift, 41

Sangat mengecewakan bahwa Swift tidak memiliki operator *pada Arrayatau String.

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

SpecBAS - 34

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

Tanda pangkat PRINTmemaksa baris baru, maka hanya perlu memindahkan kursor ke posisi yang benar.

Brian
sumber
1

GolfScript 11

n@~(' '*'^'

Tes di sini .

Cristian Lupascu
sumber
1

JavaScript - 52 byte

Ini milik saya, sangat sederhana.

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

Pemakaian:

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

Any string at all
      ^

Ini menunjuk pada karakter ketujuh.

Florrie
sumber
Bagus simpan Scimonster O_O
Florrie
1
Anda bisa menulis seperti itu alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^"). Dan Anda menghemat 2 byte. Anda juga dapat membuatnya menjadi stasksnippet untuk menampilkan kode yang sedang berjalan. Yang mengharapkan string untuk menjadi yang pertama, kemudian posisi
Ismael Miguel
1

Perl 5, 31

sub{"$_[0]
"." "x($_[1]-1)."^"}
hobbs
sumber
Anda dapat menyimpan 2-3 karakter. Jatuhkan baris terakhir karena tidak diperlukan, lalu ubah baris baru pertama ke baris baru. (Perl baik-baik saja dengan string multi-line)
Mr. Llama
@Lama Lama terima kasih, itu bagus.
hobbs