기본 ASCII Tallies


36

다른 제목 : 벽에 감옥 형을 집계

숫자가 주어지면 n출력 집계는 기존의 그룹당 5 개와 행당 50 개로 그룹화됩니다.


1

|
|
|
|

4

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

5

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

6

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

50

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

51

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

|
|
|
|

256

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

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

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

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

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

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

규칙

  • 그룹당 5 개의 키, 행당 총 50 개의 키.
  • 첫 번째 네 개의 키는 세로이고 다섯 번째 탈리는 다른 모든 키를 교차합니다.
    • 처음 네 개는 각각 4 개의 세로 |문자 로 구성됩니다 .
    • 마지막 다섯 번째 집계는 첫 번째 4 개 모두 /에 대각선 으로 문자가 있습니다.
  • 각 그룹은 공백으로 구분하고 각 행은 빈 줄 바꿈으로 구분해야합니다.
  • 제한 사항 n은 다음과 같습니다 0 <= n <= 1000(단순화를 위해).
  • 후행 공백과 개행은 괜찮습니다.
  • 이것은 , 가장 적은 바이트 수의 승리입니다.

샌드 박스 에서 ~ 4 명이 검토했습니다 .


추신 : 재미 작은 tid-bit, 감옥에서 행 당 평균 키의 수는 50이므로 alt. 표제.



큰 도전, 복잡하면서도 단순합니다.
ATaco

@ATaco 난 정말 "큰 그림"에 슬래시를 집계하고 슬래시 패턴을 행으로 유추 할 수있는 솔루션을 찾고 싶습니다 (쉽게 승리).
Magic Octopus Urn

2
주셔서 감사합니다 순전히 그들에게 대신 백 슬래시의 슬래시를 만들기위한.
완전히 인간적인

1
@totallyhuman 오 세상에, 내가 올린 이미지의 남자는 ... 무슨 우주인가? 번스타인이 다시 한 번 곰이다. 동전이 머리 나 꼬리에 닿아 가장 최근의 미국 선거를 결정 했는가?!
Magic Octopus Urn

답변:


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
펑키는 ... 지금 뭐야? 흥미 롭군 이전에 제가 어려웠던 점에서이 언어를 본 적이 없습니다.
매직 문어 Urn

1
@MagicOctopusUrn 아마 내가 썼기 때문에 : P
ATaco

1
JavaScript 기반 언어? 위험한. 하지만 괜찮습니다. 위험을 좋아합니다.
매직 문어 Urn

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 고마워요!
HyperNeutrino

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

자바 스크립트 (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')

반환 한 뒤에 줄 바꿈이있는 문자열을 n할 때 여러 뒤에 줄 바꿈과 50 일의 배수가 아닌 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는 있지만 그 방법은 지금까지 짧았습니다.


ungolfed 버전을 통해 작업하고 이해하기 위해 10 분 동안 견고하게했습니다. = ^ P 거기에 멋진 트릭이 있습니다.
DLosc

확신 당신을 위해 할 수있는 (전 = 0; ++ 내가 <N / 50; S + = N) 하나 개의 문자 저장
DanielIndie

@DanielIndie 외부 루프가 너무 여러 번 실행되어 실패합니다 : 온라인으로 시도하십시오!
저스틴 마리너

4

J , 50 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$'|||/'
Jonah

@Jonah 그것은 가야했다 :(
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에 인쇄 하는 함수입니다.

gx줄을 나누지 않고 5로 그룹화 된 키 를 인쇄하는 도우미 함수입니다 .

f통화 가 50 미만이 될 때까지 통화 를 50 g(50)씩 줄인 x다음 g(x)나머지 통화 를 한 줄에 인쇄하도록 통화 합니다.

sA는 char*문자열로, 그에 따라, s번들의 최초의 행 s+6번째이며, s+12세 번째, 그리고 s+18네 번째이며, s+24빈 문자열이다.

g(x)x가 5보다 작을 때까지 묶음과 x를 5 씩 줄인 다음 x단일 키 를 인쇄합니다 .



2

파이썬 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 바이트? 나쁘지 않다 :).
Magic Octopus Urn

3
당신이 정말로 시간 전에 잠자리에 갔었어야 할 때 작업 빠른에 도착
Halvard 험멜

Quick ~= Quality;). 좋은 작업.
Magic Octopus Urn

3
Errr .. 잘못 해석되었을 수 있습니다. 당신이 양질의 작업을 빠르게했다는 말은 ... 반대가 아닙니다.
매직 문어 Urn




2

PHP, 138141 + 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하거나 온라인으로 사용해보십시오 .


산뜻한! 그러나 탈키의 두 번째 탈리 라인에서 완전히 교차하지는 않습니다.
SpazzMarticus

5.5에서 로컬로 5.6.31 및 7.1.9의 "온라인으로 시도"예제를 실행할 때
SpazzMarticus

1
$x단지 제 1 루프에 정의되어 탈리 크의 출력이 최대 혼잡 (54)가 고정되어 있지만 golfed하지보다 : sandbox.onlinephpfunctions.com/code/...
SpazzMarticus

@SpazzMarticus 수정 됨
Titus

시원한! 골프 코드를 디버깅하는 것은 처음이었습니다. :) 나는 푹 빠졌다고 생각한다!
SpazzMarticus

2

파이썬, 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)

파이썬 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목록의 내용을 함께 연결하고 후행 줄 바꿈으로 출력합니다. 따라서 우리는

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

함께 후행 개행 (목록 내용에서 하나 추가 한 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.