Гольф Ваш любимый инструмент Minecraft

20

В Minecraft текстуры элементов по умолчанию представляют собой достаточно простые изображения 16 × 16 пикселей, что делает их идеальными для игры в гольф .

Ниже приведены упрощенные текстуры пяти «основных» алмазных инструментов в Minecraft: кирка , лопата , топор , меч и мотыга .

Показанные изображения увеличены, чтобы показать их детали. Нажмите на изображение, чтобы просмотреть его правильный размер 16 × 16 пикселей.

киркомотыга лопата топор меч мотыга

Чтобы упростить игру в гольф, я изменил каждый из оригиналов, чтобы использовать только пять одинаковых 24-битных цветов RGB:

  • R=75 G=82 B=73 для фона.
  • R=51 G=235 B=203 для алмазных инструментальных головок.
  • R=14 G=63 B=54 для контуров алмазов.
  • R=137 G=103 B=39 для сердечника деревянной ручки.
  • R=40 G=30 B=11 для контуров деревянной ручки.

Выберите любимый инструмент из пяти и написать программу , которая выводит его упрощенный 16 × 16 пиксель текстуры в любом формате без потерь общей полноцветный изображений (например bpm, png, ppmи т.д.).

Так, например, если вы выбрали топор, вы бы написали программу, которая выводит это изображение: пример топора

Не требуется вводить данные и не требуется веб-соединение. Изображение может быть выведено в виде файла с выбранным вами именем, или необработанные данные файла изображения могут быть выведены на стандартный вывод, или вы можете просто отобразить изображение.

Вам нужно только выбрать одно из пяти изображений. Программа, которая выводит любое из пяти изображений с наименьшим количеством байтов, является победителем.

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


Если вам нравится PPCG и вы играете в Minecraft, я приглашаю вас присоединиться к нашему пробному серверу Minecraft. Просто спросите в специальном чате .

Кальвин Хобби
источник
5
«Увеличен, чтобы показать детали». Я могу думать только о коробках с хлопьями.
Алекс А.
Я думаю, что могут быть некоторые проблемы со сжатием или у вас есть некоторые опечатки в цветах. Mathematica утверждает, что используются эти пять цветов (по крайней мере, для лопаты):[[76 82 73] [26 63 54] [106 234 204] [39 30 13] [133 102 45]]
Мартин Эндер
Похожие: codegolf.stackexchange.com/questions/39915/…
NinjaBearMonkey
@ MartinBüttner Вы уверены? Я повторно загрузил изображение лопаты и убедился, что 5 цветов верны. Я также удостоверился, что было точно 5 цветов. imgur может сжимать увеличенные изображения, но это не те, которые вы должны использовать.
Увлечения Кэлвина
@ Calvin'sHobbies Разрешен ли ввод?
Критиси Литос

Ответы:

6

CJam, 119 байт

Я выбрал лопату.

'P3NGSGN255N]o67T"vîþáy$<OW¥ÓNZ"256b9b~99T]2/e~W%"LRI?6jêÌ'
f-":i3/f=F,_W%:)+{)/(\:~}%{G/({)S*S+oNo}%1>\:~+}G*

Проверьте это здесь.

Эта программа печатает файл PPM в STDOUT.

Я использовал этот скрипт, чтобы помочь с кодированием изображения. (Это в основном для себя, если мне нужно будет использовать его позже.)

Основная идея состоит в том, чтобы развернуть изображение вдоль антидиагоналей, а затем использовать кодирование длины пробега. С этой техникой лопата содержит наименьшее количество прогонов. Для справки: количество прогонов на изображение (в порядке, указанном в задании):

{60, 26, 38, 43, 37}

Я добавлю больше объяснений, когда закончу играть в гольф.

Мартин Эндер
источник
7

JavaScript ES6, 353 байта

document.write(`<p style="width:1px;height:1px;box-shadow:${'931a31b31841940a40b40c41951a51b50c50d51e53f52b61c60d60e62f63c73d70e70f71b83c82d83e81a93b92c939a3aa2ba38b39b2ab37c38c29c36d37d28d35e36e27e34f35f26f34g35g3'.replace(/.../g,e=>(p=parseInt)(e[0],17)+`px ${p(e[1],17)}px 0 #${['33EBCB','0E3F36','896727','281E0B'][e[2]]},`)}9px 9px 0 8px #4B5249"`)

Это сильно использует CSS3 box-shadows для создания пиксельной версии изображения, в данном случае - мотыги Minecraft. Приведенный ниже фрагмент стека использует ES5 для удобного тестирования и несколько не в тонусе (вам нужно увеличить его, чтобы хорошо это увидеть).

s='931a31b31841940a40b40c41951a51b50c50d51e53f52b61c60d60e62f63c73d70e70f71b83c82d83e81a93b92c939a3aa2ba38b39b2ab37c38c29c36d37d28d35e36e27e34f35f26f34g35g3'.replace(/.../g,function(e){
  return parseInt(e[0],17)+'px '+parseInt(e[1],17)+'px 0 #'+['33EBCB','0E3F36','896727','281E0B'][e[2]]+','
})
document.write('<p style="width:1px;height:1px;box-shadow:'+s+'9px 9px 0 8px #4B5249"')

NinjaBearMonkey
источник
Можно ли сократить это использование кодировки base64 вместо hex?
lirtosiast
6
Самое большое исходное изображение составляет 297 байт. Как-то грустно быть за это :)
JB
@JB Это [колмогоровская сложность] по причине;)
NinjaBearMonkey
@ThomasKwa Разве base64 на самом деле не делает его длиннее? (Это на самом деле база-17, потому что gближе к концу.)
NinjaBearMonkey
Я не знаю, насколько дорогой интерпретация кодировки base64 в Javascript, но сам строковый литерал должен быть в 2/3 раза больше размера в base64, как в шестнадцатеричном.
lirtosiast
2

Поскольку это проблема майнкрафта, я сделаю решение для командного блока: 50 символов

summon ItemFrame ~1 ~0 ~0 {Item:{id:diamond_axe}}

создает фрейм предмета с топором

Лукас
источник
2
Вам необходимо вывести изображение .
Деусови
1
Изображение выводится на экран как часть игры.
Лукас
1
Из-за перспективы, оно никогда не будет идеальным изображением - оно должно быть и пиксельным, только 16x16.
Деусови
3
Я думаю, что это квалифицируется как стандартная лазейка - то же самое, что получение изображения из внешнего источника. Я думаю, что было бы неплохо вызывать блоки в качестве пикселей с максимально близкими цветами.
Увлечения Кэлвина
1
Я считаю это языковой особенностью.
Лукас
1

Python 3, 483 байта

Я решил сделать меч

from PIL import Image as IG, ImageColor as IC
s=IG.new('RGB',(16,16))
w='#6b6727'
b='#4b5249'
d='#33ebcb'
a='#0e3f36'
n='#281e0b'
t=b*13+a*3+b*12+a+d*2+a+b*11+a+d*3+a+b*10+a+d*3+a+b+b*9+a+d*3+a+b*2+b*8+a+d*3+a+b*3+b*2+a*2+b*3+a+d*3+a+b*4+b*2+a+d+a+b+a+d*3+a+b*5+b*3+a+d+a+d*3+a+b*6+b*3+a+d+a+d*2+a+b*7+b*4+a+d+a*2+b*8+b*3+n+w+a+d*2+a+b*7+b*2+n+w+n+b+a*2+d+a+b*6+a*2+w+n+b*4+a*2+b*6+a+d+a+b*13+a*3+b*13
s.putdata([IC.getrgb(t[i:i+7]) for i in range(0,len(t),7)])
s.save('s.png','PNG')

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

Я создал строку для каждого цвета и соединил их, чтобы получить строку шестнадцатеричных чисел. Затем я использовал библиотеку изображений Python для преобразования этой строки в изображение.

Энтони Ройтман
источник
1

Minecraft 18w11a (.mcfunction), 757 байтов

fill ~ ~ ~ ~15 ~ ~15 ice
fill ~13 ~ ~13 ~7 ~ ~11 cyan_wool
fill ~12 ~ ~14 ~10 ~ ~8 cyan_wool
fill ~12 ~ ~13 ~10 ~ ~11 diamond_block
fill ~11 ~ ~12 ~9 ~ ~10 diamond_block
fill ~10 ~ ~11 ~8 ~ ~9 diamond_block
fill ~3 ~ ~4 ~1 ~ ~2 dirt
setblock ~3 ~ ~4 oak_planks
setblock ~2 ~ ~3 oak_planks
clone ~3 ~ ~4 ~1 ~ ~2 ~4 ~ ~5
setblock ~4 ~ ~5 oak_planks
setblock ~4 ~ ~7 ice
setblock ~6 ~ ~5 ice
clone ~6 ~ ~5 ~4 ~ ~7 ~7 ~ ~8
setblock ~9 ~ ~10 diamond_block
setblock ~4 ~ ~4 dirt
setblock ~3 ~ ~5 dirt
setblock ~7 ~ ~7 dirt
setblock ~6 ~ ~8 dirt
setblock ~1 ~ ~2 ice
fill ~12 ~ ~9 ~12 ~ ~8 ice
setblock ~11 ~ ~8 ice
fill ~8 ~ ~13 ~7 ~ ~13 ice
setblock ~7 ~ ~12 ice
fill ~ ~ ~ ~15 ~ ~15 light_gray_concrete replace ice
fill ~ ~ ~ ~9 ~ ~10 dark_oak_bark replace dirt

Конечно, кто-то должен был ответить на вопрос с Minecraft. Поместите ответ в пакет данных и запустите/function <packname>:<filename> . Лопата нарисована относительно вас в направлении + X и + Z. Цвета неправильные, но я считаю это языковым ограничением;)

Но лопата на самом деле сделана из дерева и бриллиантов !!!!

Выход

перелопатил

четв
источник