ASCII Meme Arrow Generator

13

Dane techniczne

Podając liczbę n, wypisz „strzałkę mema” ASCII (większą niż symbol >) o rozmiarze n.

n zawsze będzie dodatnią liczbą całkowitą, większą niż 0.

Przykłady

n = 2

\
 \
 /
/

n = 5

\
 \
  \
   \
    \
    /
   /
  /
 /
/

Przykładowy kod

Oto przykładowy program napisany w Crystal, który zwraca poprawne wyniki. Uruchom jako ./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)

Zasady

  • To jest . Najkrótsza odpowiedź wygrywa. Nie wybiorę jednak odpowiedzi, ponieważ najkrótsza odpowiedź może z czasem ulec zmianie.
  • Standardowe luki są niedozwolone.
dkudriavtsev
źródło
1
Czy jesteś pewien, że to nie jest duplikat (to znaczy, czy to piaskownica)? Myślę, że tak może być, ale wyszukiwanie jest trochę prawie niemożliwe.
mój zaimek to monicareinstate
1
Czy może nbyć zero?
xnor
6
Myślę, że niemądrze jest nazywać ten wspólny symbol „strzałką mema”. To oczywiście szewrony komediowe.
rozproszyć
4
@Christian Oni są zabawnymi kątami
dkudriavtsev
1
@ArtemisFowl Myślałem, że były interesujące wzrosty
dkudriavtsev

Odpowiedzi:

8

C (gcc) , 56 bajtów

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

Wypróbuj 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
źródło
5

05AB1E , 6 bajtów

'\3.Λ∊

Wypróbuj online!

Wyjaśnienie

   .Λ    # draw
'\       # the string "\"
         # of length input
  3      # in the south-eastern direction
     ∊   # then vertically mirror it
Emigna
źródło
4

C64Mini / C64 BASIC (i inne warianty CBM BASIC), użyto 52 tokenizowanych bajtów BASIC

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

Oto nie zaciemniona wersja egzaplantacji:

 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

Jakakolwiek liczba wprowadzona Nw linii zero jest zmniejszana o jeden, ponieważ TABpolecenie jest indeksowane do zera; Te FOR/NEXTpętle dwóch linii przez cztery do pięciu do siedmiu przez wyjście następnie górnej i dolnej części, gdy memestrzałka odpowiednio (reprezentowany przez przesunięty Mi przesunięty Nw grafice trybu źródła )

Commodore C64 meme arrow

Shaun Bebbers
źródło
1
Czy wiesz, że w Commodore Basic wszystkie słowa kluczowe można skracać? Oto link: c64-wiki.com/wiki/BASIC_keyword_abbreviation Na przykład formoże być fO( f- shoft o), printis ?itd.
gaborsch
1
52 bajty są mylące w Code Golf, pliki binarne się nie liczą, tylko kod źródłowy. Powinno to być coś takiego: 0inputn:n=n-1:fOi=0ton:?tA(i)"\":nE:fOi=0ton:?tA(i)"/":nE- zajmuje 57 bajtów.
gaborsch
1
Jak omówiono tutaj -> codegolf.meta.stackexchange.com/questions/11553/ ... Liczę używane tokeny, ponieważ są one bardziej reprezentatywne dla ilości używanej pamięci.
Shaun Bebbers,
1
Och, nie wiedziałem tego. Czy jest na to decyzja? Nawet odpowiedź nie została tam zaakceptowana.
gaborsch
1
Mój pierwszy komputer to C16, na tym też zrobiłem dużo montażu, więc bez urazy, kocham Commodore. C16 miał Basic 3,5, 80 znaków w wierszu, miałem także książkę z wyjaśnieniem list ROM, więc dokładnie wiedziałem, jak działa tokenizacja i lista,
gaborsch
4

MarioLANG , 719 677 bajtów

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

Wypróbuj online!

To było trudniejsze niż oczekiwano ...

Charlie
źródło
4

pieprzenie mózgu , 125 bajtów

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

Wypróbuj 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
źródło
4

Rubin , 111 99 77 73 68 64 57 56 bajtów

-12 bajtów dzięki Benjaminowi Urquhartowi , -43 dzięki manatwork i -2 bajtów dzięki Value Ink .

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

Wypróbuj online!

Wyjaśnienie:

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

Alternatywne (ale dłuższe) rozwiązania

Znajomy przeczytał tę odpowiedź, a następnie próbował wymyślić kilka innych podejść. Umieszczam je również tutaj, aby nie zgubiły się w rozległych sieciach.

wstrzykiwanie i cofanie, 72 bajty

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

Wypróbuj online!

downto, wstrzykiwanie i cofanie, 80 bajtów

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

Wypróbuj online!

intrygujące, dwie nie zagnieżdżone pętle, 127 bajtów

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

Wypróbuj online!

Sześćdziesiąt pięć
źródło
Czy nie można usunąć wielu białych znaków?
Benjamin Urquhart,
1
Tak, łącznie 12 bajtów, dziękuję! Po raz pierwszy
zgłosiłem
Wtedy możesz znaleźć ciekawe Porady dotyczące gry w Ruby , a nawet Porady dotyczące gry w <wszystkie języki> .
manatwork
Możesz wymienić wewnętrzne pętle na wypełnienie String#rjust( Wypróbuj online! ).
manatwork
Tutaj zastosowałem kilka wskazówek z wyżej wymienionych 2 kolekcji, aby zmniejszyć go do 57 znaków: Wypróbuj online!
manatwork
3

Kod T-SQL, 80 bajtów

DECLARE @ INT=3

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

Wypróbuj online

Zapytanie T-SQL, 96 bajtów

Aby to działało online, musiałem wprowadzić kilka drobnych zmian. Spacje na początku wiersza nie są wyświetlane we fragmencie online. Zamiast tego używam ascii 160. Podczas pracy w Management Studio można zmienić ustawienia, aby wyświetlać wynik jako tekst, co spowodowałoby poprawne spacje w opublikowanym skrypcie.

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

Wypróbuj online

t-clausen.dk
źródło
2

Węgiel drzewny , 5 bajtów

↘N‖M↓

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

↘N

Wpisz liczbę i wydrukuj ukośną linię \o tej długości.

‖M↓

Odbij linię pionowo.

Neil
źródło
2

APL (NARS), 40 znaków, 80 bajtów

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

test:

  h←{f←{⍺,⍨⍵⍴' '}⋄⊃('\'f¨k),('/'f¨⌽k←¯1+⍳⍵)}
  h 2
\ 
 \
 /
/ 
  h 5
\    
 \   
  \  
   \ 
    \
    /
   / 
  /  
 /   
/    
RosLuP
źródło
1

Retina 0.8.2 , 32 bajty

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

Wypróbuj online! Wyjaśnienie:

.+
$* ¶$&$* 

Wygeneruj dwa wiersze nspacji.

\G.
¶$`\

Zamień górną linię w \przekątną.

r`.\G
$'/¶

Zmień dolną linię w /przekątną.

Neil
źródło
1

C (gcc) , 67 65 bajtów

-2 bajty dzięki pułapkowi cat

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

Wypróbuj online!

gastropner
źródło
1

PowerShell , 50 bajtów

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

Wypróbuj online!

Spróbuje go zrobić, aby przeszedł przez zasięg tylko raz. Nieźle jak na metodę bez mózgu.

Veskah
źródło
1

Gałązka, 115 bajtów

Buduje ciąg do tyłu, „zwracając” go na końcu.

Używa makra do wygenerowania wszystkich wyników.

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

To makro musi znajdować się w pliku i zostać zaimportowane w następujący sposób:

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

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

Możesz spróbować na https://twigfiddle.com/5hzlpz (kliknij „Pokaż wynik surowy”).

Ismael Miguel
źródło
1

Haskell , 52 49 bajtów

-3 bajty dzięki Sriotchilism O'Zaic .

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

Wypróbuj online!

Joseph Sible-Reinstate Monica
źródło
1
Możesz zapisać bajt za pomocą g$n-1zamiast g(n-1). Nie musisz też liczyć, f=ponieważ fnigdy nie dostajesz odnośników.
Ad Hoc Garf Hunter,
1

MATL, 14 13 12 bajtów

Xy92*t45-Pvc

1 bajt zapisany dzięki @LuisMendo

Wyjaśnienie

        % 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

Wypróbuj to w MATL Online

Suever
źródło
@LuisMendo Zaktualizowano! Dzięki!
Suever
1

Python 3 , 90 83 bajtów

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

Wypróbuj online!

-7 bajtów dzięki @squid

Artemida wciąż nie ufa SE
źródło
83 bajty , ale wydaje mi się, że nadal może spaść
przywróć Monikę
1
Chciałbym, żeby to było możliwe.
Artemis wciąż nie ufa
Wkrótce ...
Przywróć Monikę
O tak, zapomniałem o tym. Może powinieneś to przesłać!
Artemis nadal nie ufa
1

Rockstar, 133 bajty

Wypróbuj online tutaj !

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

Ponieważ Rockstar nie słynie z operacji na łańcuchach, zajmuje to stosunkowo dużo kodu (rekurencyjnie było to nawet dłużej).

Rozmiar strzałki przyjmuje się jako dane wejściowe.

Gaborsch
źródło
1

\ / \ /> , 74 bajty

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

Objaśnienie: (linie obrócone zgodnie z punktem początkowym)

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
źródło
1
\/\/> (pronounced wɜrm)Dzięki, nienawidzę tego. (Jk, nie mogę się doczekać, aby spróbować)
Jo King
@JoKing hahaha, muszę nosić inspirację na rękawie. (dzięki!)
torcado,
0

SimpleTemplate , 100 bajtów

Było to dość zabawne wyzwanie, ale niektóre błędy w języku utrudniały optymalizację.

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

Zasadniczo przełącza wartości do tyłu, wykonując ciąg znaków od środka na zewnątrz.


Jak powinna być odpowiedź

Z powodu błędów kod nie był poprawnie interpretowany.

Tak wyglądałby kod, gdyby kompilator nie miał żadnego błędu (86 bajtów):

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

No cóż, przynajmniej rozwiązanie działa: x

Ismael Miguel
źródło