Temel ASCII Tallies


36

Alternatif Başlık: Duvardaki Hapis Cezanı Tally

Bir sayı verildiğinde n, çıkış talimleri geleneksel grup başına 5 ve satır başına 50 olarak gruplandırıldı.


Örnekler

1

|
|
|
|

4

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

5

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

6

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

50

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

51

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

|
|
|
|

256

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

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

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

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

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

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

kurallar

  • Her grup için 5, her sıra için 50 toplam.
  • İlk 4 oyuncu dikey, 5. takım diğer tüm oyuncuları geçiyor.
    • İlk dördün her biri 4 dikey |karakterden oluşur .
    • Son 5'inci yarışma, ilkinin 4'ünü, /karakterini çapraz olarak kapsar.
  • Her grup bir boşlukla ayrılmalıdır, her satır boş bir yeni satır.
  • Üzerindeki kısıtlamalar n: 0 <= n <= 1000(basitlik için).
  • Sondaki boşluklar ve yeni satırlar iyi, öncekiler değil.
  • Bu , en düşük bayt sayısı kazanır.

Kum havuzunda ~ 4 kişi tarafından incelendi .


PS eğlenceli küçük tid-bit, cezaevinde sıra başına ortalama oy sayısı 50, dolayısıyla alt oldu. Başlık.



Büyük zorluk, karmaşık ama basit.
ATaco 13:17

@ATaco "Büyük resim" deki eğik çizgileri toplayan çözümü bulmak istiyorum ve eğik çizgi düzeninin satır tarafından çıkarılabileceğini dikkate aldım (bu kolay kazançtır).
Magic Octopus Urn

2
Geriye eğik çizgiler yerine eğik çizgiler oluşturduğunuz için çok teşekkür ederiz .
tamamen insan

1
@totallyhuman Oh tanrım, resimdeki adam yaptığım şey ... NE ÜNİVERSİTE BU? Bernstein yine her yerde ayılar ... Madeni para en yeni ABD seçimlerine karar vermek için kafalara mı yoksa kuyruklara mı girdi ?!
Magic Octopus Urn

Yanıtlar:


11

Kömür , 30 25 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

 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 bayt

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

Çevrimiçi deneyin!


1
Funky bir ... Şimdi ne? İlginç. Bu dili daha önce hiçbir sorunumda görmedim.
Magic Octopus Urn

1
@MagicOctopusUrn Muhtemelen yazdım çünkü: P
ATaco 13:17

1
JavaScript tabanlı bir dil? Tehlikeli. Ama sorun değil, tehlikeyi seviyorum.
Magic Octopus Urn

1
fori=0i<4i++p(f())forc=0c<n//50c++sözdizimi adını alarak bu şeytani yaratık nedir
totallyhuman



5

Jöle , 37 bayt

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

Çevrimiçi deneyin!

açıklama

: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

burası çok uzun


@ FrownyFrog sabit, teşekkürler!
HyperNeutrino 14:17

4

Kabuğu , 29 bayt

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

Çevrimiçi deneyin!

İlki 5gereksiz gibi hissediyorum , ancak onu kaldırmak bir tür hata veriyor ...

açıklama

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 bayt

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

Burada dene!

Telefonda golf oynamak zordur.

Açıklama:

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

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

n50'nin katı olmadığında bir sondaki yeni satırlı bir dize ve 50'nin katı olduğu zamanki n son birkaç yeni satırlı bir dize döndürür .

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
}

Test Parçacığı

Olmayan evalçözüm, 150 bayt

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

`

Muhtemelen bu bir daha golf oynamak mümkün, ancak evalyöntem şu ana kadar kısa olmuştur.


Yıpranmış versiyonda çalışmam ve 10 dakika sürmemi sağladı. = ^ P Orada güzel numaraların var.
DLosc

Bir karakter kaydeder (i = 0; ++ i <n / 50; s + = N) için kesinlikle yapabilirsiniz
DanielIndie

@DanielIndie Dış döngü çok az bir kez çalıştığı için başarısız oluyor: Çevrimiçi deneyin!
Justin Mariner

4

J , 50 48 45 35 33 bayt

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

Çevrimiçi deneyin!

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

Bu kısım için ekler kullanma fikrini seviyorum4,&' '\7$'|||/'
Jonah

@Jonah gitmek zorunda kaldı :(
FrownyFrog 16:17

3

C (gcc), 170 bayt

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

Çevrimiçi deneyin!

fnegatif olmayan bir tamsayı ( x) alan ve belirtilen sayıda gruplandırılmış stdout'a birçok basım yapan bir fonksiyondur.

g, x5 ile gruplanmış satırları bölmeden satırları basan yardımcı bir işlevdir .

f50'den küçük olana kadar 50'ye kadar arama yapar g(50)ve azaltır x, ardından g(x)kalan satırları tek bir satıra yazdırmak için arama yapar.

sa, char*dizileri olarak, örneğin, bu s, bir paket ilk satırı s+6ikinci, s+12üçüncü, ve s+18dördüncü, ve s+24boş bir dizisidir.

g(x)x 5'ten küçük olana kadar paketleri ve azalmaları x'e 5 basar, sonra xtek satır basar .



2

Python 2 , 142 bayt

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

Çevrimiçi deneyin!


1
18 dakikada 142 bayt mı? Fena değil :).
Magic Octopus Urn

3
Gerçekten bir saat önce yatağa gitmeniz gerektiğinde hızlı çalışmalıyım
Halvard Hummel

Quick ~= Quality). İyi iş.
Magic Octopus Urn

3
Errr ... yanlış anlaşılmış olabilir. Hızlı bir şekilde kaliteli işler yaptığını söyleyerek ... Tersi değil.
Magic Octopus Urn



2

Haskell , 134 bayt

f#n=unlines$(concat.f.(<$[1..n`div`5]))<$>["|||/ ","||/| ","|/|| ","/||| "]
f n|n>50=id#50++'\n':f(n-50)|1>0=(++['|'<$[1..n`mod`5]])#n

Çevrimiçi deneyin!

asdfghjkl-- Evet, üzerinde çalışıyorum.


2

PHP, 138 141 + 1 bayt

Muhtemelen mümkün olan en kısa çözüm değil

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

Pipe ile çalıştırın -nRveya çevrimiçi deneyin .


Temiz! Ancak ikinci taksit hattından tallies tam olarak geçmedi.
SpazzMarticus

"Çevrimiçi deneyin" örneğinizi 5.5'ten itibaren, yerel olarak 5.6.31 ve 7.1.9'da çalıştırırken.
SpazzMarticus

1
$xsadece ilk döngü içinde tanımlanmamış, taksitli üstünü çıkışı kadar bu Messes 54. Sabit ancak golfed değil daha: sandbox.onlinephpfunctions.com/code/...
SpazzMarticus

@SpazzMarticus sabit
Titus

Güzel! İlk kez hata ayıklama golf kodu oldu, bana zor zamanlar verdin! :) Sanırım bağımlıyım!
SpazzMarticus 16:17

2

Python, 129 113 112 bayt

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

açıklama

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 ve 3'te çalışır.

Çevrimiçi deneyin



1

Ruby , 100 bayt

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

Yorumlananlar

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

Çevrimiçi deneyin!


1

Pip , 47 46 bayt

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

Çevrimiçi deneyin!

açıklama

        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

Ortaya çıkan liste şöyle bir şey olacak:

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

Varsayılan olarak, Plistenin içeriğini bir araya getirir ve izleyen bir satırsonu ile çıktılar. Böylece alırız

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

ile iki arka yeni satır (liste içeriğinden bir ve eklenen bir P). Basılacak başka bir satır varsa, bu, aralarında gerekli olan boş satırı verir.




0

05AB1E , 28 bayt

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

Çevrimiçi deneyin.

Açıklama:

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

¶«,Elbette ,¶?veya gibi birkaç olası eşit baytlık alternatifi vardır ,õ,.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.