Cơ sở ASCII cơ bản


36

Tiêu đề thay thế: Kiểm đếm bản án tù của bạn trên tường

Cho một số n, các số đo đầu ra được nhóm thành 5 nhóm mỗi nhóm truyền thống và 50 mỗi hàng.


Ví dụ

1

|
|
|
|

4

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

5

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

6

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

50

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

51

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

|
|
|
|

256

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

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

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

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

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

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

Quy tắc

  • 5 Tallies mỗi nhóm, 50 tổng số Tallies mỗi hàng.
  • 4 nàng tiên đầu tiên thẳng đứng, lần thứ 5 vượt qua tất cả các nàng tiên khác.
    • Mỗi trong bốn đầu tiên bao gồm 4 |ký tự dọc .
    • Lần kiểm tra thứ 5 cuối cùng kéo dài cả 4 lần đầu tiên, với một /ký tự, theo đường chéo.
  • Mỗi nhóm nên được phân cách bằng một khoảng trắng, mỗi hàng một dòng mới trống.
  • Các ràng buộc trên nlà: 0 <= n <= 1000(để đơn giản).
  • Không gian lưu trữ và dòng mới là tốt, trước đó là không.
  • Đây là , đánh số byte thấp nhất.

Được đánh giá bởi ~ 4 người trong hộp cát .


PS tid-bit vui vẻ, số lượng trung bình của mỗi người trong tù là 50, do đó là alt. chức vụ.



Thử thách lớn, phức tạp nhưng đơn giản.
ATaco

@ATaco Tôi thực sự muốn tìm giải pháp tổng hợp các dấu gạch chéo trong "bức tranh lớn" và tính đến việc mô hình gạch chéo có thể được suy ra theo hàng (đó là chiến thắng dễ dàng).
Bạch tuộc ma thuật Urn

2
Cảm ơn bạn rất nhiều vì đã khiến họ chém về phía trước thay vì chém ngược.
hoàn toàn là

1
@totallyhuman Trời ơi, anh chàng trong bức ảnh tôi đăng lên ... ĐẠI HỌC NÀY LÀ GÌ? Đó là con gấu Bernstein một lần nữa ... Đồng xu rơi vào đầu hay đuôi để quyết định cuộc bầu cử gần đây nhất của Hoa Kỳ?!
Bạch tuộc ma thuật Urn

Câu trả lời:


11

Than , 30 25 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

 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

Funky , 156 132 133 byte

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)}

Hãy thử trực tuyến!


1
Funky là một ... những gì bây giờ? Hấp dẫn. Chưa bao giờ thấy ngôn ngữ này trên bất kỳ thử thách nào của tôi trước đây.
Bạch tuộc ma thuật Urn

1
@MagicOctopusUrn Có lẽ vì tôi đã viết nó: P
ATaco

1
Một ngôn ngữ dựa trên JavaScript? Nguy hiểm. Nhưng không sao, tôi thích nguy hiểm.
Bạch tuộc ma thuật Urn

1
fori=0i<4i++p(f())forc=0c<n//50c++con thú xấu xa này lấy tên của cú pháp là gì
totallyhuman



5

Thạch , 37 byte

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

Hãy thử trực tuyến!

Giải trình

: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

cái này quá dài


@FrownyFrog đã sửa, cảm ơn!
HyperNeutrino

4

Husk , 29 byte

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

Hãy thử trực tuyến!

Tôi cảm thấy như lần đầu tiên 5là dư thừa, nhưng loại bỏ nó sẽ gây ra lỗi loại ...

Giải trình

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 byte

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

Hãy thử nó ở đây!

Chơi golf trên điện thoại thật khó ..

Giải trình:

ā                                  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 byte

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')

Trả về một chuỗi có một dòng mới khi nkhông phải là bội số của 50 và một chuỗi có nhiều dòng mới khi n bội số của 50.

Ung dung

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
}

Kiểm tra đoạn trích

Không evalgiải pháp, 150 byte

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)?"|":"/":" ")``)`
`)`

`

Có thể chơi golf này hơn nữa nhưng evalphương pháp này đã ngắn hơn cho đến nay.


Mất 10 phút để hoàn thành phiên bản không hiểu và hiểu nó. = ^ P Bạn đã có một số thủ thuật hay trong đó.
DLosc

khá chắc chắn rằng bạn có thể làm cho (i = 0; ++ i <n / 50; s + = N) để lưu một char
DanielIndie

@DanielIndie Điều đó thất bại vì vòng lặp bên ngoài chạy quá một vài lần: Hãy thử trực tuyến!
Justin Mariner

4

J , 50 48 45 35 33 byte

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

Hãy thử trực tuyến!

                (    =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.

Tôi thích ý tưởng sử dụng các phần tử cho phần này4,&' '\7$'|||/'
Jonah

@Jonah nó phải đi :(
FrownyFrog

3

C (gcc), 170 byte

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);}

Hãy thử trực tuyến!

flà một hàm lấy một số nguyên không âm ( x) và in ra nhiều số đo, được nhóm lại theo chỉ định, để xuất chuẩn

glà một hàm trợ giúp in xcác số đo, được nhóm theo 5, không chia dòng.

fcác cuộc gọi g(50)và giảm xxuống 50 cho đến khi nó nhỏ hơn 50, sau đó gọi g(x)để in các số đo còn lại trên một dòng.

slà một char*chuỗi sao cho là chuỗi sđầu tiên của hàng, s+6là chuỗi thứ hai, s+12là thứ ba và s+18là thứ tư và s+24là một chuỗi rỗng.

g(x)in các gói và giảm x 5 cho đến khi x nhỏ hơn 5, sau đó in các số đo xđơn.



2

Python 2 , 142 byte

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

Hãy thử trực tuyến!


1
142 byte trong 18 phút? Không tệ :).
Bạch tuộc ma thuật Urn

3
Phải làm việc nhanh chóng khi bạn thực sự nên đi ngủ một giờ trước
Halvard Hummel

Quick ~= Quality;). Công việc tốt.
Bạch tuộc ma thuật Urn

3
Errr ... có thể bị hiểu sai. Nói rằng bạn đã làm việc chất lượng nhanh ... Không phải ngược lại.
Bạch tuộc ma thuật Urn




2

PHP, 138 141 + 1 byte

có lẽ không phải là giải pháp ngắn nhất có thể

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

Chạy như ống với -nRhoặc thử trực tuyến .


Khéo léo! Nhưng từ đường kiểm đếm thứ hai trên các vị thần không được vượt qua hoàn toàn.
SpazzMarticus

Khi chạy ví dụ "dùng thử trực tuyến" của bạn từ 5.5 trở đi, cục bộ 5.6.31 và 7.1.9.
SpazzMarticus

1
$xchỉ không được xác định trong vòng lặp đầu tiên, điều này làm rối đầu ra cho số lần kiểm tra lớn hơn 54. Đã sửa, nhưng không được đánh gôn: sandbox.onlinephpfifts.com/code/iêu
SpazzMarticus

@SpazzMarticus đã sửa
Tít

Mát mẻ! Đó là lần đầu tiên tôi gỡ lỗi mã golf, bạn đã cho tôi một khoảng thời gian khó khăn! :) Tôi nghĩ rằng tôi đang nối!
SpazzMarticus

2

Con trăn 129 113 112 byte

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))

Giải trình

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)

Hoạt động trong Python 2 và 3.

Dùng thử trực tuyến



1

Ruby , 100 byte

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

Đã bình luận

->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.)
  }
}

Hãy thử trực tuyến!


1

Pip , 47 46 byte

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

Hãy thử trực tuyến!

Giải trình

        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

Danh sách kết quả sẽ là một cái gì đó như thế này:

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

Theo mặc định, Pnối các nội dung của danh sách lại với nhau và xuất chúng với một dòng mới. Như vậy, chúng ta có được

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

với hai dòng mới (một từ nội dung danh sách và một được thêm bởi P). Nếu có một hàng khác được in, điều này sẽ tạo ra dòng trống cần thiết ở giữa.




0

05AB1E , 28 byte

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

Hãy thử trực tuyến.

Giải trình:

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

¶«,tất nhiên có một vài lựa chọn thay thế byte bằng nhau, như ,¶?hoặc ,õ,.



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.