Заповніть мій бульбашковий лист


18

Сьогодні в моїй школі був день реєстрації іспитів на АП , і, поки я ретельно кидав на потрібні сторінки та сторінки, ідея цього виклику вразила мене. Отже, даючи рядок букв і цифр, виведіть відповідну заповнену бульбашкову діаграму.

Правила:

  • Для кожного символу в рядку введення, замініть цей символ у відповідному стовпці з #або @або будь-яким іншим розумним символом (якщо ваш язик може обробляти його, 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" надходить перед "A" у коді ASCII> :( lol
NL628

"Дійсним введенням буде рядок, який складається з символів, що відображаються на аркуші міхура, а також пробілами", але ви також вказуєте "Будь-який символ, крім великої літери, пробілів та числових цифр, або понад ліміт 32 символів слід ігнорувати " , так що це таке?
Kritixi Lithos

1
Але згідно з першим твердженням, ви говорите, що $не з’являться у введеннях
Kritixi Lithos

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

Відповіді:


4

Лушпиння , 23 байти

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

Спробуйте в Інтернеті або спробуйте з фантазійним █ символом (але недійсним числом рахунків)!

На жаль, мені не вдалося об'єднати два maps в один (за винятком використання дужок, що коштувало 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}*''}}

Спробуйте в Інтернеті!

Повертає масив рядків. Можна додатково пройти в гольф, відкинувши приєднання рядків і повернувши 2D масив символів, як зазвичай це норма, але я не впевнений, чи дозволено це.


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.

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

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


: / у вас, здається, не вистачає близького батька наприкінці
лише для ASCII

Це виглядає , як вона працює. (Wolfram StringReplace) Зі сторони, замінений вбудований буде дуже зручно
лише для ASCII,

Неважливо, я не знаю, що я робив. 27 байт - вам не потрібноCast
лише ASCII

Крім того, повторно: килимок з довільним символом, про який ви питали раніше: чи вважаєте ви, що це було б досить корисно, щоб додати його як вбудований? а може, як двоякий вбудований?
Лише 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

Я можу зберегти один байт.
Ерік Аутгольфер

Welp, я також отримав ³Ḣ,⁶yØA;ØD¤µ32СZYу 18 років, що, як мені здається, також може бути незмінним! Хоч хоч…
Джонатан Аллан

Тож, очевидно, це не той байт, про який я маю на увазі. :) Постарайтеся більше ...
Ерік Атголфер

Дивно, що мені вдалося пограти в гольф на мобільних 17 байтах
Джонатан Аллан

Моє було насправді це , але вітаю!
Ерік Аутгольфер

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 ++ для отримання додаткової допомоги. EDIT: переключений посилання на C ++
Джузеппе

1
COBOL кого? Я ніколи не писав у ньому рядок коду, але використання 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):''
l4m2


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

Спробуйте в Інтернеті!

Пояснення / Недозволений

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

(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 -нотація, яка об'єднує однорядкові рядки в одну рядок.

На основі рішення 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

Стакс , 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
Емінья,

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

Лист звичайний , 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 quack , -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.