Маленькі ящики на схилі пагорба


13

Є сатирична пісня під назвою Маленькі ящики , спочатку Мальвіна Рейнольдс, про приміські розповсюдження, що мають такі тексти текстів:

Маленькі ящики на схилі пагорба,
Маленькі ящики з тик-липкою,
Маленькі ящики на схилі пагорба,
Маленькі ящики все одно.
Є зелений і рожевий,
і блакитний, і жовтий,
і всі вони зроблені з липкого типу.
І всі вони виглядають так само.

Ваше завдання тут, з огляду на ціле число, n>1яке відображає розмір будинку, виводить чотири "маленькі скриньки", використовуючи наступні кольори (у позначенні 0xRRGGBB):

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

Якщо ваша конкретна консоль не має цих точних кольорів, ви можете скористатися найближчими доступними (наприклад, кодами аварійного відключення 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.
Арнольд

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

5

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

  • Збережено два байти завдяки спільному спільному обробці даних ; використання фактичного недрукуваного символу 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 байт

Функція негайного вікна Anonymous 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журнали консоліруємо. Ми передамо до цього 2 рядки, один, що містить будинок, а другий - 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 так, я
виправлю

Питання відповідає на це use the closest available, хоча ви, здається, використовуєте звичайні кольори замість яскравих кольорів. Яскраві кольори - я думаю - все-таки будуть ближче до бажаних кольорів.
Джонатан Фрех

@JonathanFrech Гм, здається, і ваша використовує звичайні кольори, але так, яскраві ближче.
Ерік Аутгольфер

1
@ElPedro У будь-якому разі його виявилося краще, ніж у мене: p
Ерік Аутгольфер

1

Ябасич , 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.