Answers:
“×Ɗ¡‘ŒP»Ṫ¦209ṗ€3Fd⁴ịØHs3ṢQY
“×Ɗ¡‘
在Jelly的SBCS中的引号之间产生字符的代码点,即0x11 = 17, 0x91 = 145,和0×00 = 0。
ŒP
构造代码点阵列的幂集,得出
[[], [17], [145], [0], [17, 145], [17, 0], [145, 0], [17, 145, 0]]
最后两个条目对应于包含80个组合的组合和FF的,因此我们必须丢弃它们。
»Ṫ¦209
包括三个部分:
Ṫ
(tail)删除代码点的最后一个数组,即[17,145,0]。
»209
取幂集其余部分中每个整数的最大值,0xD1 = 209,将它们全部替换为209。
¦
(稀疏)遍历powerset其余部分的元素。如果在[17,145,0]中找到了相应的索引,则元素将全部替换为209。如果没有,则保持不变。
¦
不是模块化的,因此仅修改了Powerset其余部分中的最后一个数组(索引0)。指数17和145太大,没有作用。
结果如下。
[[], [17], [145], [0], [17, 145], [17, 0], [209, 209]]
ṗ€3
计算每个数组(即每个数组的所有三元组元素的数组)的三次笛卡尔乘方。
Fd⁴
展平结果并计算每个整数的商和余数除以16。
ịØH
索引(从1开始)到“0123456789ABCDEF,所以为0x11,0x91,0×00,并0xD1被映射到“00” ,“80” ,“FF”和“C0” (相应的)。
s3ṢQ
将字符对拆分为3个元组,对元组进行排序,然后进行重复数据删除。
最后,Y
加入唯一的元组,并以换行分隔。
我认为这里还有很多高尔夫活动。欢迎打高尔夫球!
编辑: -9个字节,非常感谢Mego提供的字符串格式化帮助。首先从-17个字节中找出了一种更好的方式来打印字符串。首先找出一个更好的方法来编写for循环的-17个字节。-1字节感谢xnor的技巧i%3//2*"\n"
而不是使用"\n"*(i%3<2)
。
for i in range(48):print(end="F0C8F000"[0x10114abf7f75c147d745d55//4**i%4::4]+i%3//2*"\n")
开球
z = 0
a = [0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 2, 2, 2, 3, 3, 3, 1, 3, 3, 3, 1, 3, 1, 1, 3, 0, 0, 1, 1, 0, 1, 3, 3, 1, 1, 3, 1, 0, 1, 1, 3, 1, 1, 1, 1, 1]
for i in range(len(a)):
z = (z + a[i]) * 4
z //= 4 # we multiplied by 4 one too many times
for i in range(48):
m = z // 4**j % 4
s = "F0C8F000"[c::4]
if i % 3 == 2:
s += "\n"
print(s, end="")
i%3//2*"\n"
保存一个字节。
'777
7780
77FF
7807
78080
7FF7
7FFFF
8077
80780
80807
808080
C0C0C0
FF77
FF7FF
FFFF7
FFFFFF'-replace7,'00'
是的,除了打印文字字符串外,我没有发现任何其他东西...感谢@ Martin Smith使用简单的替换操作将7个字节缩减(我完全忽略了)。因此,与简单地对其进行硬编码相比,我们至少短了7个字节。好极了!
但这很无聊!
所以与其 ...
[consolecolor[]](0,7+9..15)+-split'Lime Maroon Navy Olive Purple Silver Teal'|%{-join"$([windows.media.colors]::$_)"[3..8]}|sort
该[system.consolecolor]
命名空间定义控制台的颜色(原生)提供的PowerShell控制台。如果我们通过这样的整数数组引用它们,则默认值为名称(例如,Black
或White
或类似物)。我们将其与已经-split
空格,因此现在我们有了颜色名称的字符串数组。
我们遍历这些值|%{...}
,每次迭代都提取相应的[system.windows.media.colors]
值。这些对象的默认字符串化是#AARRGGBB
格式为十六进制值的颜色,因此我们通过使用脚本块将调用封装在字符串中来利用它"$(...)"
。但是,由于我们不希望使用alpha值或哈希值,因此我们使用[3..8]
了字符串的后端,并且需要将-join
生成的char
-array返回字符串。然后,简单Sort-Object
地将它们以正确的顺序放置。
00
且.Replace(7,'00')
<21个字符。
-replace
for 8
和80
是相同的字节数(保存12个零,即-replace8,80
长度)。这样做是为了FF
是因为周围的需要引号的两个字节长"FF"
的-replace2,"FF"
声明。
'80FFC000'2e'3na:1Fswv1=`uIn'F4:ZaZ)6e!
'80FFC000' % Push this string
2e % Reshape with 2 rows. So 1st column contains '80', 2nd 'FF' etc
'3na:1Fswv1=`uIn' % Push this string
F4:Za % Convert from base 95 to alphabet [1 2 3 4]
Z) % Use as column indices into the first string
6e! % Reshape with 6 rows and transpose.
% Implicitly display
•P{Ætg7«r¨ëÅ,…}ù¢Ý%Vt®£8ãøÚ$0óDÛY²Zþ…ð7ê‘Ó{òìàYëØU¥•hR6ô»
我们需要输出的基本上是(反转和拆分):
FFFFFF00FFFFFF00FF0000FF0C0C0C080808000808080008000008FFFF0000FF00080800000800FF0000080000000000
其中,十进制为:
39402003857025890357721060524755992261661062099432941475272448103296644696683709026793043150430945208910007869898752
在Base-214中是:
P{Ætg7«r¨ëÅ,…}ù¢Ý%Vt®£8ãøÚ$0óDÛY²Zþ…ð7ê‘Ó{òìàYëØU¥
这是我能想到的最简单的解决方案,因为我无法击败丹尼斯。花了一个小时的尝试,没有什么比他的想法更好。
@for %%c in (000000 000080 0000FF 008000 008080 00FF00 00FFFF 800000 800080 808000 808080 C0C0C0 FF0000 FF00FF FFFF00 FFFFFF)do @echo %%c
是的,那很无聊。先前的148字节尝试:
@if "%2"=="" (call %0 000000 80&call %0 C0C0C0 FF)|sort&exit/b
@echo %1
@for %%c in (0000%2 00%200 00%2%2 %20000 %200%2 %2%200 %2%2%2)do @echo %%c
不幸的是,您无法通过管道传输a for
或call:
命令的输出,因此我必须递归调用自己。
<v"UVTYZQPefij?EDA@"
v>>9\:4/:\4/>4%:3g,0`
<^_@#:,+55$_^#!-9:,g3
F08C
颜色编码在您在第一行中看到的字符串中,每个颜色分量两位,并设置了一个附加的高位,以强制每个值进入ASCII范围(63除外,否则将超出127的范围) )。
然后按以下方式处理堆栈上的颜色列表:
9\ 9 is pushed behind the current colour to serve as a marker.
:4/:\4/ The colour is repeatedly divided by 4, splitting it into 3 component parts.
> The inner loop deals with each of the 3 components.
4% Modulo 4 masks out the 2 bits of the colour component that we care about.
:3g, That is used as an index into the table on line 4 to get the character to output.
0`3g, For component values greater than 0 the second char is a '0', otherwise an 'F'.
:9-! Check if the next component is our end marker.
^ If not, repeat the inner loop.
55+, Output a newline.
:_ Repeat the outer loop until there are no more colours on the stack.
void n(){string a="000000\r\n000080\r\n0000FF\r\n008000\r\n008080\r\m00FF00\r\n00FFFF\r\n800000\r\n800080\r\n808000\r\n808080\r\nC0C0C0\r\nFF0000\r\nFF00FF\r\nFFFF00\r\nFFFFFF";Console.Write(a);}
令人遗憾的是,尽管有了令人难以置信的令人费解的缠结(我编写它时获得了无穷的乐趣),C#却远远超过了更有趣的部分,C#,270字节
void n(){string a,b,c,d;a="00";b="80";c="C0";d="FF";for(int i=0;i<16;i++){Console.WriteLine((i<7?a:i<11?b:i>11?d:c)+(i<3?a:i<5?b:i<7?d:i<9?a:i<11?b:i==11?c:i<14?a:d)+(i==0||i==3||i==5|i==7||i==9||i==12||i==14?a:i==1||i==4||i==8||i==10?b:i==2||i==6||i==13||i==15?d:c));}}
()=>@"string_here"
这强制转换为Action<string>
)。我还建议使用逐字字符串(@
),这样您就可以将新行直接放在字符串中,而不必对其进行转义。
f(i){for(i=48;i--;)printf("%.2s%s","FFC08000"+("#&/28MNQRSV]^_ab"[i/3]-35>>i%3*2&3)*2,"\n\0"+i%3);}
尝试创建一个数字列表并在排序时输出它们之后,我将其与朴素的解决方案进行了比较:
f(){puts("000000\n000080\n0000FF\n008000\n008080\n00FF00\n00FFFF\n800000\n800080\n808000\n808080\nC0C0C0\nFF0000\nFF00FF\nFFFF00\nFFFFFF");}
与我尝试200并进行更改相比,它的时钟为140字节。
解决方案是将其视为与其他任何文本一样的文本,尽管使用小字母。每种颜色都可以看作是字母{0xff,0xc0,0x80,00}中2位索引的三元组。颜色->三元组->数字->字符(偏移量为+35,使它们全部可打印并避免任何转义)的过程可以说明如下:
000000 333 63 b
000080 332 62 a
0000FF 330 60 _
008000 323 59 ^
008080 322 58 ]
00FF00 303 51 V
00FFFF 300 48 S
800000 233 47 R
800080 232 46 Q
808000 223 43 N
808080 222 42 M
C0C0C0 111 21 8
FF0000 033 15 2
FF00FF 030 12 /
FFFF00 003 3 &
FFFFFF 000 0 #
然后,只需遍历结果字符串并切出字母字符串的相应部分即可。
“0FC8”
,因为我们有00
,FF
,C0
,和80
。