Сегодня был экзамен 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 ->^^^
И, конечно же, это код-гольф , поэтому выигрывает самый короткий ответ
[A-Z0-9]{1,32}
и разрешить любое поведение для входных данных, не соответствующих этому.$
не появятся на входахОтветы:
Шелуха , 23 байта
Попробуйте онлайн или попробуйте с причудливым символом █ (но недействительным по количеству пользователей)!
К сожалению, я не смог объединить два
map
элемента в один (кроме случаев использования скобок стоимостью 24 байта).объяснение
источник
Рубин , 62 байта
Попробуйте онлайн!
Возвращает массив строк. Можно продолжить игру, отбросив объединения строк и вернув двумерный массив символов, как это обычно является нормой, но я не уверен, разрешено ли это здесь.
источник
C (gcc) ,
132126 байтовПопробуйте онлайн!
Спасибо Джонатану Фречу за сохранение 6 байтов.
источник
puts("")
эквивалентноputchar(10)
.++a)putchar((x[a-s]-*_)?*_:64);
->)putchar(x[a++-s]-*_?*_:64);
.64
в гольф1
.putchar
вызов может быть в гольфputchar(*_*(*_!=a[x-s]));
.Красный , 177 байт
Попробуйте онлайн!
Более читабельно:
источник
Древесный уголь , 21 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Предыдущая версия с проверкой ввода,
3432 байта. Редактировать: сохранено 2 байта благодаря @ ASCII-only.Попробуйте онлайн! Ссылка на подробную версию кода.
источник
StringReplace
) С другой стороны, встроенная замена была бы очень кстатиCast
R 104 байта
Попробуйте онлайн!
источник
Желе ,
1817 байтИспользует символ пробела. Чтобы использовать
#
заменить⁶
с”#
на стоимость одного байта.Попробуйте онлайн!
Как?
источник
³Ḣ,⁶yØA;ØD¤µ32СZY
в 18 лет, что я чувствую, может быть, также невозможно! Выходя, хотя ...C ++ 14,
319 байт237Я делаю это впервые, на худшем из возможных языков CodeGolf: P
Попробуйте онлайн!
источник
Node.js, 85 байт
Порт на Node.js, предложенный @DanielIndie
Попробуйте онлайн!
JavaScript (ES6),
10398 байтПопробуйте онлайн!
источник
+""
, не так ли?)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):''
Perl 5
-F
, 47 байтПопробуйте онлайн!
источник
Haskell , 86 байт
Для более приятного подхода (и меньшего количества байтов) см. Решение Лайкони !
Попробуйте онлайн!
В качестве альтернативы для того же количества байтов мы могли бы использовать:
Попробуйте онлайн!
Объяснение / Ungolfed
Оператор
(#)
очень похож,zipWith
однако функция жестко закодирована, ст. он использует,#
если два символа равны, и в противном случае он удерживает второй, без гольфа:Если первый список исчерпан, он просто добавляет остальные элементы второго:
С этим помощником нам нужно только сгенерировать строку
"A..Z0..9"
, повторить каждый элемент 32 раза и сжать ввод с каждой строкой, без разметки:источник
max
. Я думаю, вы должны опубликовать это как собственное решение, так как оно сильно отличается от моего решения.Haskell , 74 байта
Попробуйте онлайн! Входная строка
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 .
источник
Python 2, 138 байт
Поддерживает верхний и нижний регистр символов и оставляет незаполненный столбец для пробелов.
Если бонус не стоит, то я пойду на 125 байтов и поддержу только ввод в верхнем регистре:
источник
Stax , 15 байт
Запустите и отладьте его
Используется
'#'
для обозначения заполненного пузыря.Распакованный, размазанный и прокомментированный, это выглядит так.
Запустите этот
источник
Pyth,
2320 байтПопробуй здесь
объяснение
источник
APL + WIN, 56 байт
Запрашивает ввод строки и использует символ # в качестве идентификатора:
Объяснение:
источник
C (gcc) , 124 байта
Попробуйте онлайн!
Вместо жестко заданного массива я заменил его на функцию поиска. К счастью, набор символов ASCII имеет смежные буквенные и числовые диапазоны (я смотрю на вас, EBCDIC!). Кроме того, я позаботился о том, чтобы вывод выводился ровно на 32 символа, используя
sprintf()
: если это не было требованием задачи, функция будет 97 байтов:Попробуйте онлайн!
источник
CJam , 31 байт
Попробуйте онлайн! Использует пробелы в качестве «дырки».
Если конечный пробел разрешен, то это работает для 29 байт :
Попробуйте онлайн!
Вот 34-байтовая вариация, в которой
█
вместо этого используется полный блок Unicode :Попробуйте онлайн!
объяснение
источник
Python 2 ,
1039694 байта-7 байт благодаря мнемоническому
-2 байт благодаря Джонатану Фреху
Используется
'
как символПопробуйте онлайн!
источник
05AB1E , 19 байтов
Попробуйте онлайн!
объяснение
источник
a[b]
не работает, как вы хотите здесь, не так ли: P?MATL , 21 байт
Использует пробел в качестве символа маркера.
Попробуйте онлайн!
объяснение
источник
Common Lisp , 150 байт
Попробуйте онлайн!
объяснение
источник
Java 10,
120118117 байтПопробуйте онлайн (для TIO я использовал '█' (
9608
вместо35
) для лучшей видимости).Объяснение:
источник
Сетчатка , 64 байта
Попробуйте онлайн!
Дополняет строку ввода справа пробелами до 36 символов
Затем поместите каждый символ в отдельной строке и добавьте
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
перед ним.Совпадение пары одного и того же символа в одной строке, которая существует в том и только в том случае, если символ этой строки соответствует одному из символов
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
. Замените первое на@
и удалите второе.Единственными несопоставленными являются строки с пробелами, поэтому непробельные символы - это квадратный блок размером 36 × 36. Транспонировать это.
Оставьте только первые 32 символа в каждой строке
источник
Tcl ,
153145 байтовСпасибо @sergiol за -8 байт
Попробуйте онлайн!
объяснение
источник
SNOBOL4 (CSNOBOL4) ,
155150 байтовПопробуйте онлайн!
Объяснение:
источник
Пролог (SWI) ,
235229228222214198173167165 байтов-6 байт благодаря шарлатану @Cows , -6 байт благодаря @ 0 '
Попробуйте онлайн!
объяснение
источник
SOGL V0.12 , 19 байтов
Попробуй здесь!
источник
Октава , 61 байт
Попробуйте онлайн!
Функция работает следующим образом:
источник
Perl 6 , 57 байт
Попробуйте онлайн!
источник