Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Challenges

Hex ​​​detector

+1
−0

Given an integer from 1 to 1000, indicate whether it is a centered hexagonal number[1] (also known as a hex number).

What is a hex number?

The hex numbers can be visualised as follows:

  • On a hexagonal grid, start with a single hexagon coloured.
  • At each step, colour all hexagons adjacent to a coloured hexagon.
  • The total number of coloured hexagons at each step is the next hex number.
Animated visualisation Hexagonal grid with a single central hexagon having successive layers of hexagons added
  • The first hex number is 1.
  • This 1 is surrounded by 6 more to give 7.
  • These 7 are surrounded by 12 more to give 19.
  • These 19 are surrounded by 18 more to give 37.
  • These 37 are surrounded by 24 more to give 61.

Input

  • An integer from 1 to 1000, both inclusive.
  • You do not need to accept integers greater than 1000, so there is no requirement for your code to be correct for larger inputs.

Output

  • One of 2 distinct values, indicating whether the input is a hex number.
  • Provided all test cases pass, there is no requirement to use any particular approach. You may use a closed form expression, or an iterative or recursive approach, or hardcoding, whichever works best for you.

Exhaustive list

The list of all hex numbers less than or equal to 1000 is:

1
7
19
37
61
91
127
169
217
271
331
397
469
547
631
721
817
919

Test cases

  • Test cases are in the format Input : Output.
  • Note that you may choose any 2 distinct values in place of TRUE and FALSE.
  • All valid inputs are included in the test cases. If all the test cases pass, your code is correct.
1 : TRUE
2 : FALSE
3 : FALSE
4 : FALSE
5 : FALSE
6 : FALSE
7 : TRUE
8 : FALSE
9 : FALSE
10 : FALSE
11 : FALSE
12 : FALSE
13 : FALSE
14 : FALSE
15 : FALSE
16 : FALSE
17 : FALSE
18 : FALSE
19 : TRUE
20 : FALSE
21 : FALSE
22 : FALSE
23 : FALSE
24 : FALSE
25 : FALSE
26 : FALSE
27 : FALSE
28 : FALSE
29 : FALSE
30 : FALSE
31 : FALSE
32 : FALSE
33 : FALSE
34 : FALSE
35 : FALSE
36 : FALSE
37 : TRUE
38 : FALSE
39 : FALSE
40 : FALSE
41 : FALSE
42 : FALSE
43 : FALSE
44 : FALSE
45 : FALSE
46 : FALSE
47 : FALSE
48 : FALSE
49 : FALSE
50 : FALSE
51 : FALSE
52 : FALSE
53 : FALSE
54 : FALSE
55 : FALSE
56 : FALSE
57 : FALSE
58 : FALSE
59 : FALSE
60 : FALSE
61 : TRUE
62 : FALSE
63 : FALSE
64 : FALSE
65 : FALSE
66 : FALSE
67 : FALSE
68 : FALSE
69 : FALSE
70 : FALSE
71 : FALSE
72 : FALSE
73 : FALSE
74 : FALSE
75 : FALSE
76 : FALSE
77 : FALSE
78 : FALSE
79 : FALSE
80 : FALSE
81 : FALSE
82 : FALSE
83 : FALSE
84 : FALSE
85 : FALSE
86 : FALSE
87 : FALSE
88 : FALSE
89 : FALSE
90 : FALSE
91 : TRUE
92 : FALSE
93 : FALSE
94 : FALSE
95 : FALSE
96 : FALSE
97 : FALSE
98 : FALSE
99 : FALSE
100 : FALSE
101 : FALSE
102 : FALSE
103 : FALSE
104 : FALSE
105 : FALSE
106 : FALSE
107 : FALSE
108 : FALSE
109 : FALSE
110 : FALSE
111 : FALSE
112 : FALSE
113 : FALSE
114 : FALSE
115 : FALSE
116 : FALSE
117 : FALSE
118 : FALSE
119 : FALSE
120 : FALSE
121 : FALSE
122 : FALSE
123 : FALSE
124 : FALSE
125 : FALSE
126 : FALSE
127 : TRUE
128 : FALSE
129 : FALSE
130 : FALSE
131 : FALSE
132 : FALSE
133 : FALSE
134 : FALSE
135 : FALSE
136 : FALSE
137 : FALSE
138 : FALSE
139 : FALSE
140 : FALSE
141 : FALSE
142 : FALSE
143 : FALSE
144 : FALSE
145 : FALSE
146 : FALSE
147 : FALSE
148 : FALSE
149 : FALSE
150 : FALSE
151 : FALSE
152 : FALSE
153 : FALSE
154 : FALSE
155 : FALSE
156 : FALSE
157 : FALSE
158 : FALSE
159 : FALSE
160 : FALSE
161 : FALSE
162 : FALSE
163 : FALSE
164 : FALSE
165 : FALSE
166 : FALSE
167 : FALSE
168 : FALSE
169 : TRUE
170 : FALSE
171 : FALSE
172 : FALSE
173 : FALSE
174 : FALSE
175 : FALSE
176 : FALSE
177 : FALSE
178 : FALSE
179 : FALSE
180 : FALSE
181 : FALSE
182 : FALSE
183 : FALSE
184 : FALSE
185 : FALSE
186 : FALSE
187 : FALSE
188 : FALSE
189 : FALSE
190 : FALSE
191 : FALSE
192 : FALSE
193 : FALSE
194 : FALSE
195 : FALSE
196 : FALSE
197 : FALSE
198 : FALSE
199 : FALSE
200 : FALSE
201 : FALSE
202 : FALSE
203 : FALSE
204 : FALSE
205 : FALSE
206 : FALSE
207 : FALSE
208 : FALSE
209 : FALSE
210 : FALSE
211 : FALSE
212 : FALSE
213 : FALSE
214 : FALSE
215 : FALSE
216 : FALSE
217 : TRUE
218 : FALSE
219 : FALSE
220 : FALSE
221 : FALSE
222 : FALSE
223 : FALSE
224 : FALSE
225 : FALSE
226 : FALSE
227 : FALSE
228 : FALSE
229 : FALSE
230 : FALSE
231 : FALSE
232 : FALSE
233 : FALSE
234 : FALSE
235 : FALSE
236 : FALSE
237 : FALSE
238 : FALSE
239 : FALSE
240 : FALSE
241 : FALSE
242 : FALSE
243 : FALSE
244 : FALSE
245 : FALSE
246 : FALSE
247 : FALSE
248 : FALSE
249 : FALSE
250 : FALSE
251 : FALSE
252 : FALSE
253 : FALSE
254 : FALSE
255 : FALSE
256 : FALSE
257 : FALSE
258 : FALSE
259 : FALSE
260 : FALSE
261 : FALSE
262 : FALSE
263 : FALSE
264 : FALSE
265 : FALSE
266 : FALSE
267 : FALSE
268 : FALSE
269 : FALSE
270 : FALSE
271 : TRUE
272 : FALSE
273 : FALSE
274 : FALSE
275 : FALSE
276 : FALSE
277 : FALSE
278 : FALSE
279 : FALSE
280 : FALSE
281 : FALSE
282 : FALSE
283 : FALSE
284 : FALSE
285 : FALSE
286 : FALSE
287 : FALSE
288 : FALSE
289 : FALSE
290 : FALSE
291 : FALSE
292 : FALSE
293 : FALSE
294 : FALSE
295 : FALSE
296 : FALSE
297 : FALSE
298 : FALSE
299 : FALSE
300 : FALSE
301 : FALSE
302 : FALSE
303 : FALSE
304 : FALSE
305 : FALSE
306 : FALSE
307 : FALSE
308 : FALSE
309 : FALSE
310 : FALSE
311 : FALSE
312 : FALSE
313 : FALSE
314 : FALSE
315 : FALSE
316 : FALSE
317 : FALSE
318 : FALSE
319 : FALSE
320 : FALSE
321 : FALSE
322 : FALSE
323 : FALSE
324 : FALSE
325 : FALSE
326 : FALSE
327 : FALSE
328 : FALSE
329 : FALSE
330 : FALSE
331 : TRUE
332 : FALSE
333 : FALSE
334 : FALSE
335 : FALSE
336 : FALSE
337 : FALSE
338 : FALSE
339 : FALSE
340 : FALSE
341 : FALSE
342 : FALSE
343 : FALSE
344 : FALSE
345 : FALSE
346 : FALSE
347 : FALSE
348 : FALSE
349 : FALSE
350 : FALSE
351 : FALSE
352 : FALSE
353 : FALSE
354 : FALSE
355 : FALSE
356 : FALSE
357 : FALSE
358 : FALSE
359 : FALSE
360 : FALSE
361 : FALSE
362 : FALSE
363 : FALSE
364 : FALSE
365 : FALSE
366 : FALSE
367 : FALSE
368 : FALSE
369 : FALSE
370 : FALSE
371 : FALSE
372 : FALSE
373 : FALSE
374 : FALSE
375 : FALSE
376 : FALSE
377 : FALSE
378 : FALSE
379 : FALSE
380 : FALSE
381 : FALSE
382 : FALSE
383 : FALSE
384 : FALSE
385 : FALSE
386 : FALSE
387 : FALSE
388 : FALSE
389 : FALSE
390 : FALSE
391 : FALSE
392 : FALSE
393 : FALSE
394 : FALSE
395 : FALSE
396 : FALSE
397 : TRUE
398 : FALSE
399 : FALSE
400 : FALSE
401 : FALSE
402 : FALSE
403 : FALSE
404 : FALSE
405 : FALSE
406 : FALSE
407 : FALSE
408 : FALSE
409 : FALSE
410 : FALSE
411 : FALSE
412 : FALSE
413 : FALSE
414 : FALSE
415 : FALSE
416 : FALSE
417 : FALSE
418 : FALSE
419 : FALSE
420 : FALSE
421 : FALSE
422 : FALSE
423 : FALSE
424 : FALSE
425 : FALSE
426 : FALSE
427 : FALSE
428 : FALSE
429 : FALSE
430 : FALSE
431 : FALSE
432 : FALSE
433 : FALSE
434 : FALSE
435 : FALSE
436 : FALSE
437 : FALSE
438 : FALSE
439 : FALSE
440 : FALSE
441 : FALSE
442 : FALSE
443 : FALSE
444 : FALSE
445 : FALSE
446 : FALSE
447 : FALSE
448 : FALSE
449 : FALSE
450 : FALSE
451 : FALSE
452 : FALSE
453 : FALSE
454 : FALSE
455 : FALSE
456 : FALSE
457 : FALSE
458 : FALSE
459 : FALSE
460 : FALSE
461 : FALSE
462 : FALSE
463 : FALSE
464 : FALSE
465 : FALSE
466 : FALSE
467 : FALSE
468 : FALSE
469 : TRUE
470 : FALSE
471 : FALSE
472 : FALSE
473 : FALSE
474 : FALSE
475 : FALSE
476 : FALSE
477 : FALSE
478 : FALSE
479 : FALSE
480 : FALSE
481 : FALSE
482 : FALSE
483 : FALSE
484 : FALSE
485 : FALSE
486 : FALSE
487 : FALSE
488 : FALSE
489 : FALSE
490 : FALSE
491 : FALSE
492 : FALSE
493 : FALSE
494 : FALSE
495 : FALSE
496 : FALSE
497 : FALSE
498 : FALSE
499 : FALSE
500 : FALSE
501 : FALSE
502 : FALSE
503 : FALSE
504 : FALSE
505 : FALSE
506 : FALSE
507 : FALSE
508 : FALSE
509 : FALSE
510 : FALSE
511 : FALSE
512 : FALSE
513 : FALSE
514 : FALSE
515 : FALSE
516 : FALSE
517 : FALSE
518 : FALSE
519 : FALSE
520 : FALSE
521 : FALSE
522 : FALSE
523 : FALSE
524 : FALSE
525 : FALSE
526 : FALSE
527 : FALSE
528 : FALSE
529 : FALSE
530 : FALSE
531 : FALSE
532 : FALSE
533 : FALSE
534 : FALSE
535 : FALSE
536 : FALSE
537 : FALSE
538 : FALSE
539 : FALSE
540 : FALSE
541 : FALSE
542 : FALSE
543 : FALSE
544 : FALSE
545 : FALSE
546 : FALSE
547 : TRUE
548 : FALSE
549 : FALSE
550 : FALSE
551 : FALSE
552 : FALSE
553 : FALSE
554 : FALSE
555 : FALSE
556 : FALSE
557 : FALSE
558 : FALSE
559 : FALSE
560 : FALSE
561 : FALSE
562 : FALSE
563 : FALSE
564 : FALSE
565 : FALSE
566 : FALSE
567 : FALSE
568 : FALSE
569 : FALSE
570 : FALSE
571 : FALSE
572 : FALSE
573 : FALSE
574 : FALSE
575 : FALSE
576 : FALSE
577 : FALSE
578 : FALSE
579 : FALSE
580 : FALSE
581 : FALSE
582 : FALSE
583 : FALSE
584 : FALSE
585 : FALSE
586 : FALSE
587 : FALSE
588 : FALSE
589 : FALSE
590 : FALSE
591 : FALSE
592 : FALSE
593 : FALSE
594 : FALSE
595 : FALSE
596 : FALSE
597 : FALSE
598 : FALSE
599 : FALSE
600 : FALSE
601 : FALSE
602 : FALSE
603 : FALSE
604 : FALSE
605 : FALSE
606 : FALSE
607 : FALSE
608 : FALSE
609 : FALSE
610 : FALSE
611 : FALSE
612 : FALSE
613 : FALSE
614 : FALSE
615 : FALSE
616 : FALSE
617 : FALSE
618 : FALSE
619 : FALSE
620 : FALSE
621 : FALSE
622 : FALSE
623 : FALSE
624 : FALSE
625 : FALSE
626 : FALSE
627 : FALSE
628 : FALSE
629 : FALSE
630 : FALSE
631 : TRUE
632 : FALSE
633 : FALSE
634 : FALSE
635 : FALSE
636 : FALSE
637 : FALSE
638 : FALSE
639 : FALSE
640 : FALSE
641 : FALSE
642 : FALSE
643 : FALSE
644 : FALSE
645 : FALSE
646 : FALSE
647 : FALSE
648 : FALSE
649 : FALSE
650 : FALSE
651 : FALSE
652 : FALSE
653 : FALSE
654 : FALSE
655 : FALSE
656 : FALSE
657 : FALSE
658 : FALSE
659 : FALSE
660 : FALSE
661 : FALSE
662 : FALSE
663 : FALSE
664 : FALSE
665 : FALSE
666 : FALSE
667 : FALSE
668 : FALSE
669 : FALSE
670 : FALSE
671 : FALSE
672 : FALSE
673 : FALSE
674 : FALSE
675 : FALSE
676 : FALSE
677 : FALSE
678 : FALSE
679 : FALSE
680 : FALSE
681 : FALSE
682 : FALSE
683 : FALSE
684 : FALSE
685 : FALSE
686 : FALSE
687 : FALSE
688 : FALSE
689 : FALSE
690 : FALSE
691 : FALSE
692 : FALSE
693 : FALSE
694 : FALSE
695 : FALSE
696 : FALSE
697 : FALSE
698 : FALSE
699 : FALSE
700 : FALSE
701 : FALSE
702 : FALSE
703 : FALSE
704 : FALSE
705 : FALSE
706 : FALSE
707 : FALSE
708 : FALSE
709 : FALSE
710 : FALSE
711 : FALSE
712 : FALSE
713 : FALSE
714 : FALSE
715 : FALSE
716 : FALSE
717 : FALSE
718 : FALSE
719 : FALSE
720 : FALSE
721 : TRUE
722 : FALSE
723 : FALSE
724 : FALSE
725 : FALSE
726 : FALSE
727 : FALSE
728 : FALSE
729 : FALSE
730 : FALSE
731 : FALSE
732 : FALSE
733 : FALSE
734 : FALSE
735 : FALSE
736 : FALSE
737 : FALSE
738 : FALSE
739 : FALSE
740 : FALSE
741 : FALSE
742 : FALSE
743 : FALSE
744 : FALSE
745 : FALSE
746 : FALSE
747 : FALSE
748 : FALSE
749 : FALSE
750 : FALSE
751 : FALSE
752 : FALSE
753 : FALSE
754 : FALSE
755 : FALSE
756 : FALSE
757 : FALSE
758 : FALSE
759 : FALSE
760 : FALSE
761 : FALSE
762 : FALSE
763 : FALSE
764 : FALSE
765 : FALSE
766 : FALSE
767 : FALSE
768 : FALSE
769 : FALSE
770 : FALSE
771 : FALSE
772 : FALSE
773 : FALSE
774 : FALSE
775 : FALSE
776 : FALSE
777 : FALSE
778 : FALSE
779 : FALSE
780 : FALSE
781 : FALSE
782 : FALSE
783 : FALSE
784 : FALSE
785 : FALSE
786 : FALSE
787 : FALSE
788 : FALSE
789 : FALSE
790 : FALSE
791 : FALSE
792 : FALSE
793 : FALSE
794 : FALSE
795 : FALSE
796 : FALSE
797 : FALSE
798 : FALSE
799 : FALSE
800 : FALSE
801 : FALSE
802 : FALSE
803 : FALSE
804 : FALSE
805 : FALSE
806 : FALSE
807 : FALSE
808 : FALSE
809 : FALSE
810 : FALSE
811 : FALSE
812 : FALSE
813 : FALSE
814 : FALSE
815 : FALSE
816 : FALSE
817 : TRUE
818 : FALSE
819 : FALSE
820 : FALSE
821 : FALSE
822 : FALSE
823 : FALSE
824 : FALSE
825 : FALSE
826 : FALSE
827 : FALSE
828 : FALSE
829 : FALSE
830 : FALSE
831 : FALSE
832 : FALSE
833 : FALSE
834 : FALSE
835 : FALSE
836 : FALSE
837 : FALSE
838 : FALSE
839 : FALSE
840 : FALSE
841 : FALSE
842 : FALSE
843 : FALSE
844 : FALSE
845 : FALSE
846 : FALSE
847 : FALSE
848 : FALSE
849 : FALSE
850 : FALSE
851 : FALSE
852 : FALSE
853 : FALSE
854 : FALSE
855 : FALSE
856 : FALSE
857 : FALSE
858 : FALSE
859 : FALSE
860 : FALSE
861 : FALSE
862 : FALSE
863 : FALSE
864 : FALSE
865 : FALSE
866 : FALSE
867 : FALSE
868 : FALSE
869 : FALSE
870 : FALSE
871 : FALSE
872 : FALSE
873 : FALSE
874 : FALSE
875 : FALSE
876 : FALSE
877 : FALSE
878 : FALSE
879 : FALSE
880 : FALSE
881 : FALSE
882 : FALSE
883 : FALSE
884 : FALSE
885 : FALSE
886 : FALSE
887 : FALSE
888 : FALSE
889 : FALSE
890 : FALSE
891 : FALSE
892 : FALSE
893 : FALSE
894 : FALSE
895 : FALSE
896 : FALSE
897 : FALSE
898 : FALSE
899 : FALSE
900 : FALSE
901 : FALSE
902 : FALSE
903 : FALSE
904 : FALSE
905 : FALSE
906 : FALSE
907 : FALSE
908 : FALSE
909 : FALSE
910 : FALSE
911 : FALSE
912 : FALSE
913 : FALSE
914 : FALSE
915 : FALSE
916 : FALSE
917 : FALSE
918 : FALSE
919 : TRUE
920 : FALSE
921 : FALSE
922 : FALSE
923 : FALSE
924 : FALSE
925 : FALSE
926 : FALSE
927 : FALSE
928 : FALSE
929 : FALSE
930 : FALSE
931 : FALSE
932 : FALSE
933 : FALSE
934 : FALSE
935 : FALSE
936 : FALSE
937 : FALSE
938 : FALSE
939 : FALSE
940 : FALSE
941 : FALSE
942 : FALSE
943 : FALSE
944 : FALSE
945 : FALSE
946 : FALSE
947 : FALSE
948 : FALSE
949 : FALSE
950 : FALSE
951 : FALSE
952 : FALSE
953 : FALSE
954 : FALSE
955 : FALSE
956 : FALSE
957 : FALSE
958 : FALSE
959 : FALSE
960 : FALSE
961 : FALSE
962 : FALSE
963 : FALSE
964 : FALSE
965 : FALSE
966 : FALSE
967 : FALSE
968 : FALSE
969 : FALSE
970 : FALSE
971 : FALSE
972 : FALSE
973 : FALSE
974 : FALSE
975 : FALSE
976 : FALSE
977 : FALSE
978 : FALSE
979 : FALSE
980 : FALSE
981 : FALSE
982 : FALSE
983 : FALSE
984 : FALSE
985 : FALSE
986 : FALSE
987 : FALSE
988 : FALSE
989 : FALSE
990 : FALSE
991 : FALSE
992 : FALSE
993 : FALSE
994 : FALSE
995 : FALSE
996 : FALSE
997 : FALSE
998 : FALSE
999 : FALSE
1000 : FALSE

Scoring

This is a code golf challenge. Your score is the number of bytes in your code. Lowest score for each language wins.

Explanations are optional, but I'm more likely to upvote answers that have one.


  1. More detail on hex numbers can be found on

    ↩︎

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.
Why should this post be closed?

1 comment thread

OEIS Sequence (2 comments)

4 answers

+2
−0

Vyxal, 46 bitsv2, 5.75 (6) bytes

ɾ6*1p¦c

Try it Online!

Bitstring:

0010000001011001000111011010010100001111001000

Link is to test suite. Should execute up to 870 or so. Try it without the test suite!

Explained

ɾ6*1p¦c­⁡​‎‎⁡⁠⁡‏⁠‎⁡⁠⁢‏⁠‎⁡⁠⁣‏‏​⁡⁠⁡‌⁢​‎‎⁡⁠⁤‏⁠‎⁡⁠⁢⁡‏‏​⁡⁠⁡‌⁣​‎‎⁡⁠⁢⁢‏‏​⁡⁠⁡‌⁤​‎‎⁡⁠⁢⁣‏‏​⁡⁠⁡‌­
ɾ6*      # ‎⁡range [1, input] and multiply each by 6
   1p    # ‎⁢prepend 1
     ¦   # ‎⁣Take cumulative sums
      c  # ‎⁤And check whether the input is in that list
💎

Created with the help of Luminespire.

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

2 comment threads

Do we have consensus here as to whether solitions can be scored in bits? (2 comments)
Works up to 1000 as required (1 comment)
+1
−0

Japt -d, 8 bytes

°*U*3¥NÉ

Try it

9 bytes

NøT±1wU*6

Try it

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

0 comment threads

+1
−0

Dyalog APL, 10 bytes

⊢∊1+\⍤,6×⍳

Port of lyxal's Vyxal answer.

Explanation

⊢∊1+\⍤,6×⍳­⁡​‎‎⁡⁠⁡‏⁠‎⁡⁠⁢‏‏​⁡⁠⁡‌⁢​‎⁠⁠‎⁡⁠⁤‏⁠‎⁡⁠⁢⁡‏⁠‎⁡⁠⁢⁢‏⁠‏​⁡⁠⁡‌⁣​‎‎⁡⁠⁣‏⁠‎⁡⁠⁢⁣‏‏​⁡⁠⁡‌⁤​‎‎⁡⁠⁢⁤‏⁠‎⁡⁠⁣⁡‏‏​⁡⁠⁡‌⁢⁡​‎‎⁡⁠⁣⁢‏‏​⁡⁠⁡‌­
⊢∊          ⍝ ‎⁡is the input a member of
   +\⍤      ⍝ ‎⁢the sum scan of
  1   ,     ⍝ ‎⁣the concatenation of 1 and
       6×   ⍝ ‎⁤six times
         ⍳  ⍝ ‎⁢⁡the range from 1 to the input
💎

Created with the help of Luminespire.

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

0 comment threads

+0
−0

Rust, 35 bytes

|n:f64|(12.*n-3.).sqrt().fract()>0.

Counterintuitively, this outputs false for a hex number, and true otherwise, but this is consistent with the output requirement:

  • One of 2 distinct values, indicating whether the input is a hex number.

This allows using >0 rather than ==0 to save 1 byte.

All test cases on Rust Playground

Breakdown of the code

|n:f64|(12.*n-3.).sqrt().fract()>0.
|n    |                             // Anonymous function with input n
  :f64                              // Input is 64 bit floating point
       (12.*n                       // Multiply input by 12
             -3.)                   // Subtract 3 ("." denotes float)
                 .sqrt()            // Calculate square root
                        .fract()>0. // Is fractional part non-zero?
                                    // Implicitly return true or false

Explanation

From Wikipedia, the following formula gives the index $n$ of a hex number $H$ (it gives $1$ for the first hex number, $2$ for the second, and so on):

$$n=\frac{3+\sqrt{12H-3}}{6}$$

This $n$ is an integer if and only if $H$ is a hex number. Rather than calculate the whole formula, the code only calculates the square root:

$$R=\sqrt{12H-3}$$

because $n$ is an integer if and only if $R$ is an integer.

Reasoning

Reasons for asserting that $n$ is an integer if and only if $R$ is an integer. Since all the test cases pass, this section is just out of interest, to show that this also holds outside the test cases.

When $R$ is not an integer, $n$ is not an integer

If the square root $R$ is not an integer, then $n=\frac{3+R}{6}$ cannot be an integer.

When $R$ is an integer, $n$ is an integer

$n=\frac{3+R}{6}$ is an integer if and only if $R$ is an odd multiple of $3$.

Need to show that $R\in \Bbb Z\implies R\equiv 3\pmod 6$ (that is, whenever $R$ is an integer, it is also an odd multiple of $3$).

$$R\in\Bbb Z\implies R=6x+c, x\in\Bbb Z,c\in\{0,1,2,3,4,5\}\tag{1}$$

Need to show that $R\in\Bbb Z\implies c=3$

$$\begin{align}R&=\sqrt{12H-3}, H\in\Bbb Z\\ R^2&=12H-3\\ H&=\frac{R^2+3}{12}\\ H&\stackrel{(1)}=\frac{(6x+c)^2+3}{12}\\ H&=\frac{36x^2+12xc+c^2+3}{12}\\ H&=3x^2+xc+\frac{c^2+3}{12}\\ H-3x^2-xc&=\frac{c^2+3}{12}\\ \end{align}$$$$H-3x^2-xc\in\Bbb Z\therefore \frac{c^2+3}{12}\in\Bbb Z$$$$c\in\{0,1,2,3,4,5\}, \frac{c^2+3}{12}\in\Bbb Z\therefore c=3$$$$\therefore R\in\Bbb Z\implies R\equiv 3\pmod 6\implies n\in\Bbb Z$$
History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

0 comment threads

Sign up to answer this question »