พื้นฐาน ASCII Tallies


36

หัวข้อสำรอง: นับประโยคที่เรือนจำของคุณติดไว้ที่ผนัง

กำหนดตัวเลขการnส่งออกนับเป็นกลุ่มแบบดั้งเดิม 5 ต่อกลุ่มและ 50 ต่อแถว


ตัวอย่าง

1

|
|
|
|

4

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

5

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

6

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

50

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

51

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

|
|
|
|

256

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

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

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

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

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

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

กฎระเบียบ

  • 5 tallies ต่อกลุ่ม, 50 tallies ทั้งหมดต่อแถว
  • ครั้งแรกที่ 4 นับเป็นแนวตั้ง 5 นับข้ามนับความสูงอื่น ๆ ทั้งหมด
    • แต่ละสี่คนแรกประกอบด้วย|อักขระแนวตั้ง 4 ตัว
    • แต้มสุดท้ายที่ 5 ครอบคลุมช่วงทั้งหมด 4 ตัวแรกด้วย/ตัวอักษรแนวทแยงมุม
  • แต่ละกลุ่มควรคั่นด้วยช่องว่างแต่ละแถวจะเป็นบรรทัดใหม่ที่ว่างเปล่า
  • ข้อ จำกัดnคือ: 0 <= n <= 1000(เพื่อความเรียบง่าย)
  • ช่องว่างต่อท้ายและบรรทัดใหม่นั้นใช้ได้ก่อนหน้านี้
  • นี่คือ , การนับไบต์ต่ำสุดที่ชนะ

ตรวจสอบโดย ~ 4 คนในกล่องทดลอง


ปล. สนุกนิดหน่อยหน่อยจำนวนเฉลี่ยของการนับต่อแถวในคุกคือ 50 ดังนั้น alt หัวข้อ.



ความท้าทายที่ยิ่งใหญ่ซับซ้อน แต่เรียบง่าย
ATaco

@ ATaco ฉันต้องการค้นหาโซลูชันที่รวมเครื่องหมายสแลชใน "ภาพใหญ่" และคำนึงถึงว่ารูปแบบสแลชสามารถสรุปโดยแถว (นั่นเป็นชัยชนะที่ง่าย)
Magic Octopus Urn

2
ขอบคุณมากที่ทำให้พวกเขาไปข้างหน้าทับแทนทับหลัง
สิ้นเชิงมนุษย์

1
@tallyallyhuman โอ้พระเจ้าคนที่อยู่ในรูปภาพที่ฉันโพสต์นั้น ... UNIVERSE UNIVERSE คืออะไร? นี่คือเบอร์นสไตน์หมีอีกครั้ง ... เหรียญกษาปณ์ลงบนหัวหรือก้อยเพื่อตัดสินใจเลือกตั้งสหรัฐครั้งล่าสุดใช่ไหม!
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
ขี้ขลาดคือ ... อะไรตอนนี้ น่าสนใจ ไม่เคยเห็นภาษานี้มาจากความท้าทายใด ๆ ของฉันมาก่อน
Magic Octopus Urn

1
@MagicOctopusUrn อาจเป็นเพราะฉันเขียนมัน: P
ATaco

1
ภาษาที่ใช้ JavaScript? เป็นอันตราย แต่ก็ไม่เป็นไรฉันรักอันตราย
Magic Octopus 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

ตอนนี้นานเกินไปแล้ว


@ PhoenixnyFrog คงที่ขอบคุณ!
HyperNeutrino

4

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

ส่งคืนสตริงที่มีขึ้นบรรทัดใหม่หนึ่งบรรทัดเมื่อnไม่ใช่หลาย 50 และหนึ่งมีขึ้นบรรทัดใหม่ต่อท้ายหลายเมื่อn เป็นทวีคูณ 50

Ungolfed

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

ค่อนข้างแน่ใจว่าคุณสามารถทำเพื่อ (i = 0; ++ ฉัน <n / 50; s + = N) ซึ่งจะช่วยประหยัดหนึ่งถ่าน
DanielIndie

@DanielIndie นั่นล้มเหลวเพราะวงนอกวิ่งหนึ่งครั้งไม่กี่ครั้ง: ลองออนไลน์!
Justin Mariner

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.

ฉันชอบความคิดของการใช้งาน infixes สำหรับส่วนนี้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เป็นฟังก์ชั่นการใช้จำนวนเต็ม nonnegative ( x) และการพิมพ์ที่นับจำนวนมากจัดกลุ่มตามที่ระบุเพื่อ stdout

gเป็นฟังก์ชั่นตัวช่วยที่พิมพ์xนับจำนวน 5 โดยไม่ต้องแบ่งบรรทัด

fการโทรg(50)และการลดxจำนวน 50 จนกว่าจะน้อยกว่า 50 จากนั้นโทรg(x)เพื่อพิมพ์จำนวนที่เหลืออยู่ในหนึ่งบรรทัด

sเป็นchar*เช่นนั้นเป็นสตริงsเป็นแถวแรกของบันเดิลs+6เป็นที่สองs+12คือที่สามและs+18ที่สี่และ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
142 ไบต์ใน 18 นาที? ไม่เลว :).
Magic Octopus Urn

3
ต้องทำงานอย่างรวดเร็วเมื่อคุณควรเข้านอนเมื่อชั่วโมงที่แล้วจริงๆ
Halvard Hummel

Quick ~= Quality;) งานที่ดี.
Magic Octopus Urn

3
เอ่อ ... ที่อาจจะเข้าใจผิด การพูดว่าคุณทำงานได้อย่างรวดเร็วมีคุณภาพ ... ไม่ตรงกันข้าม
Magic Octopus Urn




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หรือลองออนไลน์


เรียบร้อย! แต่จากการนับครั้งที่สองในการนับจะไม่ถูกข้ามอย่างสมบูรณ์
SpazzMarticus

เมื่อเรียกใช้ตัวอย่าง "ลองออนไลน์" ของคุณจาก 5.5 ในเครื่อง 5.6.31 และ 7.1.9 ในเครื่อง
SpazzMarticus

1
$xไม่ได้กำหนดไว้ในลูปแรกเท่านั้นซึ่งจะยุ่งเหยิงเอาท์พุทสำหรับการนับมากกว่า 54 คงที่ แต่ไม่
golfed

@SpazzMarticus แก้ไขแล้ว
Titus

เย็น! นี่เป็นครั้งแรกที่ฉันได้แก้ไขข้อบกพร่องของรหัส golfed คุณให้เวลากับฉันอย่างหนัก! :) ฉันคิดว่าฉันติดอยู่!
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)

ใช้งานได้ใน Python 2 และ 3

ลองออนไลน์



1

Ruby , 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 concatenates เนื้อหาของรายการร่วมกันและเอาท์พุทพวกเขาด้วยขึ้นบรรทัดใหม่ต่อท้าย ดังนั้นเราจึงได้รับ

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

ด้วยการขึ้นบรรทัดใหม่ต่อท้ายสองบรรทัด (หนึ่งรายการจากเนื้อหารายการและอีกหนึ่งบรรทัดที่เพิ่มโดย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.