6
\$\begingroup\$

This is my first question in Code golf I found it in stack-overflow (originally in JavaScript however all languages are acceptable):

Render on screen NxN (where N in range 1-16) grid where each cell have black boundary and red number inside - cells are numerated in hex starting from left-upper corner to bottom-right. Example output (for N=16) shows how result should looks like (font can be different than in picture):

enter image description here

The image in text uri form (which works on major browsers) in output is also acceptable - a as example blow:

<img src="data:image/png;base64,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"/>

This is my (not optimised) attempt to this task

document.write('<style>.row { display: flex; font-size: 9.5px; text-align: center; color: red } .cell { width: 10px; height: 10px; margin: 1px; border: 1px solid black;}</style><div id="container"></div>')

let n=10, s='';

for(let i=0; i<n; i++) {
  s+= '<div class="row">'
  for(let j=0; j<n; j++) s+= `<div class="cell"> ${(i*n+j).toString(16)} </div>`;
  s+= '</div>'
}

container.innerHTML = s;

but I wonder how small code can produce similar effect?

\$\endgroup\$

closed as unclear what you're asking by Kevin Cruijssen, AdmBorkBork, Wheat Wizard, Xcali, Shaggy Sep 18 at 21:15

Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 7
    \$\begingroup\$ Was starting to work on a brainfuck solution until I realised it can't output text in red :'( \$\endgroup\$ – The random guy Sep 18 at 7:29
  • 1
    \$\begingroup\$ Related \$\endgroup\$ – Kevin Cruijssen Sep 18 at 9:04
  • 1
    \$\begingroup\$ @KamilKiełczewski if "NxN (where N in range 1-16)" is no longer a requirement it should be removed from the spec, although I don't know why you're allowing a uri now. \$\endgroup\$ – Jonathan Allan Sep 18 at 9:23
  • 2
    \$\begingroup\$ Why are some of your comments deleted now?.. An few hours ago you said input wasn't required, and @JonathanAllan asked to remove it from the challenge description as response. And now those comments are removed without a change to the challenge description.. So, do we take an input or not? And please edit the challenge description accordingly.. \$\endgroup\$ – Kevin Cruijssen Sep 18 at 12:29
  • 2
    \$\begingroup\$ I've VTCed this as unclear as, other than the issue of whether or not we should take input, there are a lot of things not covered by the spec including, but not limited to, border size, margins, padding and justification of text. \$\endgroup\$ – Shaggy Sep 18 at 21:15
4
\$\begingroup\$

Could go smaller, but here's a quick one:

let n=10;container.innerHTML=(d='<div class="')+'grd" style="width:'+n*14+'px">'+[...Array(n*n)].reduce((a,b,i)=>a+d+'cell">'+i.toString(16)+(e='</div>'),'')+e;
.grd { display: inline-block; font-size: 9.5px; text-align: center; color: red;}
.cell { display:inline-block; width: 10px; height: 10px; margin: 1px; border: 1px solid black;}
<div id="container"></div>

\$\endgroup\$
  • \$\begingroup\$ Hello and welcome to codegolf ! I invite you to put your code on tio.run and export it here. The website has a special export for StackExchange and will show your score on your answer. \$\endgroup\$ – The random guy Sep 18 at 8:35
  • 1
    \$\begingroup\$ @Therandomguy, would the numbers stay red when run on TIO? \$\endgroup\$ – manatwork Sep 18 at 8:39
  • \$\begingroup\$ @manatwork you actually got a point here ... \$\endgroup\$ – The random guy Sep 18 at 8:39
  • \$\begingroup\$ I believe this needs to be changed to take the n as input since the spec states, "NxN (where N in range 1-16)". \$\endgroup\$ – Jonathan Allan Sep 18 at 9:11
3
\$\begingroup\$

Red, 131 bytes

n: -1 view collect[loop 16[keep 'across
loop 16[keep compose[field 20x20 font-color red(to""to-hex/size n: n + 1 2)]]keep 'return]]

enter image description here

If the leading zeroes need to be discarded:

Red, 154 bytes

n: -1 view collect[loop 16[keep 'across
loop 16[s: to""to-hex/size n: n + 1 2 parse s[remove"0"]keep
compose[field 20x20 font-color red(s)]]keep 'return]]

enter image description here

Note: The first screenshot is taken on my Win 10 PC, the second one - on my Win 8.1 laptop, hence the difference.

\$\endgroup\$
  • 1
    \$\begingroup\$ It is actually mostly red, yeah... \$\endgroup\$ – val Sep 18 at 19:12
  • \$\begingroup\$ The first line shouldn't include leading 0s. \$\endgroup\$ – Shaggy Sep 18 at 19:54
  • \$\begingroup\$ @Shaggy Ok, I'll fix it tomorrow. \$\endgroup\$ – Galen Ivanov Sep 18 at 20:53
  • 2
    \$\begingroup\$ On second thought, it might be worth asking whether they are allowed first. \$\endgroup\$ – Shaggy Sep 18 at 21:16
2
\$\begingroup\$

PowerShell, 319 bytes

-1..15|%{If($_-lt0){$s="┌──";0..14|%{$s=$s+"┬──"};Write-Host "$s┐";}Else{$i=$_;0..15|%{Write-Host "│"-NoNewline;Write-Host ("{0:X2}"-f($i*16+$_))-f 12 -NoNewline;};Write-Host "│";$s=("├","└")[$_-eq15]+"──";0..14|%{$s=$s+(("┼","┴")[$i-eq15]+"──")};Write-Host("$s┤","$s┘")[$_-eq15]}}

Screenshot of the output:

enter image description here

Only my second PowerShell answer, so can definitely be golfed substantially.. Also, is it possible to create and use an Alias for the Write-Host?

Explanation:

TODO: Will add one later.

The X2 could be x2 to format the hexadecimal as lowercase letters.

\$\endgroup\$
  • \$\begingroup\$ @LuisMendo Fixed.. Can definitely be golfed some more though.. It's only my second PowerShell answer ever, so I'm not too sure what I'm doing. ;) EDIT: Hmm, comparing it to the challenge screenshot, I might need spaces between blocks.. >.> \$\endgroup\$ – Kevin Cruijssen Sep 18 at 11:41
  • \$\begingroup\$ how N could be parameterized? \$\endgroup\$ – Nahuel Fouilleul Sep 18 at 12:19
  • \$\begingroup\$ @NahuelFouilleul OP said it was always 16 in the comments and as you can see at JonathanAllan's response, he asked to delete it from the challenge in that case, but now OP deleted his comments.. :S I honestly don't know anymore what the challenge is asking, since it keeps changing in the comments, without any substantial edits to the description.. >.> Three hours ago OP stated there wasn't any input required; now it sounds like there is an input required.. I'm gonna close as unclear until OP clarified AND edited the challenge description. \$\endgroup\$ – Kevin Cruijssen Sep 18 at 12:26
1
\$\begingroup\$

PHP, 157 bytes

<?php for(;$i++<$n=$_GET[n];)for(print'<p>';$$i++<$n;)echo'<x style="color:red;border:1px solid #000;display:inline-block;width:25px">'.dechex($x++).'</x> ';

This should be run as a webpage, not from CLI. Pass input as a URL query string named n. For example: grid.php?n=16

Sample output for n=8:

<p><x style="color:red;border:1px solid #000;display:inline-block;width:25px">0</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">1</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">2</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">3</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">4</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">5</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">6</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">7</x> <p><x style="color:red;border:1px solid #000;display:inline-block;width:25px">8</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">9</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">a</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">b</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">c</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">d</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">e</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">f</x> <p><x style="color:red;border:1px solid #000;display:inline-block;width:25px">10</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">11</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">12</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">13</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">14</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">15</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">16</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">17</x> <p><x style="color:red;border:1px solid #000;display:inline-block;width:25px">18</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">19</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">1a</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">1b</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">1c</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">1d</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">1e</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">1f</x> <p><x style="color:red;border:1px solid #000;display:inline-block;width:25px">20</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">21</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">22</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">23</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">24</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">25</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">26</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">27</x> <p><x style="color:red;border:1px solid #000;display:inline-block;width:25px">28</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">29</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">2a</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">2b</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">2c</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">2d</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">2e</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">2f</x> <p><x style="color:red;border:1px solid #000;display:inline-block;width:25px">30</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">31</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">32</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">33</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">34</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">35</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">36</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">37</x> <p><x style="color:red;border:1px solid #000;display:inline-block;width:25px">38</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">39</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">3a</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">3b</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">3c</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">3d</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">3e</x> <x style="color:red;border:1px solid #000;display:inline-block;width:25px">3f</x> 

TIO link to get raw outputs (you have to save them as HTML to see the result): Try it online!

\$\endgroup\$
1
\$\begingroup\$

JavaScript (web browser console), 160 bytes

I think a JavaScript golfer should be able to golf this idea a lot more (I'm not one!).

function(n){for(x=i=0;i++<n;console.log(...a))for(j=0,a=[''];j++<n;a.push('float:left;border:1px solid #000;color:red'))a[0]+='%c'+(x++).toString(16).padEnd(2)}

A 155 bytes version, but it prints some noises on top and right of the grid:

function(n,a=[]){for(x=0;x<n*n;a.push('float:left;border:1px solid #000;color:red'),a[0]+='%c'+(x++).toString(16).padEnd(2))x%n?0:console.log(...a,a=[''])}

This only works in modern browsers console.

Sample usage in console: f=...code above...; and then f(16);

Or open your browser's console and then click on Run code snippet button.

f=function(n){for(x=i=0;i++<n;console.log(...a))for(j=0,a=[''];j++<n;a.push('float:left;border:1px solid #000;color:red'))a[0]+='%c'+(x++).toString(16).padEnd(2)};
f(16);

Explanation:

In a modern browser console, you can use this format to apply CSS to your values printed in the console:

console.log('%c Value', 'color: red; font-size: 10px;');

For every %c you have to add a new argument with your styles and those styles will be applied until the next %c. So to style and print two values in same line, we can use something like this:

console.log('%c Value %c Value2', 'color: red; font-size: 10px;', 'font-weight: bold;');

In the function above, I'm collecting arguments for each row in an array called a and each row gets a single console.log for itself.

\$\endgroup\$
  • 1
    \$\begingroup\$ It almost work in Opera, the 1st line is displayed shorter than the other ones. \$\endgroup\$ – The random guy Sep 18 at 11:39
  • 1
    \$\begingroup\$ @Therandomguy golfed more and this one should work in any modern browser's console. \$\endgroup\$ – Night2 Sep 18 at 11:52
  • \$\begingroup\$ I don't think you need the float, do you? \$\endgroup\$ – Shaggy Sep 18 at 19:50
  • \$\begingroup\$ @Shaggy without float I lose the top border for each cell. OP says "each cell have black boundary". \$\endgroup\$ – Night2 Sep 18 at 19:52
1
\$\begingroup\$

Japt, 51 49 bytes

Wrong tool for the job, but I got it working eventually with a little help from my solution to Little Boxes on the Hillside. The spec doesn't include any details on margins, padding & border width so this won't look exactly like the reference image.

G²ÇsG ici%Ãú òG
£OlX¬,$...$¡`Þ:so¦d #000;¬l:d

Test it (Open your browser's console)

If input is required then this should work for 50 48 bytes.

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.