Я ненавижу раздувание кода!
Поэтому я решил заменить свою систему Windows 7 на версию для гольфа. Однако я знаю, что это нелегко, поэтому давайте сначала создадим прототип. Он возьмет список окон у пользователя и покажет их с помощью псевдографического дисплея на стандартном выходе.
Например: пользовательский ввод:
0,0,15,10 15,10,20,15 10,13,15,15 9,1,16,3 17,5,20,7 11,2,17,4 15,4,19,6 13,3,18,5
Выходы Code Golf® Window Manager ™:
┌──────────────┐ │ :::::::: ┌─────┴┐ │ │ ::::::::: ┌────┴┐ │ :::::::: └─┤: ┌───┴┐ │ :::::::::: └─┤ :::: ├┐ │ :::::::::::: └─┬──┘├┐ │ :::::::::::::: ├─┬─┘│ │ :::::::::::::: │ └──┘ │ │ :::::::::::::: │ │ :::::::::::::: └──────────────┼────┐ │ │ :::: │ │ :::: ┌────┤ :::: │ │ │ :::: :::: │ └────┴────┘
Входные данные:
- Взяты из стандартного ввода (или, если ваша система не имеет
stdin
, любой метод, который может обеспечить несколько строк ввода) - Каждая строка содержит 4 числа, разделенных запятыми - координаты окна
- Первые два числа: левый верхний угол; последние два числа: нижний правый угол
- Использование
x,y
обозначений
Выход:
- Запишите его в стандартный вывод (или, если ваша система не имеет
stdout
, что-нибудь, что отображает моноширинный текст) - Используйте одиночные символы рисования рамки из кодовой страницы 437 для рисования границ окна
- Окна, указанные позже во входных данных, скрывают указанные ранее
- Заполните окна символом двоеточия:
:
- Начальные и конечные пробелы в порядке, если они не нарушают выравнивание окон
Примечания:
- Максимальное разрешение, которое я хочу поддерживать: 76 (горизонтальное) на 57 (вертикальное)
- Не нужно поддерживать плохой ввод
- Максимальное количество окон: 255 (если вам нужен лимит)
- Моя
cmd
оболочка Windows 7 отображает кодовую страницу 437 символов по умолчанию; если у кого-то есть способ сделать это на Linux (используяxterm
или что-то еще), пожалуйста, опишите это здесь
Для справки, коды символов:
┌da ─c4 ┬c2 ┐bf
│b3 :3a │b3 │b3
├c3 ─c4 ┼c5 ┤b4
└c0 ─c4 ┴c1 ┘d9
Всего: 12 разных персонажей.
javascript:$('pre').css('line-height','1em')
Ответы:
Python, 397 символов
Перейдите
C="...
наC=u"...
и он будет печататься в юникоде! Может быть сложно заставить файл сохранить должным образом, потому что символы кодовой страницы 437 не экранированы (требуется первая строка комментария «кодирование»).Подход заключается в постепенном построении карты с использованием побитовых операторов. Менее гольф-версия с комментариями:
источник
JavaScript ES6 (FF ≥ 31,0), 404 символа
Без ES6:
w('0,0,15,10\n15,10,20,15\n10,13,15,15\n9,1,16,3\n17,5,20,7\n11,2,17,4\n15,4,19,6\n13,3,18,5');
правильно выводит пример ОП.Края окон строятся с использованием побитовых операторов (Up = 8, Bottom = 4, Left = 2, Right = 1).
источник
function w(s){...}
getsw=(s)=>{...}
(и, как и для всех других литералов функций), мудрыми. И таблица поиска символов, вероятно, может быть заменена строкой с теми же символами.Array.fill()
для инициализации на «рабочий стол».[].fill([].fill(0,0,76),0,57)
, жаль, что это не работает. Могу ли я написать корочеnew Array(57).fill(new Array(76).fill(0))
?new
операторыArray(57).fill(Array(76).fill(0))
.Питон, 672 символа
Менее читаемая версия:
Начиная с версии ниже:
источник