Напишите программу или функцию, которая «реагирует» на заданное целое число n (ввод через параметр функции / args / stdin)
Программа не заботится о отрицательных числах, любит четные, не любит нечетные числа и боится числа 13.
Он должен вывести следующее:
если n <0:
--------------------------
| |
| |
(| _ _ |)
| |
| |
| |
| |
| oooooooooo |
| |
| |
| |
--------------------------
если n% 2 == 0 и n> -1:
--------------------------
| |
| |
(| ^ ^ |)
| |
| |
| |
| o o |
| oooooooooo |
| |
| |
| |
--------------------------
если n% 2 == 1 и n> -1 и n! = 13:
--------------------------
| |
| |
(| > < |)
| |
| |
| |
| |
| oooooooooo |
| o o |
| |
| |
--------------------------
если n == 13:
--------------------------
| |
| |
(| (O) (O) |)
| |
| |
| oooooooooo |
| o o |
| oooooooooo |
| |
| |
| |
--------------------------
Самое короткое решение в байтах побеждает.
Ответы:
CJam - 169
Попробуйте это на http://cjam.aditsu.net/
Объяснение высокого уровня:
S24*aB*
создает матрицу, полную пробелов, поскольку лицо без реберli_D=3{_0<2{_2%}?}?\;:X
считывает число и преобразует его в 0 (четное), 1 (нечетное), 2 (отрицательное) или 3 (13), сохраняя его в X,X"^^<>__":s"(O)"a2*+2/=~
выбирает типы глаз (2 strings){S*_@+_,C\-S*2*+@@++}:F
- функция F принимает 2 строки (скажем, S1, S2) и число (скажем, N) и создает 24-символьную строку, содержащую N пробелов, S2, другие пробелы, S1, N пробелов,2 (eyes) 6X3=- (F)~t
помещает линию глаз в матрицу,7'o5*_7F:Mt
помещает общая линия рта в матрице, а также сохраняет ее в M,X3={5Mt6'o_7Ft}*
если X равен 3, он снова помещает M в матрицу, на 2 строки выше, и помещает стороны рта между ними,X2<{X2*6+'o_5Ft}*
если X равен 0 или 1, он помещает углы рта в соответствующая позиция{" |"\+'|+}%
добавляет вертикальные края, а пробел слева в каждой строкеS'-26*+aa2*\*
добавляет горизонтальные края,_3=1>"()"\*3\t
добавляет ушиN*
добавляет разделители новой строкиисточник
Рубин,
241224Это определяет функцию для вызова как
f[13]
. Я уверен , что есть много возможностей для улучшения, похоже , что Ventero помогли мне сделать здесь .По сути, сначала я строю грубую основу, а также прикрепляю уши и рот. Затем я ставлю глаза в зависимости от количества. Разрабатывая символы для глаз, я также забочусь о разных ртах, поэтому мне не нужно снова проверять тип номера. Наконец, мне нужно исправить правый глаз для нечетных чисел, потому что код выше помещает одну и ту же строку в оба глаза.
источник
C # - 349 байт
Конечно, не собираюсь выигрывать какие-либо награды, но это другой способ ведения дел.
Golfed:
Меньше гольфа:
источник
Python 2 - 255
Не очень коротко, но я все равно выложу:
Я пропускаю назначение элементов для строк в Python! :( Тогда можно начать с матрицы символов и просто изменить глаза и рот.
источник
b=bytearray()
а затемb+'mystring'
сгенерировать изменяемый байтовый массив, который печатает так же, как любая другая строка.Python 2, 257
Не победитель, а альтернативный подход, довольно близко! Я надеюсь, что смогу выжать еще несколько символов из этого. Создает все строки по частям, используя общие подстроки, чтобы действительно выжать байты.
источник
CJam, 202
источник