ASCII Arrow 화살표 생성기


13

명세서

숫자가 주어지면 size n의 ASCII "meme arrow"(보다 큰 기호 >)를 출력하십시오 n.

n 항상 0보다 큰 양의 정수입니다.

n = 2

\
 \
 /
/

n = 5

\
 \
  \
   \
    \
    /
   /
  /
 /
/

샘플 코드

올바른 결과를 반환하는 Crystal로 작성된 샘플 프로그램이 있습니다. 로 실행하십시오 ./arrow 10.

arrow.cr:

def f(i)
        i.times { |j|
                j.times { print ' ' }
                puts "\\"
        }
        i.times { |j|
                (i-j-1).times { print ' ' }
                puts '/'
        }
end

f(ARGV[0].to_i)

규칙

  • 이것은 입니다. 가장 짧은 답변이 이깁니다. 그러나 가장 짧은 답변은 시간이 지남에 따라 변경 될 수 있으므로 답변을 선택하지 않습니다.
  • 표준 허점은 허용되지 않습니다.

1
이것이 복제본이 아님을 확신합니까 (즉, 샌드 박스를 작성 했습니까)? 나는 이것이 가능할 것이라고 생각하지만 검색하는 것은 거의 불가능합니다.
내 대명사는 monicareinstate입니다.

1
n0이 될 수 있습니까 ?
xnor

6
이 공통 기호를 "meme 화살표"라고 부르는 것은 꽤 어리석은 생각입니다. 그들은 분명히 코미디 쉐브론입니다.
분산

4
@Christian 그들은 실제로 재미있는 각도입니다
dkudriavtsev

1
@ArtemisFowl 나는 그들이 흥미로운 증가라고 생각
dkudriavtsev

답변:







4

C64Mini / C64 BASIC (및 기타 CBM BASIC 변형), 52 개의 토큰 화 된 BASIC 바이트 사용

 0INPUTN:N=N-1:FORI=0TON:PRINTTAB(I)"\":NEXT:FORI=NTO0STEP-1:PRINTTAB(I)"/":NEXT

exaplantion에 대한 난독 화 버전은 다음과 같습니다.

 0 INPUT N
 1 LET N=N-1
 2 FOR I=0 TO N
 3  PRINT TAB(I);"\"
 4 NEXT I
 5 FOR I=N TO 0 STEP -1
 6  PRINT TAB(I);"/"
 7 NEXT I

명령이 0 인덱싱 N되면 줄 0에 입력 된 숫자는 1 씩 줄어 듭니다 TAB. FOR/NEXT2 ~ 4 행 및 5 ~ 7 행 의 루프는 meme화살표가 각각있는 경우 상단과 하단을 출력합니다 ( 그래픽 모드 소스 에서 이동 M및 이동 으로 표시 ).N

코모도어 C64 meme arrow


1
Commodore Basic에서 모든 키워드를 축약 할 수 있다는 것을 알고 있습니까? : 여기 링크입니다 c64-wiki.com/wiki/BASIC_keyword_abbreviation는 예를 들어, for할 수 있습니다 fO( f- shoft o) print이다 ?
gaborsch은

1
52 바이트는 Code Golf에서 오해의 소지가 있으며 바이너리는 계산하지 않고 소스 코드 만 포함합니다. 그것은 이와 같은 것이어야합니다 : 0inputn:n=n-1:fOi=0ton:?tA(i)"\":nE:fOi=0ton:?tA(i)"/":nE-57 바이트가 걸립니다.
gaborsch 2016 년

1
여기에서 논의 된 것처럼-> codegolf.meta.stackexchange.com/questions/11553/… 사용되는 메모리의 양을보다 잘 나타내는 토큰을 계산합니다.
Shaun Bebbers

1
아, 몰랐어 이것에 대한 결정이 있습니까? 대답조차 받아 들여지지 않았습니다.
gaborsch 2016 년

1
나의 첫번째 컴퓨터는 C16이었다. 나는 그것에 대해서도 많은 어셈블리를했다. C16은 기본 3,5, 라인 당 80 문자를 가지고 있었고, ROM 목록이 설명 된 책을 가지고 있었기 때문에 토큰 화와 리스팅이 어떻게 작동하는지 정확하게 알고있었습니다.
gaborsch

4

MarioLANG , 719 677 바이트

+
+
+
+
+
+         ((((+)+++++)))<
+>======================"
+)++++++)+++++++++++((-[!)
========================#=-
) ![-    <+;)+++)---)++++)<
)=#======"=================
) >)+)+((!
+ "======#
         <))))).(((((((<
 ========">============"
>)+)+((-[!+))        -[!((((((((.)).))))+(-[!)
"========#=============#====================#<
!)                                          <
#==========================================="
                  >(((((.)))>
                  "========<"========
 ![-)).))).(((((((![-    ))+![-((+)+)<((![<
 #================#=========#========"==#="===
 >                                   !  >-!
 "===================================#  "=#

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

이것은 예상보다 어렵습니다 ...


4

brainfuck , 125 바이트

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

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

++++++++++[->+>+++++++++>+++<<<]>>++>++>    ; Initialize with " \"
,                                           ; Get input
[->                                         ; loop and decrement n 
    [->+<<<.>>]                             ; output number of spaces, copy n
    <<<.                                    ; output \
    <.                                      ; output newline
    >>>>                                    
    >[-<+>]<+                               ; copy copy of n back to original place 
<]
<<[--<<+>>]<<+>>                            ; change "\" to "/"
>>>                             
[                                           ; second loop for bottom half
 -                                          ; decrement n
 [-<+<.>>]                                  ; output n spaces
 <<<<<.>.                                   ; output \ and newline
 >>>[->+<]>                                 ; copy n back
]

4

루비 , 111 99 77 73 68 64 57 56 바이트

Benjamin Urquhart 덕분에 -12 바이트 , manatwork 덕분에 -43, Value Ink 덕분에 -2 바이트 .

->i{s=[];puts (0...i).map{|j|s=(p=' '*j)+?/,*s;p+?\\},s}

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

설명:

f=->i{                      # instead of a function, use a lambda
  s=[]                      # needs a helper variable *now*, for scope
  puts(                     # puts takes arbitrary num of args; \n after each
    (0...i).map{|j|         # not from 0 to i but from 0 to i-1 (*three* dots)
      s=(
        p=' '*j             # p will remain in scope inside of .map,
      )
      +?/                   # character literal instead of string
      ,*s                   # essentially appending to the array

      p+?\\                 # p is what's returned by .map, not s!

    },                      # up until here, 1st arg to display
    s                       # NOW, as the *2nd* arg, s is displayed
  )
}

대체 (그러나 더 긴) 솔루션

친구가이 답을 읽은 다음 몇 가지 방법을 더 시도했습니다. 그것들을 여기에두면 광대 한 웹간에 길을 잃지 않습니다.

주입 및 시프트 해제, 72 바이트

->n{puts (0...n).inject([]){|s,i|i=' '*(n-1-i);s.unshift i+?\\;s<<i+?/}}

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

downto, inject 및 unshift, 80 바이트

->n{puts n.downto(1).map{|i|' '*(i-1)}.inject([]){|s,i|s<<i+?/;s.unshift i+?\\}}

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

흥미로운 두 개의 중첩되지 않은 루프, 127 바이트

->n{
r=->s,c{s[0..-(c+1)],s[-c..-1]=s[c..-1],s[0..c-1];s};
n.times{|i|puts r[' '*n+?\\,n-i]}
n.times{|i|puts r[' '*n+?/,i+1]}
}

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


그 공백을 많이 제거 할 수 없습니까?
Benjamin Urquhart

1
예, 총 12 바이트입니다. 감사합니다! 이것은 내가 코드 골프 게임에 무엇인가를 제출 한 것은 처음이었다 ...
Sixtyfive

그렇다면 Ruby의 골프 팁 또는 <모든 언어>의 골프 팁을 찾을 수 있습니다 .
manatwork 2009 년

패딩의 내부 루프를 String#rjust( 온라인으로 시도하십시오! )로 바꿀 수 있습니다.
manatwork 2009 년

여기에 위에서 언급 한 2 가지 컬렉션의 팁 중 일부를 적용하여 57자를 줄였습니다. 온라인으로 사용해보십시오!
manatwork 2016 년


3

T-SQL 코드, 80 바이트

DECLARE @ INT=3

,@z INT=0
x:PRINT
space(@-abs(@-@z-.5))+char(92-@z/@*45)SET
@z+=1IF @z<@*2GOTO x

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

T-SQL 쿼리, 96 바이트

이 작업을 온라인으로하려면 약간의 변경이 필요했습니다. 행 앞의 공백은 온라인 스 니펫에 표시되지 않습니다. 그래서 대신 ascii 160을 사용하고 있습니다. Management Studio에서 실행할 때 결과를 텍스트로 표시하도록 설정을 변경하면이 게시 된 스크립트에 올바른 공백이 생깁니다.

DECLARE @ INT=3
SELECT space(@-abs(@-number-.5))+char(92-number/@*45)FROM
spt_values WHERE number<@*2and'p'=type

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



2

, 5 바이트

↘N‖M↓

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

↘N

숫자를 입력하고 \해당 길이의 대각선을 s로 인쇄하십시오 .

‖M↓

선을 수직으로 반사하십시오.


2

APL (NARS), 40 자, 80 바이트

{f←{⍺,⍨⍵⍴' '}⋄⊃('\'f¨k),('/'f¨⌽k←¯1+⍳⍵)}

테스트:

  h←{f←{⍺,⍨⍵⍴' '}⋄⊃('\'f¨k),('/'f¨⌽k←¯1+⍳⍵)}
  h 2
\ 
 \
 /
/ 
  h 5
\    
 \   
  \  
   \ 
    \
    /
   / 
  /  
 /   
/    





1

나뭇 가지, 115 바이트

문자열을 거꾸로 빌드하여 결국 "반환"합니다.

매크로를 사용하여 모든 결과를 생성하십시오.

{%macro a(N,s="")%}{%for i in N..1%}{%set s=('%'~i~'s
'~s~'%'~i~'s
')|format('\\','/')%}{%endfor%}{{s}}{%endmacro%}

이 매크로는 파일에 있어야하며 다음과 같이 가져옵니다.

{% import 'macro.twig' as a %}

{{ a.a(<value>) }}

https://twigfiddle.com/5hzlpz에서 시도 할 수 있습니다 ( "원시 결과 표시"클릭).



1

MATL, 14 13 12 바이트

Xy92*t45-Pvc

@LuisMendo로 1 바이트 절약

설명

        % Implicitly grab the input as an integer
Xy      % Create an identity matrix this size
92*     % Multiply by 92 (ASCII for '\')
t       % Duplicate the matrix
45-     % Subtract 45 from every element yielding 47 (ASCII for '/') on the diagonal
        % and -45 everywhere else
P       % Vertically flip this matrix
v       % Vertically concatenate the two matrices
c       % Convert to characters (negative numbers are replaced with a space)
        % Implicitly display the result

MATL Online 에서 사용해보십시오


@LuisMendo 업데이트! 감사!
Suever

1

파이썬 3 , 90 83 바이트

lambda n:'\n'.join([' '*i+'\\'for i in range(n)]+[' '*(n+~i)+'/'for i in range(n)])

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

@squid 덕분에 -7 바이트


83 바이트 이지만 여전히 다운 될 수 있다고 생각합니다.
Monica Monica

1
이것이 가능 했으면 좋겠다 .
Artemis는 여전히


네, 잊어 버렸습니다. 아마 당신은 그것을 제출해야합니다!
Artemis는 여전히

1

록 스타, 133 바이트

여기 온라인으로 사용해보십시오 !

F takes N,S
If N is 0
Give back N

Say S+"\"
Let T be S+" "
Let M be N-1
F taking M,T
Say S+"/"

Listen to X
F taking X,""

Rockstar는 문자열 연산으로 유명하지 않기 때문에 비교적 많은 코드가 필요합니다 (재귀 적으로 더 길었습니다).

화살표의 크기가 입력으로 사용됩니다.



1

\ / \ /> , 74 바이트

jp100o
-84*}!o:?!x1
@+:q:p=?x:o~$:0(pa"\/"q?$~}}:
x2-:p$1-y$:0(?
.{suh?!;2

설명 : (시작점을 기준으로 회전 한 선)

jp100o                        //setup
:?!x1-84*}!                   //add leading spaces, loop and decrement until 0
~$:0(pa"\/"q?$~}}:@+:q:p=?x:o //add correct slash, go back to loop or switch sides
$:0(?x2-:p$1-y                //flip direction state or continue to print
{suh?!;2.                     //remove extra data and print stack

1
\/\/> (pronounced wɜrm)고마워, 난 싫어 (jk, 나는 그것을 시도 기대하고 있습니다)
Jo King

@ JoKing hahaha, 내 소매에 내 영감을 입어야합니다. (감사합니다!)
torcado




0

SimpleTemplate , 100 바이트

이것은 매우 재미있는 도전 이었지만 언어의 일부 버그로 인해 최적화하기가 어려웠습니다.

{@set_ argv.0}{@while_}{@callstr_repeat intoS" ",_}{@setO S,"\\\n",O,S,"/\n"}{@incby-1_}{@/}{@echoO}

기본적으로 값을 거꾸로 순환하여 문자열을 중간에서 밖으로 작동시킵니다.


어떻게 대답해야 하는가

버그로 인해 코드가 제대로 해석되지 않았습니다.

컴파일러에 버그가없는 경우 (86 바이트) 코드는 다음과 같습니다.

{@forfrom argv.0to0step-1}{@callrepeat intoS" ",_}{@setO S,"\\
",O,S,"/
"}{@/}{@echoO}

아, 적어도 해결책은 효과가 있습니다 : x


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