Kiến trên nhật ký tự nhiên


23

Đây là một thử thách mới bắt đầu tốt và một kẻ giết thời gian tốt.

Tôi chỉ nói một bản ghi tự nhiên vì tiêu đề quá ngắn, điều này không liên quan gì đến logarit.

Cho 2 biến:

  • Số lượng kiến n.
  • Chiều rộng của bản ghi w.

Xuất một bản ghi chiều rộng wvới nkiến (Ví dụ hiển thị w=3, n=6)

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

Một con kiến ​​trông như thế này:

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

Một vài luật kiến:

  1. Kiến không được chạm trực tiếp vào nhau cũng như cạnh của khúc gỗ, chúng thích chạm vào không gian.
  2. Mỗi hàng kiến ​​phải wrộng, có n/whàng kiến.
  3. Kiến luôn cần một khúc gỗ, chiều rộng khúc gỗ lớn hơn 0, đảm bảo.
  4. Kiến cũng ... à, cần kiến, số lượng kiến ​​lớn hơn 0, đảm bảo.
  5. Kiến cũng được tổ chức tốt một cách đáng ngạc nhiên, chúng sẽ điền vào một bản ghi từ trái sang phải, từ trên xuống dưới; như thể họ đang đọc một cuốn sách.

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\ |
|  ^  |
|     |

Đây là , người có số lần thắng nhỏ nhất.



@AdmBorkBork Bây giờ tôi nhớ điều đó. Tôi đã hoàn thành một nửa với nó và đọc sai thông số kỹ thuật, có thể đã đánh cắp một phần tiềm thức của ý tưởng đó.
Bạch tuộc ma thuật Urn

Đây là những bản ghi ant-y.
Arjun

"Mỗi hàng kiến ​​phải rộng w". Nếu w>ncó nên có thêm không gian trước bàn tay phải |hay không, hoặc nó phụ thuộc vào chúng ta?
Jonathan Allan

1
-1 cho Ant-xamples(tôi ghét chơi chữ)
caird coinheringaahing

Câu trả lời:


4

Thạch ,  44  43 byte

Vượt qua 44 không phải là 44 với việc sử dụng  

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

Hãy thử trực tuyến!

Làm sao?

⁶ṁ;⁶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

Tôi đã hỏi về w<ntrong một bình luận vì nó hơi mơ hồ.
Nếu nhật ký cần phải wrộng kiến ​​chứ không chỉ là kiến wrộng, nó có giá hai byte:

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

Điều này thực hiện giống như trước ngoại trừ thay vì đặt trước một khoảng trống để tạo dòng đầu tiên, trống, nó tạo ra một hàng kiến ​​phụ và cắt bỏ tất cả trừ dòng trống của nó.


5

V , 70 , 68 byte

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

Hãy thử trực tuyến!

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

Điều này chưa bao giờ xảy ra với tôi trước đây, nhưng một lỗi đã biết thực sự đã tiết kiệm cho tôi byte!

Thật khó để giải thích chính xác những gì đang diễn ra, nhưng thật không may khi bạn cố gắng sao chép một cái gì đó theo các cột, V sẽ di chuyển một cột trước khi sao chép. Đó là lý do tại sao ban đầu tôi đã làm:

h<C-v>{dÀp

mà không sử dụng toán tử trùng lặp. Tuy nhiên, vì chúng tôi đã cần phải di chuyển một dòng, chúng tôi chỉ có thể làm

hÀä<C-v>{

Tốt đẹp! Một đề cử tiềm năng cho việc khai thác lỗi: P.
Bạch tuộc ma thuật Urn



4

05AB1E , 47 byte

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

Hãy thử trực tuyến!

Giải trình

"   \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 byte

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

Phần đầu tiên: chức năng xuất ra một phần nhật ký trống

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

Phần thứ hai có một chuỗi nén "nΤ↕¬┐α┐PΝld‘, đó là con kiến. Nó giải nén thành \-/ OOo^/-\ . Đó là con kiến ​​(với khoảng cách ở bên phải), nhưng được chụp từ trên xuống sau đó sang phải như thế

159d
26ae
37bf
48cg

Nó được lưu trữ như vậy bởi vì hàm nối thêm các chuỗi như thế (đó là vì sau đó bạn có thể nhân chuỗi để thêm nhiều trường hợp vào nó). Phần chính nó: hàm yêu cầu một số trên ngăn xếp biểu thị có bao nhiêu con kiến ​​sẽ vẽ.

                                    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

Và chức năng chính:

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 byte

($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

Hãy thử trực tuyến!

Perl 5 , 152 byte

Một số khác dựa trên giải pháp 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|"

Hãy thử trực tuyến!


0

Toán học 210 byte

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

Suy nghĩ tôi cần phải tạo ra một ngôn ngữ chơi gôn dựa trên Mathicala.


0

Python 2, 166 byte

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

Than , 43 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

Nθ

Đầu vào w.

F⪪× Nθ«

Nhập n, sau đó tạo một chuỗi các nkhoảng trắng và chia nó thành các hàng có chiều dài w(ngoại trừ phần cuối cùng có thể nhỏ hơn). Vòng qua các hàng đó.

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

In các mặt của phần nhật ký.

  \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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.