Генератор стрілок ASCII Meme


14

Технічні умови

Враховуючи число n, виведіть >розмір ASCII "мем стрілка" (більший, ніж символ, ) розміру 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
Може nбути нульовим?
xnor

6
Я думаю, що досить нерозумно називати цей звичайний символ "стрілкою мему". Вони, очевидно, комедійні шеврони.
розкидання

4
@Christian Вони насправді кумедні кути
dkudriavtsev

2
@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

Ось необізнана версія для загострення:

 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

Те, що коли-небудь число вводиться Nв рядок нуля, зменшується на одиницю, оскільки TABкоманда індексується нулем; Ці FOR/NEXTпетлі в двох рядках через чотири і п'ять до семи , то вивести верхню і нижню частину , якщо memeстрілка відповідно (представлені зсунутим Mі зміщеного Nв графічному режимі джерелом )

Мемо стрілка Commodore C64


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

1
Як обговорювалося тут -> codegolf.meta.stackexchange.com/questions/11553/… Я вважаю використані лексеми, оскільки це є більш репрезентативним, скільки пам'яті використовується.
Shaun Bebbers

1
О, я цього не знав. Чи є рішення щодо цього? Навіть відповідь там не прийняли.
gaborsch

1
Першим моїм комп’ютером був C16, я теж багато збирався на цьому, так що без образи я люблю Commodore. C16 мав Basic 3,5, 80 символів на рядок, у мене теж була книга з поясненнями ПЗУ, тому я точно знав, як працює токенізація та лістинг,
gaborsch

4

MarioLANG , 719 677 байт

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

Спробуйте в Інтернеті!

Це було важче, ніж очікувалося ...


4

мозковий ебать , 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 байт

-12 байт завдяки Бенджаміну Уркхарту , -43 завдяки манатурності та -2 байти завдяки вартості Ink .

->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+?/}}

Спробуйте в Інтернеті!

в центрі, вводити та не змінювати, 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]}
}

Спробуйте в Інтернеті!


Не можна багато цього пробілу видалити?
Бенджамін

1
Так, всього 12 байт, дякую! Це був перший раз, коли я щось подав до кодової гри в гольф ...
Sixtyfive


Ви можете замінити внутрішні петлі для набивання String#rjust( спробуйте в Інтернеті! ).
манатура

Тут я застосував кілька порад з вищезгаданих 2 колекцій, щоб зменшити його до 57 символів: Спробуйте в Інтернеті!
манастирство


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. Під час запуску в студії управління можна змінити налаштування, щоб результат відображався як текст, що призведе до правильних пробілів у цьому розміщеному сценарії.

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

Спробуйте в Інтернеті




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

1 байт збережено завдяки @LuisMendo

Пояснення

        % 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)])

Спробуйте в Інтернеті!

-7 байт завдяки @squid


83 байти , але я відчуваю, що це все одно може знизитися
кальмар

1
Я б хотів, щоб це було можливо.
Артеміда досі не довіряє SE


О так, я забув про це. Можливо, вам слід це подати!
Артеміда все ще не довіряє SE

1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.