Máy phát điện mũi tên Meme ASCII


13

Thông số kỹ thuật

Cho một số n, xuất ra một "mũi tên meme" ASCII (lớn hơn ký hiệu, >) có kích thước n.

n sẽ luôn là số nguyên dương, lớn hơn 0.

Ví dụ

n = 2

\
 \
 /
/

n = 5

\
 \
  \
   \
    \
    /
   /
  /
 /
/

Mã mẫu

Đây là một chương trình mẫu, được viết bằng Crystal, trả về kết quả chính xác. Chạy nó như ./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)

Quy tắc

  • Đây là . Câu trả lời ngắn nhất sẽ thắng. Tuy nhiên, tôi sẽ không chọn câu trả lời, vì câu trả lời ngắn nhất có thể thay đổi theo thời gian.
  • Sơ hở tiêu chuẩn không được phép.

1
Bạn có chắc chắn đây không phải là một bản sao (nghĩa là bạn đã làm hộp cát này chưa)? Tôi nghĩ rằng điều này có thể xảy ra, nhưng nó gần như không thể tìm kiếm.
đại từ của tôi là monicareinstate

1
nthể bằng không?
xnor

6
Tôi nghĩ thật ngu ngốc khi gọi biểu tượng phổ biến này là "mũi tên meme". Họ rõ ràng là những người hài hước.
phân tán

4
@Christian Chúng thực sự là những góc thú vị
dkudriavtsev

1
@ArtemisFowl Tôi nghĩ rằng họ đã tăng thú vị
dkudriavtsev

Câu trả lời:



8

C (gcc) , 56 byte

f(n,i){for(i=-n;n;printf("%*c\n",i?++i+n:n--,i?92:47));}

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

f(n,i){for(i=-n;i;printf("%*c\n",  ++i+n    ,  92   ));     //first print descending '\'s
       for(    ;n;printf("%*c\n",        n--,     47));}    // then print returning  '/'s




4

C64Mini / C64 BASIC (và các biến thể CBM BASIC khác), 52 byte BASIC được mã hóa được sử dụng

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

Đây là phiên bản không bị xáo trộn cho 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

Số đã từng được nhập vào Ndòng 0 được giảm đi một vì TABlệnh được lập chỉ mục bằng 0; Các FOR/NEXTvòng lặp trong các dòng từ hai đến bốn và năm đến bảy sau đó xuất ra phần trên và phần dưới nếu mememũi tên tương ứng (được biểu thị bằng một sự thay đổi Mvà dịch chuyển Ntrong nguồn chế độ đồ họa )

Mũi tên memore C64


1
Bạn có biết rằng trong Commodore Basic tất cả các từ khóa có thể được viết tắt? Dưới đây là một liên kết: c64-wiki.com/wiki/BASIC_keyword_abbreviation Ví dụ, forcó thể fO( f- shoft o), print?vv
gaborsch

1
52 byte là sai lệch trong Code Golf, các nhị phân không được tính, chỉ là mã nguồn. Nó shoulf là một cái gì đó ike này: 0inputn:n=n-1:fOi=0ton:?tA(i)"\":nE:fOi=0ton:?tA(i)"/":nE- phải mất 57 byte.
gaborsch

1
Như đã thảo luận ở đây -> codegolf.meta.stackexchange.com/questions/11553/ Đổi Tôi đếm các mã thông báo được sử dụng vì đây là đại diện nhiều hơn cho số lượng bộ nhớ đang được sử dụng.
Shaun Bebbers

1
Ồ, tôi không biết điều này. Có một quyết định về điều này? Ngay cả câu trả lời đã không được chấp nhận ở đó.
gaborsch

1
Máy tính đầu tiên của tôi là một chiếc C16, tôi cũng đã lắp ráp rất nhiều thứ, vì vậy không có gì khó chịu, tôi yêu Hàng hóa. C16 có Basic 3,5, 80 ký tự trên mỗi dòng, tôi cũng có một cuốn sách với danh sách ROM được giải thích, vì vậy tôi biết chính xác cách thức mã thông báo và danh sách hoạt động,
gaborsch

4

Ruby , 111 99 77 73 68 64 57 56 byte

-12 byte nhờ vào Benjamin Urquhart , -43 nhờ vào thao tác và -2 byte nhờ Value Ink .

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

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

Giải trình:

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

Giải pháp thay thế (nhưng dài hơn)

Một người bạn đọc câu trả lời này và sau đó cố gắng đưa ra một vài cách tiếp cận khác. Đặt chúng ở đây cũng vậy, để chúng không bị lạc vào các dải lớn.

tiêm và không dịch chuyển, 72 byte

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

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

dowo, tiêm và không dịch chuyển, 80 byte

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

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

hấp dẫn, hai vòng lặp không lồng nhau, 127 byte

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

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


Không thể xóa rất nhiều khoảng trắng đó?
Benjamin Urquhart

1
Vâng, tổng cộng 12 byte, cảm ơn bạn! Đây là lần đầu tiên tôi gửi bất cứ thứ gì vào một trò chơi golf mã ...
mươi

Sau đó, bạn có thể tìm thấy các Mẹo thú vị khi chơi gôn trong Ruby hoặc thậm chí là Mẹo chơi gôn bằng <tất cả các ngôn ngữ> .
manatwork

Bạn có thể thay thế các vòng bên trong để đệm bằng String#rjust( Hãy thử trực tuyến! ).
manatwork

Ở đây tôi đã áp dụng một số mẹo từ 2 bộ sưu tập được đề cập ở trên để giảm xuống còn 57 ký tự: Hãy thử trực tuyến!
manatwork


3

Mã T-SQL, 80 byte

DECLARE @ INT=3

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

Dùng thử trực tuyến

Truy vấn T-SQL, 96 byte

Để thực hiện công việc này trực tuyến, tôi đã phải thực hiện một số thay đổi nhỏ. Dấu cách ở đầu một hàng không hiển thị trong đoạn mã trực tuyến. Vì vậy, tôi đang sử dụng ascii 160 thay thế. Khi chạy trong studio quản lý, có thể thay đổi cài đặt để hiển thị kết quả dưới dạng văn bản, điều này sẽ dẫn đến khoảng trắng chính xác trong tập lệnh được đăng này.

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

Dùng thử trực tuyến



3

MarioLANG , 719 677 byte

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

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

Điều này khó hơn dự kiến ​​...


3

Brainfuck , 125 byte

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

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

++++++++++[->+>+++++++++>+++<<<]>>++>++>    ; 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
]

1

Than , 5 byte

↘N‖M↓

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

↘N

Nhập một số và in một đường chéo của \s có độ dài đó.

‖M↓

Phản ánh đường thẳng đứng.


1

APL (NARS), 40 ký tự, 80 byte

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

kiểm tra:

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

1

Võng mạc 0.8.2 , 32 byte

.+
$* ¶$&$* 
\G.
¶$`\
r`.\G
$'/¶

Hãy thử trực tuyến! Giải trình:

.+
$* ¶$&$* 

Tạo hai dòng nkhông gian.

\G.
¶$`\

Biến đường trên cùng thành một \đường chéo.

r`.\G
$'/¶

Biến đường dưới cùng thành một /đường chéo.




1

PowerShell , 50 byte

param($n)0..--$n|%{' '*$_+'\'}
$n..0|%{' '*$_+'/'}

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

Sẽ xem xét để làm cho nó để nó chỉ đi qua phạm vi một lần. Không tệ cho phương pháp không có não mặc dù.


1

Cành, 115 byte

Xây dựng chuỗi ngược, cuối cùng "trả lại" nó.

Sử dụng một macro để tạo ra tất cả các kết quả.

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

Macro này phải ở trong một tệp và được nhập như thế này:

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

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

Bạn có thể dùng thử trên https://twigfiddle.com/5hzlpz (nhấp vào "Hiển thị kết quả thô").



1

MATL, 14 13 12 byte

Xy92*t45-Pvc

1 byte được lưu nhờ vào @LuisMendo

Giải trình

        % 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

Dùng thử tại MATL Online


@LuisMendo Cập nhật! Cảm ơn!
Suever

1

Python 3 , 90 83 byte

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

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

-7 byte nhờ @squid


83 byte , nhưng tôi cảm thấy như nó vẫn có thể đi xuống
Phục hồi lại

1
Tôi ước điều này là có thể.
Artemis vẫn không tin SE


Ồ vâng tôi quên mất điều đó. Có lẽ bạn nên gửi nó!
Artemis vẫn không tin SE

1

Rockstar, 133 byte

Dùng thử trực tuyến tại đây !

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,""

Vì Rockstar không nổi tiếng với các hoạt động chuỗi, nên cần khá nhiều mã để làm điều đó (đệ quy thậm chí còn lâu hơn).

Kích thước của mũi tên được lấy làm đầu vào.



1

\ / \ /> , 74 byte

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

Giải thích: (các dòng được xoay dựa trên điểm bắt đầu)

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)Cảm ơn, tôi ghét nó. (jk, tôi mong được dùng thử)
Jo King

@JoKing hahaha, phải mặc cảm hứng của tôi trên tay áo của tôi. (cảm ơn!)
torcado




0

Đơn giản , 100 byte

Đây là một thử thách khá thú vị, nhưng một số lỗi trong ngôn ngữ khiến nó khó tối ưu hóa.

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

Về cơ bản, chu kỳ xuyên qua các giá trị ngược, làm việc chuỗi từ giữa ra.


Câu trả lời nên như thế nào

Do các lỗi, mã không được giải thích đúng.

Đây là cách mã sẽ như thế nào, nếu trình biên dịch không có bất kỳ lỗi nào (86 byte):

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

Oh, tốt, ít nhất là giải pháp hoạt động: x


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.