Основные ASCII бюллетени


36

Альтернативное название: Tally Your Тюремный приговор на стене

Учитывая число n, выходные данные сгруппированы в традиционные 5 на группу и 50 на строку.


Примеры

1

|
|
|
|

4

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

5

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

6

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

50

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

51

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

|
|
|
|

256

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

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

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

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

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

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

правила

  • 5 подсчетов в группе, всего 50 подсчетов в ряду.
  • Первые 4 подсчета являются вертикальными, 5-й подсчет пересекает все остальные подсчеты.
    • Каждый из первых четырех состоит из 4 вертикальных |символов.
    • Финальный 5-й счет охватывает все 4 из первых, с /характером, по диагонали.
  • Каждая группа должна быть разделена пробелом, каждая строка - пустой строкой.
  • Ограничения n: 0 <= n <= 1000(для простоты).
  • Конечные пробелы и переводы строк в порядке, предшествующие - нет.
  • Это , выигрывает наименьшее количество байтов.

Отзыв от ~ 4 человек в песочнице .


PS забавно немного, среднее количество подсчетов за ряд в тюрьме было 50, следовательно, альт. заглавие.



Большой вызов, сложный, но простой.
ATaco

@ATaco Я действительно хочу найти решение, которое объединяет косые черты в «большую картинку» и учитывает, что шаблон косой черты может быть выведен по строке (это простой выигрыш).
Волшебная Урна Осьминога

2
Спасибо так много для делая их слеш вместо обратной косой черты.
полностью человек

1
@totallyhuman О боже, парень на изображении, которое я разместил, делает ... ЧТО ЭТО ВСЕЛЕННАЯ? Это медведи Бернштейна снова и снова ... Монета приземлилась на головы или хвосты, чтобы решить последние выборы в США ?!
Волшебная Урна Осьминога

Ответы:


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

Funky , 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
Фанки это ... что теперь? Интересный. Никогда раньше не видел этот язык ни на одном из моих вызовов.
Волшебная Осьминог Урна

1
@MagicOctopusUrn Вероятно, потому что я написал это: P
ATaco

1
Язык на основе JavaScript? Dangerous. Но это нормально, я люблю опасность.
Волшебная урна осьминога

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

где это слишком долго


@FrownyFrog исправлено, спасибо!
HyperNeutrino

4

Шелуха , 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; ++ i <n / 50; s + = N), который сохраняет один символ
DanielIndie

@DanielIndie Не удается, потому что внешний цикл запускается слишком мало: попробуйте онлайн!
Джастин Маринер,

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.

Мне нравится идея использовать инфиксы для этой части4,&' '\7$'|||/'
Иона

@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это функция, принимающая неотрицательное целое число ( x) и печатающая столько подсчетов, сгруппированных, как указано, в стандартный вывод

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 минут? Неплохо :).
Волшебная Урна Осьминога

3
Должен быстро работать, когда вы действительно должны были лечь спать час назад
Halvard Hummel

Quick ~= Quality;). Хорошая работа.
Волшебная Урна Осьминога

3
Ошибка ... это может быть неправильно истолковано. Сказать, что вы сделали качественную работу быстро ... Не наоборот.
Волшебная Осьминог Урна




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. Исправлено, но не игра в гольф: sandbox.onlinephpfunctions.com/code/…
SpazzMarticus

@SpazzMarticus исправлено
Тит

Круто! Это был мой первый раз, когда я отлаживал код в гольфе, ты доставил мне неприятности! :) Я думаю, что я подсел!
SpazzMarticus

2

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

Рубин , 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объединяет содержимое списка вместе и выводит их с завершающей строкой. Таким образом, мы получаем

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

с двумя завершающими символами новой строки (один из содержимого списка и один добавленный 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

¶«,конечно, есть несколько возможных альтернативных байтов, например ,¶?или ,õ,.



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.