Некоторые люди считают овец, чтобы заснуть. Другие считают коз.
Напишите программу или функцию, которая принимает положительное целое число N и выдает N-1 бодрствующих коз, за которыми следует одна спящая коза, как если бы кто-то считал N коз, и в самом последнем случае они засыпали.
Бодрствующие козы выглядят так:
\
___/o>
-(___)"
'' ''
Спящие козы выглядят так:
\
___/->
,(___)"
`` ``
Они связаны между собой одним пространством между бородой и хвостом соседних коз:
\ \ \
___/o> ___/o> ___/->
-(___)" -(___)" ,(___)"
'' '' '' '' `` ``
Выходные данные могут иметь конечные пробелы и один завершающий символ новой строки.
Самый короткий код в байтах побеждает.
Примеры
N = 1:
\
___/->
,(___)"
`` ``
N = 2:
\ \
___/o> ___/->
-(___)" ,(___)"
'' '' `` ``
N = 3:
\ \ \
___/o> ___/o> ___/->
-(___)" -(___)" ,(___)"
'' '' '' '' `` ``
N = 4:
\ \ \ \
___/o> ___/o> ___/o> ___/->
-(___)" -(___)" -(___)" ,(___)"
'' '' '' '' '' '' `` ``
Больший N должен работать так же хорошо.
code-golf
string
ascii-art
kolmogorov-complexity
Кальвин Хобби
источник
источник
Ответы:
MATL ,
5653 байтаПопробуйте онлайн!
объяснение
Бодрствующий козел
Бодрствующий козел может быть упакован в строку
и распаковывается, как будет объяснено в ближайшее время. Однако символы одинарных кавычек должны быть продублированы , чтобы избежать их, поэтому строковый литерал должен быть определен как (обратите внимание на символы в одинарных кавычках и дублирование исходных символов):
Чтобы сохранить байты, мы определяем строку, используя символы на одну кодовую точку выше, что позволяет избежать дублирования. Строковый литерал становится
В конце кода мы вычтем 1 и преобразуем в char. (Мы могли бы сделать это сейчас, сразу после строкового литерала; но оставив его на конец, мы увидим еще одно дублирование в одинарных кавычках).
Чтобы объяснить, как распаковывается строка, мы будем работать с оригинальными символами (которые создаются в конце кода с помощью подтактинга 1), поэтому объяснение легче следовать. Сначала мы изменим строку
в 8-рядный двумерный массив символов, в главном порядке столбцов (вниз, затем поперек). Это автоматически дополняет последний столбец символом 0 (в конце кода вычитание 1 преобразует его в число -1, что при преобразовании в символ снова возвращает символ 0). Char 0 отображается как пробел. Так эффективно мы дополняем пробелы. Результатом изменения формы является
Теперь мы перевернем вертикально:
а затем переставить и перевернуть вертикально снова, чтобы получить бодрствующего козла:
Две операции переворота необходимы, потому что оригинальная упакованная строка «в обратном порядке». Это делается для того, чтобы использовать тот факт, что фактический двумерный массив символов, представляющий козу, имеет 6 начальных пробелов в первой строке, которые автоматически заполняются заполнением, когда строка преобразуется в 8-рядный двумерный массив. Но заполнение выполняется в конце (не в начале) последнего столбца (не в строке), поэтому происходит переворот и транспонирование.
Спящая коза
Спящий козел генерируется из активного козла с помощью транслитерации символов
o
,'
,-
в-
,`
,,
соответственно. На самом деле, из - за один-код-точечным выше преобразования в, мы транслитерации символовp
,(
,'
в.
,a
,-
, что опять избавляет нас от необходимости дублировать символ одинарной кавычки. Именно поэтому операция вычитания-1 была оставлена на конец программы.Структура кода
N
, работая с кодовыми точками, увеличенными на 1.Код комментария
источник
Python 3.6, 102 bytes
Yaay, f-strings!
источник
Javascript, 122 bytes
Answer
Side note
In the following code (91 bytes) the goats are aligned verticaly. It does not comply with the output format but i though it could be interesting to note that the horizontal alignment required in the output format needs more bytes:
источник
Batch, 234 bytes
Takes input from stdin. Batch has trouble with
"
and>
for various reasons so I have to use placeholders and then switch them at the end.источник
set/pn
works ._.^
escapes characters.Pyke,
5654 bytesTry it here!
4 bytes too many because Pyke doesn't allow double quotes in strings :(
источник
JavaScript (ES6),
110109 bytesHaving to support all three kinds of quote characters was annoying, but fortunately @pinkfloydx33's comment gave me the flash of inspiration that I could add the backquotes at the end thus saving me 1 byte.
источник
'+"'' ''"
(assume single quotes are back ticks since I've no idea how to get a backtick into a code block in comments)f=
in my byte count, it's just there for completeness.GolfScript, 91 bytes
Input:
3
Output:
Explanation
Try it online!
источник
Jelly,
6256 bytesTest it at TryItOnline
How?
источник
PHP , 200 Bytes
источник
C++, 180 bytes
источник
#include <string>
and eitherusing namespace std;
orusing std::string;
in your byte count if your function cannot be compiled without them.Pip, 60 + 1 = 61 bytes
One byte added for the
n
flag.Constructs an awake goat as a list of lines and yanks it into
y
. String-multiplies to geta-1
awake goats. Replaces-o'
with,-`
iny
and concatenates it to the end. Prints, newline-separated.Try it online!
(I think this is my first time using Pip's escaped-string syntax
\"...\"
, which allows for literal double quotes in the string.)источник
CJam, 58 bytes
Try it online!
Explanation
источник
Python 2.7,
101113 bytesEdit: Added function definition
de-golfified:
Note Python2.7 is one byte shorter than Python3 due to that it doesn't need parentesis when printing.
источник
n
, and you've missed the tail change for the sleeping goat (also did you see the Py 3.6 answer?).print "...
, and place everything on one line, using 1;
to separate the two statements. The tail still not in the golfed code shown, but looks like you've counted it, all in that should make it 112 bytes.05AB1E, 66 bytes
Try it online!
Explanation
источник
Bash + GNU Coreutils,
165155 bytesRun with:
Basically the program prints N times of the same goat (reversed), and substitutes the first
-
, for,
, the firsto
for-
and the first'' ''
for the backticks. Then reverses the lines.источник
PHP,
133131 bytesI found two bytes to golf away from one of the version without curlys.
источник
PowerShell v2+, 96 bytes
(ab)uses the default
Write-Output
formatting to include a newline between elements. Leverages string concatenation and multiplication to construct the goats line by line. The only real trick is the first line$n--
to output the correct number of ears and then post-decrement$n
so it's correct for the rest of the lines.источник
Ruby, 102 bytes
источник
Python 3. 170 bytes
hmm, apparently constructing the string without doing list manipulation yield shorter code
источник
IBM/Lotus Notes Formula,
187174188 bytes(not competing)EDIT Found a space that shouldn't have been there and removed an unneeded @Implode
188 as I had missed the fact that the tail of the sleeping goat is different :-(
Ungolfed:
Usage:
Create a Notes form with two fields named a and g.
a=editable, number, g=computed, text.
Paste the above formula into g and give a a default value of 0.
Set the form font to Terminal.
Create a new document with the form, enter a number in a and press F9 to update the goats.
Samples:
Not competing as the format messes up when the number of goats reaches the width of the page.Given an infinitely wide screen it
shouldwill work for any number of goatsthough. This is what it looks like when the page is not wide enough.источник
Emacs Lisp, 241 bytes
"Slightly ungolfed"
where
s
is one sleeping goat,a
adds an awake goat andg(n)
is the counting function.источник
Java 8,
236222218173 bytesExplanation:
Try it online.
источник
Canvas, 58 bytes
Try it online!
Pretty boring answer, really... builds the awake goat, repeats it horizontally
n-1
times, builds and adds the sleeping goat, prints the result.источник