Mrówki na dzienniku naturalnym

23

To dobre wyzwanie dla początkujących i zabójca czasu.

Powiedziałem tylko „naturalny” log, ponieważ tytuł był zbyt krótki, nie ma to nic wspólnego z logarytmami.

Biorąc pod uwagę 2 zmienne:

  • Liczba mrówek n.
  • Szerokość kłody w.

Wyjście log szerokości wz nmrówki (przykład pokazano w=3, n=6)

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

Pojedyncza mrówka wygląda następująco:

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

Kilka praw mrówek:

  1. Mrówki nie mogą dotykać się bezpośrednio ani krawędzi kłody, wolą dotykać spacji.
  2. Każdy rząd mrówek musi być wszeroki, z n/wrzędami mrówek.
  3. Mrówki zawsze potrzebują kłody, gwarantowana szerokość kłody jest większa od 0.
  4. Mrówki też ... no cóż, potrzebują mrówek, liczba mrówek jest większa niż 0, gwarantowane.
  5. Mrówki są również zaskakująco dobrze zorganizowane, wypełnią kłodę od lewej do prawej, od góry do dołu; jakby czytali książkę.

Mrówki

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

To jest , osoba z najmniejszą liczbą bajtów wygrywa.

Urna Magicznej Ośmiornicy
źródło
7
Związane .
AdmBorkBork
@AdmBorkBork Pamiętam to teraz. Zrobiłem to w połowie i źle odczytałem specyfikację, być może podświadomie ukradłem część tego pomysłu.
Magic Octopus Urn
Są to dzienniki ant-y.
Arjun
„Każdy rząd mrówek musi być szeroki”. Czy w>npowinna być dodatkowa przestrzeń przed prawą ręką, |czy nie, czy zależy to od nas?
Jonathan Allan
1
-1 za Ant-xamples(nienawidzę kalamburów)
caird coinheringaahing

Odpowiedzi:

4

Galaretka ,  44  43 bajtów

Przekreślone 44 nie jest 44 przy użyciu  

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

Wypróbuj online!

W jaki sposób?

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

Zapytałem o to w<nw komentarzu, ponieważ jest nieco niejednoznaczny.
Jeśli dziennik musi mieć wszerokość mrówek, a nie tylko wszerokość mrówek , kosztuje dwa bajty:

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

Robi to tak samo jak poprzednio, z wyjątkiem tego, że zamiast przygotowywać pojedynczą spację w celu utworzenia pierwszej pustej linii, tworzy cały dodatkowy rząd mrówek i odcina wszystko oprócz jego końcowej pustej linii.

Jonathan Allan
źródło
5

V , 70 , 68 bajtów

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

Wypróbuj 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

Nigdy wcześniej mi się to nie zdarzyło, ale znany błąd w rzeczywistości oszczędził mi bajty!

Trudno jest dokładnie wyjaśnić, co się dzieje, ale niestety, kiedy spróbujesz powielić coś według kolumn, V przesunie jedną kolumnę przed powieleniem. Dlatego pierwotnie to zrobiłem:

h<C-v>{dÀp

który nie korzysta ze zduplikowanego operatora. Ponieważ jednak musieliśmy już przesunąć jedną linię, możemy po prostu to zrobić

hÀä<C-v>{
DJMcMayhem
źródło
Miły! Potencjalna nominacja za wykorzystanie błędu: P.
Magic Octopus Urn
5

PHP> = 7,1, 150 bajtów

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

Wersja online

Jörg Hülsermann
źródło
Wystąpił błąd po kliknięciu „wersja online” i „wykonanie kodu”.
Kjetil S.
1
@KjetilS. zmień wersję PHP na 7.1
Jörg Hülsermann 21.04.17
Tak, 7.1 jest w porządku.
Kjetil S.
5

Python 2, 144 bajty

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

Wypróbuj online!

ćpun matematyki
źródło
Jest to nieprawidłowe, ponieważ pomija pustą linię między mrówkami (porównaj przykład w=1i n=3swoją wersję).
FatalMerlin 25.04.17
@FatalMerlin Thanks! Naprawiono :)
ćpun matematyki
4

05AB1E , 47 bajtów

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

Wypróbuj online!

Wyjaśnienie

"   \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
Emigna
źródło
4

SOGL , 74 71 74 bajty

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

Pierwsza część: funkcja, która generuje pustą część dziennika

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

Druga część ma skompresowany ciąg znaków "nΤ↕¬┐α┐PΝld‘, który jest mrówką. Dekompresuje się do \-/ OOo^/-\ . To mrówka (z odstępami po prawej), ale od góry do dołu, a potem w prawo

159d
26ae
37bf
48cg

Jest tak przechowywany, ponieważ funkcja dołącza takie ciągi (to dlatego, że możesz pomnożyć ciąg, aby dodać do niego wiele wystąpień). Sama część: funkcja, która prosi o liczbę na stosie oznaczającą liczbę mrówek do narysowania.

                                    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

I główna funkcja:

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
dzaima
źródło
2

Perl 5 , 159 bajtów

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

Wypróbuj online!

Perl 5 , 152 bajty

Kolejny oparty na rozwiązaniu 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|"

Wypróbuj online!

Kjetil S.
źródło
0

Mathematica 210 bajtów

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

Myślę, że muszę stworzyć język golfa oparty na matematyce.

Kelly Lowder
źródło
0

Python 2, 166 bajtów

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\\',' ^ ','   ']])
TFeld
źródło
0

Węgiel drzewny , 43 bajty

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

Nθ

Wejście w.

F⪪× Nθ«

Wprowadź n, a następnie utwórz ciąg nspacji i podziel go na rzędy długości w(z wyjątkiem ostatniego elementu, który może być mniejszy). Pętla nad tymi rzędami.

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

Wydrukuj boki sekcji dziennika.

  \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
Neil
źródło