7-сегментные цифры могут быть представлены в ASCII с использованием _|
символов. Вот 1
цифры размера :
_ _ _ _ _ _ _ _
| _| _| |_| |_ |_ | |_| |_| | |
| |_ _| | _| |_| | |_| _| |_|
Большие размеры формируются путем пропорционального удлинения каждого сегмента. Вот пара размером 3 цифры.
___ ___ ___ ___ ___ ___ ___
| | | | | | | | | |
| | | | | | | | | |
|___| |___ | |___ ___| | | |___|
| | | | | | | | | |
| | | | | | | | | |
|___| |___| | ___| ___| |___| ___|
Цель
В этой задаче вы должны написать программу / функцию, которая может принимать одну цифру в качестве ввода и определять ее размер. Подвох: если ввод не является действительной цифрой, то ваша программа должна вывести 0
.
Это код-гольф , побеждает меньше байтов.
Вы можете написать либо программу, либо функцию, которая может получить цифру либо как STDIN, либо как аргумент, и вывести / вернуть значение.
Цифры будут представлены в виде многострочной строки, дополненной минимальным количеством пробелов, необходимых для создания идеального прямоугольника. Конечный символ новой строки является необязательной частью ввода. Не будет лишних пробелов.
Когда передается нецифровка, она все равно будет состоять из _|
символов, дополненных прямоугольником, и не будет иметь лишних начальных пробелов. Там не будет пустых строк. Вам не придется иметь дело с пустым вводом.
Выходными данными должно быть одно неотрицательное целое число с необязательным завершающим переводом строки. Если ввод не является правильной цифрой любого размера, выведите 0
. Иначе выведите размер.
Вот удобное руководство по ширине и высоте каждой цифры для данного размера N
.
Digit Height Width (not counting newlines)
1 2N 1
2 2N+1 N+2
3 2N+1 N+1
4 2N N+2
5 2N+1 N+2
6 2N+1 N+2
7 2N+1 N+1
8 2N+1 N+2
9 2N+1 N+2
0 2N+1 N+2
Примеры ввода / вывода
В:
__
|
__|
|
__|
Вне:
2
В:
|
|
|
Вне:
0 //because it is of an invalid height. Either 1 char too short or tall.
В:
| |
| |
| |
|____|
|
|
|
|
Вне:
4
В:
___
|
|___
| |
|___|
Вне:
0 //1 char too wide
В:
_
|_|
| |
Вне:
0 //it's not a digit
В:
__
|
|__
|
__|
Вне:
2
В:
_ _
_| _|
|_ _|
Вне:
0 //both would be valid individually, but input should be a *single* digit
В:
_
|_|
|_|
Вне:
1
В:
|
|
Вне:
1
В:
__|_
|
_ |
_
|__
Вне:
0
Это примерно обратное из преобразования числа в 7-сегментный дисплей шаблона , от 3 -х лет назад.
0
цифры, не так ли? Если вы не придумали способ их нарисовать.Ответы:
Рубин, 250
Учитывая, что существует так много возможных недопустимых входных данных, единственный способ сделать это состоял в том, чтобы сгенерировать все правильные цифры и проверить, совпадают ли входные данные.
Я строю каждую цифру снизу вверх, в 2 половины плюс верхняя строка. Хотя существует 12 возможностей (учитывая, что левый сегмент может быть включен, выключен или в случае
3
и7
полностью отсутствовать), только 7 фактически присутствуют, и тщательный выбор кодирования позволяет закодировать всю информацию (кроме верхней строки) в один символцифра
1
не соответствует шаблону и обрабатывается отдельно, и используется для инициализации массива.Неуправляемый в тестовой программе
Эта версия использует
.
вместо пробелов для диагностики.источник