ASCII Meme Arrow Generator

13

Spesifikasi

Dengan diberi nomor n, tampilkan ukuran "panah meme" ASCII (lebih besar dari simbol, >) dari ukuran n.

n akan selalu berupa bilangan bulat positif, lebih besar dari 0.

Contohnya

n = 2

\
 \
 /
/

n = 5

\
 \
  \
   \
    \
    /
   /
  /
 /
/

Kode sampel

Berikut adalah contoh program, yang ditulis dalam Crystal, yang mengembalikan hasil yang benar. Jalankan sebagai ./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)

Aturan

  • Ini adalah . Jawaban terpendek menang. Namun, saya tidak akan memilih jawaban, karena jawaban terpendek dapat berubah seiring waktu.
  • Tidak ada celah standar.
dkudriavtsev
sumber
1
Apakah Anda yakin ini bukan duplikat (artinya, apakah Anda sandbox ini)? Saya pikir ini mungkin terjadi, tetapi hampir tidak mungkin untuk mencari.
kata ganti saya adalah monicareinstate
1
Bisa nnol?
xnor
6
Saya pikir ini konyol untuk menyebut simbol umum ini sebagai "panah meme". Mereka jelas chevron komedi.
bubar
4
@Christian Mereka benar-benar sudut yang lucu
dkudriavtsev
1
@ArtemisFowl Saya pikir mereka peningkatan yang menarik
dkudriavtsev

Jawaban:

8

C (gcc) , 56 byte

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

Cobalah online!

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

Python 2 , 54 byte

f=lambda n,p='':n*'?'and p+'\\\n'+f(n-1,p+' ')+p+'/\n'

Cobalah online!

Output dengan baris baru yang tertinggal.

Tidak
sumber
5

05AB1E , 6 byte

'\3.Λ∊

Cobalah online!

Penjelasan

   .Λ    # draw
'\       # the string "\"
         # of length input
  3      # in the south-eastern direction
     ∊   # then vertically mirror it
Emigna
sumber
4

C64Mini / C64 BASIC (dan varian CBM BASIC lainnya), 52 byte BASIC tokenized yang digunakan

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

Berikut ini adalah versi non-kebingungan untuk 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

Angka apa pun yang dimasukkan ke Ndalam baris nol dikurangi satu karena TABperintah diindeks nol; The FOR/NEXTloop dalam garis dua hingga empat dan lima sampai tujuh keluaran maka bagian atas dan bawah jika memepanah masing-masing (diwakili oleh bergeser Mdan bergeser Nmode grafis sumber )

Panah meme Commodore C64

Shaun Bebbers
sumber
1
Tahukah Anda bahwa di Commodore Basic semua kata kunci dapat disingkat? Berikut tautannya: c64-wiki.com/wiki/BASIC_keyword_abbreviation Misalnya, fordapat fO( f- shoft o), printis ?, etc.
gaborsch
1
52 byte menyesatkan dalam Code Golf, binari tidak dihitung, hanya kode sumbernya. Ini akan menjadi sesuatu seperti ini: 0inputn:n=n-1:fOi=0ton:?tA(i)"\":nE:fOi=0ton:?tA(i)"/":nE- dibutuhkan 57 byte.
gaborsch
1
Seperti dibahas di sini -> codegolf.meta.stackexchange.com/questions/11553/... Saya menghitung token yang digunakan karena ini lebih mewakili berapa banyak memori yang digunakan.
Shaun Bebbers
1
Oh, saya tidak tahu ini. Apakah ada keputusan tentang ini? Bahkan jawabannya belum diterima di sana.
gaborsch
1
Komputer pertama saya adalah C16, saya melakukan banyak perakitan juga, jadi jangan tersinggung, saya suka Commodore. C16 memiliki Basic 3,5, 80 karakter per baris, saya juga punya buku dengan daftar ROM yang dijelaskan, jadi saya tahu persis bagaimana tokenization dan listing bekerja,
gaborsch
4

Ruby , 111 99 77 73 68 64 57 56 byte

-12 byte terima kasih kepada Benjamin Urquhart , -43 terima kasih kepada manatwork dan -2 byte terima kasih kepada Value Ink .

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

Cobalah online!

Penjelasan:

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

Solusi Alternatif (tetapi lebih lama)

Seorang teman membaca jawaban ini dan kemudian mencoba mencari beberapa pendekatan lagi. Menempatkan mereka di sini juga, sehingga mereka tidak kehilangan jalinan yang luas.

menyuntikkan dan unshift, 72 byte

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

Cobalah online!

downto, inject dan unshift, 80 byte

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

Cobalah online!

menarik, dua loop tidak bersarang, 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]}
}

Cobalah online!

enam puluh lima
sumber
Tidak bisakah banyak ruang kosong itu dihapus?
Benjamin Urquhart
1
Ya, total 12 byte, terima kasih! Ini adalah pertama kalinya saya mengirimkan sesuatu ke permainan kode golf ...
sixtyfive
Maka Anda mungkin menemukan Tips menarik untuk bermain golf di Ruby , atau bahkan Tips untuk bermain golf di <semua bahasa> .
manatwork
Anda bisa mengganti loop bagian dalam dengan padding String#rjust ( Coba online! ).
manatwork
Di sini saya menerapkan beberapa tips dari 2 koleksi yang disebutkan di atas untuk menguranginya menjadi 57 karakter: Cobalah online!
manatwork
3

Perl 5 -p , 36 byte

$\=($q=$"x$_)."\\
$\$q/
"while$_--}{

Cobalah online!

Xcali
sumber
3

Kode 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

Cobalah online

Permintaan T-SQL, 96 byte

Untuk membuat ini berfungsi secara online, saya harus membuat beberapa perubahan kecil. Spasi di awal baris tidak ditampilkan di cuplikan online. Jadi saya menggunakan ascii 160 saja. Saat berjalan di studio manajemen, dimungkinkan untuk mengubah pengaturan untuk menampilkan hasil sebagai teks, yang akan menghasilkan ruang yang benar dalam skrip yang diposting ini.

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

Cobalah online

t-clausen.dk
sumber
3

MarioLANG , 719 677 byte

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

Cobalah online!

Ini lebih sulit dari yang diharapkan ...

Charlie
sumber
3

brainfuck , 125 byte

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

Cobalah online!

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

Arang , 5 byte

↘N‖M↓

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

↘N

Masukkan angka dan cetak garis diagonal \s dengan panjang itu.

‖M↓

Refleksikan garis secara vertikal.

Neil
sumber
1

APL (NARS), 40 karakter, 80 byte

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

uji:

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

Retina 0.8.2 , 32 byte

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

Cobalah online! Penjelasan:

.+
$* ¶$&$* 

Hasilkan dua garis nspasi.

\G.
¶$`\

Ubah garis atas menjadi \diagonal.

r`.\G
$'/¶

Ubah garis bawah menjadi /diagonal.

Neil
sumber
1

C (gcc) , 67 65 byte

-2 bytes berkat ceilingcat

f(n,i){for(i=~n;i++<n;)i&&printf("%*c\n",n-abs(i)+1,"/\\"[i<0]);}

Cobalah online!

gastropner
sumber
1

PowerShell , 50 byte

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

Cobalah online!

Akan melihat ke membuatnya jadi hanya melewati rentang sekali. Tidak buruk untuk metode no brain sekalipun.

Veskah
sumber
1

Ranting, 115 byte

Bangun string ke belakang, "kembalikan" pada akhirnya.

Menggunakan makro untuk menghasilkan semua hasil.

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

Makro ini harus dalam file, dan diimpor seperti ini:

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

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

Anda dapat mencobanya di https://twigfiddle.com/5hzlpz (klik "Tampilkan hasil mentah").

Ismael Miguel
sumber
1

Haskell , 52 49 byte

-3 byte terima kasih kepada Sriotchilism O'Zaic .

unlines.g
g 0=[]
g n="\\":map(' ':)(g$n-1)++["/"]

Cobalah online!

Joseph Sible-Reinstate Monica
sumber
1
Anda dapat menyimpan byte dengan g$n-1alih - alih g(n-1). Anda juga tidak perlu menghitung f=karena ftidak pernah dirujuk.
Posting Rock Garf Hunter
1

MATL, 14 13 12 byte

Xy92*t45-Pvc

1 Byte disimpan berkat @LuisMendo

Penjelasan

        % 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

Cobalah di MATL Online

Suever
sumber
@LuisMendo Diperbarui! Terima kasih!
Suever
1

Python 3 , 90 83 byte

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

Cobalah online!

-7 byte terima kasih kepada @squid

Artemis masih tidak percaya pada SE
sumber
83 byte , tapi saya merasa masih bisa turun
Pasang kembali Monica
1
Saya berharap ini mungkin.
Artemis masih tidak percaya
Segera ...
Pasang kembali Monica
Oh ya aku lupa tentang itu. Mungkin Anda harus mengirimkannya!
Artemis masih tidak percaya
1

Rockstar, 133 byte

Coba online di sini !

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

Karena Rockstar tidak terkenal dengan operasi string, dibutuhkan relatif banyak kode untuk melakukannya (secara rekursif bahkan lebih lama).

Ukuran panah diambil sebagai input.

gaborsch
sumber
1

PHP ,79 63 61 byte

function f($x,$s=''){if($x)echo"$s\\
",f($x-1,"$s "),"$s/
";}

Cobalah online!

Rekursif dalam PHP.

-12 byte oleh @manatwork

640KB
sumber
1
Lebih baik hitung mundur. Cobalah online! .
manatwork
@manatwork sangat sangat bagus!
640KB
1

\ / \ /> , 74 byte

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

Penjelasan: (garis diputar berdasarkan titik awal)

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
torcado
sumber
1
\/\/> (pronounced wɜrm)Terima kasih, aku benci itu. (jk, saya tidak sabar untuk mencobanya)
Jo King
@JoKing hahaha, harus memakai inspirasiku di lengan bajuku. (terima kasih!)
torcado
0

SimpleTemplate , 100 byte

Ini adalah tantangan yang cukup menyenangkan, tetapi beberapa bug dalam bahasa membuatnya sulit untuk dioptimalkan.

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

Pada dasarnya, putarankan nilai-nilai ke belakang, gunakan string dari tengah ke luar.


Bagaimana jawabannya seharusnya

Karena bug, kode tidak ditafsirkan dengan benar.

Beginilah kodenya, jika kompiler tidak memiliki bug (86 byte):

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

Oh, well, setidaknya solusinya bekerja: x

Ismael Miguel
sumber