Dasar ASCII Dasar

36

Judul Alternatif: Hitung Kalimat Penjara Anda di Dinding

Diberi nomor n, penghitungan keluaran dikelompokkan ke dalam 5-per-kelompok tradisional dan 50 per baris.


Contohnya

1

|
|
|
|

4

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

5

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

6

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

50

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

51

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

|
|
|
|

256

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

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

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

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

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

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

Aturan

  • 5 penghitungan per grup, 50 penghitungan total per baris.
  • 4 penghitungan pertama adalah vertikal, penghitungan ke 5 melintasi semua penghitungan lainnya.
    • Masing-masing dari empat yang pertama terdiri dari 4 |karakter vertikal .
    • Penghitungan ke-5 terakhir mencakup semua 4 dari yang pertama, dengan /karakter, secara diagonal.
  • Setiap kelompok harus dipisahkan oleh spasi, setiap baris adalah baris baru kosong.
  • Kendala pada nadalah: 0 <= n <= 1000(untuk kesederhanaan).
  • Ruang tambahan dan baris baru baik-baik saja, sebelumnya tidak.
  • Ini adalah , kemenangan byte-count terendah.

Ditinjau oleh ~ 4 orang di bak pasir .


PS sedikit menyenangkan, sedikit jumlah rata-rata per baris di penjara adalah 50, maka alt. judul.

Guci Gurita Ajaib
sumber
Terkait
Magic Octopus Mm
Tantangan besar, kompleks namun sederhana.
ATaco
@ATaco Saya benar-benar ingin menemukan solusi yang mengagregasi garis miring dalam "gambaran besar", dan memperhitungkan bahwa pola garis miring dapat disimpulkan dengan baris (itulah kemenangan yang mudah).
Magic Gurita Guci
2
Terima kasih banyak untuk membuat mereka garis miring bukan garis miring.
totallyhuman
1
@totallyhuman Ya Tuhan, pria dalam gambar yang saya posting tidak ... APA SEMUA INI? Ini si Beruang Bernstein lagi ... Apakah koin itu mendarat di kepala atau ekor untuk memutuskan pemilihan AS terbaru ?!
Magic Gurita Guci

Jawaban:

11

Arang , 30 25 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

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

Cobalah online!

ATaco
sumber
1
Funky adalah ... Bagaimana sekarang? Menarik. Belum pernah melihat bahasa ini pada tantangan saya sebelumnya.
Magic Gurita Guci
1
@MagicOctopusUrn Mungkin karena saya menulisnya: P
ATaco
1
Bahasa berbasis JavaScript? Berbahaya. Tapi tidak apa-apa, saya suka bahaya.
Magic Gurita Guci
1
fori=0i<4i++p(f())forc=0c<n//50c++apa binatang yang tidak suci ini mengambil nama sintaksis
totallyhuman
6

Haskell , 117 byte

f m|m<1=""|n<-min 50 m=unlines[[last$"| "!!(0^c%5):['/'|r+c%5==4,n-n%5>c]|c<-[1..n]]|r<-[0..3]]++'\n':f(m-50)
(%)=mod

Cobalah online!

Laikoni
sumber
5

Jelly , 37 byte

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

Cobalah online!

Penjelasan

: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

wheee ini terlalu panjang

HyperNeutrino
sumber
@FrownyFrog diperbaiki, terima kasih!
HyperNeutrino
4

Sekam , 29 byte

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

Cobalah online!

Saya merasa yang pertama 5berlebihan, tetapi menghapusnya memberikan kesalahan ketik ...

Penjelasan

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.
Zgarb
sumber
4

SOGL V0.12 , 33 byte

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

Coba Di Sini!

Bermain golf di ponsel itu sulit ..

Penjelasan:

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

Pengembalian string dengan satu baris miring ketika ntidak kelipatan 50 dan satu dengan beberapa baris miring ketika n adalah kelipatan dari 50.

Tidak disatukan

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
}

Cuplikan Tes

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

`

Mungkin bisa bermain golf yang satu ini lebih jauh tetapi evalmetode ini telah lebih pendek sejauh ini.

Justin Mariner
sumber
Butuh waktu 10 menit untuk mengerjakan versi yang tidak diserang dan memahaminya. = ^ P Anda punya beberapa trik bagus di sana.
DLosc
cukup yakin Anda dapat melakukannya untuk (i = 0; ++ i <n / 50; s + = N) yang menghemat satu char
DanielIndie
@DanielIndie Itu gagal karena loop luar berjalan terlalu sedikit: Coba online!
Justin Mariner
4

J , 50 48 45 35 33 byte

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

Cobalah 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.
FrownyFrog
sumber
Saya suka gagasan menggunakan infiks untuk bagian ini4,&' '\7$'|||/'
Jonah
@ Jonah harus pergi :(
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);}

Cobalah online!

fadalah fungsi yang mengambil integer nonnegatif ( x) dan mencetak banyak penghitungan, dikelompokkan seperti yang ditentukan, ke stdout

gadalah fungsi pembantu yang mencetak xpenghitungan, dikelompokkan berdasarkan 5, tanpa memisahkan garis.

fpanggilan g(50)dan pengurangan xsebesar 50 hingga kurang dari 50, lalu panggilan g(x)untuk mencetak penghitungan yang tersisa pada satu baris.

sadalah char*sedemikian sehingga, sebagai string, sadalah baris pertama dari sebuah bundel, s+6adalah yang kedua, s+12adalah yang ketiga, dan s+18yang keempat, dan s+24merupakan string yang kosong.

g(x)mencetak bundel dan pengurangan sebesar x hingga 5 kurang dari 5, lalu mencetak xpenghitungan tunggal.

pizzapants184
sumber
135 byte
ceilingcat
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

Cobalah online!

Halvard Hummel
sumber
1
142 byte dalam 18 menit? Tidak buruk :).
Magic Octopus Mm
3
Harus bekerja cepat ketika Anda benar-benar harus tidur satu jam yang lalu
Halvard Hummel
Quick ~= Quality;). Pekerjaan yang baik.
Magic Gurita Guci
3
Errr ... itu bisa disalahartikan. Mengatakan Anda melakukan kualitas bekerja dengan cepat ... Tidak sebaliknya.
Magic Gurita Guci
2
138 byte
ovs
2

Perl 5 , 103 byte

$a=<>;do{$_=$a<50?"|||/ "x($a/5).'|'x($a%5):"|||/ "x10;for$i(1..4){say;s%\|/%/|%g}say""}while($a-=50)>0

Cobalah online!

Xcali
sumber
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

Cobalah online!

asdfghjkl-- Ya, saya sedang mengerjakannya.

benar-benar manusiawi
sumber
2

PHP, 138 141 + 1 byte

mungkin bukan solusi sesingkat mungkin

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

Jalankan sebagai pipa dengan -nRatau coba online .

Titus
sumber
Rapi! Namun dari garis penghitungan kedua pada penghitungan tidak menyeberang sepenuhnya.
SpazzMarticus
Saat menjalankan contoh "coba online" mulai dari 5.5 pada, secara lokal 5.6.31 dan 7.1.9.
SpazzMarticus
1
$xhanya terdefinisi di loop pertama, ini mengacaukan output untuk penghitungan lebih besar dari 54. Tetap, tetapi tidak golf
SpazzMarticus
@SpazzMarticus diperbaiki
Titus
Keren! Ini adalah pertama kalinya saya men-debug kode golf, Anda memberi saya waktu yang sulit! :) Saya pikir saya ketagihan!
SpazzMarticus
2

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

Penjelasan

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)

Berfungsi dalam Python 2 dan 3.

Cobalah online

Lukas Boersma
sumber
1

Java (OpenJDK 8) , 188 byte

i->{int j=0,l,k;String r="";for(;j<~-i/50+1;j++,r+="\n")for(l=0;l<4;l++,r+="\n")for(k=0;k<(j*50+50>i?i-j*50:50);k++)r+=k%5>3?" ":k%5==3-l?"/":"|";return r.replaceAll("/(?=(\\|*\n))","|");}

Cobalah online!

Roberto Graham
sumber
179 byte
ceilingcat
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)}}

Berkomentar

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

Cobalah online!

Level River St
sumber
1

Pip , 47 46 byte

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

Cobalah online!

Penjelasan

        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

Daftar yang dihasilkan akan seperti ini:

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

Secara default, Pmenggabungkan konten daftar bersama-sama dan mengeluarkannya dengan baris baru tambahan. Jadi, kita dapatkan

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

dengan dua baris baru (satu dari daftar isi dan satu ditambahkan oleh P). Jika ada baris lain untuk dicetak, ini memberikan baris kosong yang diperlukan di antaranya.

DLosc
sumber
0

Befunge, 125 105 byte

$&:!#@_:::"2"v>*\5%4\`+1g1-,1+:14g\`#v_55+,$:#v_55+,
!}0:+*`"2"\-\<^!-g01%5\!`g41+5*5/5:::<0p01:-1<<<4-p4

Cobalah online!

James Holderness
sumber
0

05AB1E , 28 byte

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

Cobalah online.

Penjelasan:

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

¶«,tentu saja memiliki beberapa kemungkinan sama dengan byte, seperti ,¶?atau ,õ,.

Kevin Cruijssen
sumber
0

C (gcc) , 107 106 byte

i,j;f(n){for(;n>50;f(50))n-=50;for(i=5;--i;)for(j=0;putchar(++j+~n?j%5?(j-i)%5|n-j<n%5?'|':47:32:10)%5;);}

Cobalah online!

-1 terima kasih kepada ceilingcat

attinat
sumber