Маленькие коробки на склоне холма


13

Есть сатирическая песня под названием Little Boxes , первоначально написанная Malvina Reynolds, о пригородном разрастании, в которой есть следующие тексты:

Маленькие шкатулки на склоне холма,
Маленькие шкатулки из клеенки,
Маленькие шкатулки на склоне холма,
Маленькие шкатулки все тоже самое.
Есть зеленый и розовый
И синий и желтый,
И все они сделаны из липкой
и все они выглядят одинаково.

Ваша задача здесь, учитывая целочисленный ввод, n>1который представляет размер дома, вывести четыре «маленьких коробочки», используя следующие цвета (в нотации 0xRRGGBB):

Green -- 0x00FF00
Pink --- 0xFF00FF (technically magenta)
Blue --- 0x0000FF
Yellow - 0xFFFF00

Если ваша конкретная консоль не имеет этих точных цветов, вы можете использовать ближайший доступный (например, escape-коды ANSI).

Дома построены с n _изображением пола и линии крыши. Они окружены n/2(округленными) |символами, представляющими стены. Крыши всегда2 высокие и две /на левом краю, две \на правом краю и n-2 -представляют вершину крыши. Поскольку дома становятся больше, сравнительный размер крыши становится меньше; это предназначено.

Вот дом размером 2:

 /\
/__\
|__|

Вот размер 3 :

 /-\
/___\
|   |
|___|

Вот размер 7 :

 /-----\
/_______\
|       |
|       |
|       |
|_______|

Таким образом, учитывая вклад 7 , выведите четыре дома размером, 7как описано выше, с первым зеленым, вторым розовым (пурпурным), третьим синим и четвертым желтым. Вывод цветов в этом порядке важен.

Пример изображения размера 3:

введите описание изображения здесь

правила

  • Дома могут быть горизонтальными или вертикальными, если между ними существует четкое разделение.
  • Лидирующие / завершающие символы новой строки или другие пробелы являются необязательными, при условии, что дома выстроены в линию соответствующим образом.
  • Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
  • Вывод может быть на консоль, сохранен как изображение и т. Д.
  • Стандартные лазейки запрещены.
  • Это поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).

Ответы:


5

JavaScript (ES6), Chrome / Firefox, 156 148 151 150 байт

Сохранено 8 байт благодаря @Shaggy
Сохранено 1 байт благодаря @Neil

n=>['0f0','f0f','00f','ff0'].map(c=>console.log(`%c /${'-'[r='repeat'](n-2)}\\
/${s='_'[r](n)}\\
${(`|${' '[r](n)}|
`)[r](~-n/2)}|${s}|`,'color:#'+c))

демонстрация

Обязательно откройте консоль вашего браузера, чтобы получить цветной вывод.


Работает нормально для меня как сниппет, с открытой консолью моего браузера. Сохраните 8 байтов, используя трехзначные шестнадцатеричные коды: tio.run/##NYvRCsIgGEbv9xSDFr/…
Shaggy

@ Shaggy Спасибо за предложения!
Арно

Нужны ли ведущие 0?
Джонатан Фрех

@JonathanFrech Да. Без начальных нулей это не было бы действительными #RGBцветовыми кодами CSS.
Arnauld

Я думаю, что высота неправильная на более широких домах.
Нил

5

Python 2 , 123 121 119 111 109 108 байт

  • Сохранено два байта благодаря caird coinheringaahing ; использование фактического непечатаемого символа ASCII вместо экранирования ( \33)
  • Мог (и сделал) сохранить байт, написав всю программу, используя input()вместо определения функции
  • Сохранено семь байтов благодаря ElPedro ; используя тот факт, что str(90+n)с 0<=n<=9является"9%s"%n
  • Сохранены два- три байта с использованием форматирования строки, а не конкатенации строк

N=input()
for(n)in"2543":Z="_"*N;print"[9%sm /"%n+~-~-N*"-"+"\ \n/%s\\\n"%Z+~-N/2*("|%s|\n"%" "*N)+"|%s|"%Z

Попробуйте онлайн!

Использует коды выхода ANSI для раскраски домов.



1
112 с помощью цикла «2543» и форматирования строк - попробуйте онлайн!
ElPedro

2
@ElPedro Спасибо. Мне не пришло в голову, что 90и 2,5,4,3подведено итоговое объединение.
Джонатан Фрех

3

Excel VBA, 243 байта

Функция анонимного непосредственного окна VBE, которая принимает входные данные A1и выводит их в диапазонA2:A5

[C1]=vbLf:For i=1To 4:Cells(i+1,1)=[" /"&Rept("-",A1-2)&"\"&C1&"/"&Rept("_",A1)&"\"&C1&Rept("|"&Rept(" ",A1)&"|"&C1,A1/2)&"|"&Rept("_",A1)&"|"]:Cells(i+1,1).Font.Color=Array(32768,&HFF00FF,rgbBlue,65535)(i-1):Next:Cells.Font.Name="Courier New"

Выход

Выход


2

Japt , 79 76 74 73 72 байта

3#²¤r1'f ò3 w £Ol"%c /{ç- ¤}\\
/{ç'_}\\
{/2-½ ç"|{ç}|
"}|{ç'_}|"Xi`¬l:#

Попробуйте (откройте консоль браузера, прежде чем нажать «Выполнить»).

Спасибо ETH за помощь в тестировании прошлой ночью, пока я работал над этим на моем телефоне.


объяснение

Неявный ввод целого числа U

3#²¤r1'f ò3 w

Сначала мы строим массив из трехзначных шестнадцатеричных цветов для отображения. Charcode из ²178 так 3#²дает нам 3178. Мы превращаем , что в строку базовой 2 с , ¤а затем заменить все вхождения 1с f. ò3разбивает строку на массив строк длиной 3 и wпереворачивает этот массив.
(Мне нужно найти способ как-то сократить это.)

£Ol

Мы отображаем массив £с Xиспользованием текущего элемента и Olрегистрируем его в консоли. Мы передадим две строки, одна из которых содержит дом, а другая - CSS.

Xi`¬l:#

Вторая строка построена с использованием iпредварения Xсжатой строкой color:#.

"%c /{ç- ¤}\\

%cГоворит консоль , чтобы использовать вторую строку в CSS. Верхняя строка дома строится путем повторения ( ç) времени -символа, Uа затем вырезания его из второго элемента (с индексами 0) с помощью ¤. Эти фигурные скобки служат своего рода ярлыком для объединения строк.

/{ç'_}\\

Вторая строка строится аналогичным образом, на этот раз повторяя время _символов U.

{/2-½ çRi|²iUç 1}

Тело дома строится, сначала |дважды повторяя символ с ²последующим вставлением пробела несколько Uраз в эту строку с индексом 1. Затем полученная строка добавляется к новой Rстроке ( ), и эта строка повторяется несколько U/2-0.5раз.

|{ç'_}|"

Наконец, последняя строка строится так же, как и вторая.


1

Python 2 , 120 байт

n=input()
for i in'2543':s='_'*n;print'[1;3'+i+('m /'+'-'*(n-2)+'\ \n/%s\\\n'%s+(-~n/2-1)*('|'+' '*n+'|\n')+'|%s|\n'%s)

Попробуйте онлайн! (показывает экранирующие символы вместо реальных цветов, протестировано на локальном терминале)


Я думаю, что ваши дома слишком высоки для входа, как n=2.
Джонатан Фрех

@JonathanFrech Да, я исправлю ... неправильный подход к потолку, по-видимому, РЕДАКТИРОВАТЬ: исправлено
Эрик Outgolfer

Вопрос говорит use the closest available, хотя вы, кажется, используете нормальные цвета вместо ярких. Тем не менее, яркие цвета, я думаю, будут ближе к желаемым.
Джонатан Фрех

@JonathanFrech Хм, кажется, у тебя тоже нормальные цвета, но яркие - ближе.
Эрик Outgolfer

1
@ElPedro В любом случае его оказалось лучше, чем у меня: p
Эрик Outgolfer

1

YaBasic , 220 байт

Анонимная функция, которая принимает входные данные как целое число, n и выводит 4 цветных дома в терминал.

Отсутствие выделенной функции повторения или замены строк в yabsic действительно вредит этому ответу.

Clear Screen
Input""n
b$="__"
c$="|  "
For i=1To n-2
a$=a$+"-"
b$=b$+"_"
c$=c$+" "
Next
c$=c$+"|\n"
For i=1To n-4
d$=d$+c$
Next
For i=0To 3
?Color(Mid$("gremagbluyel",1+3*i,3))" /"+a$+"\\\n/"+b$+"\\\n"+d$+"|"+b$+"|"
Next

Эта версия требует графического режима и, следовательно, не работает на TIO.

Выход

Входное значение для ниже n=7.

Выход


1

SmileBASIC, 115 байт

INPUT N
H.H 6H 4H 2DEF H C
COLOR C+5?" /";"-"*(N-2);"\
?"/";"_"*N;"\
FOR I=3TO N?"|";" "*N;"|
NEXT?"|";"_"*N;"|
END

Еще один, который также составляет 115 байтов:

INPUT N
FOR J=0TO 3COLOR!!J*8-J*2+5?" /";"-"*(N-2);"\
?"/";"_"*N;"\
FOR I=3TO N?"|";" "*N;"|
NEXT?"|";"_"*N;"|
END

Коды цветов, которые мне нужны (в 4-битном RGBI): 5, 11, 9, 7. Это генерируется с использованием !!J*8-J*2+5Если J не равно 0, это 13-J*2(дает 11,9,7), и если это так, результат всего 5

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.