Hormigas en un registro natural

23

Este es un buen desafío para principiantes y un buen asesino del tiempo.

Solo dije un registro -natural- porque el título era demasiado corto, esto no tiene nada que ver con logaritmos.

Dadas 2 variables:

  • El número de hormigas n.
  • El ancho del registro w.

Salida de un registro de anchura wcon nhormigas (Ejemplo mostrado w=3, n=6)

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

Una sola hormiga se ve así:

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

Algunas leyes de hormigas:

  1. Las hormigas pueden no tocarse entre sí ni al borde del tronco directamente, prefieren tocar espacios.
  2. Cada fila de hormigas debe ser wancha, con n/wfilas de hormigas.
  3. Las hormigas siempre necesitan un registro, el ancho del registro es mayor que 0, garantizado.
  4. Las hormigas también ... bueno, necesitan hormigas, el número de hormigas es mayor que 0, garantizado.
  5. Las hormigas también están sorprendentemente bien organizadas, llenarán un registro de izquierda a derecha, de arriba a abajo; como si estuvieran leyendo un libro.

Muestras de hormigas

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

Este es el , la persona con el bytecount más pequeño gana.

Urna de pulpo mágico
fuente
77
Relacionados .
AdmBorkBork
@AdmBorkBork SÍ recuerdo eso ahora. Terminé a medias y leí mal las especificaciones, puede que haya robado inconscientemente parte de esa idea.
Urna mágica de pulpo
Estos son registros de hormigas.
Arjun
"Cada fila de hormigas debe ser de ancho". ¿ w>nDebería haber espacio adicional antes de la mano derecha |o no, o depende de nosotros?
Jonathan Allan
1
-1 para Ant-xamples(Odio los juegos de palabras)
caird coinheringaahing

Respuestas:

4

Jalea ,  44  43 bytes

Tachado 44 no es 44 con el uso de  

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

Pruébalo en línea!

¿Cómo?

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

He preguntado w<nen un comentario ya que es un poco ambiguo.
Si el registro debe ser wancho de hormigas en lugar de ser solo wancho, cuesta dos bytes:

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

Esto hace lo mismo que antes, excepto que en lugar de anteponer un solo espacio para hacer la primera línea en blanco, crea una fila extra completa de hormigas y corta todo excepto su línea en blanco final.

Jonathan Allan
fuente
5

V , 70 , 68 bytes

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

Pruébalo en línea!

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

Esto nunca me había pasado antes, ¡pero un error conocido realmente me ha ahorrado bytes!

Es un poco difícil explicar exactamente lo que está sucediendo, pero desafortunadamente cuando intentas duplicar algo por columnas, V moverá una columna antes de duplicar. Por eso originalmente lo hice:

h<C-v>{dÀp

que no usa el operador duplicado. Sin embargo, debido a que ya necesitábamos mover una línea, simplemente podemos hacer

hÀä<C-v>{
DJMcMayhem
fuente
¡Agradable! Una posible nominación para la explotación de errores: P.
Magic Octopus Urn
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ón en línea

Jörg Hülsermann
fuente
Recibí un error al hacer clic en "versión en línea" y "ejecutar código".
Kjetil S.
1
@KjetilS. cambie la versión PHP a 7.1
Jörg Hülsermann
Sí, 7.1 está bien.
Kjetil S.
5

Python 2, 144 bytes

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

Pruébalo en línea!

adicto a las matemáticas
fuente
Esto no es válido ya que pierde la línea vacía entre las hormigas (compare el ejemplo w=1y n=3su versión).
FatalMerlin
@FatalMerlin ¡Gracias! Solucionado :)
adicto a las matemáticas
4

05AB1E , 47 bytes

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

Pruébalo en línea!

Explicación

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

SOGL , 74 71 74 bytes

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

Primera parte: función que genera una parte de registro vací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 "|"

La segunda parte tiene una cadena comprimida "nΤ↕¬┐α┐PΝld‘, que es la hormiga. Se descomprime a \-/ OOo^/-\ . Esa es la hormiga (con espacio a la derecha), pero tomada de arriba hacia abajo y luego a la derecha como

159d
26ae
37bf
48cg

Se almacena así porque la función agrega cadenas como esa (eso es porque luego puede multiplicar la cadena para agregarle varias instancias). La parte en sí: función que pide un número en la pila que indica cuántas hormigas dibujar.

                                    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

Y la función principal:

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
fuente
2

Perl 5 , 159 bytes

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

Pruébalo en línea!

Perl 5 , 152 bytes

Otro basado en la solución 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|"

Pruébalo en línea!

Kjetil S.
fuente
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",""]&

Pensando que necesito hacer un lenguaje de golf basado en Mathematica.

Kelly Lowder
fuente
0

Python 2, 166 bytes

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
fuente
0

Carbón , 43 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

Nθ

Entrada w.

F⪪× Nθ«

Ingrese n, luego cree una cadena de nespacios y divídala en filas de longitud w(excepto la última pieza que puede ser más pequeña). Pase sobre esas filas.

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

Imprima los lados de la sección de registro.

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