基本的なASCIIタリー


36

代替タイトル:壁にあなたの刑務所の文を集計します

numberを指定するとn、出力はグループごとに従来の5に、行ごとに50にグループ化されます。


1

|
|
|
|

4

||||
||||
||||
||||

5

|||/
||/|
|/||
/|||

6

|||/ |
||/| |
|/|| |
/||| |

50

|||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/
||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/|
|/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/||
/||| /||| /||| /||| /||| /||| /||| /||| /||| /||| 

51

|||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/
||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/|
|/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/||
/||| /||| /||| /||| /||| /||| /||| /||| /||| /||| 

|
|
|
|

256

|||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/
||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/|
|/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/||
/||| /||| /||| /||| /||| /||| /||| /||| /||| /||| 

|||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/
||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/|
|/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/||
/||| /||| /||| /||| /||| /||| /||| /||| /||| /||| 

|||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/
||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/|
|/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/||
/||| /||| /||| /||| /||| /||| /||| /||| /||| /||| 

|||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/
||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/|
|/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/||
/||| /||| /||| /||| /||| /||| /||| /||| /||| /||| 

|||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/
||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/|
|/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/|| |/||
/||| /||| /||| /||| /||| /||| /||| /||| /||| /||| 

|||/ |
||/| |
|/|| |
/||| |

ルール

  • グループごとに5回の集計、行ごとに合計50回の集計。
  • 最初の4つの集計は垂直で、5番目の集計は他のすべての集計と交差します。
    • 最初の4つはそれぞれ4つの垂直|文字で構成されています。
    • 最後の5番目の集計は、最初の4つすべてに、/文字を付けて斜めに広がります。
  • 各グループはスペースで区切り、各行は空白の改行で区切る必要があります。
  • 制限nは次のとおりです0 <= n <= 1000(簡単にするため)。
  • 後続のスペースと改行は問題ありませんが、先行するものはそうではありません。
  • これは、バイト数が最も少なくなります。

サンドボックスで〜4人がレビューしました。


PSはちょっとおもしろくて、刑務所の行ごとの平均集計数は50だったので、altでした。タイトル。



大きな挑戦、複雑でありながらシンプル。
アタコ

@ATaco「全体像」のスラッシュを集約し、スラッシュパターンを行ごとに推測できることを考慮に入れたソリューションを見つけたいと思っています(これは簡単な勝利です)。
魔法のタコUr

2
ありがとうそんなにそれらスラッシュの代わりにバックスラッシュ作るため。
完全に人間の

1
@totallyhumanなんてこった、私が投稿した画像の男は...これは一体何なのか?それは、バーンスタインがまたもや負けです...コインは、最近の米国の選挙を決めるために頭や尻尾に着地しましたか?!
魔法のタコUr

回答:


11

30 25バイト

FN«J﹪ι⁵⁰×⁵÷ι⁵⁰¿﹪⊕ι⁵↓⁴«←↙⁴

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

 N                          Input number
F «                         Loop over implicit range
     ι     ι                Loop index
      ⁵⁰    ⁵⁰              Literal 50
    ﹪                       Modulo
          ÷                 Integer divide
         ⁵                  Literal 5
        ×                   Multiply
   J                        Jump to column, row
                 ι          Loop index
                ⊕           Incremented
                  ⁵         Literal 5
               ﹪            Modulo
              ¿             If
                   ↓⁴       Print 4 `|`s downwards
                     «      Implicit else
                      ←     Move left
                       ↙⁴   Print 4 `/`s down and left

6

ファンキー156の 132 133バイト

n=>{k=n=>((l="|"::rep)(3-i)+"/"+l(i)+" ")::rep(n)p=print L=f=>fori=0i<4i++p(f())forc=0c<n//50c++{L@k(10);p()}L@k((m=n%50)//5)+l(m%5)}

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


1
ファンキーは...今何?面白い。これまでに私の挑戦でこの言語を見たことがありません。
魔法のタコUr

1
@MagicOctopusUrnたぶん私が書いたから:P
ATaco

1
JavaScriptベースの言語ですか?危険な。しかし、それは大丈夫です、私は危険が大好きです。
魔法のタコUr

1
fori=0i<4i++p(f())forc=0c<n//50c++構文の名前をとるこの神聖な獣とは何か
完全に人間



5

ゼリー、37バイト

:5[“|||/”]ẋ;”|ẋ⁸%5¤¤W¤ṙ€4Ḷ¤s⁵Z€G€j⁾¶¶

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

説明

:5[“|||/”]ẋ;”|ẋ⁸%5¤¤W¤ṙ€4Ḷ¤s⁵Z€G€j⁾¶¶  Main Link
:5                                     Floordiv by 5
  [“|||/”]ẋ                            Repeat ["|||/"] by this number
           ;                           Append
            ”|ẋ    ¤                   "|" repeated by
               ⁸%5¤                    The argument modulo 5
                    W¤                 Then wrapped to prevent weirdness
                      ṙ€               Rotate each tally segment by
                        4Ḷ¤            (each) [0, 1, 2, 3]
                           s⁵          Slice into pieces of length 10 (to get 50 per row)
                             Z€        Transpose each
                               G€      Convert each into a grid
                                 j⁾¶¶  Join these grids by a double newline

これが長すぎる


@FrownyFrog修正、ありがとう!
ハイパーニュートリノ

4

、29バイト

J;øṀṪṙŀ4C10§:oR"|||/"÷5oR'|%5

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

最初のもの5は冗長な気がしますが、それを削除すると型エラーが発生します...

説明

J;øṀṪṙŀ4C10§:oR"|||/"÷5oR'|%5  Implicit input, an integer n.
                       oR'|    Repeat the character '|'
                           %5  n mod 5 times.
             oR"|||/"          Repeat the string "|||/"
                     ÷5        n/5 times.
           §:                  Tack the '|'-string to the end of that list.
        C10                    Cut the list of strings into pieces of length 10.
   Ṁ                           For each piece,
    Ṫ ŀ4                       for each k in [0,1,2,3],
     ṙ                         rotate each string k steps to the left
                               and collect the results into a list.
                               Now we have a list of lists of lists of strings.
J;ø                            Join them with the list [[]].
                               Implicitly join each list of strings by spaces,
                               then join the resulting list of strings by newlines,
                               and print the result.

4

SOGL V0.12、33のバイト

ā.{┐4∙F5\?X1w⁄3-14╚╬5@}┼FM»\?O¶oā

ここで試してみてください!

電話でのゴルフは難しいです。

説明:

ā                                  push an empty array
 .{                                repeat input times
   ┐4∙                               push a 4 tall line
      F5\?            }              if the counter (1-indexed) divides by 5
          X                            pop that vertical line
           1w⁄                         get the width of the main array
              3-                       subtract 3 from that width - X position
                1                      push 1 - Y position
                 4╚                    push a 4 long diagonal
                   ╬5                  place that in the main array at [width-3; 1]
                     @                 push a space - for the below to add spacing
                       ┼             append horizontally
                        FM»\?        if the counter divides by 50
                             O         output the main array
                              ¶o       output a newline
                                ā      push a new array
                                       (note that the outputting here doesn't disable
                                       implicit outputting)

4

JavaScript(ES6)、139 137バイト

n=>eval('s="";for(i=0;i++<=n/50;s+=N)for(j=5;--j;s+=N=`\n`)for(k=0;k<(x=(y=n-i*50)<0?50+y:50);)s+=++k%5?k%5-j|k>5*(x/5|0)?"|":"/":" ";s')

戻り値1つの最後の改行を含む文字列n際には、いくつかの末尾の改行と50と1の倍数ではないn です 50の倍数。

非ゴルフ

n=>{
    s=""
    for(i=0; i++ <= n/50; s+=N)
        for(j=5; --j; s+=N=`\n`)
            for(k=0; k < (x = (y = n-i*50) < 0 ? 50+y : 50);)
                s += ++k%5 ?
                    k%5-j|k>5*(x/5|0) ?
                        "|"
                    : "/"
                : " "
    return s
}

テストスニペット

evalソリューション、150バイト

n=>(A=(v,m)=>j=>[...Array(v).keys()].map(m).join(j))(n/50+1|0,i=>A(4,j=>A(x=(y=n+~i*50)<0?50+y:50,k=>++k%5?k%5-4+j|k>5*(x/5|0)?"|":"/":" ")``)`
`)`

`

おそらくこれをさらにゴルフすることができますが、このeval方法はこれまでよりも短くなっています。


経験のないバージョンを理解し、理解するためにしっかりと10分かかりました。= ^ Pあなたはそこにいくつかの素晴らしいトリックを持っています。
DLosc

かなり確信してあなたがのために行うことができます(私は= 0; ++ I <N / 50; sの+ = N)1つの文字節約
DanielIndie

@DanielIndieこれは、外側のループの実行回数が少なすぎるために失敗します。オンラインで試してください!
ジャスティンマリナー

4

J50 48 45 35 33バイト

_50|:\'|/ '{~[{.(|.2,=i.4)$~]-5|]

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

                (    =i.4)          Identity matrix of size 4.
                (  2,    )          Prepend a row of 2s.
                (|.      )          Upside down.
                          $~        Take __ rows.
                            ]-5|]   Input rounded down to a multiple of 5.
             [{.                    Pad with rows of zeroes to [input] rows.
      '|/ '{~                       Get the characters.
_50|:\                              Transpose and fit to width.

この部分に中置を使用するアイデアが大好きです4,&' '\7$'|||/'
ジョナ

@ジョナそれは行かなければならなかった:(
FrownyFrog

3

C(gcc)、170バイト

char*s="|||/ \0||/| \0|/|| \0/||| \0";h;k;g(x){for(h=0;h<5;h++){for(k=x;k>4;k-=5)printf(s+6*h);for(;k&&h-4;k--)printf("|");putchar(10);}}f(x){for(;x>49;x-=50)g(50);g(x);}

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

fは、負でない整数(x)を取り、指定されたとおりにグループ化された多くの集計をstdoutに出力する関数です

gx5でグループ化された集計を、行を分割せずに印刷するヘルパー関数です。

f呼び出して50未満になるまで50 ずつg(50)減分xg(x)、残りの集計を1行に印刷するために呼び出します。

sは、char*文字s列として、バンドルの最初の行s+6、2番目、s+123番目、s+184番目でs+24、空の文字列であるようなものです。

g(x)バンドルを印刷し、xが5未満になるまでxを5ずつ減分してから、x単一の集計を印刷します。



2

Python 2、142バイト

n=input()
while n>0:print"\n".join("".join("|/ "[2*(j%5>3)+(n/(5*(j/5+1))and 3-i==j%5)]for j in range(min(50,n)))for i in range(4)),"\n";n-=50

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


1
18分で142バイト?悪くない :)。
魔法のタコUr

3
あなたが本当に1時間前に寝るべきだったとき、すぐに仕事に
取り掛かりました

Quick ~= Quality;)。良くやった。
魔法のタコUr

3
エラー...誤解される可能性があります。あなたは質の高い仕事を早くやったと言います...反対ではありません。
魔法のタコUr




2

PHP、138 141 + 1バイト

おそらく最短の解決策ではない

for(;0<$z=50+min($n=$x=$y=0,$argn-=50);print"
")while($n++<$z||!$x=+(3<$y+=$n=print"
"))echo"/| "[$n%5?($y+$x++)%4<3|$n%5+$y<4|$z-$z%5<$n:2];

でパイプとして実行する-nR、オンラインで試してください


きちんとした!しかし、集計の2番目の集計ラインからは完全に交差していません。
-SpazzMarticus

5.5からローカルで5.6.31および7.1.9の「オンラインで試す」例を実行する場合。
-SpazzMarticus

1
$xこれだけ台無しには54が固定よりもタリー大きいため出力まで、最初のループで未定義が、golfedされていません。sandbox.onlinephpfunctions.com/code/...
SpazzMarticus

@SpazzMarticus修正
タイタス

クール!ゴルフされたコードをデバッグするのは初めてでしたが、苦労しました!:)私は夢中になっていると思う!
-SpazzMarticus

2

Python、 129 113 112バイト

f=lambda n:n>50and f(50)+"\n\n"+f(n-50)or"\n".join(("|||/|||"[k:k+4]+" ")*(n//5)+" "+"|"*(n%5)for k in range(4))

説明

def p(n):
  if n > 50:
    return p(50) + "\n\n" + p(n-50) # Handle 50-groups recursively
  else:
    # For each of the 4 lines:
    rows = []
    for row in range(4):
      #  - Build the "|||/"-blocks by slicing the correct part of "|||/|||".
      #  - Do that n/5 times
      #  - Then add "|" n%5 times
      rows += [("|||/|||"[row:row+4]+" ")*(n//5) + " " + "|"*(n%5)]

    # Join the four rows together
    return "\n".join(rows)

Python 2および3で動作します。

オンラインで試す



1

ルビー、100バイト

->n{(n/-50*-4).times{|i|j=[n-i/4*50,50].min
$><<("|||/|||"[i%4,4]+" ")*(j/5)+?|*(j%5)+$/*(1+i%4/3)}}

コメント済み

->n{(n/-50*-4).times{|i|              #Calculate rows of tallies (Ruby rounds division towards negative infinity. Multiply by 4 lines per tally and iterate through them.)
  j=[n-i/4*50,50].min                 #Number of strokes printed in current row is either the number remaining, or 50, whichever is less
    $><<("|||/|||"[i%4,4]+" ")*(j/5)+ #Send to stdout the correct 4 chars selected from "|||/|||" plus a space, j/5 times (rounded down, which eliminates odd strokes.) 
    ?|*(j%5)+                         #If there are any odd strokes, add them to the output
    $/*(1+i%4/3)                      #followed by a newline (2 for the final line of each row of tallies.)
  }
}

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


1

ピップ47 46バイト

Wa-:yP('|X4.sRA3-_'/M,4)X(YMN[a50])/5.'|Xy%5.n

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

説明

        Implicit: a is 1st cmdline arg, y is "", s is space, n is newline
W       While loop:
 a-:y   Each iteration, subtract y from a and check if a is still nonzero
        (Since "" is 0 in numeric contexts, this does nothing the first time through)
     P  Print the following:

('|X4.sRA3-_'/M,4)X(YMN[a50])/5.'|Xy%5.n
              M                           Map this function to each number in
               ,4                         range(4):
 '|X4                                      String of four pipe characters
     .s                                    Concatenate a space
       RA                                  Replace the character at index
         3-_                                (3 minus function argument)
            '/                              with forward slash

                                          We now have a list of four strings representing
                                           the rows of a group of 5 tally marks; the
                                           following operations apply to the list
                                           element-wise:

                       [a50]              List of a (number of remaining tallies) and 50
                     MN                   Get the min (number of tallies on this row)
                    Y                     Yank it into y
                   (        )/5           Divide by 5 (number of groups on this row)
(                )X                       String-multiply by that amount
                                   y%5    Number of leftover tallies on this row
                                '|X       String-multiply that many pipes
                               .          Concatenate
                                      .n  Concatenate a newline

結果のリストは次のようになります。

["|||/ ||\n" "||/| ||\n" "|/|| ||\n" "/||| ||\n"]

デフォルトでPは、リストの内容を連結し、末尾の改行で出力します。したがって、

|||/ ||
||/| ||
|/|| ||
/||| ||

末尾に2つの改行(1つはリストの内容から、もう1つはによって追加されますP)。印刷する別の行がある場合、これは間に必要な空白行を提供します。




0

05AB1E、28 バイト

5‰"|||/"¬‚×J4ôTôεε3Ý._}ø»¶«,

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

説明:

5              # Divmod the (implicit) input-integer by 5
                #  i.e. 111 → [22,1]
  "|||/"        # Push string "|||/"
        ¬       # Push its first character (without popping the string itself): "|"
               # Pair them together: ["|||/","|"]
          ×     # Repeat it based on the divmod
                #  i.e. [22,1] → ["|||/|||/|||/...|||/|||/|||/","|"]
           J    # Join everything together to a single string
                #  → "|||/|||/|||/...|||/|||/|||/|"
            4ô  # Which is then split into block of size 4
                #  → ["|||/","|||/","|||/",...,"|||/","|||/","|||/","|"]
Tô              # Then split this list into sublists of size 10
                #  → ["|||/","|||/","|||/",...],[...,"|||/"],["|||/","|||/","|"]]
  ε             # For-each over the sublists:
   ε            #  Map over the strings in the sublist:
    3Ý          #   Push list [0,1,2,3]
      ._        #   For each: rotate the string that many times
                #    ("|||/" → ["|||/","||/|","|/||","/|||"])
              #  After the map: zip/transpose; swapping rows/columns
     »          #  Join each inner list by spaces, and then the strings by newlines
      ¶«        #  Append a newline to each string
        ,       #  And print with trailing newline

¶«,もちろん、,¶?またはのようないくつかの可能な等バイトの選択肢があります,õ,



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