Générateur de flèches ASCII Meme

13

Caractéristiques

Étant donné un nombre n, sortir une "flèche meme" ASCII (symbole supérieur à >) de taillen .

n sera toujours un entier positif, supérieur à 0.

Exemples

n = 2

\
 \
 /
/

n = 5

\
 \
  \
   \
    \
    /
   /
  /
 /
/

Exemple de code

Voici un exemple de programme, écrit en Crystal, qui renvoie les résultats corrects. Exécutez-le en tant que./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)

Règles

  • C'est du . La réponse la plus courte l'emporte. Cependant, je ne sélectionnerai pas de réponse, car la réponse la plus courte peut changer avec le temps.
  • Les échappatoires standard ne sont pas autorisées.
dkudriavtsev
la source
1
Êtes-vous sûr que ce n'est pas un doublon (c'est-à-dire, avez-vous mis en sandbox cela)? Je pense que c'est probablement le cas, mais c'est un peu presque impossible à rechercher.
mon pronom est monicareinstate le
1
Peut nêtre nul?
xnor
6
Je pense qu'il est assez stupide d'appeler ce symbole commun une "flèche de meme". Ce sont évidemment des chevrons comiques.
scatter
4
@Christian Ce sont en fait des angles amusants
dkudriavtsev
1
@ArtemisFowl Je pensais que c'étaient des augmentations intéressantes
dkudriavtsev

Réponses:

8

C (gcc) , 56 octets

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

Essayez-le en ligne!

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
la source
5

05AB1E , 6 octets

'\3.Λ∊

Essayez-le en ligne!

Explication

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

C64Mini / C64 BASIC (et autres variantes CBM BASIC), 52 octets BASIC à jeton utilisés

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

Voici la version non obscurcie pour 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

Le nombre jamais entré dans la Nligne zéro est réduit de un car la TABcommande est indexée sur zéro; Les FOR/NEXTboucles des lignes deux à quatre et de cinq à sept produisent alors respectivement la partie supérieure et inférieure de la memeflèche (représentée par une source en mode graphique décalée Met décalée )N

Commodore C64 meme arrow

Shaun Bebbers
la source
1
Saviez-vous que dans Commodore Basic, tous les mots clés peuvent être abrégés? Voici un lien: c64-wiki.com/wiki/BASIC_keyword_abbreviation Par exemple, forpeut être fO( f- shoft o), printis ?, etc.
gaborsch
1
52 octets est trompeur dans Code Golf, les binaires ne comptent pas, juste le code source. Ce devrait être quelque chose comme ça: 0inputn:n=n-1:fOi=0ton:?tA(i)"\":nE:fOi=0ton:?tA(i)"/":nE- cela prend 57 octets.
gaborsch
1
Comme discuté ici -> codegolf.meta.stackexchange.com/questions/11553/… Je compte les jetons utilisés car cela est plus représentatif de la quantité de mémoire utilisée.
Shaun Bebbers
1
Oh, je ne le savais pas. Y a-t-il une décision à ce sujet? Même la réponse n'y a pas été acceptée.
gaborsch
1
Mon premier ordinateur était un C16, j'ai fait beaucoup de montage là-dessus aussi, donc pas d'offense, j'adore Commodore. C16 avait Basic 3,5, 80 caractères par ligne, j'avais aussi un livre avec les listes ROM expliquées, donc je savais exactement comment la tokenisation et la liste fonctionnaient,
gaborsch
4

MarioLANG , 719 677 octets

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

Essayez-le en ligne!

C'était plus difficile que prévu ...

Charlie
la source
4

brainfuck , 125 octets

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

Essayez-le en ligne!

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

Rubis , 111 99 77 73 68 64 57 56 octets

-12 octets grâce à Benjamin Urquhart , -43 grâce à manatwork et -2 octets grâce à Value Ink .

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

Essayez-le en ligne!

Explication:

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

Solutions alternatives (mais plus longues)

Un ami a lu cette réponse, puis a essayé de trouver quelques autres approches. Les mettre ici aussi, afin qu'ils ne soient pas perdus dans les vastes interwebs.

injecter et décaler, 72 octets

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

Essayez-le en ligne!

vers le bas, injecter et décaler, 80 octets

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

Essayez-le en ligne!

intrigant, deux boucles non imbriquées, 127 octets

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

Essayez-le en ligne!

soixante-cinq
la source
Une grande partie de cet espace blanc ne peut-elle pas être supprimée?
Benjamin Urquhart
1
Oui, 12 octets au total, merci! C'était la première fois que je soumettais quoi que ce soit à un jeu de golf à code ...
soixante
Ensuite, vous trouverez peut-être intéressants les conseils pour jouer au golf en Ruby , ou même les conseils pour jouer au golf dans <toutes les langues> .
manatwork
Vous pouvez remplacer les boucles intérieures pour le rembourrage par String#rjust( Essayez-le en ligne! ).
manatwork
Ici, j'ai appliqué certains des conseils des 2 collections mentionnées ci-dessus pour le réduire à 57 caractères: Essayez-le en ligne!
manatwork
3

Code T-SQL, 80 octets

DECLARE @ INT=3

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

Essayez-le en ligne

Requête T-SQL, 96 octets

Afin de faire ce travail en ligne, j'ai dû apporter quelques modifications mineures. Les espaces au début d'une ligne ne s'affichent pas dans l'extrait en ligne. J'utilise donc ascii 160 à la place. Lors de l'exécution dans Management Studio, il est possible de modifier les paramètres pour afficher le résultat sous forme de texte, ce qui entraînerait les espaces corrects dans ce script publié.

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

Essayez-le en ligne

t-clausen.dk
la source
2

Fusain , 5 octets

↘N‖M↓

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

↘N

Saisissez un nombre et imprimez une ligne diagonale de \s de cette longueur.

‖M↓

Refléter la ligne verticalement.

Neil
la source
2

APL (NARS), 40 caractères, 80 octets

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

tester:

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

Retina 0.8.2 , 32 octets

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

Essayez-le en ligne! Explication:

.+
$* ¶$&$* 

Générez deux lignes d' nespaces.

\G.
¶$`\

Tournez la ligne supérieure en \diagonale.

r`.\G
$'/¶

Transformez la ligne du bas en /diagonale.

Neil
la source
1

C (gcc) , 67 65 octets

-2 octets grâce au plafond

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

Essayez-le en ligne!

gastropner
la source
1

PowerShell , 50 octets

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

Essayez-le en ligne!

Cherchera à le faire pour qu'il ne passe par la plage qu'une seule fois. Pas mal pour la méthode sans cerveau.

Veskah
la source
1

Brindille, 115 octets

Construit la chaîne à l'envers, en la "renvoyant" à la fin.

Utilise une macro pour générer tous les résultats.

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

Cette macro doit être dans un fichier et importée comme ceci:

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

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

Vous pouvez l'essayer sur https://twigfiddle.com/5hzlpz (cliquez sur "Afficher le résultat brut").

Ismael Miguel
la source
1

Haskell , 52 49 octets

-3 octets grâce au Sriotchilism O'Zaic .

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

Essayez-le en ligne!

Joseph Sible-Reinstate Monica
la source
1
Vous pouvez enregistrer un octet avec g$n-1au lieu de g(n-1). Vous n'avez pas non plus besoin de compter le f=car il fn'est jamais référencé.
Post Rock Garf Hunter
1

MATL, 14 13 12 octets

Xy92*t45-Pvc

1 octet enregistré grâce à @LuisMendo

Explication

        % 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

Essayez-le sur MATL Online

Suever
la source
@LuisMendo Mis à jour! Merci!
Suever
1

Python 3 , 90 83 octets

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

Essayez-le en ligne!

-7 octets grâce à @squid

Artemis ne fait toujours pas confiance à SE
la source
83 octets , mais j'ai l'impression que ça peut encore baisser
Rétablir Monica
1
Je souhaite que ce soit possible.
Artemis ne fait toujours pas confiance au SE
Bientôt ...
Rétablir Monica le
Oh ouais j'ai oublié ça. Vous devriez peut-être le soumettre!
Artemis ne fait toujours pas confiance au SE
1

Rockstar, 133 octets

Essayez-le en ligne ici !

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

Étant donné que Rockstar n'est pas célèbre pour les opérations de chaîne, il faut relativement beaucoup de code pour le faire (récursivement était encore plus long).

La taille de la flèche est prise en entrée.

gaborsch
la source
1

\/\/>, 74 bytes

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

Explanation: (lines rotated based on start point)

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
la source
1
\/\/> (pronounced wɜrm) Thanks, I hate it. (jk, I'm looking forward to giving it a try)
Jo King
@JoKing hahaha, gotta wear my inspiration on my sleeve. (thanks!)
torcado
0

SimpleTemplate, 100 bytes

This was quite a fun challenge, but some bugs in the language made it hard to optimize.

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

Basically, cycles throught the values backwards, working the string from the middle out.


How the answer should be

Due to the bugs, the code wasn't being interpreted properly.

This is how the code would be, if the compiler didn't had any bug (86 bytes):

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

Oh, well, at least the solution works :x

Ismael Miguel
la source