มดบนบันทึกธรรมชาติ


23

นี่เป็นความท้าทายเริ่มต้นที่ดีและเป็นนักฆ่าเวลาที่ดี

ฉันเพียงแค่พูดว่า - บันทึก - ธรรมชาติเพราะชื่อสั้นเกินไปนี่ไม่มีส่วนเกี่ยวข้องกับลอการิทึม

รับ 2 ตัวแปร:

  • nจำนวนของมด
  • wความกว้างของการเข้าสู่ระบบ

การส่งออกเข้าสู่ระบบของความกว้างwกับnมด (ตัวอย่างแสดงให้เห็นw=3,n=6 )

|             |
| \O/ \O/ \O/ |
| -O- -O- -O- |
| /o\ /o\ /o\ |
|  ^   ^   ^  |
|             |
| \O/ \O/ \O/ |
| -O- -O- -O- |
| /o\ /o\ /o\ |
|  ^   ^   ^  |
|             |

มดตัวเดียวมีลักษณะดังนี้:

\O/ # Upper-case O
-O- # Upper-case O
/o\ # Lower-case o
 ^  

กฎหมายมดบางประการ:

  1. มดไม่สามารถสัมผัสกันหรือขอบของบันทึกโดยตรงพวกเขาต้องการที่จะสัมผัสช่องว่าง
  2. มดแต่ละแถวจะต้องwกว้างด้วยn/wแถวของมด
  3. มดต้องการบันทึกเสมอความกว้างของบันทึกมากกว่า 0 รับประกัน
  4. มดยัง ... ดีต้องการมดจำนวนมดมากกว่า 0 รับประกัน
  5. มดก็มีการจัดการที่ดีอย่างน่าประหลาดใจพวกเขาจะเติมบันทึกจากซ้ายไปขวาบนลงล่าง ราวกับว่าพวกเขากำลังอ่านหนังสือ

Ant-xamples

w = 3, n = 5

|             |
| \O/ \O/ \O/ |
| -O- -O- -O- |
| /o\ /o\ /o\ |
|  ^   ^   ^  |
|             |
| \O/ \O/     |
| -O- -O-     |
| /o\ /o\     |
|  ^   ^      |
|             |

w = 1, n = 1

|     |
| \O/ |
| -O- |
| /o\ |
|  ^  |
|     |

w = 1, n = 3

|     |
| \O/ |
| -O- |
| /o\ |
|  ^  |
|     |
| \O/ |
| -O- |
| /o\ |
|  ^  |
|     |
| \O/ |
| -O- |
| /o\ |
|  ^  |
|     |

นี่คือคนที่ชนะ bytecount น้อยที่สุด


7
ที่เกี่ยวข้อง
AdmBorkBork

@AdmBorkBork ฉันจำได้แล้วตอนนี้ ฉันทำไปแล้วครึ่งทางและอ่านสเป็คที่ผิดอาจมีการขโมยส่วนหนึ่งของความคิดนั้นโดยไม่รู้ตัว
Magic Octopus Urn

นี่คือ ant-y-log
Arjun

"มดแต่ละแถวจะต้องกว้างกว้าง" ถ้าw>nควรมีที่ว่างเพิ่มเติมก่อนทางขวามือ|หรือไม่หรือขึ้นอยู่กับเรา?
Jonathan Allan

1
-1 สำหรับAnt-xamples(ฉันเกลียดการเล่น)
caird coinheringaahing

คำตอบ:


4

เจลลี่ ,  44  43 ไบต์

ข้ามออก 44 ไม่ใช่ 44 เมื่อใช้งาน  

⁶ṁ;⁶jЀ“\-/“OOo^ ”;UṖz⁶¤Y
sÇ€⁶;YỴz⁶Zj@€⁾||Y

ลองออนไลน์!

อย่างไร?

⁶ṁ;⁶jЀ“\-/“OOo^ ”;UṖz⁶¤Y - Link 1, make a row of ants: list x (could be integer = length)
⁶                         - literal ' '
 ṁ                        - mould like x (makes a list of that many spaces)
  ;⁶                      - concatenate one more space
                       ¤  - nilad followed by link(s) as a nilad
       “\-/“OOo^ ”        -   literal      ["\-/","OOo^ "] ("..." a list of chars really)
                   U      -   reverse each [" ^oOO","/-\"]
                  ;       -   concatenate  ["\-/","OOo^ "," ^oOO","/-\"]
                    Ṗ     -   pop          ["\-/","OOo^ "," ^oOO"]
                      ⁶   -   literal ' '
                     z    -   transpose & fill ["\O/","-O-","/o\"," ^ ","   "]
    jЀ                   - join left mapped over right
                          -   (join the spaces with each of the ant parts in turn)
                        Y - join with newlines

sÇ€⁶;YỴz⁶Zj@€⁾||Y - Main link: n, w
s                 - split n into chunks of length w (implicitly makes a range of length n)
 Ç€               - call the last link (1) as a monad for €ach
   ⁶;             - a space concatenated with that
     Y            - join with newlines
      Ỵ           - split at newlines (both the ones we just joined with AND the others!)
       z⁶         - transpose & fill with space characters (making the shorter rows,
                  -   including the single space as long as the longest one)
         Z        - transpose it back the right way
             ⁾||  - literal ['|','|']
          j@€     - join with reverse arguments for €ach (put each row between pipes)
                Y - join back up with newlines
                  - implicit print

ฉันได้ถามถึงw<nในความคิดเห็นเนื่องจากมันคลุมเครือเล็กน้อย
หากบันทึกต้องมีwความกว้างของมดไม่ใช่แค่มดที่มีwความกว้างจะต้องมีค่าใช้จ่ายสองไบต์:

⁶ṁ;⁶jЀ“\-/“OOo^ ”;UṖz⁶¤Y
+RsÇ€YỴz⁶Zj@€⁾||ṫ5Y

สิ่งนี้ทำเหมือนกับก่อนยกเว้นแทนที่จะเตรียมช่องว่างเดียวเพื่อสร้างบรรทัดแรกบรรทัดว่างนั้นจะสร้างแถวพิเศษทั้งหมดของมดและตัดออกทั้งหมดยกเว้นบรรทัดว่างที่ตามมา


5

V , 70 , 68 ไบต์

i \O/ 
 -O- 
 /o\ 
  ^  Àä{ò@bf }C GïpòÇÓ/d
HÄÒ çÞ/ÙÒ 
ëI|yê$p

ลองออนไลน์!

00000000: 6920 5c4f 2f20 0a20 2d4f 2d20 0a20 2f6f  i \O/ . -O- . /o
00000010: 5c20 0a20 205e 2020 1bc0 e416 7bf2 4062  \ .  ^  ....{.@b
00000020: 6620 167d 4320 1b47 ef70 f2c7 d32f 640a  f .}C .G.p.../d.
00000030: 48c4 d220 e7de 2fd9 d220 0a16 eb49 7c1b  H.. ../.. ...I|.
00000040: 79ea 2470                                y.$p

เรื่องนี้ไม่เคยเกิดขึ้นกับฉันมาก่อน แต่เป็นข้อผิดพลาดที่รู้จักได้ช่วยฉันในการไบต์!

เป็นการยากที่จะอธิบายว่าเกิดอะไรขึ้น แต่น่าเสียดายที่เมื่อคุณพยายามทำสำเนาบางอย่างด้วยคอลัมน์ V จะย้ายหนึ่งคอลัมน์ไปก่อนทำซ้ำ ซึ่งเป็นสาเหตุที่ฉันทำอย่างชาญฉลาด:

h<C-v>{dÀp

ซึ่งไม่ได้ใช้โอเปอเรเตอร์ที่ซ้ำกัน อย่างไรก็ตามเนื่องจากเราต้องการย้ายหนึ่งบรรทัดเราจึงสามารถทำได้

hÀä<C-v>{

ดี! การเสนอชื่อที่มีศักยภาพสำหรับการใช้ประโยชน์จากข้อบกพร่อง: P
Magic Octopus Urn

5

PHP> = 7.1, 150 ไบต์

for([,$w,$n]=$argv;$i<ceil($n/$w)*5+1;)echo str_pad("| ".str_repeat(["","\O/ ","-O- ","/o\ "," ^  "][$i%5],$n<$w*ceil($i++/5)?$n%$w:$w),$w*4+2)."|\n";

เวอร์ชั่นออนไลน์


ฉันพบข้อผิดพลาดเมื่อคลิก "เวอร์ชันออนไลน์" และ "เรียกใช้รหัส"
Kjetil S.

1
@KjetilS เปลี่ยน PHP Version เป็น 7.1
JörgHülsermann

ใช่ 7.1 ก็โอเค
Kjetil S.

5

Python 2, 144 ไบต์

n,w=input()
s=' ';k='|';a=k+s*w*4+s+k;print a
while n>0:
 for i in['\\O/','-O-','/o\\',' ^ ']:print k+s+(i+s)*min(w,n)+s*4*(w-n)+k
 n-=w;print a

ลองออนไลน์!


สิ่งนี้ไม่ถูกต้องเนื่องจากขาดบรรทัดว่างระหว่างมด (เปรียบเทียบตัวอย่างw=1& n=3กับรุ่นของคุณ)
FatalMerlin

@FatalMerlin ขอบคุณ! แก้ไข :)
คณิตศาสตร์ junkie

4

05AB1E , 47 ไบต์

"   \O/-O-/o\ ^ "5äðìI.D)IôvyøJ'|ì})˜¬¸«.B„ |«»

ลองออนไลน์!

คำอธิบาย

"   \O/-O-/o\ ^ "                                # push the ant-string
                 5ä                              # split into 5 parts
                   ðì                            # prepend a space to each
                     I.D                         # copy input-1 number of times
                        )                        # wrap in a list
                         Iô                      # split into parts each the size of input-2
                           v                     # for each row of ants
                            yø                   # zip, so body parts are on the same row
                              J'|ì               # join to string and prepend a pipe to each
                                  }              # end loop
                                   )˜            # wrap in a flattened list
                                     ¬¸«         # append a copy of the first row (spaces)
                                        .B       # pad rows to equal length with spaces
                                          „ |«   # append " |" to each row
                                              »  # merge on newlines

4

SOGL , 74 71 74 ไบต์

 |pe4*I@*o |o→L:"╔O¦‘2n;"nΤ↕¬┐α┐PΝld‘*┼eG-’⁵@**┼ |4*┼OL→ALbe÷:?{eA}}be%:?A

ส่วนแรก: ฟังก์ชั่นที่ส่งออกส่วนบันทึกที่ว่างเปล่า

             →L  define function L
 |p              output in a newline "|"
   e4*           multiply width by 4
      I          increace that
       @*        get that many spaces
         o       append [to current line] that
           |o    append "|"

ส่วนที่สองมีสตริงการบีบอัด"nΤ↕¬┐α┐PΝld‘ซึ่งเป็นมด \-/ OOo^/-\ มันคลายไป นั่นคือมด (โดยเว้นระยะทางไปทางขวา) แต่ถ่ายจากบนลงล่างจากนั้นเลื่อนไปทางขวาเหมือนกัน

159d
26ae
37bf
48cg

มันถูกเก็บไว้อย่างนั้นเพราะฟังก์ชั่นผนวกสตริงเช่นนั้น (นั่นเป็นเพราะคุณสามารถคูณสตริงเพื่อเพิ่มหลายอินสแตนซ์ได้) ส่วนที่ตัวเอง: ฟังก์ชั่นซึ่งขอหมายเลขบนสแต็คแสดงถึงจำนวนมดที่จะวาด

                                    Example input: width 3, on stack 2
:                                   duplicate the input                             [2,2]
 "╔O¦‘                              push "| | | | "                                 [2,2,"| | | | "]
      2n                            split into chunks of two                        [2,2,["| ","| ","| ","| "]]
        ;                           put one of the input copies ontop of the stack  [2,["| ","| ","| ","| "], 2]
         "...‘*                     multiply that many ants                         [2,["| ","| ","| ","| "], "\\-/ OOo^/-\\     \\-/ OOo^/-\\     "]
               ┼                    add horizontally the ants                       ["| \O/ \O/ \O/ ",
                                                                                     "| -O- -O- -O- ",
                                                                                     "| /o\ /o\ /o\ ",
                                                                                     "|  ^   ^   ^  "]
                e                   get the width                                   [["| \\O/ \\O/ \\O/ ", "| -O- -O- -O- ", "| /o\\ /o\\ /o\\ ", "|  ^   ^   ^  "], 3]
                 G-                 subtract input from it                          [["| \\O/ \\O/ \\O/ ", "| -O- -O- -O- ", "| /o\\ /o\\ /o\\ ", "|  ^   ^   ^  "], 1]
                   ’⁵@*             push 16 spaces                                  [["| \\O/ \\O/ \\O/ ", "| -O- -O- -O- ", "| /o\\ /o\\ /o\\ ", "|  ^   ^   ^  "], 1, "                "]
                       *            multiply [the 16 spaces and empty place count]  [["| \\O/ \\O/ \\O/ ", "| -O- -O- -O- ", "| /o\\ /o\\ /o\\ ", "|  ^   ^   ^  "], "                "]
                        ┼           add that horizontally                           [["| \\O/ \\O/ \\O/     ", "| -O- -O- -O-     ", "| /o\\ /o\\ /o\\     ", "|  ^   ^   ^      "]]
                          |4*┼      add 4 vertical bars to the array                [["| \\O/ \\O/ \\O/     |", "| -O- -O- -O-     |", "| /o\\ /o\\ /o\\     |", "|  ^   ^   ^      |"]]
                              O     output the array                                []
                               L    call the empty line function                    []
                                →A  define as A

และฟังก์ชั่นหลัก:

L                  call the empty line drawing function
 be÷               push floor(b/e) (the amount of full lines)
    :?{eA}}        that many times call A with the full width on the stack
           be%     push b%e (the leftovers)
              :?   if truthy (aka !=0)
                A   call A with for the leftovers

2

Perl 5 , 159 ไบต์

($w,$n)=@ARGV;
print
$_%$w?"":"| ",
['   \O/-O-/o\\ ^ '=~/.../g]->[($_<5*$w*int$n/$w||$_%$w<$n%$w?$_/$w:0)%5],
($_+1)%$w?" ":" |\n"
for 0..$w*(6+5*int(($n-1)/$w))-1

ลองออนไลน์!

Perl 5 , 152 ไบต์

อีกอันหนึ่งที่ใช้วิธีการของ Python

($w,$n)=@ARGV;
$b=' 'x($w*4+1);$j=$a="|\n|";
map$j.=' '."$_ "x($w<$n?$w:$n).'    'x($w-$n).$a,'\\O/','-O-','/o\\',' ^ 'and$n-=$w
while$n>0;
print"|$b$j$b|"

ลองออนไลน์!


0

Mathematica 210 Bytes

StringRiffle[If[#2==c||#2==1,"|",If[r-#1<6&&#2>2+4 (a+w-h w),Table[" ",5,4],Characters@"    \\O/ -O- /o\\  ^  "~Partition~4][[1+Mod[#1-1,5],1+Mod[#2+1,4]]]]&~Array~{r=5(h=⌈(a=#)/(w=#2)⌉)+1,c=4w+3},"\n",""]&

คิดว่าฉันต้องทำให้ภาษากอล์ฟที่ใช้ Mathematica


0

Python 2, 166 ไบต์

w,n=input()
print'\n'.join(['|'+' '*w*4+' |']+[' '.join(['|']+[p]*r+['   ']*(w-r)+['|'])for r in[w]*(n/w)+[[],[n%w]][n%w>0] for p in['\O/','-O-','/o\\',' ^ ','   ']])

0

ถ่าน 43 ไบต์

NθF⪪× Nθ«←P↓⁶M⊗⊕⊗θ→P↓⁶⸿E⪪\O/-O-/o\ ^ ³⭆ι⁺μκ

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

Nθ

wอินพุต

F⪪× Nθ«

ป้อนข้อมูลnจากนั้นสร้างสตริงของnช่องว่างแล้วแยกออกเป็นแถวยาวw(ยกเว้นชิ้นสุดท้ายซึ่งอาจเล็กกว่า) วนรอบแถวเหล่านั้น

←P↓⁶M⊗⊕⊗θ→P↓⁶⸿

พิมพ์ด้านข้างของส่วนบันทึก

  \O/-O-/o\ ^           Literal string
 ⪪            ³         Split into (4) pieces of length 3
E                       Map over each piece
               ⭆ι       Map over each row space
                 ⁺μκ    Appending the piece
                        Implicitly print the results on separate lines
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.