Doğal Kütükte Karıncalar


23

Bu iyi bir acemi mücadelesi ve iyi bir zaman katildir.

Ben sadece doğal bir kütük dedim, çünkü başlık çok kısa, bunun logaritma ile ilgisi yok.

Verilen 2 değişken:

  • Karıncaların sayısı n.
  • Günlüğün genişliği w.

Çıkış genişliğinin bir günlük wolan nkarıncalar (Örnek gösterilmiştir w=3, n=6)

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

Tek bir karınca şöyle görünür:

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

Birkaç karınca yasası:

  1. Karıncalar birbirlerine veya kütüğün kenarına doğrudan dokunmayabilir, boşluklara dokunmayı tercih ederler.
  2. Her karınca sırası, karınca sıralarıyla wbirlikte geniş olmalıdır n/w.
  3. Karıncalar her zaman bir kütüğe ihtiyaç duyar, kütük genişliği 0'dan büyüktür, garanti edilir.
  4. Ayrıca karıncalar ... iyi, karıncalara ihtiyaç var, karınca sayısı 0'dan büyük, garantili.
  5. Karıncalar da şaşırtıcı derecede iyi organize edilmişlerdir, bir kütüğü soldan sağa, yukarıdan aşağıya doğru doldururlar; sanki bir kitap okuyorlarmış gibi.

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

Bu , en küçük bayt sayısına sahip olan kişi kazanır.



@AdmBorkBork Bunu şimdi hatırlıyorum. Bunun yarısını bitirdim ve belirtimi yanlış anladım, bilinçaltında bu fikrin bir kısmını çalmış olabilirim.
Magic Octopus Urn

Bunlar ant-y-loglar.
Arjun

"Her karınca sırası geniş olmalıdır". Eğer w>norada sağ eli önce fazladan yer olmalı |ya da değil, ya da bize bağlı?
Jonathan Allan,

1
-1 Ant-xamples(Ben
punklardan

Yanıtlar:


4

Jöle ,  44  43 bayt

44 ile çarpı işareti kullanımı  

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

Çevrimiçi deneyin!

Nasıl?

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

Ben yaklaşık istediler w<niçinde bir açıklama biraz belirsiz olduğundan.
Kütük w, sadece karıncaların geniş olması yerine karıncaların geniş olması gerekiyorsa w, iki bayta mal olur:

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

Bu, ilk, boş çizgiyi yapmak için tek bir boşluk hazırlamak yerine, bütün bir ekstra karınca dizisi oluşturur ve izleyen boş çizgiden başka hepsini keser.


5

V , 70 , 68 bayt

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

Çevrimiçi deneyin!

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

Bu daha önce başıma gelmedi, ama bilinen bir böcek aslında beni bayt kurtardı!

Neler olduğunu tam olarak açıklamak biraz zor, ama ne yazık ki bir şeyi sütunlarla çoğaltmaya çalıştığınızda, V çoğaltmadan önce bir sütunu ilerletir. Bu yüzden başlangıçta yaptım:

h<C-v>{dÀp

yinelenen işleci kullanmaz. Ancak, zaten bir çizgiyi geçmemiz gerektiğinden, basitçe yapabiliriz.

hÀä<C-v>{

Güzel! Böcek sömürüsü için potansiyel bir aday gösterme: P.
Magic Octopus Urn



4

05AB1E , 47 bayt

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

Çevrimiçi deneyin!

açıklama

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

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

İlk bölüm: boş bir günlük bölümü veren işlev

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

İkinci bölüm, "nΤ↕¬┐α┐PΝld‘karınca olan sıkıştırılmış bir dizeye sahiptir . İçin sıkıştırır \-/ OOo^/-\ . Bu karınca (sağa boşluklu), ancak yukarıdan aşağıya, sonradan sağa

159d
26ae
37bf
48cg

Böyle saklanır çünkü işlev böyle dizeler ekler (bunun nedeni, kendisine birden çok örnek eklemek için dizgiyi çoğaltabileceğinizdir). Parçanın kendisi: kaç tane karınca çizeceğini belirten yığında bir sayı isteyen işlev.

                                    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

Ve ana işlevi:

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 bayt

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

Çevrimiçi deneyin!

Perl 5 , 152 bayt

Python çözümüne dayanan bir tane daha:

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

Çevrimiçi deneyin!


0

Mathematica 210 Bayt

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 tabanlı bir golf dili yapmam gerektiğini düşünüyorum.


0

Python 2, 166 bayt

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

Kömür , 43 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

Nθ

Giriş w.

F⪪× Nθ«

Girin n, ardından bir nboşluk dizesi oluşturun ve onu uzunluk satırlarına bölün w(daha küçük olabilecek son parça hariç). Bu satırların üzerinden döngü.

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

Günlük bölümünün kenarlarını yazdırın.

  \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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.