Con trỏ, con trỏ, con trỏ!


46

Giới thiệu

Trong các đầu ra lỗi của một số ngôn ngữ như Java, một con trỏ được hiển thị để cung cấp cho người lập trình một ý tưởng về chính xác lỗi xảy ra ở đâu.

Lấy ví dụ này trên Ideone:

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

Lưu ý dấu mũ cho thấy mã không hợp lệ ở đâu?

Thử thách

Thách thức của bạn là: số lượng nhất định N và chuỗi S , đặt một con trỏ trên N thứ nhân vật trong S .

Ví dụ

Đầu vào :2, "Lorem ipsum, dollar sit amet."

Đầu ra :

Lorem ipsum, dollar sit amet.
 ^

Quy tắc

  • Đầu vào được nhận thông qua STDIN hoặc các tham số chức năng
  • Đầu ra được in ra bàn điều khiển hoặc returned
  • Trailing dòng mới, không gian vv được cho phép trong đầu ra
  • Ký tự con trỏ phải^ caret và phải nằm trên một dòng mới.
  • Đây là mã golf, vì vậy câu trả lời ngắn nhất sẽ thắng. Chúc may mắn!

16
Tôi cảm thấy như đây là một vấn đề cực kỳ đơn giản, vì vậy tôi không chắc nó sẽ được đón nhận quá tốt. Bạn có thể muốn thử hộp cát một khi bạn có đủ đại diện.
FryAmTheEggman

6
Tôi nghĩ rằng điều này có thể đã trở nên thú vị hơn một chút nếu đầu vào có nhiều dòng, do đó bạn phải chèn một dòng mới, dấu cách và carat vào đúng vị trí. Thành thật mà nói, thông số kỹ thuật không thực sự nói rằng nó sẽ là một dòng duy nhất, nhưng tôi nghĩ rằng việc thực thi rằng bây giờ sẽ làm mất hiệu lực một vài câu trả lời không công bằng, vì không có ví dụ nào cho thấy điều này.
Geobits

3
Như tôi đã nói, con mèo có lẽ đã ra khỏi cái túi này. Thay đổi quy tắc sau khi câu trả lời hợp lệ được đăng thường không hoạt động tốt. Sống và học hỏi;)
Geobits

1
@SohamChowdhury Tôi sẽ chỉ giả vờ đó là cố ý;) Bạn có muốn tôi sửa nó không?
khỉonboard

9
Mặc dù điều này có thể rất đơn giản, nhưng bạn chắc chắn đã hoàn thành tốt cho thử thách đầu tiên! Bạn có + 16 / -0 phiếu bầu, 1.300 lượt xem và 28 câu trả lời (khi viết bài này) và bạn đã tạo danh sách Câu hỏi về Mạng nóng. Công việc tốt!
Alex A.

Câu trả lời:


36

C 33

Nếu chỉ một chức năng được cho phép, thì thậm chí c có thể cạnh tranh.

(Đối với bản ghi, 2 byte đã lưu thx vào @Cool Guy. Nhận xét Mt thx bị bốc hơi bất ngờ.)

Thêm 1 char đã lưu thx @Mig

f(a,c){printf("%s\n%*c",a,c,94);}

19
C luôn có thể cạnh tranh, nó không thể luôn luôn chiến thắng. ;)
Alex A.

3
@AlexA. <nhún> có vẻ như chiến thắng với tôi ;-)
Chấn thương kỹ thuật số

3
Lưu 1 char:f(a,c){printf("%s\n%*c",a,c,94);}
Michael M.

Nếu tôi là một người hoài nghi, tôi sẽ nói rằng nó vẫn dài gấp 4 lần câu trả lời ngắn nhất trong ngôn ngữ chơi gôn. Đó là về kinh doanh như bình thường. ;) Điều này là thông minh, mặc dù. Tôi nghĩ rằng tôi đã thấy *tùy chọn trong chuỗi định dạng trước đó, nhưng đã hoàn toàn quên nó. Có thể có ích cho một số thách thức nghệ thuật ascii trong tương lai.
Reto Koradi

35

Brainf * ck - 133 byte

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

[0-9]{2}.*Mong đợi đầu vào như ví dụ "02Hello world !!!" sẽ sản xuất

Chào thế giới!!!
 ^

Chào mừng bạn đến với Câu đố lập trình và Code Golf! Đây là một bài viết đầu tiên tuyệt vời, công việc tốt đẹp! : D
Alex A.

Vấn đề là, không ai biết liệu đây có phải là mã hợp lệ hay không, hãy để một mình giải quyết vấn đề :)
Simon

Vâng, tôi nghĩ rằng có một lỗi xảy ra ở đây. Các dấu mũ phải eở trong ví dụ. Với chi phí 1 byte, điều này có thể được khắc phục bằng cách thêm một -ở phía trước[->.<]
FryAmTheEggman

@FryAmTheEggman bạn đúng - xem chỉnh sửa. Ban đầu tôi đã có nó dưới e như bây giờ, nhưng tôi đã nhầm lẫn khi sử dụng hai IDE với các phông chữ khác nhau.
sudo rm -rf chém

25

Mã máy 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

Đây là một hàm (sử dụng fastcallquy ước MS ) cập nhật chuỗi tại chỗ:

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

Mã hội:

    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;

Nó sử dụng WORDdữ liệu kích thước (16 bit) ở một vài nơi. Điều này có một hình phạt (tiền tố 1 byte) trong mã 32 bit, nhưng làm cho mã nhỏ hơn bằng mọi cách - sử dụng dữ liệu 32 bit sẽ đặt hai byte 0 vào mã!

Cuối cùng, nó ghi 4 byte ( eax) thay vì 2 byte ( ax) - mã này nhỏ hơn theo cách đó và 2 byte rác bổ sung đi sau khi chấm dứt chuỗi, vì vậy không ai nhận thấy chúng.

Sử dụng:

int main()
{
    char s[100] = "Lorem ipsum, euro sit amet.";
    carrot(2, s); // credit to Digital Trauma for the name
    puts(s);
}

1
Hướng dẫn 66 b8 5e 00di chuyển 0x5eđến al, không phải ahvà không ahthay vì al, vì vậy nhận xét của bạn trong mã lắp ráp là sai lệch.
Ruslan

@Ruslan Cảm ơn! Đã sửa. Đó là tàn dư từ phiên bản trước.
anatolyg

Tại sao lại nakedở trong đó? Và tại sao nó là thứ đầu tiên tôi nhìn thấy?
caird coinheringaahing

Chính Microsoft đã quyết định đặt nakedphía trước: msdn.microsoft.com/en-us/l
Library / h5w10wxs.aspx

20

Bình thường , 8

zp\^*tQd

Giải pháp này không còn hiệu quả nữa, vì cam kết sau khi tôi đã liên kết với tên ngôn ngữ đã thay đổi pthành arity 1. Có một số cách khác để đạt được điểm tương tự trong Pyth vẫn còn hoạt động như ngày nay zp+*dQ\^.

Nếu chuỗi cần dấu ngoặc kép, thêm vvào đầu mã hoạt động. Nếu nó phải được phân tách bằng dấu phẩy, nó sẽ lên tới 10 byte:

eQp\^*dthQ

Tôi nghĩ rằng đây là ngắn nhất cho đến nay. Làm tốt.
khỉonboard

Thuật toán có vẻ sai đối với tôi, tôi nghĩ ^sẽ luôn ở dưới ký tự đầu tiên. Và bằng cách này, các tham số đầu vào được đưa ra theo thứ tự sai cho trình thông dịch trực tuyến (vì vậy nó không thực hiện được).
Jim

1
@Jim Câu trả lời này đã sử dụng một phiên bản cũ hơn của pyth, trong đó pcó arity 1. Điều này khiến dòng đầu tiên của đầu ra được in trước và sau đó là dấu mũ trên dòng tiếp theo tiếp theo là khoảng trắng. Bây giờ bạn có thể làm z+*dQ\^cho một số điểm ngắn hơn nhưng với một dòng mới, hoặc thêm một ptrước khi +loại bỏ nó. Tôi không chắc phải làm gì ở đây, vì mọi người đã đưa ra phiên bản của câu trả lời này, tôi nghĩ rằng tôi sẽ cố gắng tìm phiên bản mà nó hoạt động.
FryAmTheEggman

16

T-SQL, 90

Mặc dù một câu hỏi khá đơn giản, nhưng thật thú vị khi thử những ngôn ngữ này thực sự không có xu hướng hỗ trợ chúng tốt hoặc chơi golf tốt cho vấn đề đó.

Câu trả lời này gần như được đảm bảo là câu trả lời dài nhất.

Điều này tạo ra một hàm bảng nội tuyến cho SQL Server, lấy @n và @ làm tham số và trả về kết quả dưới dạng cột. Việc trả lại xe là rất quan trọng, nếu không tôi sẽ cần sử dụng char (13).

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

Nó được sử dụng theo cách sau

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)

Và trả lại

R
---------------
This is test 1
^
This is test 2
 ^
This is test 3
  ^
This is test 4
   ^
This is test 5
    ^

Sử dụng rất sáng tạo một ngôn ngữ không thực sự được thiết kế để chơi gôn;) +1
khỉonboard

14

Con trăn, 27

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

Điều này sử dụng hai cấp định dạng chuỗi.

Và đây là một giải pháp 25 byte bị đánh cắp một phần từ câu trả lời của frageum (với thứ tự đối số được đảo ngược):

lambda*p:'%s\n%%%dc'%p%94

12

Bash, 27

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

Đầu ra

$ ./carrot.sh 2 "Lorem ipsum, dollar sit amet."
Lorem ipsum, dollar sit amet.
 ^$ 

Cà rốt? Ngoài ra, đồng đô la cuối cùng là gì?
Scimonster

7
Dollar dường như là dấu nhắc của vỏ.
M.Herzkamp

3
@Scimonster Carrot là một nỗ lực của tôi trong một trò đùa - xem phần chỉnh sửa của tôi cho câu hỏi . Và vâng, $ở cuối là dấu nhắc shell. Câu hỏi xác định rằng các dòng mới theo dõi được cho phép, nhưng không nói chúng là cần thiết.
Chấn thương kỹ thuật số

10

Con trăn, 29

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

Nối chuỗi, một dòng mới, n-1dấu cách và a ^.


2
Nếu chỉ rjustkhông quá lâu ...
Sp3000

10
Ah, người điều khiển nòng nọc.
dùng253751

10

sed, 16

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

Đây là một cái gì đó của một thử nghiệm của câu trả lời meta này . Cụ thể tôi đang yêu cầu số N là đầu vào unary. Ví dụ, đối với dấu mũ ở vị trí 2, đầu vào cho N sẽ là 11. Ngoài ra, nó không được chỉ định nghiêm ngặt theo thứ tự SN , vì vậy ở đây S đi trước, tiếp theo là N unary trên một dòng mới, tất cả thông qua STDIN.

Đầu ra:

$ { echo "Lorem ipsum, dollar sit amet."; echo 11; } | sed '2y/1/ /;2s/ $/^/'
Lorem ipsum, dollar sit amet.
 ^
$

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

@manatwork Gọi tốt!
Chấn thương kỹ thuật số

9

JavaScript (ES6): 63 62 56 52 32 byte

Cảm ơn nderscore đã giảm đáng kể kích thước của mã.

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

Phiên bản hoạt động trên nhiều trình duyệt hơn (47 byte):

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

1. Câu hỏi sử dụng lập chỉ mục dựa trên 1, vì vậy bạn cần Array(a-1). 2. Chức năng ẩn danh được cho phép theo mặc định, vì vậy bạn không cần point=. 3. Đối với phiên bản ES6, bạn có thể thoát khỏi returncâu lệnh và dấu ngoặc nhọn. Chỉ cần sử dụng (a,b)=>b+"\n"+Array(a-1).join(" ")+" ^".
Dennis

1
33 byte: (thay thế \nbằng một dòng mới thực tế)p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
nderscore

@dennis Việc lập chỉ mục hoạt động hoàn hảo đối với tôi: i.stack.imgur.com/Tdejc.png
adroitwhiz

@Dennis Array(1).join(' ')dẫn đến một chuỗi trống :)
nderscore

@nderscore Tôi không thể tìm cách sử dụng một dòng mới thực sự mà không gây ra ngắt dòng trong đoạn mã và lập chỉ mục theo ví dụ đã cho: i.stack.imgur.com/Tdejc.png
adroitwhiz

7

CJam, 9 byte

q~N@(S*'^

Hãy thử trực tuyến.

Làm thế nào nó hoạt động

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.

6

Con trăn, 29

Đây là một cách thú vị hơn để làm điều đó trong 29:

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

Ví dụ sử dụng:

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

5

TI-BASIC, 10 (?) Byte

Disp Ans
Output(3,N,"^

Đầu vào được đưa ra trong biến N, như câu hỏi yêu cầu, nhưng bạn không thể sử dụng chữ var S làm chuỗi. Thay vào đó, phải lấy chuỗi đầu vào từ Ans, vì vậy để chạy ví dụ trong OP : 2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>.

Tuy nhiên, tôi biết rằng có lẽ không được tính, vì mỗi phân đoạn được phân định bằng dấu hai chấm về mặt kỹ thuật là một tuyên bố riêng biệt; đây là chương trình 46 byte lấy đầu vào là 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)),"^

Cả hai đều cho rằng màn hình đã bị xóa trước khi chạy.


Bạn nên lấy đầu vào từ Đầu vào cho số và Ans cho chuỗi.
lirtosiast

Cái đầu tiên cũng không hoạt động nếu tên chương trình, bài tập và chuỗi kết hợp dài hơn 16 ký tự.
lirtosiast

@ThomasKwa 26, thực ra, vì tôi có một máy tính màu: P Về mặt kỹ thuật nó hoạt động, nếu bạn tính phần ghi đè của đầu vào là 'làm việc'.
MI Wright

Cái đầu tiên hoạt động nếu bạn thêm ClrHome: Input N, bởi vì phiếu bầu hiện tại cho meta để trộn các phương thức I / O là ở mức +7.
lirtosiast

5

đc, 19

?pr256r^255/32*62+P

Đầu vào là từ STDIN. dcchuỗi là định nghĩa vĩ mô và chứa trong [ ]. Chuỗi không gian được tạo bằng cách tính số mà khi được biểu thị dưới dạng luồng 256 byte cơ sở sẽ cung cấp chuỗi chúng ta cần. Tính toán là ((n ^ 256) / 255) * 32). Điều này mang lại nkhoảng trắng (ký tự ASCII 32), nhưng chúng ta cần n-1theo sau ^, vì vậy chúng ta chỉ cần thêm 62 vào chữ số cơ sở 256 cuối cùng.

Đầu ra

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

4

C, 59 57 47 byte

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

Khá đơn giản. Phiên bản bị đánh cắp:

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
}

Kiểm tra nó ở đây
Cảm ơn @anatolyg vì đã tiết kiệm 10 byte!


Thật tuyệt vời hơn khi di chuyển puts(a)putchar(32)vào trong ngoặc đơn của forvòng lặp - có chính xác 2 chỗ trống ở đó! Ngoài ra, tôi không nghĩ bạn cần khai báo loại ac- chỉ cần sử dụng ẩn intcho họ - sẽ hoạt động nếu bạn không làm #include <stdio.h>.
anatolyg

@anatolyg, Cảm ơn! Tôi đã không nghĩ rằng bỏ qua các loại sẽ làm việc, nhưng tôi ngạc nhiên, nó đã làm.
Spikatrix

4

C # 55

Một hàm, khái niệm tương tự như câu trả lời C của tôi, nhưng thời gian trả về này ngắn hơn đầu ra.

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

4

SAS, 35 byte

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

Đó là tương đương với một chức năng trần trụi; để thêm bước dữ liệu để gọi nó (tương đương với hàm chính C để gọi nó) sẽ nhiều hơn một chút (thêm 9 byte - Ty Alex), nhưng tôi nghĩ rằng điều đó không cần thiết cho mục đích này. Làm thế nào nó sẽ được gọi là:

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

Có một triển khai chỉ dành cho macro nhưng lâu hơn, ngay cả khi bạn cho phép nó đưa ra cảnh báo về các tham số không hợp lệ trên n = 1.

Nếu chúng ta có thể sử dụng các tham số được xác định trước, thì SAS sẽ khá ngắn so với thông số này, đây là điều hiếm thấy đối với một ngôn ngữ chắc chắn không có ý định ngắn.


Nếu một tập dữ liệu được phép là nguồn đầu vào, đó là cách bạn sẽ 'làm điều đó' trong SAS (hoặc theo% let statement), nhưng có lẽ không được phép, điều này thậm chí còn ngắn hơn ( 27 byte , thực tế có thể là 25 nếu bạn đảm bảo tập dữ liệu được xây dựng ngay trước khi chạy tệp này [như bạn có thể sử dụng set;]):

(tập dữ liệu có sẵn)

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

(mã thực tế)

data;set b;put s/@n"^";run;

Thật tốt khi thấy chuyên gia về cư dân của SO ở đây trên PPCG. :)
Alex A.

Tôi khá chắc chắn rằng một số đồng hồ cũ biết kịch bản DM có thể đạt điểm cao nhất này ... Và kỹ năng cmdmac của tôi rất tệ.
Joe

Tôi luôn quên rằng DM thậm chí còn tồn tại và tôi thậm chí không biết cmdmac là gì! Btw, khi bạn đếm byte cho toàn bộ bước dữ liệu, bạn không cần data a;, bạn chỉ có thể làm điều data;đó sẽ tiết kiệm được 2 byte. Nhưng như bạn đã nói, dù sao thì nó cũng không cần thiết cho mục đích này.
Alex A.

Vâng, phản xạ ăn sâu của tôi không cho phép tôi sử dụng nó theo trực giác tôi đoán :). Cảm ơn.
Joe

Nói về bộ tính giờ cũ, tôi nghĩ bạn có thể tiết kiệm một vài byte bằng cách thách thức tất cả trực giác của SAS và sử dụng macro kiểu cũ. Tôi không thể nhớ lại liệu họ có thể chấp nhận tham số mặc dù.
Alex A.

3

Matlab / Octave, 41

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

Đây là một hàm ẩn danh trả về chuỗi. Điều này tạo ra một cảnh báo, có thể bị chặn bằng cách gọi trước đó warning off.


Bạn có nghĩa là cảnh báo biên tập, hoặc nó thực sự in một cảnh báo cho bạn? Ngoài ra, tôi đã đánh bại bạn 16 ký tự ;-) Nhưng tôi có in ans =bit, nên sau khi sửa nó, nó chỉ khác nhau 10 ký tự.
Oebele

@Oebele nó in cảnh báo, nhưng chuỗi trả về không bị ảnh hưởng.
FryAmTheEggman

3

K, 21 byte

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

Thí dụ:

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

Giải thích ( xlà số, ylà chuỗi):

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

3

R, 49 48 46

Là một hàm không tên mà đầu ra thành STDOUT. Cảm ơn @Flounderer vì sự cải tiến.

sử dụng strwrap ngay bây giờ để xác định dấu mũ đến n-1. cat sử dụng một bộ tách của \ n chứ không phải chuỗi rỗng.

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

Chạy thử nghiệm

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

hàm (n, x) cat (x, "\ n", rep ("", n-1), "^", sep = "") là 48 ký tự
Flounderer

@Flounderer Cảm ơn vì điều đó ... ý tưởng ban đầu của tôi tương tự như vậy, nhưng tôi đã không làm điều đó một cách độc đáo
MickyT

Nếu tôi được phép có hai không gian ban đầu, điều này sẽ hoạt động: function(n,x)cat(" ",x,"\n",rep("",n),"^")và lưu một vài ký tự
Flounderer

@Flounderer Tôi nghi ngờ là không. strwrap cũng có một số khả năng nhưng nó có thể sẽ kết thúc lâu hơn.
MickyT

1
Thật tuyệt! Tôi chưa bao giờ thấy strwrapchức năng này trước đây. Có một cách đơn giản để nói những gì nó làm? Tôi không thể tìm ra nó từ tài liệu.
Flounderer

3

Python3, 38 36 byte

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

# OR 

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

Kiểm tra nó ở đây
Cảm ơn @Dennis vì đã lưu 2 byte!


(i-1)->~-i
Dennis

Tôi yếu với các phép toán bit và toán .... Dù sao cũng cảm ơn! :-D
Spikatrix

2

Julia, 27 byte

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

Điều này tạo ra một hàm không tên, chấp nhận một số nguyên và chuỗi làm đầu vào và trả về một chuỗi. Để gọi nó, đặt tên cho nó, vd f=(n,s)->....

Tất cả những gì xảy ra ở đây là chúng tôi đang nối thêm một dòng mới, n-1dấu cách và dấu mũ. Nối chuỗi được thực hiện bằng cách sử dụng *và lặp lại chuỗi với ^.

Ung dung:

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

Thí dụ:

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

2

PHP (CLI) - 42

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

Gọi nó từ dòng lệnh:

php pointer.php 2 "Lorem ipsum, dollar sit amet."

Bây giờ tôi chỉ nhận thấy. Nhưng câu trả lời của bạn chính xác như lựa chọn thứ 2 của tôi. Tôi đang cung cấp nó cho bạn : <?printf("$S\n%{$P}s",'^');. Thay thế \nbằng một dòng mới thực sự . Tổng cộng là 5 byte. Điều đó chỉ hoạt động trên PBP4.1 trở xuống.
Ismael Miguel

Ồ, rất nhiều lỗi trong nhận xét đó ... Ý tôi là nó dài 26 byte và nó chỉ hoạt động trên PHP4.1. Và nó là của bạn!
Ismael Miguel

2

Matlab, 25

Cái này cực kỳ táo tợn. Rõ ràng hiển thị in các ký tự không in được dưới dạng khoảng trắng. Đoạn mã sau định nghĩa một hàm có tên ans, đáp ứng các thông số kỹ thuật.

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

vì vậy gọi hàm này như thế này:

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

đưa ra đầu ra:

ans =

Lorem ipsum, dollar sit amet.
 ^

Tôi luôn không thích ans =phần trong câu trả lời của Matlab. Nếu đây là một vấn đề, tôi cần thêm 6 byte ... nhưng tôi luôn thấy nó như thế này trong các câu trả lời của Matlab. Lưu ý rằng việc chạy mã này sẽ ghi đè lên biến ans, vì vậy bạn cần xác định lại hàm nếu bạn muốn sử dụng nó lần thứ hai!


Rất đẹp! Tôi không biết đặt một chuỗi trong một vectơ làm việc như thế. Tôi hiểu rằng vì đây là một hàm, nên chuỗi nó trả về giá trị có ý nghĩa và môi trường thay thế của MATLAB chỉ xảy ra để in ra. tức là nếu bạn x=ans(2, 'asdf');không nhận được ans = điều.
FryAmTheEggman

2

Phát súng đầu tiên của tôi vào codegolf

Java, 133 65

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

Tôi chắc chắn rằng nó có thể được giảm hơn nữa.

Mã cũ

public void go(int i,String s){System.out.println(s);IntStream.range(1,i).forEach(j->System.out.print(" "));System.out.println("^");}

Bạn có thể lưu trữ ở System.outđâu đó không?
Ismael Miguel

2
Không cần public. Và đổi IntStream.range(1,i).forEach(j->System.out.print(" "));thànhfor(;--i>0;)System.out.print(" ");
Spikatrix

@CoolGuy aha! đôi khi đơn giản là tốt hơn
pallavt

Bạn có thể di chuyển s+="\n"bên trong for()khởi tạo để sử dụng dấu chấm phẩy ở đó không?
lirtosiast

@ThomasKwa ít hơn 1 byte
pallavt

2

Swift, 41

Thật đáng thất vọng khi Swift không có nhà điều hành *trên Arrayhoặc String.

{$1+reduce(0..<$0,"\n",{$0.0+" "})+"^"}

Dành cho Swift 2.0:{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
Kametrixom

1

SpecBAS - 34

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

Dấu nháy đơn PRINTbuộc một dòng mới, sau đó chỉ cần di chuyển con trỏ đến vị trí chính xác.



1

JavaScript - 52 byte

Đây là của tôi, nó khá đơn giản.

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

Sử dụng:

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

Any string at all
      ^

Nó chỉ vào nhân vật thứ bảy.


Nice lưu Scimonster O_O
Florrie

1
Bạn có thể viết nó như thế nào alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^"). Và bạn tiết kiệm được 2 byte. Ngoài ra, bạn có thể biến nó thành một đoạn mã để hiển thị mã đang chạy. Điều đó hy vọng chuỗi sẽ đến đầu tiên, sau đó là vị trí
Ismael Miguel

1

Perl 5, 31

sub{"$_[0]
"." "x($_[1]-1)."^"}

Bạn có thể lưu 2-3 ký tự. Bỏ dòng mới cuối cùng vì không bắt buộc, sau đó thay đổi dòng mới đầu tiên thành dòng mới theo nghĩa đen. (Perl vẫn ổn với các chuỗi nhiều dòng)
Ông Llama

@ Mr.Llama cảm ơn, những điều đó là tốt.
hobbs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.