Tallies ASCII di base


36

Titolo alternativo: Racconta la tua pena detentiva sul muro

Dato un numero n, i conteggi di output raggruppati nel tradizionale 5 per gruppo e 50 per riga.


Esempi

1

|
|
|
|

4

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

5

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

6

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

50

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

51

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

|
|
|
|

256

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

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

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

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

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

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

Regole

  • 5 conteggi per gruppo, 50 conteggi totali per riga.
  • I primi 4 conteggi sono verticali, il 5 ° conteggio incrocia tutti gli altri conteggi.
    • Ognuno dei primi quattro è composto da 4 |caratteri verticali .
    • Il 5 ° conteggio finale copre tutti e 4 i primi, con un /personaggio, in diagonale.
  • Ogni gruppo dovrebbe essere separato da uno spazio, ogni riga una riga vuota.
  • I vincoli nsono: 0 <= n <= 1000(per semplicità).
  • Gli spazi finali e le nuove righe vanno bene, i precedenti no.
  • Questo è , il conteggio dei byte più basso vince.

Revisionato da ~ 4 persone nella sandbox .


PS divertente piccola marea, il numero medio di conteggi per fila in prigione era 50, quindi l'alt. titolo.



Grande sfida, complessa ma semplice.
ATaco,

@ATaco Voglio davvero trovare la soluzione che aggrega le barre nel "quadro generale" e tiene conto del fatto che il modello di barra può essere dedotto per riga (questa è la vittoria facile).
Magic Octopus Urn

2
Grazie mille per averli fatti avanzare invece di quelli all'indietro.
totalmente umano il

1
@totallyhuman Oh dio, il ragazzo nell'immagine che ho pubblicato fa ... CHE COSA È UNIVERSO? Sono di nuovo gli orsi del Bernstein ... La moneta è finita in testa o in coda per decidere le elezioni americane più recenti ?!
Magic Octopus Urn

Risposte:


11

Carbone , 30 25 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

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

Provalo online!


1
Funky è un ... E adesso? Interessante. Non ho mai visto questa lingua in nessuna delle mie sfide prima d'ora.
Magic Octopus Urn

1
@MagicOctopusUrn Probabilmente perché l'ho scritto: P
ATaco

1
Un linguaggio basato su JavaScript? Pericoloso. Ma va bene, adoro il pericolo.
Magic Octopus Urn

1
fori=0i<4i++p(f())forc=0c<n//50c++cos'è questa bestia empia che prende il nome di sintassi
totalmente umano il



5

Gelatina , 37 byte

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

Provalo online!

Spiegazione

: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

Questo è troppo lungo


@FrownyFrog risolto, grazie!
HyperNeutrino,

4

Buccia , 29 byte

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

Provalo online!

Sento che il primo 5è ridondante, ma rimuoverlo genera un errore di tipo ...

Spiegazione

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ā

Provalo qui!

Giocare a golf su un telefono è difficile ..

Spiegazione:

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

Restituisce una stringa con una nuova riga finale quando nnon è un multiplo di 50 e una con più nuove righe finali quando n è un multiplo di 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
}

Test dello snippet

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

`

Possibilmente in grado di giocare a questo, ma il evalmetodo è stato finora più breve.


Mi ci sono voluti 10 minuti solidi per elaborare la versione non golfata e comprenderla. = ^ P Hai dei bei trucchi lì dentro.
DLosc,

abbastanza sicuro che puoi fare per (i = 0; ++ i <n / 50; s + = N) che consente di risparmiare un carattere
DanielIndie

@DanielIndie Non funziona perché il ciclo esterno viene eseguito una volta troppo poche volte: provalo online!
Justin Mariner,

4

J , 50 48 45 35 33 byte

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

Provalo online!

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

Adoro l'idea di usare gli infissi per questa parte4,&' '\7$'|||/'
Giona

@Jonah doveva andare :(
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);}

Provalo online!

fè una funzione che prende un intero non negativo ( x) e stampa che molti tallies, raggruppati come specificato, su stdout

gè una funzione di supporto che stampa i xconteggi, raggruppati per 5, senza dividere le linee.

fchiama g(50)e diminuisce xdi 50 fino a quando non è inferiore a 50, quindi chiama g(x)per stampare i conteggi rimanenti su una riga.

sè char*tale che, come stringhe, sè la prima riga di un fascio, s+6è la seconda, s+12è la terza es+18 è la quarta ed s+24è una stringa vuota.

g(x)stampa fasci e decrementa x di 5 fino a quando x è inferiore a 5, quindi stampa i xsingoli conteggi.



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

Provalo online!


1
142 byte in 18 minuti? Non male :).
Magic Octopus Urn

3
Devo lavorare velocemente quando dovresti davvero andare a letto un'ora fa
Halvard Hummel,

Quick ~= Quality;). Bel lavoro.
Magic Octopus Urn

3
Errr ... che potrebbe essere frainteso. Dire che hai fatto un lavoro di qualità in fretta ... Non il contrario.
Magic Octopus Urn



2

Haskell , 134 byte

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

Provalo online!

asdfghjkl-- Sì, ci sto lavorando.


2

PHP, 138 141 + 1 byte

probabilmente non è la soluzione più breve possibile

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

Esegui come pipe -nRo provalo online .


! Neat Ma dalla seconda linea di conteggio i conteggi non si incrociano completamente.
SpazzMarticus,

Quando esegui il tuo esempio "provalo online" da 5.5 in poi, localmente 5.6.31 e 7.1.9.
SpazzMarticus,

1
$xè solo indefinito nel primo ciclo, questo incasina l'output per un conteggio maggiore di 54. Risolto, ma non corretto
SpazzMarticus

@SpazzMarticus risolto
Tito

Freddo! Era la prima volta che eseguivo il debug del codice golf, mi hai dato un brutto momento! :) Penso di essere catturato!
SpazzMarticus,

2

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

Spiegazione

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)

Funziona in Python 2 e 3.

Provalo online



1

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

Commentate

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

Provalo online!


1

Pip , 47 46 byte

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

Provalo online!

Spiegazione

        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

L'elenco risultante sarà simile al seguente:

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

Per impostazione predefinita, Pconcatena i contenuti dell'elenco e li genera con una nuova riga finale. Quindi otteniamo

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

con due nuove righe finali (una dal contenuto dell'elenco e una aggiunta da P). Se è presente un'altra riga da stampare, viene visualizzata la riga vuota richiesta.




0

05AB1E , 28 byte

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

Provalo online.

Spiegazione:

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

¶«,ovviamente ha alcune possibili alternative di uguale byte, come ,¶?o ,õ,.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.