วอล์กเกอร์เข้าร่วม! - โลโก้อลันวอล์คเกอร์


13

คุณอาจรู้จัก Alan Walker จากเพลงยอดนิยม Faded ของเขา ตอนนี้ "ผู้ติดตาม" ของเขาเรียกว่าวอล์กเกอร์และมีโลโก้นี่เป็นเวอร์ชั่นที่เรียบง่าย:

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

เป้าหมายของความท้าทายนี้คือการพิมพ์โลโก้นี้

กฎ:

  1. หากคุณส่งคืนรายการสตริงจากฟังก์ชั่นตามมาตรฐานเมตากรุณาระบุส่วนท้ายที่พิมพ์ลงบนหน้าจอ
  2. ต้องมีตัวอักษรทั้งหมดของโลโก้ด้านบน ไม่มีทางลัด!
  3. จำนวนไบต์ที่สั้นที่สุดชนะ!

จะมีช่องว่างเพิ่มเติมในตอนท้ายของแต่ละบรรทัด (เพราะพวกเขาไม่เปลี่ยนวิธีการแสดงผล) มีการขึ้นบรรทัดใหม่ / ต่อท้ายบรรทัดใหม่ได้หรือไม่
dzaima

@dzaima ใช่คุณทำได้
Dat

+1 สำหรับ Alan Walker !!
HighlyRadioactive

คำตอบ:


14

ถ่าน , 31 30 29 27 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด น่าเศร้าที่Copyไม่ได้ทำสิ่งที่ฉันต้องการในกรณีนี้ดังนั้นฉันจึงต้องวนซ้ำแทน คำอธิบาย:

F²«Jι⁰

วาดทุกอย่างสองครั้ง แต่เมื่อเคอร์เซอร์เริ่มอักขระหนึ่งตัวไปทางขวาในครั้งที่สอง

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

วาด W หลักจากขวาไปซ้าย แต่ปล่อยเคอร์เซอร์ไว้ใกล้กับ Inverted V

   ↙↗χ↘↘¹²

วาด inverted V


คุณ "เท่านั้น" เอาชนะโซลูชั่นไร้เดียงสา 20 ไบต์: P
Stephen

1
@StepHen การประหยัด 46% นั้นไม่เลวเลยเพราะการตั้งค่าวนซ้ำในตอนแรก ...
Neil

การทำมิเรอร์ไม่สั้นลงสำหรับสิ่งนี้หรือไม่?
สตีเฟ่น

5
@ StepHen การแก้ไขค่าใช้จ่ายไม่สมดุลมากเกินไป ที่ดีที่สุดที่ผมทำได้คือ 35 F²«Jι⁰↘χ↗↗⁵M⁵↑←↙χ»‖M↥\\¶ \\F²«Jι⁰↖³ไบต์:
Neil

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>

อย่างไร?

โลโก้โดยทั่วไปประกอบด้วยกลุ่มของช่องว่างตามด้วย//หรือหรือ\\ฟีดบรรทัด

ช่องว่างและรูปแบบสิ้นสุดถูกเข้ารหัสโดยใช้ค่าฐาน -36:

  • บิตที่สำคัญน้อยที่สุดจะช่วยให้รูปแบบการสิ้นสุด: 0สำหรับ//, สำหรับ1\\
  • บิตอื่น ๆ ทั้งหมดให้จำนวนช่องว่างก่อนรูปแบบสิ้นสุด

ทุกอย่างสามารถเข้ารหัสด้วยวิธีนี้ด้วยหลัก -36 หลักยกเว้นบรรทัดสุดท้ายซึ่งประกอบด้วย 30 ช่องว่างตามด้วย\\นำไปสู่ ​​30 * 2 + 1 = 61 = 1pในฐาน -36 สิ่งนี้pควรตีความว่าเป็น 12 ช่องว่างตามด้วย\\แต่รูปแบบนี้จะไม่ปรากฏที่ใดก็ได้ ดังนั้นเราก็สามารถจัดการกับกรณีพิเศษนี้ที่ค่าใช้จ่ายของ 2 /.p?/ไบต์เสริมในการแสดงออกปกติ:


รุ่นแรก, 186 ไบต์

หมายเหตุ: สิ่งนี้ถูกส่งก่อนที่จะมีการอัพเดตโลโก้


กอล์ฟอย่างดี เอาตัวแทงตัวเองก่อนที่จะตรวจสอบคำตอบ; จบลงด้วยสิ่งที่คล้ายกับรุ่น 172 ไบต์ของคุณ
Shaggy

7

brainfuck , 579 ไบต์

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

ลองออนไลน์!

สร้างค่าคงที่47 92 32 10ในหน่วยความจำจากนั้นเลือกและส่งออกค่าเหล่านั้นตามความเหมาะสม


ฉันค่อนข้างแน่ใจว่าสิ่งนี้สามารถลงเล่นกอล์ฟได้โดยเฉพาะอย่างยิ่งในส่วนสุดท้ายนั่น
Stan Strum

@StanStrum อย่าลังเลที่จะยิงมัน ฉันพยายาม แต่ไม่สามารถหาวิธีที่ดีในการแสดงมันโดยเฉพาะอย่างยิ่งเมื่อความฟุ้งซ่านของ BF อยู่ในเงื่อนไข
Conor O'Brien


4

Bubblegum , 77 76 ไบต์

hexdump:

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...>

ลองออนไลน์!

เกณฑ์ Bubblegum : P



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

Haskell, 161 160 ไบต์

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

ถ่าน , 50วันที่ 31 ไบต์

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

ลองออนไลน์! ลิงก์คือเวอร์ชัน verbose

ฉันเหนื่อย. (นอกจากนี้ฉันจะชี้ให้เห็นว่าฉันทำสิ่งนี้ด้วยตัวเองอย่างสมบูรณ์แม้ว่ามันจะดูค่อนข้างคล้ายกับอีกอันหนึ่ง [ชิซฉันก็ทำมันอีกครั้งมันก็ยังแตกต่างกันตามวิธี: P])



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

Bubblegum , 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

PowerShell , 221 220 ไบต์

$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','\\'

ลองออนไลน์!

ค่อนข้างไร้เดียงสาวิธี ( และ 50 ไบต์แย่กว่าคำตอบ JS, ประจบประแจง ) ใครรู้วิธีทำหลาย ๆ อย่าง-replaceใน PowerShell

-1 ไบต์ขอบคุณ Veskah



@Veskah ประหยัด byte อย่างง่าย ขอบคุณ!
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 # Interactive Compiler) , 122 ไบต์ (121 ตัวอักษร)

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

ลองออนไลน์!

คำอธิบาย

โลโก้แต่ละส่วนเป็นเพียง 0+ ช่องว่างที่มี\\หรือ//ท้ายที่สุดรวมถึงการขึ้นบรรทัดใหม่ มี52ของเหล่านี้ จากนั้นเราเข้ารหัสแต่ละเซ็กเมนต์เป็นอักขระ:

  • ใช้จำนวนช่องว่างในแต่ละเซ็กเมนต์แล้วเพิ่ม 2 ลงในหมายเลขนั้น

  • Bit เลื่อนตัวเลขไปทางซ้าย 2 ครั้ง

  • หากเซ็กเมนต์จบลงด้วย//bit-wise หรือจำนวนหนึ่ง

  • หากเซ็กเมนต์จบลงด้วยการขึ้นบรรทัดใหม่ให้ bit-wise หรือตัวเลขเป็นสอง

  • รับหมายเลขแล้วโยนมันลงไปในถ่าน

  • ทำซ้ำสำหรับแต่ละส่วน

นี่คือ 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 . ฉันคิดว่าคุณสามารถใส่ค่า null-bytes ได้ถ้าคุณสร้าง URL ด้วยตัวเอง
ASCII-only

ในคำอธิบาย: บิตซ้ายซ้ายไม่ถูกต้อง นอกจากนี้รายการของสายก็ต่อเมื่อคุณกลับแต่ละบรรทัดเป็นสตริงของตัวเอง ... คุณจะต้องที่string.Concatนี่เพื่อให้ถูกต้อง ...
ASCII-only

ปิดนี้คือ 143 ในขณะที่ปกติคือ 141
ASCII เท่านั้น

@ ASCII- เท่านั้นฉันค่อนข้างมั่นใจว่าจะอนุญาตให้ส่งคืนรายการสตริงเช่นนี้ได้ แต่ฉันจะเพิ่มโซลูชันอื่นในกรณีนี้ อย่างไรก็ตามสิ่งนี้ถูกต้อง: tio.run/##Sy7WTS7O/ …
ศูนย์รวมความไม่รู้

0

C (gcc) , 144 140 139 ไบต์

-4 ไบต์ขอบคุณที่ceilingcat

อักขระแต่ละตัวในสตริงเข้ารหัสช่องว่างจำนวนหนึ่งเพื่อใช้ก่อนสตริงที่แน่นอน ถ้าเป็นตัวพิมพ์เล็ก (หรือ backtick) แสดงว่าสตริงนั้นคือ "\" และถ้าเป็นตัวพิมพ์ใหญ่หรือ @ ก็เป็น "//" ช่องว่างหมายถึงการขึ้นบรรทัดใหม่

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?"//":"\\\\");}

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.