포인터, 포인터, 포인터!


46

소개

Java와 같은 일부 언어의 오류 출력 에서 오류가 발생한 위치를 프로그래머에게 알려주는 포인터 가 표시됩니다.

받아 이 예 Ideone에를 :

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

캐럿이 유효하지 않은 코드가 어디에 있는지 보여줍니다.

도전

당신의 도전은 : N 과 문자열 S가 주어지면 SN 번째 문자에 포인터를 놓습니다 .

입력 :2, "Lorem ipsum, dollar sit amet."

출력 :

Lorem ipsum, dollar sit amet.
 ^

규칙

  • STDIN 또는 기능 매개 변수를 통해 입력이 수신 됨
  • 출력이 콘솔 또는 returned에 출력됩니다
  • 후행 줄 바꿈, 공백 등이 출력에 허용됩니다.
  • 포인터 문자가 있어야합니다^ 캐럿과 새로운 행에 있어야합니다.
  • 이것은 코드 골프이므로 최단 답변이 이깁니다. 행운을 빕니다!

16
나는 이것이 매우 간단한 문제라고 생각하므로 지나치게 잘 받아 들일지 확신하지 못한다. 담당자가 충분 하면 샌드 박스 를 사용해보십시오 .
FryAmTheEggman 2016 년

6
나는 이것이되었습니다 수 있다고 생각 비트가 올바른 위치 (들)에서 줄 바꿈, 공백 및 캐럿을 삽입했다 그래서, 입력이 여러 줄이 있다면 더 재미. 솔직히 말해서 스펙은 실제로 한 줄 될 것이라고 말하지 않지만 이것을 보여주는 것은 부당한 대답을 무효화 할 것이라고 생각합니다.이를 보여주는 예가 없기 때문입니다.
Geobits

3
내가 말했듯이, 고양이는 아마도이 가방에서 나올 것입니다. 유효한 답변을 게시 한 후 규칙을 변경하면 일반적으로 제대로 작동하지 않습니다. 살고 배우기;)
Geobits

1
@SohamChowdhury 나는 의도적 인 척 할 것입니다.) 고치겠습니까?
monkeyonkeyboard

9
이것은 매우 간단 할 수 있지만, 첫 번째 도전을 위해 확실히 잘 해냈습니다! 이 글을 쓰는 시점에서 + 16 / -0 투표, 1,300 조회수 및 28 답변이 있으며 핫 네트워크 질문 목록을 작성했습니다. 좋은 작업!
Alex A.

답변:


36

C 33

기능 만 허용된다면 c조차도 경쟁 할 수 있습니다.

(레코드의 경우 2 바이트를 @Cool Guy에 저장했습니다. Mx thx 주석이 예기치 않게 증발됩니다.)

1 개 이상의 char 저장 thx @Mig

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

19
C는 항상 경쟁 할 수 있지만 항상 이길 수는 없습니다. ;)
Alex A.

3
@AlexA. <shrug>은 나에게이기는 것처럼 보인다 ;-)
Digital Trauma

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

내가 냉소적 인 사람이라면 골프 언어로 가장 짧은 대답보다 4 배나 길다고 말하고 싶습니다. 평소와 같이 사업에 관한 것입니다. ;) 그러나 이것은 영리하다. 나는 *전에 형식 문자열에서 옵션을 보았지만 완전히 잊어 버린 것 같습니다. 미래의 일부 예술 문제에 유용 할 수 있습니다.
Reto Koradi

35

Brainf * ck-133 바이트

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

[0-9]{2}.*"02Hello world !!!" 와 같은 입력이 필요합니다. 생산할 것이다

안녕하세요 세상 !!!
 ^

프로그래밍 퍼즐과 코드 골프에 오신 것을 환영합니다! 이것은 훌륭한 첫 번째 게시물입니다. : D
Alex A.

문제는 이것이 유효한 코드인지 아는 사람이 아무도 없다는 것입니다. 문제를 해결하는 것은 물론입니다.)
Simon

네, 여기에 하나의 오류가 있다고 생각합니다. 캐럿은 e예제에서 아래에 있어야합니다 . 1 바이트의 비용이이 추가로 개선 될 수 -앞에[->.<]
FryAmTheEggman

@FryAmTheEggman 당신이 맞아요-편집을 참조하십시오. 나는 원래 그대로 e 아래에 있었지만 다른 글꼴을 가진 두 개의 IDE를 사용하여 혼란스러워했습니다.
sudo rm -rf 슬래시

25

IA-32 기계 코드, 24 바이트

16 진 덤프 :

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

fastcall문자열을 내부에서 업데이트 하는 함수 (MS 규칙 사용)입니다.

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

조립 코드 :

    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;

그것은 사용하는 WORD몇 군데에서 2N 크기 (16 비트)의 데이터를. 이것은 32 비트 코드에서 페널티 (1 바이트 접두어)를 갖지만 어쨌든 코드를 작게 만듭니다 .32 비트 데이터를 사용하면 코드에 2 바이트가 0이됩니다!

결국 eax2 바이트 ( ) 대신 4 바이트 ( )를 씁니다 ax. 코드는 그렇게 작고 문자열 종료 후 2 바이트의 정크가 추가되므로 아무도 눈에 띄지 않습니다.

용법:

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

1
명령의 66 b8 5e 00이동 0x5eal,하지로 ah, 0으로 ah대신 al어셈블리 코드에 댓글이 오해의 소지가되도록.
Ruslan

@Ruslan 감사합니다! 결정된. 그것은 이전 버전의 잔재였습니다.
아나 톨릭

naked거기에 있습니까? 왜 내가 본 첫 번째입니까?
caird coinheringaahing

그것은을 넣어하기로 결정 Microsoft의 naked: 앞에 msdn.microsoft.com/en-us/library/h5w10wxs.aspx
anatolyg

20

피 이스 , 8

zp\^*tQd

언어 이름이 변경 p되어 arity 1을 갖도록 변경 한 이후 커밋 되었으므로이 솔루션은 더 이상 작동하지 않습니다 . Pyth에서 비슷한 점수를 달성하는 다른 방법은 오늘날에도 여전히 작동합니다 zp+*dQ\^.

문자열에 따옴표가 필요한 경우 v코드 시작 부분에 추가하면 됩니다. 쉼표로 구분해야하는 경우 최대 10 바이트가됩니다.

eQp\^*dthQ

나는 이것이 지금까지 가장 짧은 것이라고 생각합니다. 잘 했어.
monkeyonkeyboard

알고리즘이 나에게 잘못 보인다, 나는 ^항상 첫 번째 문자 아래에있을 것이라고 생각 합니다. 그리고 입력 매개 변수가 온라인 인터프리터에 잘못된 순서로 제공되므로 실행에 실패합니다.
Jim

1
@Jim이 답변은 구 버전의 pyth를 사용했습니다. 여기 p에는 arity 1이 있습니다. 이로 인해 출력의 첫 번째 줄이 먼저 인쇄되고 다음 줄의 캐럿이 공백으로 나옵니다. 이제 z+*dQ\^짧은 점수를 줄이지 만 후행 줄 바꿈을 사용하거나 p앞에 a 를 추가하여 점수 +를 제거 할 수 있습니다. 사람들 이이 버전의 답변을 공고히했기 때문에 여기서해야 할 일이 확실하지 않으므로 작동 한 버전을 찾으려고 생각합니다.
FryAmTheEggman

16

T-SQL, 90

상당히 간단한 질문이지만, 실제로 잘 지원하거나 골프를 잘하지 못하는 언어로 시도해 보는 것은 항상 흥미 롭습니다.

이 답변은 거의 가장 긴 답변입니다.

@n 및 @를 매개 변수로 사용하고 결과를 열로 반환하는 SQL Server에 대한 인라인 테이블 함수를 만듭니다. 캐리지 리턴은 중요합니다. 그렇지 않으면 char (13)을 사용해야합니다.

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

다음과 같은 방식으로 사용됩니다

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)

그리고 반환

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

실제로 골프 용으로 설계되지 않은 언어를 매우 창의적으로 사용;) +1
monkeyonkeyboard

14

파이썬, 27

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

여기에는 두 가지 수준의 문자열 형식이 사용됩니다.

그리고 여기에 feersum의 대답에서 부분적으로 도난 된 25 바이트 솔루션이 있습니다 (인수 순서가 반대로 됨).

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

12

배쉬, 27

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

산출

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

당근? 또한, 마지막에 달러는 무엇입니까?
Scimonster 2016 년

7
달러는 쉘의 프롬프트 인 것 같습니다.
M.Herzkamp 2016 년

3
@Scimonster Carrot은 농담이었습니다 . 질문에 대한 편집 내용을 참조하십시오 . 그리고 네, $마지막은 쉘 프롬프트입니다. 이 질문은 후행 줄 바꿈이 허용되지만 필요하다고 말하지는 않습니다.
디지털 외상

10

파이썬, 29

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

문자열, 개행 문자, n-1공백 및 a를 연결합니다 ^.


2
경우에만 rjust너무 오래하지 않았다 ...
SP3000

10
올챙이 연산자 야
user253751 2016 년

10

sed, 16

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

이것은 이 메타 답변 의 테스트 사례입니다 . 특히 N 숫자 를 단항으로 입력 해야합니다 . 예를 들어 위치 2의 캐럿의 경우 N 의 입력 은입니다 11. 또한 SN 순서를 정확히 지정하지 않았 으므로 여기에서 S 가 먼저오고 새 줄에서 단항 N이 STDIN을 통해 이루어집니다.

산출:

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

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

@manatwork 좋은 전화!
디지털 외상

9

JavaScript (ES6) : 63 62 56 52 32 바이트

코드 크기를 크게 줄인 nderscore 덕분입니다.

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

더 많은 브라우저에서 작동하는 버전 (47 바이트) :

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

1.이 질문에는 1 기반 인덱싱이 사용되므로 Array(a-1). 2. 익명 기능은 기본적으로 허용되므로 필요하지 않습니다 point=. 3. ES6 버전의 경우, return명령문과 중괄호를 제거 할 수 있습니다 . 그냥 사용하십시오 (a,b)=>b+"\n"+Array(a-1).join(" ")+" ^".
Dennis

1
33 바이트 : ( \n실제 개행 문자로 대체 )p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
nderscore 2018 년

: 인덱싱 나를 위해 완벽하게 작동 @dennis i.stack.imgur.com/Tdejc.png
adroitwhiz

@Dennis Array(1).join(' '): 빈 문자열 결과
nderscore

@nderscore 코드 조각에서 줄 바꿈을 일으키지 않고 실제 줄 바꿈을 사용하는 방법을 찾을 수 없으며 색인은 주어진 예제를 따릅니다. i.stack.imgur.com/Tdejc.png
adroitwhiz

7

CJam, 9 바이트

q~N@(S*'^

온라인으로 사용해보십시오.

작동 원리

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

파이썬, 29

29에서 더 재미있는 방법이 있습니다.

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

사용법 예 :

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

5

TI-BASIC, 10 (?) 바이트

Disp Ans
Output(3,N,"^

질문에 따라 변수 N에 입력이 제공되지만 문자 var S를 문자열로 사용할 수 없습니다. 그 대신 Ans에서 문자열 입력을 받아 OP :에서 예제를 실행하십시오 2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>.

콜론으로 구분 된 각 세그먼트는 기술적으로 별도의 진술이므로 계산하지 않을 것입니다. 다음 은 ( ) 로 입력을 받는 46 바이트 프로그램입니다.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)),"^

두 가지 모두 실행하기 전에 화면이 지워 졌다고 가정합니다.


숫자는 입력에서, 문자열은 Ans에서 입력을받는 것이 좋습니다.
lirtosiast 2016 년

첫 번째 프로그램 이름, 할당 및 문자열 조합이 16 자보다 길면 작동하지 않습니다.
lirtosiast 2016 년

@ThomasKwa 26, 실제로 색 계산기가 있기 때문에 : P 입력의 일부를 '작업'으로 덮어 쓰는 것으로 기술적으로 작동합니다.
MI Wright

I / O 방법을 혼합하기위한 메타에 대한 현재 투표가 +7이므로 ClrHome : Input N을 추가하면 첫 번째가 작동합니다.
lirtosiast

5

dc, 19

?pr256r^255/32*62+P

STDIN에서 입력합니다. dc문자열은 매크로 정의이며에 포함되어 [ ]있습니다. 공백 문자열은 기본 256 바이트 스트림으로 표현 될 때 필요한 문자열을 제공하는 숫자를 계산하여 생성됩니다. 계산은 ((n ^ 256) / 255) * 32)입니다. 이것은 n공백 (ASCII 문자 32)을 제공하지만 n-1뒤에옵니다 ^. 따라서 마지막 기본 256 자리에 62를 추가하기 만하면됩니다.

산출

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

4

C, 59 57 47 바이트

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

꽤 직설적 인. 언 골프 버전 :

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
}

여기에서 테스트 하십시오 10 바이트를 절약 한 @anatolyg 에게
감사드립니다 !


그것은 이동하는 것이 더 아름다워 puts(a)putchar(32)의 괄호로 for루프 - 정확히 2 빈 장소가있다! 또한, 당신이 타입을 선언 할 필요는 없다고 생각합니다 – a그리고 그것들을 c위해 암시 적을 사용하십시오 int– 당신이하지 않으면 작동 할 것 #include <stdio.h>입니다.
anatolyg 2016 년

@anatolyg, 감사합니다! 나는 유형을 생략하는 것이 효과가 있다고 생각하지는 않았지만 놀랍게도 그랬습니다.
Spikatrix 2016 년

4

C # 55

함수, 내 C 답변과 유사한 개념이지만이 시간 반환은 출력보다 짧습니다.

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

4

SAS, 35 바이트

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

그것은 벌거 벗은 함수와 같은 SAS입니다. 호출하는 데이터 단계를 추가하는 것은 (C 메인 함수와 동일) 약간 더 많을 것입니다 (9 바이트 더-Ty Alex).이 목적에는 필요하지 않습니다. 그것이 어떻게 불릴 것인가 :

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

매크로 전용 구현이 있지만 n = 1에서 유효하지 않은 매개 변수에 대한 경고를 허용하더라도 훨씬 더 길다.

사전 정의 된 매개 변수를 사용할 수 있다면 SAS는 비교적 짧은 편입니다. 언어가 가장 짧지 않은 언어는 드문 경우입니다.


데이터 세트가 입력 소스가 될 수 있는데, 이것이 SAS에서 (또는 % let 문으로) 수행하는 방법이지만 허용되지 않을 경우, 더 짧아집니다 ( 27 바이트 , 실제로 25 일 수 있음) 이것을 실행하기 직전에 데이터 세트가 생성되었다는 것을 보증한다면 [그냥 사용할 수 있습니다 set;]) :

(기존 데이터 셋)

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

(실제 코드)

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

PPCG에 관한 SO 상주 SAS 전문가를 만나서 반갑습니다. :)
Alex A.

DM 스크립팅을 알고있는 오래된 타이머 중 일부가이 점수를 가장 잘 얻을 수 있다고 확신합니다.
Joe

나는 항상 DM이 존재한다는 것을 잊고 cmdmac이 무엇인지조차 모른다! Btw, 전체 데이터 단계에서 바이트를 계산할 때 필요하지 않습니다 . 2 바이트를 절약 data a;할 수 있습니다 data;. 그러나 당신이 말했듯이, 어쨌든이 목적에는 필요하지 않습니다.
Alex A.

예, SAS의 뿌리 깊은 반사 신경을 사용하면 직관적으로 사용할 수 없습니다. :) 감사.
Joe

오래된 타이머에 대해 말하면 모든 SAS 직감을 무시하고 구식 매크로를 사용하여 몇 바이트를 절약 할 수 있다고 생각합니다. 그래도 매개 변수를 사용할 수 있는지 여부를 기억할 수 없습니다.
Alex A.

3

MATLAB / 옥타브, 41

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

문자열을 반환하는 익명 함수입니다. 이로 인해 경고가 발생하여 이전에을 호출하여 억제 할 수 있습니다 warning off.


편집기 경고를 의미합니까, 아니면 실제로 경고를 표시합니까? 또한, 나는 당신을 16 문자로 이겼습니다 ans =.
Oebele

@Oebele 경고를 출력하지만 반환 된 문자열은 영향을받지 않습니다.
FryAmTheEggman 2016 년

3

K, 21 바이트

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

예:

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

설명 ( x숫자, y문자열) :

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

STDOUT으로 출력되는 명명되지 않은 함수로. 개선을위한 @Flounderer에게 감사합니다.

현재 캐럿을 사용하여 캐럿을 n-1로 식별합니다. cat은 빈 문자열 대신 \ n의 구분 기호를 사용합니다.

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

시운전

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

function (n, x) cat (x, "\ n", rep ( "", n-1), "^", sep = "")는 48 자
Flounderer

@Flounderer 고마워요 ... 내 원래의 아이디어는 그와 비슷하지만 잘하지 못했습니다
MickyT

두 개의 초기 공백이 허용되면 다음 function(n,x)cat(" ",x,"\n",rep("",n),"^")과 같이 작동합니다. 몇 개의 문자 만 저장
Flounderer

@ Flounderer 의심하지 않습니다. strwrap도 가능성이 있지만 결국 더 길어질 것입니다.
MickyT 2016 년

1
멋지다! 나는 strwrap전에 기능을 본 적이 없다 . 그것이 무엇을 하는지를 말하는 간단한 방법이 있습니까? 설명서에서 확인할 수 없습니다.
Flounderer


2

줄리아, 27 바이트

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

이것은 정수와 문자열을 입력으로 받아 문자열을 반환하는 명명되지 않은 함수를 만듭니다. 호출하려면 이름을 지정하십시오 (예 :) f=(n,s)->....

여기서 일어나는 모든 것은 우리가 줄 바꿈, n-1공백 및 캐럿을 추가하는 것 입니다. *와 문자열 반복을 사용하여 문자열 연결을 수행 ^합니다.

언 골프 드 :

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

예:

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],'^');

명령 행에서 호출하십시오.

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

나는 지금 만 눈치 ve 다. 그러나 당신의 대답은 정확히 제 2 옵션과 같습니다. 나는 당신에게 그것을 제공하고 있습니다 : <?printf("$S\n%{$P}s",'^');. 를 교체 \n실제 개행. 총계는 5 바이트입니다. PBP4.1 이하에서만 작동합니다.
Ismael Miguel

와우, 그 의견에 많은 실수가 있습니다 ... 26 바이트 길이이며 PHP4.1에서만 작동한다는 것을 의미했습니다. 그리고 그것은 당신입니다!
Ismael Miguel

2

MATLAB, 25

이것은 매우 건방진입니다. 인쇄 할 수없는 문자를 공백으로 인쇄합니다. 다음 코드는 ans사양을 충족하는 이라는 함수를 정의합니다 .

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

따라서이 기능을 다음과 같이 호출하십시오.

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

출력을 제공합니다.

ans =

Lorem ipsum, dollar sit amet.
 ^

나는 항상 ans =Matlab 답변 의 부분을 싫어합니다 . 이것이 문제라면 6 바이트를 추가해야하지만 Matlab 답변에서 항상 이와 같이 보았습니다. 이 코드를 실행하면 변수를 덮어 쓰므 ans로 두 번째로 사용하려면 함수를 재정의해야합니다!


아주 좋아요! 나는 벡터에 문자열을 넣는 것을 몰랐습니다. 내 이해는 이것이 함수이기 때문에 문자열은 의미있는 값을 반환하고 MATLAB의 repl 환경은 인쇄를 수행한다는 것입니다. 즉, 당신은 x=ans(2, 'asdf');ans = 일을 얻지 못합니다.
FryAmTheEggman 2016 년

2

codegolf에서의 첫 촬영

자바, 133 65

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

더 많이 줄일 수 있다고 확신합니다.

이전 코드

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

당신은 System.out뭔가 를 저장할 수 있습니까 ?
Ismael Miguel

2
필요 없습니다 public. 그리고 다음 IntStream.range(1,i).forEach(j->System.out.print(" "));으로 변경하십시오 :for(;--i>0;)System.out.print(" ");
Spikatrix

@CoolGuy 아하! 때로는 단순하다
pallavt

세미콜론을 사용하기 위해 초기화 s+="\n"내부 를 이동할 수 있습니까 for()?
lirtosiast

@ThomasKwa 1 바이트 이하
pallavt

2

스위프트, 41

Swift *Array또는에 운영자가없는 것이 실망 스럽습니다 String.

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

스위프트 2.0 :{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
Kametrixom

1

SpecBAS-34

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

아포스트로피 (Apostrophe) PRINT는 새로운 행 을 강제 한 다음 커서를 올바른 위치로 이동하면됩니다.



1

자바 스크립트-52 바이트

여기 내 것이 있습니다. 아주 간단합니다.

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

용법:

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

Any string at all
      ^

일곱 번째 문자를 가리 킵니다.


멋진 저장 Scimonster O_O
Florrie

1
처럼 쓸 수 있습니다 alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^"). 그리고 당신은 2 바이트를 저장합니다. 또한 코드 실행을 보여주기 위해 코드를 stasksnippet으로 만들 수 있습니다. 그것은 줄이 먼저 오기를 기대하고, 그 위치
Ismael Miguel

1

펄 5, 31

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

2 ~ 3자를 저장할 수 있습니다. 필요하지 않은 최종 개행을 삭제 한 다음 첫 번째 개행을 리터럴 개행으로 변경하십시오. (펄은 여러 줄로 된 문자열로 괜찮습니다)
Llama Mr.

@ Mr.Llama 감사합니다.
홉스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.