自然ログのアリ


23

これは良い初心者の挑戦であり、良い時間のキラーです。

タイトルが短すぎたため、自然対数だけを言いました。これは対数とは関係ありません。

与えられた2つの変数:

  • アリの数n
  • ログの幅w

幅のログwnアリで出力します(例はw=3n=6

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

単一のアリは次のようになります。

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

いくつかのアリの法則:

  1. アリは互いに触れたり、ログの端に直接触れたりすることはできません。スペースに触れることを好みます。
  2. アリの各行はw幅が広く、アリの行が必要n/wです。
  3. アリには常にログが必要です。ログの幅は0より大きく、保証されています。
  4. アリも...アリが必要です。アリの数は0より大きく、保証されています。
  5. アリも驚くほどうまく編成されており、左から右、上から下にログを埋めていきます。彼らが本を読んでいるかのように。

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

これはで、バイトカウントが最小の人が勝ちます。



@AdmBorkBork私は今それを覚えています。私はそれで中途半端に終わって、仕様を読み違えました、無意識のうちにその考えの一部を盗んだかもしれません。
魔法のタコ

これらはant-y-logです。
アルジュン

「アリの各列は幅が広くなければなりません」。場合はw>nそこに余分なスペースが右手前にあるべき|か、またはそれは、最大私たちにありますか?
ジョナサンアラン

1
-1のAnt-xamples(私は駄洒落が嫌いです)
ケアニアン共犯

回答:


4

ゼリー 44  43 バイト

取り消し線44は44の使用ではありません  

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

オンラインでお試しください!

どうやって?

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

少しあいまいなので、コメントで尋ねw<nまし
ログのw幅をアリだけでなくアリの幅にする必要がある場合、w2バイトかかります。

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

これは、最初の空白行を作成するために単一のスペースを追加するのではなく、前と同じことを行います。


5

V70、68のバイト

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

オンラインでお試しください!

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

これは私にはこれまでに一度もありませんでしたが、既知のバグが実際にバイトを節約しました!

何が起こっているのかを正確に説明するのは少し難しいですが、残念ながら列ごとに何かを複製しようとすると、Vは複製する前に1列移動します。それがもともと私がやった理由です:

h<C-v>{dÀp

これは重複演算子を使用しません。ただし、すでに1行移動する必要があるため、単純に

hÀä<C-v>{

いいね!バグの悪用の潜在的な指名:P。
魔法のタコUr

5

PHP> = 7.1、150バイト

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

オンライン版


「オンラインバージョン」と「コードの実行」をクリックするとエラーが発生しました。
Kjetil S.

1
@KjetilS。7.1にPHPのバージョンを変更
イェルクHülsermann

はい、7.1は大丈夫です。
Kjetil S.


4

05AB1E、47バイト

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

オンラインでお試しください!

説明

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

SOGL74 71 74 バイト

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

2番目の部分には、圧縮された文字列"nΤ↕¬┐α┐PΝld‘antがあります。に解凍し\-/ OOo^/-\ ます。それはアリです(右にスペースがあります)が、上から下へ、そして右へ

159d
26ae
37bf
48cg

関数はそのような文字列を追加するため、そのように格納されます(それは、文字列を乗算して複数のインスタンスを追加できるためです)。パート自体:描画するアリの数を示すスタック上の数値を要求する関数。

                                    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

そして主な機能:

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バイト

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

オンラインでお試しください!

Perl 5 5、152バイト

Pythonソリューションに基づくもう1つ:

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

オンラインでお試しください!


0

Mathematica 210バイト

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ベースのゴルフ言語を作成する必要があると考えています。


0

Python 2、166バイト

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

、43バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

Nθ

入力w

F⪪× Nθ«

入力n、次にnスペースの文字列を作成し、長さの行に分割しますw(最後の部分は小さい場合があります)。それらの行をループします。

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

ログセクションの側面を印刷します。

  \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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.