Semut di Log Alami


23

Ini adalah tantangan pemula yang baik dan pembunuh waktu yang baik.

Saya hanya mengatakan log -natural- karena judulnya terlalu pendek, ini tidak ada hubungannya dengan logaritma.

Diberikan 2 variabel:

  • Jumlah semut n.
  • Lebar log w.

Keluarkan log lebar wdengan nsemut (Contoh ditunjukkan w=3, n=6)

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

Seekor semut terlihat seperti ini:

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

Beberapa hukum semut:

  1. Semut mungkin tidak saling menyentuh atau tepi log secara langsung, mereka lebih suka menyentuh spasi.
  2. Setiap baris semut harus wlebar, dengan n/wbarisan semut.
  3. Semut selalu membutuhkan log, lebar log lebih besar dari 0, dijamin.
  4. Semut juga ... well, butuh semut, jumlah semut lebih besar dari 0, dijamin.
  5. Semut juga terorganisir dengan sangat baik, mereka akan mengisi log dari kiri ke kanan, atas ke bawah; seolah-olah mereka sedang membaca buku.

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

Ini adalah , orang dengan bytecount terkecil menang.



@ AdmBorkBork AKU ingat itu sekarang. Saya hampir selesai dengan itu dan salah membaca spec, mungkin secara tidak sadar mencuri bagian dari ide itu.
Magic Octopus Urn

Ini adalah ant-y-log.
Arjun

"Setiap baris semut harus lebar". Jika w>nharus ada ruang ekstra sebelum tangan kanan |atau tidak, atau terserah kita?
Jonathan Allan

1
-1 for Ant-xamples(I hate puns)
caird coinheringaahing

Jawaban:


4

Jelly ,  44  43 byte

Dicoret 44 bukan 44 dengan penggunaan  

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

Cobalah online!

Bagaimana?

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

Saya telah bertanya tentang w<ndi komentar karena itu sedikit ambigu.
Jika log harus wlebar semut dan bukan hanya semut wlebar, biayanya dua byte:

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

Ini melakukan hal yang sama seperti sebelumnya kecuali daripada menambahkan satu spasi untuk membuat garis kosong pertama yang dibuatnya menjadi seluruh baris tambahan semut dan memotong semua kecuali garis kosongnya yang tertinggal.


5

V , 70 , 68 byte

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

Cobalah online!

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

Ini belum pernah terjadi pada saya sebelumnya, tetapi bug yang dikenal sebenarnya menyelamatkan saya byte!

Agak sulit untuk menjelaskan apa yang sebenarnya terjadi, tetapi sayangnya ketika Anda mencoba menduplikasi sesuatu dengan kolom, V akan memindahkan satu kolom sebelum menduplikasi. Itulah sebabnya awalnya saya lakukan:

h<C-v>{dÀp

yang tidak menggunakan operator duplikat. Namun, karena kita sudah perlu pindah satu baris, kita bisa melakukannya

hÀä<C-v>{

Bagus! Nominasi potensial untuk eksploitasi bug: P.
Guci Gurita Ajaib

5

PHP> = 7.1, 150 Bytes

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

Versi Online


Saya mendapat kesalahan ketika mengklik "versi online" dan "mengeksekusi kode".
Kjetil S.

1
@KjetilS. ubah Versi PHP menjadi 7.1
Jörg Hülsermann

Ya, 7.1 tidak apa-apa.
Kjetil S.

5

Python 2, 144 byte

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

Cobalah secara Online!


Ini tidak valid karena melewatkan garis kosong antara semut (bandingkan contoh w=1& n=3dengan versi Anda).
FatalMerlin

@FatalMerlin Terima kasih! Diperbaiki :)
pecandu matematika

4

05AB1E , 47 byte

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

Cobalah online!

Penjelasan

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

Bagian pertama: fungsi yang menampilkan bagian log kosong

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

Bagian kedua memiliki string terkompresi "nΤ↕¬┐α┐PΝld‘, yaitu semut. Itu terdekompresi menjadi \-/ OOo^/-\ . Itu semut (dengan jarak ke kanan), tetapi diambil dari atas ke bawah kemudian ke kanan suka

159d
26ae
37bf
48cg

Ini disimpan seperti itu karena fungsi menambahkan string seperti itu (itu karena Anda dapat mengalikan string untuk menambahkan beberapa instance ke dalamnya). Bagian itu sendiri: fungsi yang meminta nomor pada tumpukan yang menunjukkan berapa banyak semut yang akan digambar.

                                    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

Dan fungsi utamanya:

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

Cobalah online!

Perl 5 , 152 byte

Satu lagi berdasarkan pada solusi 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|"

Cobalah online!


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

Berpikir saya perlu membuat bahasa golf berbasis matematika.


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

Arang , 43 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

Nθ

Masukan w.

F⪪× Nθ«

Input n, lalu buat string nspasi dan pisahkan menjadi barisan panjang w(kecuali bagian terakhir yang mungkin lebih kecil). Lingkari baris-baris itu.

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

Cetak sisi-sisi bagian log.

  \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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.