Заполните мой лист пузыря


18

Сегодня был экзамен AP в моей школе день регистрации на , и, хотя я старательно бурлил на страницах и страницах необходимой информации, идея этой задачи меня поразила. Итак, учитывая строку букв и цифр, выведите надлежащим образом заполненную пузырьковую диаграмму.

Правила:

  • Для каждого символа во входной строке замените этот символ в соответствующем столбце на #или @или любой другой разумный символ (если ваш язык может с этим справиться, символ Unicode 'full_block': █ выглядит действительно хорошо)
  • Пробел представлен пустым столбцом (см. Примеры)
  • Допустимым вводом будет строка, которая состоит только из заглавных букв, цифр и пробелов.
  • Длина ввода должна быть не менее 1 и не более 32 символов.
  • Выход должен быть в верхнем регистре
  • Если длина ввода меньше максимальной длины 32, ваша программа все равно должна вывести оставшиеся пустые столбцы
  • Ваша программа должна обрабатывать не только строчные буквы, как если бы они были прописными, но и бонусные баллы, если это возможно.

Формат платы:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
00000000000000000000000000000000
11111111111111111111111111111111
22222222222222222222222222222222
33333333333333333333333333333333
44444444444444444444444444444444
55555555555555555555555555555555
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999

Примеры:

CODE GOLF ->

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
█CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DD█DDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEE█EEEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFF█FFFFFFFFFFFFFFFFFFFFFFF
GGGGG█GGGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
LLLLLLL█LLLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
O█OOOO█OOOOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
00000000000000000000000000000000
11111111111111111111111111111111
22222222222222222222222222222222
33333333333333333333333333333333
44444444444444444444444444444444
55555555555555555555555555555555
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999


ABCDEFGHIJKLMNOPQRSTUVWXYZ012345 ->

@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
B@BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CC@CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEE@EEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFF@FFFFFFFFFFFFFFFFFFFFFFFFFF
GGGGGG@GGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHH@HHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIII@IIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJ@JJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKK@KKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLL@LLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMM@MMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNN@NNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOO@OOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPP@PPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQ@QQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRR@RRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSS@SSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTT@TTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUU@UUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVV@VVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWW@WWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXX@XXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYYY@YYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZZZ@ZZZZZZ
00000000000000000000000000@00000
111111111111111111111111111@1111
2222222222222222222222222222@222
33333333333333333333333333333@33
444444444444444444444444444444@4
5555555555555555555555555555555@
66666666666666666666666666666666
77777777777777777777777777777777
88888888888888888888888888888888
99999999999999999999999999999999

ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ->^^^

И, конечно же, это , поэтому выигрывает самый короткий ответ


7
Проверка входных данных обычно не рекомендуется, так что вы можете просто сопоставить входные данные [A-Z0-9]{1,32}и разрешить любое поведение для входных данных, не соответствующих этому.
Джузеппе

1
Насколько нелепо раздражает тот факт, что «0» предшествует «А» в коде ASCII> :( lol
NL628

«Допустимым вводом будет строка, которая состоит из символов, которые появляются на всплывающем листе, а также пробелов», но вы также заявляете «Любой символ, кроме заглавных букв, пробелов и числовых цифр, или превышающий ограничение в 32 символа следует игнорировать " , так что это такое?
Критиси Литос

1
Но согласно первому утверждению, вы говорите, что $не появятся на входах
Kritixi Lithos

1
Теперь, когда вы удалили цифры и внутренние символы из спецификаций, вы можете также удалить их из примеров.
Тит

Ответы:


4

Шелуха , 23 байта

mż§?'#|=⁰mR32¤+…"AZ""09

Попробуйте онлайн или попробуйте с причудливым символом █ (но недействительным по количеству пользователей)!

К сожалению, я не смог объединить два map элемента в один (кроме случаев использования скобок стоимостью 24 байта).

объяснение

mż§?'#|=⁰mR32¤+…"AZ""09"  -- expects string as argument, eg. "FOO"
             ¤            -- with the two strings "AZ" "09" ..
               …          -- | fill ranges: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                          -- |              "0123456789"
              +           -- .. and concatenate: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
          m               -- map the following (eg. with 'X')
                          -- | replicate 32 times: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                          -- : ["A…A","B…B",…,"Z…Z","0…0",…"9…9"]
m                         -- map the following (eg. with "F…")
 ż      ⁰                 -- | zipWith (keeping elements of longer list) argument ("FOO")
  §?   =                  -- | | if elements are equal
    '#                    -- | | | then use '#'
      |                   -- | | | else use the first character
                          -- | : ["#FF…F"]
                          -- : ["A…A",…,"#FF…F",…,"O##O…O",…,"9…9"]

4

Рубин , 62 байта

->s{[*?A..?Z,*?0..?9].map{|c|(0..31).map{|i|c==s[i]??@:c}*''}}

Попробуйте онлайн!

Возвращает массив строк. Можно продолжить игру, отбросив объединения строк и вернув двумерный массив символов, как это обычно является нормой, но я не уверен, разрешено ли это здесь.


3

C (gcc) , 132 126 байтов

char*s="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",*_,*a;f(char*x){for(_=s;*_;++_,puts(""))for(a=s;*a;)putchar(x[a++-s]-*_?*_:64);}

Попробуйте онлайн!

Спасибо Джонатану Фречу за сохранение 6 байтов.


puts("")эквивалентно putchar(10).
Джонатан Фрех

++a)putchar((x[a-s]-*_)?*_:64);-> )putchar(x[a++-s]-*_?*_:64);.
Джонатан Фрех

Если вы хотите немного изменить правила, вы также можете сыграть 64в гольф 1.
Джонатан Фрех

Если вы это сделаете, putcharвызов может быть в гольф putchar(*_*(*_!=a[x-s]));.
Джонатан Фрех

Обычно я бы согласился с изменением правил для этого ... но 1 - это очень отличающийся зверь от закрашенного прямоугольника или знака @. Другие изменения полезны, хотя - будет обновлять.
LambdaBeta

3

Красный , 177 байт

func[s][m: copy[]foreach c a:"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[insert/dup r: copy"^/"c 32 append m r]j: 0
foreach c s[j: j + 1 if c <>#" "[m/(index? find a c)/(j): #"@"]]m]

Попробуйте онлайн!

Более читабельно:

f: func[s][
    m: copy[]
    a:"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    foreach c a[
        insert/dup r: copy "^/" c 32
        append m r
    ]
    j: 0
    foreach c s[
        j: j + 1
        if c <>#" "[m/(index? find a c)/(j): #"@"]
    ]
    m
]

3

Древесный уголь , 21 байт

E⁺α⭆…αχκ⭆…◨θφ³²⎇⁼ιλ#ι

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

  α  α                  Uppercase alphabet predefined variable
      χ                 Predefined variable 10
    …                   Chop to length
   ⭆                    Map over characters and join
       κ                Current index
 ⁺                      Concatenate
E                       Map over characters into array
           θ            Input string
            φ           Predefined variable 1000
          ◨             Right pad to length
             ³²         Literal 32
         …              Chop to length
        ⭆               Map over characters and join
                 ι  ι   Current outer character
                  λ     Current inner character
                ⁼       Equals
                   #    Literal `#`
               ⎇        Ternary
                        Implicitly print each result on its own line

Предыдущая версия с проверкой ввода, 34 32 байта. Редактировать: сохранено 2 байта благодаря @ ASCII-only.

≔⁺α⭆…αχκαEα⭆…◨Φθ∨⁼ι №αιφ³²⎇⁼ιλ#ι

Попробуйте онлайн! Ссылка на подробную версию кода.


: / Похоже, вам не хватает близкого парня в конце
только ASCII

Это выглядит , как она работает. (Вольфрам StringReplace) С другой стороны, встроенная замена была бы очень кстати
только ASCII

Неважно, я не знаю, что я делал. 27 байтов - вам не нужноCast
только ASCII

Кроме того, re: панель с произвольным символом, о котором вы спрашивали ранее: считаете ли вы, что это будет достаточно полезно для добавления в качестве встроенного? или, может быть, как двухсимвольный встроенный?
Только для ASCII



3

Желе ,  18  17 байт

ØA;ØDWẋ32ɓ,€⁶y"ZY

Использует символ пробела. Чтобы использовать #заменить с ”#на стоимость одного байта.

Попробуйте онлайн!

Как?

ØA;ØDWẋ32ɓ,€⁶y"ZY - Main Link: list of characters, S   e.g.  ['S','P','A','M']
ØA                - upper-case alphabet characters           ['A','B',...,'Z']
   ØD             - digit characters                         ['0','1',...,'9']
  ;               - concatenate                              ['A','B',...,'Z','0','1',...,'9']
     W            - wrap in a list                           [['A','B',...,'Z','0','1',...,'9']]
      ẋ32         - repeat 32 times                          [['A','B',...,'Z','0','1',...,'9'],...,['A','B',...,'Z','0','1',...,'9']]
         ɓ        - start a new dyadic chain with that on the right
            ⁶     - space character                          ' '
          ,€      - pair €ach of S with a space              [['S',' '],['P',' '],['A',' '],['M',' ']]
              "   - zip with:
             y    -   translate (replace 'S' with ' ' in 1st, 'P' with ' ' in 2nd, ...) -- Note: zip is a zip-longest, so trailing lists remain
                Z  - transpose
                 Y - join with line-feeds
                   - implicit print

Я могу сохранить один байт.
Эрик Outgolfer

Welp, я также получил ³Ḣ,⁶yØA;ØD¤µ32СZYв 18 лет, что я чувствую, может быть, также невозможно! Выходя, хотя ...
Джонатан Аллан

Так что, очевидно, это не тот байт, о котором я говорю. :)
Старайся изо всех сил

Удивительно, что мне удалось сыграть в гольф на мобильных 17 байтах
Джонатан Аллан

Мое было на самом деле это , но поздравляю!
Эрик Outgolfer

2

C ++ 14, 319 байт 237

Я делаю это впервые, на худшем из возможных языков CodeGolf: P

char c;string k="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",s;int main(){map<char,vc>g;g[' ']=vc(32,' ');for(char c:k)g[c]=vc(32,c);getline(cin,s);for(int i=0;i<s.length();i++)g[s[i]][i]='@';for(char d:k){for(char x:g[d])cout<<x;cout<<'\n';}}

Попробуйте онлайн!


Вопрос: нужно ли включать заголовок?
NL628

Если необходимо выполнить код, он должен быть в вашем ответе. Тем не менее, вы можете удалить почти все пустые места, и этот ответ все еще работает.

Могу ли я переписать это как функцию с параметрами вместо main ()?
NL628

@ NL628 да, можешь. Смотрите советы по игре в гольф на C ++ для получения дополнительной помощи. РЕДАКТИРОВАТЬ: переключил ссылку на C ++
Джузеппе

1
Кобол кто-нибудь? Я никогда не писал в нем ни строчки кода, но использование COBOL для кодирования гольфа может быть интересной задачей.
Ханс-Мартин Моснер

2

Node.js, 85 байт

Порт на Node.js, предложенный @DanielIndie

f=(s,x=544,c=Buffer([48+x/32%43]))=>x<1696?(s[x&31]==c?'@':c)+[`
`[++x&31]]+f(s,x):''

Попробуйте онлайн!


JavaScript (ES6), 103 98 байт

f=(s,x=544,n=x>>5,c=String.fromCharCode(48+n%43))=>n<53?(s[x&31]==c?'@':c)+[`
`[++x&31]]+f(s,x):''

Попробуйте онлайн!


90 байтов, как насчет этого?
DanielIndie

@DanielIndie Спасибо! Добавлен. (Нам на самом деле это не нужно +"", не так ли?)
Арно

Я никогда не знаю, нужно ли нам конвертировать или нет, поэтому я не думаю об этом: P, но да, вам это на самом деле не нужно :)
DanielIndie

@DanielIndie Ах, теперь мы можем просто использовать, x/32чтобы сохранить еще 2 байта, так как Bufferприводит к целым числам.
Арнаулд

f=(s,x=561,c=Buffer([48+x/33%43]))=>x<1749?(s[x++%33]==c?'@':x%33?c:`\n`)+f(s,x):''
м2 18


2

Haskell , 86 байт

Для более приятного подхода (и меньшего количества байтов) см. Решение Лайкони !

f x=(x#).(<$[1..32])<$>['A'..'Z']++['0'..'9']
(a:b)#(u:v)=last(u:['#'|a==u]):b#v
_#w=w

Попробуйте онлайн!

В качестве альтернативы для того же количества байтов мы могли бы использовать:

(a:b)#(u:v)|a==u='#':b#v|0<3=u:b#v

Попробуйте онлайн!

Объяснение / Ungolfed

Оператор (#)очень похож, zipWithоднако функция жестко закодирована, ст. он использует, #если два символа равны, и в противном случае он удерживает второй, без гольфа:

(a:b) # (u:v)
   | a == u    = '#' : b # v
   | otherwise =  u  : b # v

Если первый список исчерпан, он просто добавляет остальные элементы второго:

_ # w = w

С этим помощником нам нужно только сгенерировать строку "A..Z0..9", повторить каждый элемент 32 раза и сжать ввод с каждой строкой, без разметки:

f x = map ((x#) . replicate 32) (['A'..'Z'] ++ ['0'..'9'])


@Laikoni: позор, что это всего на 1 байт меньше, это действительно умное использование max. Я думаю, вы должны опубликовать это как собственное решение, так как оно сильно отличается от моего решения.
ბიმო


2

Haskell , 74 байта

f x=[do a<-take 32$x++cycle" ";max[c]['~'|a==c]|c<-['A'..'Z']++['0'..'9']]

Попробуйте онлайн! Входная строка xдополняется пробелами длиной до 32 с take 32$x++cycle" ". Для каждого символа cот Aк Zи 0к 9, мы смотрим на символы aиз строки ввода проложенной и заменить их , ~когда aи cравны и в cпротивном случае. Это достигается max[c]['~'|a==c], например, max "A" "~" = "~"когда a = c = 'A', а max "A" "" = "A"когда c = 'A'и a = 'B'. Поскольку это дает одиночную строку вместо символа,do -notation, которая объединяет одиночные строки в одну строку.

Основано на решении Haskell BMO .


2

Python 2, 138 байт

Поддерживает верхний и нижний регистр символов и оставляет незаполненный столбец для пробелов.

def f(s):
 s=s.upper()
 for j in"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789":print"".join(j if(len(s)<=i)or(s[i]!=j)else'@'for i in range(32))

Если бонус не стоит, то я пойду на 125 байтов и поддержу только ввод в верхнем регистре:

def f(s):
 for j in"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789":print"".join(j if(len(s)<=i)or(s[i]!=j)else'@'for i in range(32))

2

Stax , 15 байт

╛dδÑ-═E↑\≈Fà±AG

Запустите и отладьте его

Используется '#'для обозначения заполненного пузыря.

Распакованный, размазанный и прокомментированный, это выглядит так.

32(     right-pad or truncate to 32
{       begin block for mapping
  VAVd+ "A..Z0..9"
  s'#+  move input character to top of stack and append "#". e.g. "C#"
  |t    translate; replace the first character with the second in string
m       perform map using block
Mm      transpose array of arrays and output each line

Запустите этот


1

Pyth, 23 20 байт

j.Tm:s+r1GUTdN.[Qd32

Попробуй здесь

объяснение

j.Tm:s+r1GUTdN.[Qd32
              .[Qd32      Pad the input to 32 characters.
   m                      For each character...
     s+r1GUT              ... get the string "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"...
    :       dN            ... with the character replaced by a '"'.
j.T                       Transpose the lines and print them all.

1

APL + WIN, 56 байт

Запрашивает ввод строки и использует символ # в качестве идентификатора:

m←⍉32 36⍴⎕av[(65+⍳26),48+⍳10]⋄((,m[;1]∘.=32↑⎕)/,m)←'#'⋄m

Объяснение:

m←⍉32 36⍴⎕av[(65+⍳26),48+⍳10] create the table

32↑⎕ pad the input string to 32 characters with spaces

(,m[;1]∘.=32↑⎕) use outer product with = to identify characters in table

((,m[;1]∘.=32↑⎕)/,m)←'#' replace characters with #

m display table

⋄ statement separator

1

C (gcc) , 124 байта

f(s,b,x,y)char*s,b[33];{sprintf(b,"%-32.32s",s);for(x=0;++x<36;puts(""))for(y=x+21+43*(x<27),s=b;*s;putchar(*s++==y?35:y));}

Попробуйте онлайн!

Вместо жестко заданного массива я заменил его на функцию поиска. К счастью, набор символов ASCII имеет смежные буквенные и числовые диапазоны (я смотрю на вас, EBCDIC!). Кроме того, я позаботился о том, чтобы вывод выводился ровно на 32 символа, используя sprintf(): если это не было требованием задачи, функция будет 97 байтов:

f(s,i,x,y)char*s,*i;{for(x=0;++x<36;puts(""))for(y=x+21+43*(x<27),i=s;*i;putchar(*i++==y?35:y));}

Попробуйте онлайн!



1

CJam , 31 байт

q32Se]{'[,65>A,s+S+_@#St);}%zN*

Попробуйте онлайн! Использует пробелы в качестве «дырки».


Если конечный пробел разрешен, то это работает для 29 байт :

q32Se]{'[,65>A,s+S+_@#St}%zN*

Попробуйте онлайн!


Вот 34-байтовая вариация, в которой вместо этого используется полный блок Unicode :

q32Se]{'[,65>A,s+S+_@#'█t);}%zN*

Попробуйте онлайн!


объяснение

q                                Input.
    e]                           Pad to a length of
 32                                32
                                 with
   S                               spaces.
      {                   }%     For each character:
                                   Get the uppercase alphabet by
            >                        dropping the first
          65                           65
                                     elements of
         ,                             the range of characters below
       '[                                '['.
                +                  Append
               s                     the string version
              ,                        of the range of numbers below
             A                           10.
                  +                Append
                 S                   a space.
                     #             Find the index of
                    @                the character.
                       t           Set this index to
                      S              a space
                   _               in the original array.
                        );         Drop the space at the end.
                                   Yield this modified array.
                                 End for. The result is an array of arrays of characters.
                            z    Transpose this array, turning rows into columns.
                             N*  Join the result on newlines.


1

05AB1E , 19 байтов

RтúR32£vžKuÙyð:})ø»

Попробуйте онлайн!

объяснение

R                     # reverse
 тú                   # prepend 100 zeroes
   R                  # reverse
    32£        }      # take the first 32 characters
       v              # for each character
        žK            # push a string of [a-zA-Z0-9]
          uÙ          # upper case and remove duplicates
            yð:       # replace current character with space
                )ø    # transpose
                  »   # join by newline

a[b]не работает, как вы хотите здесь, не так ли: P?
Волшебная Урна Осьминога

@MagicOctopusUrn: К сожалению, нет. Это было моей первой мыслью, но модульная индексация в этом случае не наш друг: P
Emigna

1

MATL , 21 байт

1Y24Y2vjO33(32:)y=~*c

Использует пробел в качестве символа маркера.

Попробуйте онлайн!

объяснение

1Y2     % Push 'AB...YZ'
4Y2     % Push '01...89'
v       % Concatenate into a 36×1 column vector of chars
j       % Push unevaluated input: string of length n, or equivalently 1×n
        % row vector of chars
O33(    % Write 0 at position 33. This automatically writes a 0 at postions
        % n+1, n+2, ..., 32 too
32:)    % Keep only the first 32 entries: gives a 1×32 row vector
y       % Duplicate from below: pushes a copy of the 36 ×1 column vector
=~      % Test for non-equal entries, with broadcast. Gives a 33×32 matrix
        % containing 0 for matching entries, and 1 otherwise
*       % Multiply this matrix by the 1×32 row vector, with broadcast. This
        % changes each 1 into the corresponding character in the input
c       % Convert to char. Implicitly display. Char 0 is displayed as space

1

Common Lisp , 150 байт

(setq s(format nil"~32a"(read-line)))(map nil(lambda(i)(map nil(lambda(j)(princ(if(eq i j)#\# i)))s)(princ"
"))"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

Попробуйте онлайн!

объяснение

;; pad input to 32 spaces on the right
(setq s(format nil"~32a"(read-line)))
;; for each character in bubble sheet, for each character in input:
;; if characters are equal print "#"
;; else print bubble sheet character
(map nil(lambda(i)(map nil(lambda(j)(princ(if(eq i j)#\# i)))s)(princ"
"))"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

1

Java 10, 120 118 117 байт

s->{var r="";for(char c=65,i;c<91&c!=58;r+="\n",c+=c<90?1:-42)for(i=0;i<32;i++)r+=i<s.length&&s[i]==c?35:c;return r;}

Попробуйте онлайн (для TIO я использовал '█' (9608 вместо 35) для лучшей видимости).

Объяснение:

s->{                   // Method with character-array parameter and String return-type
  var r="";            //  Result-String, starting empty
  for(char c=65,i;     //  Start character `c` at 'A'
      c<91&c!=58       //  Loop as long as `c` is 'Z' or smaller, and is not '9'
      ;                //    After every iteration:
       r+="\n",        //     Append a new-line to the result-String
       c+=c<90?        //     If `c` is not 'Z' yet
           1           //      Go to the next character ASCII-value-wise
          :            //     Else:
           -42)        //      Change the 'Z' to '0'
    for(i=0;i<32;i++)  //    Inner loop `i` in the range [0,32)
      r+=i<s.length    //     If we're not at the end of the input array yet,
         &&s[i]==c?    //     and the characters in the column and array are the same
          35           //      Append the filler-character '#'
         :             //     Else:
          c;           //      Append the current character instead
  return r;}           //  Return the result-String

1

Сетчатка , 64 байта

$
36* 
L`.{36}
.
36*@$&¶
Y`@`Ld
(.)(.*)\1
@$2
N$`\S
$.%`
L`.{32}

Попробуйте онлайн!


$
36* 
L`.{36}

Дополняет строку ввода справа пробелами до 36 символов

.
36*@$&¶
Y`@`Ld

Затем поместите каждый символ в отдельной строке и добавьте ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789перед ним.

(.)(.*)\1
@$2

Совпадение пары одного и того же символа в одной строке, которая существует в том и только в том случае, если символ этой строки соответствует одному из символов ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. Замените первое на @и удалите второе.

N$`\S
$.%`

Единственными несопоставленными являются строки с пробелами, поэтому непробельные символы - это квадратный блок размером 36 × 36. Транспонировать это.

L`.{32}

Оставьте только первые 32 символа в каждой строке


1

Tcl , 153 145 байтов

Спасибо @sergiol за -8 байт

lmap i [split ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ""] {puts [join [lmap j [split [format %-32s [join $argv ""]] ""] {expr {$i==$j?"#":$i}}] ""]}

Попробуйте онлайн!

объяснение

# for i in list of choices
lmap i [split ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ""] {
    # print string of
    puts [join
        # list of
        [lmap j
             # for each character in first argument padded to 32 characters
             [split [format %-32s [join $argv ""]] ""]
             # return "#" if current choice and current character are equal, else current choice
             {expr {$i==$j?"#":$i}}
        ]
        ""
    ]
}


@sergiol: | Да, это так. 146 ?
Только для ASCII


1

SNOBOL4 (CSNOBOL4) , 155 150 байтов

	I =INPUT
	U =&UCASE '0123456789'
N	U LEN(1) . K REM . U	:F(END)
	O =DUPL(K,32)
	X =
S	I LEN(X) @X K	:F(O)
	O POS(X) K =' '	:S(S)
O	OUTPUT =O	:(N)
END

Попробуйте онлайн!

Объяснение:

	I =INPUT			;* read input
	U =&UCASE '0123456789'		;* U = uppercase concat digits
N	U LEN(1) . K REM . U	:F(END)	;* while U not empty, pop first letter as K
	O =DUPL(K,32)			;* dup K 32 times
	X =				;* set position to 0
S	I LEN(X) @X K	:F(O)		;* find the next occurrence of K and save (index - 1) as X
	O POS(X) K =' '	:S(S)		;* replace the X'th occurrence of K with space. If that's before character 32, goto S, else proceed to next line
O	OUTPUT =O	:(N)		;* output the string and goto N
END

1

Пролог (SWI) , 235 229 228 222 214 198 173 167 165 байтов

-6 байт благодаря шарлатану @Cows , -6 байт благодаря @ 0 '

X*[H|T]:-(H=X->write(#);writef("%n",[X])),X*T;nl.
_+[].
X+[H|T]:-H*X,X+T.
?-read(X),swritef(Y,"%32l",[X]),string_codes(Y,Z),Z+`ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`.

Попробуйте онлайн!

объяснение

% if head = bubble char, write "#", else write bubble char, then while tail is non-empty, recurse.
% if tail is empty then print newline
X*[H|T]:-(H=X->write(#);writef("%n",[X])),X*T;nl.
% if list is empty, then do nothing. this prevents t from being called with invalid X
_+[].
% call t, then recurse for each char in list
X+[H|T]:-H*X,X+T.
% read, pad input to 32 chars, and convert input to list
?-read(X),swritef(Y,"%32l",[X]),string_codes(Y,Z),Z+`ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`.


0

Октава , 61 байт

@(s)[((a=[30:55 13:22]'*~~(o=1:32)).*(a+35~=[s o](o)))+35 '']

Попробуйте онлайн!

Функция работает следующим образом:

@(s)[                                                     ''] %Anonymous function, taking string, outputting character array   
         [30:55 13:22]'                                       %Creates the board alphabet ('A':'Z' '0':'9']) but minus 35 (value of '#')
                       *~~(o=1:32)                            %Matrix multiplication by an array of 32 1's to form the 2D board. Saves 1:32 for later.
      (a=                         )                           %Saves the board mimus 32 to a for use later.
                                            [s o](o)          %Ensures the input is 32 characters long. Missing chars replaced by 1:32 (not in board)
                                     (a+35~=        )         %Compares against board (a+35 as a=board-35). Makes 2D array where matches = 0, others = 1. 
     (                             .*                )+35     %Element=wise multiplication, forcing matches to 0. Then add 35 resulting in board with #'s  

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