步行者加入!-艾伦·沃克(Alan Walker)的徽标


13

您可能会从艾伦·沃克(Alan Walker)曾经流行的歌曲《衰落》(Faded)中了解到。现在,他的“追随者”被称为沃克,并且有一个徽标,这是简化版本:

\\
 \\              //\\  
  \\            //  \\            //
   \\          //    \\          //
    \\        //      \\        //
     \\      //        \\      //
      \\    //          \\    //
       \\  //    //\\    \\  //
        \\//    //  \\    \\//
         //    //    \\    \\
        //\\  //      \\  //\\
           \\//        \\//  \\
                              \\

这项挑战的目标是印刷该徽标。

规则:

  1. 如果您按照元标准从函数返回字符串列表,请提供一个页脚,将其打印到屏幕上。
  2. 以上徽标的所有字符都必须存在。没有捷径!
  3. 最短的字节数获胜!

每行的末尾是否可以有多余的空格(因为它们不会改变输出的外观)?可以有前导/追加换行符吗?
dzaima

@dzaima,是的,可以。
Dat

+1艾伦·沃克!
放射性

Answers:


14

木炭31 30 29 27字节

F²«Jι⁰↙χ↖↖⁵↙↙⁵↖↖²P↖χ↙↗χ↘↘¹²

在线尝试!链接是详细版本的代码。可悲的是Copy,在这种情况下,我没有做我想要的事情,所以我不得不循环。说明:

F²«Jι⁰

绘制两次所有内容,但是光标第二次从一个字符开始向右移动。

   ↙χ↖↖⁵↙↙⁵↖↖²P↖χ

从右到左绘制主W,但将光标放在倒V的附近。

   ↙↗χ↘↘¹²

画出倒置的V。


您“仅”以20个字节击败了朴素的解决方案:P
斯蒂芬

1
@StepHen考虑到首先设置循环的开销,节省46%并不坏...
Neil

为此,镜像不是更短吗?
斯蒂芬,

5
@StepHen解决不对称问题的成本过高。我能做的最好是35个字节:F²«Jι⁰↘χ↗↗⁵M⁵↑←↙χ»‖M↥\\¶ \\F²«Jι⁰↖³
尼尔

13

的JavaScript(ES6),172个 139字节

let f =

_=>`1
3s1
5o5o
7k9k
9gdg
bchc
d8l8
f48194
h08590
i899
g14d41
n0h05
1p`.replace(/.p?/g,n=>' '.repeat((n=parseInt(n,36))/2)+(c='/\\'[n&1])+c)

O.innerText = f()
<pre id=O>

怎么样?

徽标基本上由空格组成,后跟//or或\\换行符。

空格和结束模式使用以36为底的值进行编码:

  • 最低有效位给出结束模式:0for //1for \\
  • 所有其他位给出结束模式之前的空格数。

除了最后一行由30个空格组成,最后一行由\\,导致1p在base-36中的30 * 2 + 1 = 61 = 之外,所有内容都可以用一个基数为36的数字进行编码。这p应该被解释为12位之后\\,但这种模式并没有出现在任何地方。因此,我们可以在正则表达式中简单地以2个额外字节的代价处理这种特殊情况/.p?/


第一版,186字节

注意:这是在徽标更新之前提交的。


打得很好。在检查答案之前,我自己对此采取了行动。最终得到的东西类似于您的172字节版本。
毛茸茸的

7

疯子,579字节

+++++++++[>+>+++++>+++>++++++++++<<<<-]>+>++>+++++>++..<<<.>>.>..<..............<..>>..<..<<.>>..>..<............<..>..>..<............<..<.>>...>..<..........<..>....>..<..........<..<.>>....>..<........<..>......>..<........<..<.>>.....>..<......<..>........>..<......<..<.>>......>..<....<..>..........>..<....<..<.>>.......>..<..<..>....<..>>..<....>..<..<..<.>>........>..<<..>....<..>..>..<....>..<<..<.>>.........<..>....<..>....>..<....>..<<<.>>........<..>>..<..<..>......>..<..<..>>..<<<.>>...........>..<<..>........>..<<..>..>..<<<.>>..............................>..

在线尝试!

47 92 32 10在内存中生成常量,然后根据需要选择并输出它们。


确定这是可以解决的,尤其是最后一部分
Stan Strum,

@StanStrum随意尝试。我尝试过,但是找不到任何好的表达方式,尤其是考虑到BF在条件句中的冗长程度。
科纳·奥布莱恩


4

泡泡糖77 76字节

十六进制转储:

0000000: 75cf c109 8000 0c43 d17b a6c8 0659 28fb  u......C.{...Y(.
0000010: cf21 05cb a782 3de9 4b5a b495 5b9f 4946  .!....=.KZ..[.IF
0000020: 870f dac3 f8ea 5704 51b9 2284 c611 0114  ......W.Q.".....
0000030: 9029 f09e ec67 2362 21e1 075e 2136 29b9  .)...g#b!..^!6).
0000040: 08b9 bf97 8939 cf33 ebbf d33e            .....9.3...>

在线尝试!

泡泡糖阈值。:P


3

///,166字节

/-/!#//,/%"//'/%#//&/!!//%/  //#/\\\/\\\///"/\\\\\\\\//!/%%/"
 "&!'"%
,&-,&-
% "&'!"&'
!"&#!,&#
! "!'&"!'
!,-&,-
!% "'-"!"'
&"#-,!"#
& #-!"!"
&#"'!,'"
&% "#&"#,
&&&!,

在线尝试!


3

C(gcc),377字节

char*r="2\\01 2\\14 2/2\\02 2\\12 2/2 2\\12 2/03 2\\10 2/4 2\\10 2/04 2\\8 2/6 2\\8 2/05 2\\6 2/8 2\\6 2/06 2\\4 2/10 2\\4 2/07 2\\2 2/4 2/2\\4 2\\2 2/08 2\\2/4 2/2 2\\4 2\\2/09 2/4 2/4 2\\4 2\\08 2/2\\2 2/6 2\\2 2/2\\011 2\\2/8 2\\2/2 2\\030 2\\";char d[9];main(i){do{if(*r==48)puts(""),r++;for(i=0;isdigit(*r);d[i++]=*r++);for(d[i]=0,i=atoi(d);i--;putchar(*r));}while(*r++);}

在线尝试!



3

Python 2,197个字节

print''.join(i>'/'and(i<'2'and['/','\\'][int(i)]*2or' '*int(i))or i for i in"""1
 19501
2193021
319 0419 0
41806180
51608160
61409 140
71204014120
8104021410
90404141
8012061201
921081021
99931""")

在线尝试!

使用JS答案中的逻辑。



3

Haskell,161160字节

foldr(\a->(++(' '<$[1..fromEnum a-last(96:[64|a<'`'])])++last("\\\\":["//"|a<'`'])))""<$>words"` `Na LbLb JdJc HfHd FhFe DjDf Bd`DBg @dbD@h ddDI `BfB`H b@h@k ~"

在线尝试!

之前\\的空格编码为小写字母,之前的空格编码为//大写字母,其中空格数为ASCII值减96(或64)。零空格为`/ @。每行的空格以相反的顺序存储,因为它们被右折占用。


2

木炭,51字节

P↘¹²→↘¹²↑P↗⁵→↗⁵↓P↘⁵→↘⁵↑P↗χ→↗χM¹¹↓M⁵←P↖¹²←↖¹²↓P↙χ←↙χ

在线尝试!

木炭,50字节

P↘χ→↘χ↑P↗⁵→↗⁵M⁵↑←P↙χ←↙χMχ↗‖MM¹⁸←P↖²←↖²J²⁷¦⁹P↘²→↘²¦

在线尝试!


2

木炭50 31字节

F²«↘¹²↗↗⁵↘↘⁵↗↗⁹Mχ↓M⁴←↖¹²↙↙χJ¹¦⁰

在线尝试!链接是详细版本。

我试过了。(此外,我要指出的是,即使它看起来与另一个完全相似,我还是完全依靠我自己做的。


1

果冻,65字节

“<fṭY2Ẹ<ƭẹ£ʋ¥¹)Œ<Ẓ⁹ḣ⁶ıĠ\ṃṛ?04|ẏḌẉƙ+’b36⁶ẋ“ÇỴ$ñ⁵FḄ’Bị⁾\/¤ẋ€2¤żFs36

在线尝试!

返回字符列表。TIO链接的页脚可单独打印。


1

PHP,186字节:

这两个版本都需要PHP 5.5或更高版本。

运行-nr在线尝试


空间压缩是最短的选择:

(将双反斜杠映射到0,将双斜杠映射到,将f空格压缩为数字)

while(~$c="0
1077f0
2066f2066f
3055f4055f
408f608f
506f806f
604f5504f
702f4f0402f
80f4f2040f
9f4f4040
8f02f602f0
560f80f20
87870"[$i++])echo+$c?str_pad("",$c):strtr($c,["\\\\",f=>"//"]);

PHP 7.1产生警告;替换+$c$c>0要修复。


基本的64位编码位图(187个字节):

(将00空格映射为,将换行符映射为,将01双反斜杠映射为,将10双斜杠映射为11,然后将3个“像素”分别连接到一个字符,1然后将其从二进制转换为ASCII)

for(;$c=ord("d`@@@@yB@@@@p`@@@M@`@@C@H@@@t@`@@p@H@@M@B@@p@@`@M@@`C@@@H@t@@`pC`BCP@@l@p`Bt@@C@L@`BP@@xL@BCd@@@K@@Bpd@@@@@@@@@B"
[$i++]);)for($b=6;$b;)echo[" ","
","\\\\","//"][3&$c>>$b-=2];

(为了方便阅读,第一个换行符;另一个是必不可少的)


1

泡泡糖,74个字节

00000000: 758c 4b11 0400 0885 eea6 a081 85e8 9f63  u.K............c
00000010: 4fb2 7f4f 0e30 4f07 e5ed 7615 8613 e16f  O..O.0O...v....o
00000020: 321c ab89 d484 4a22 2591 8a48 45a0 2052  2.....J"%..HE. R
00000030: 809e dfd5 481e 3d0d 7a24 4d96 bc43 b2fd  ....H.=.z$M..C..
00000040: 96d3 cdbf fff9 7fa7 f300                 ..........

在线尝试!


1

PowerShell221220字节

$ofs=''
"b
 b$(' '*14)/b
$((2..6|%{' '*$_+"b$(($a=' '*(14-++$i*2)))/$(' '*$i*2)b$a/`n"}))   4b  /4/b4b  /
44b/4/  b4b/
44 /4/4b4b
44/b  /4  b  /b
44   b/44b/  b
$(' '*30)b"-replace4,'    '-replace'/','//'-replace'b','\\'

在线尝试!

天真的方法(比JS答案差50个字节,刺耳)。有人知道-replace在PowerShell中执行多个操作的方法吗?

-1字节感谢Veskah。



@Veskah简单的字节节省。谢谢!
AdmBorkBork

1

Python 2,180字节

print''.join(c<'3'and'\\/\n\\/'[int(c)::3]or' '*(int(c,36)-2)for c in'0230g104240e140e1250c160c1260a180a127081a08128061c0612904161060412a0161406012b16160602a1041804102d01a01402w0')

在线尝试!

编码为基数36:

0 => \\
1 => //
2 => \n

否则

n => (n-2) spaces

1

C#(Visual C#交互式编译器),122字节(121个字符)

_=>@"
A
9;13) +!(# 0$(	-) 
4	(	€".SelectMany(j=>(j%2>0?"//":@"\\").PadLeft(j/4)+(j%4>1?"\n":""))

在线尝试!

说明

徽标的每个部分只有0+个空格,结尾处带有a \\或a //,也许还有一个换行符。其中有52个。然后,我们将每个片段编码为一个字符:

  • 取每个段中的空格数,然后将该数字加2。

  • 将数字左移2次。

  • 如果段以结尾//,则按位或数字乘以1。

  • 如果段以换行符结尾,则按位或数字乘以2。

  • 取数字,并将其转换为字符。

  • 对每个段重复上述步骤。

以下是所有52个细分以及它们编码成的数值:

10,12,65,10,16,57,16,59,20,49,24,51,24,41,32,43,28,33,40,35,32,25,48,27,36,17,25,8,24,19,40,9,25,16,24,11,45,25,24,26,41,8,17,32,17,10,52,9,40,9,18,128

j>>2->j/4
仅ASCII的

124。我还认为,如果您手工制作URL,则可以放入空字节
仅使用ASCII

在解释中:左移,不右移。字符串列表也仅在您将每一行作为其自己的字符串返回时才string.Concat有效... 您将需要此处以使其有效...
仅ASCII的

close,这是143,而正常是141
仅ASCII的

仅@ASCII我很确定可以返回这样的字符串列表,但是为了防万一,我将添加另一个解决方案。但是,这是否有效:tio.run/##Sy7WTS7O/…
无知的体现

0

C(gcc)144 140 139字节

-4个字节 ceilingcat

字符串中的每个字符编码一定数量的空格,以便在特定字符串之前使用。如果是小写字母(或反引号),则字符串为“ \”;如果为大写字母或@,则为“ //”。空格表示换行符。

f(c,i){for(i=0;c="` aN` bLbL cJdJ dHfH eFhF fDjD gBD`dB h@Dbd@ IDdd H`BfB` k@h@b ~"[i++];)printf("%*s",c%32+2,c<33?"\n":c<96?"//":"\\\\");}

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.