ASCII Meme Arrow Generator


13

ข้อมูลจำเพาะ

ได้รับหมายเลข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
ฉันคิดว่ามันค่อนข้างโง่ที่จะเรียกสัญลักษณ์นี้ว่า "ลูกศร meme" เห็นได้ชัดว่าเป็นบั้งตลก
กระจาย


1
@ArtemisFowl ฉันคิดว่าพวกเขาเพิ่มความน่าสนใจ
dkudriavtsev

คำตอบ:







4

C64Mini / C64 BASIC (และตัวแปรพื้นฐาน CBM อื่น ๆ ), 52 ไบต์โทเคนพื้นฐานที่ใช้

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

นี่คือเวอร์ชันที่ไม่ทำให้ยุ่งเหยิงสำหรับ 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

จำนวนที่ป้อนลงNในบรรทัดศูนย์จะลดลงทีละหนึ่งตามTABคำสั่งที่มีการทำดัชนีเป็นศูนย์ FOR/NEXTลูปในสายสองผ่านไปสี่ห้าถึงเจ็ดแล้วออกบนและล่างส่วนหนึ่งถ้าmemeลูกศรตามลำดับ (แสดงโดยขยับMและเปลี่ยนNโหมดกราฟิกในแหล่งที่มา )

พลเรือจัตวา C64 meme arrow


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 มีพื้นฐาน 3,5, 80 ตัวอักษรต่อบรรทัดฉันยังมีหนังสือที่มีรายชื่อ ROM อธิบายดังนั้นฉันจึงรู้ว่า
โทเค็น

4

MarioLANG , 719 677 ไบต์

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

ลองออนไลน์!

นี่ยากกว่าที่คาดไว้ ...


4

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

Ruby , 111 99 77 73 68 64 57 56 ไบต์

-12 ไบต์ขอบคุณที่เบนจามินอลิซ , -43 ขอบคุณที่manatworkและ -2 ไบต์ขอบคุณที่ราคาหมึก

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

ทางเลือก (แต่นานกว่า) โซลูชั่น

เพื่อนอ่านคำตอบนี้แล้วพยายามหาแนวทางเพิ่มเติมอีกสองสามข้อ วางพวกเขาไว้ที่นี่ด้วยเพื่อไม่ให้มันไปขัดกับผืนทรายขนาดใหญ่

inject และ unshift ขนาด 72 ไบต์

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

ลองออนไลน์!

downto, inject และ unshift, 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]}
}

ลองออนไลน์!


ไม่สามารถลบช่องว่างจำนวนมากออกได้ใช่ไหม
Benjamin Urquhart

1
ใช่ทั้งหมด 12 ไบต์ขอบคุณ! นี่เป็นครั้งแรกที่ฉันส่งอะไรให้กับเกมกอล์ฟรหัส ...
26490

แล้วคุณอาจพบที่น่าสนใจเคล็ดลับสำหรับการเล่นกอล์ฟในรูบีหรือแม้กระทั่งเคล็ดลับสำหรับการเล่นกอล์ฟใน <ภาษาทั้งหมด>
จัดการ

คุณสามารถแทนที่วงด้านในสำหรับการเติมด้วย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

ถ่าน 5 ไบต์

↘N‖M↓

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

↘N

ใส่ตัวเลขและพิมพ์เส้นทแยงมุม\ของความยาวนั้น

‖M↓

สะท้อนเส้นแนวตั้ง


2

APL (NARS), 40 ตัวอักษร, 80 ไบต์

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

ทดสอบ:

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

1

เรติน่า 0.8.2 , 32 ไบต์

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

ลองออนไลน์! คำอธิบาย:

.+
$* ¶$&$* 

สร้างnช่องว่างสองบรรทัด

\G.
¶$`\

เปลี่ยนเส้นด้านบนให้เป็น\เส้นทแยงมุม

r`.\G
$'/¶

เปลี่ยนเส้นด้านล่างเป็น/เส้นทแยงมุม




1

PowerShellขนาด 50 ไบต์

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

ลองออนไลน์!

จะมองเข้าไปในการทำให้มันผ่านช่วงเวลาเดียวเท่านั้น ไม่เลวเลยสำหรับวิธีที่ไม่มีสมอง


1

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

Haskell , 52 49 ไบต์

-3 ไบต์ขอบคุณที่Sriotchilism O'Zaic

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

ลองออนไลน์!


1
คุณสามารถบันทึกไบต์ที่มีแทนg$n-1 g(n-1)คุณไม่จำเป็นต้องนับf=ตั้งแต่fไม่เคยได้รับการอ้างอิง
Ad Hoc Garf Hunter

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

Python 3 , 90 83 ไบต์

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

ลองออนไลน์!

-7 ไบต์ขอบคุณ @squid


83 ไบต์แต่ฉันรู้สึกว่ามันยังสามารถลงไปได้
Reinstate Monica

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

@ โจกิ้งฮ่าฮ่าฮ่าต้องใส่แรงบันดาลใจบนแขนเสื้อของฉัน (ขอบคุณ!)
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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.