ทำให้ฉันเป็นผ้าห่ม!


16

ฉันต้องการผ้าห่มที่มีลักษณะเช่นนี้ แต่ละแถบจะผ่าน, ใต้, เหนือ, ใต้ คุณพิมพ์ได้ไหม

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

ช่องว่างต่อท้ายที่ส่วนท้ายของแต่ละบรรทัดและขึ้นบรรทัดใหม่เป็นที่ยอมรับ

จำไว้ว่านี่คือดังนั้นโค้ดที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ

ลีดเดอร์

นี่คือตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในบรรทัดแรกโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

# Ruby, <s>104</s> <s>101</s> 96 bytes

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของสองไฟล์หรือคุณต้องการแสดงรายการการลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

# Perl, 43 + 2 (-p flag) = 45 bytes

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


ขอบด้านขวาดูเหมือนไม่ตรงแนว
Magic Octopus Urn

ขอบด้านซ้ายไม่ได้ตั้งใจวางทับหรือไม่?
xnor

@ xnor ขออภัยฉันไม่ดี
Oliver Ni

@carusocomputing แก้ไขแล้ว
Oliver Ni

10
หากคุณใช้ Sandbox ปัญหาเหล่านั้นก็สามารถหลีกเลี่ยงได้ก่อนหน้านี้
Mego

คำตอบ:


8

Python 2, 84 ไบต์

R=range(24)
for i in R:print''.join(" \// \/\\"[i+~j>>2&1^i+j>>1&2^i&4]for j in R*2)

ขอบคุณ Sp3000 เป็นเวลา 6 ไบต์จากการเปลี่ยนการดำเนินการทางคณิตศาสตร์ให้เป็นบิตบิต


โอ้โห ... อย่างไร ???
Oliver Ni

1
i+~j>>2&1^i+j>>1&2^i&4บางที
Sp3000

@ Sp3000 นั่นเป็นสิ่งที่ดีกว่า ฉันจะต้องจำไว้ว่าเมื่อรวมบูลีนที่ได้มาทางคณิตศาสตร์เข้ากับดัชนี
xnor

5

Pyth, 36 ไบต์

V24sm@" \// \/\\"im<3%k8++BNdt-NdT48

ลองใช้งานออนไลน์: การสาธิต

คำอธิบาย:

เราสามารถกำหนดสัญลักษณ์โดยการตรวจสอบ 3 เงื่อนไข:

A := row % 8 > 3
B := (row + column) % 8 > 3
C := (row - column - 1) % 8 > 3

หากเราตีความ[A,B,C]ว่าเป็นเลขฐานสองเราจะได้รับการแมปต่อไปนี้:

01234567
 \// \/\

นอกจากนี้เรายังสามารถตีความ[A,B,C]เป็นตัวเลขทศนิยมและทำการค้นหาแบบแยกส่วนดัชนีในสตริง 10 mod 8 = 2นี้ไม่ได้สร้างความแตกต่างเพราะ

ตอนนี้ถึงรหัส:

V24iterates N(แถว IDX) [0, 1, ..., 23]มากกว่า

sm...48จับคู่ตัวเลขd(column-idx) เข้า[0, 1, ..., 47]กับตัวอักษรและพิมพ์สตริงที่รวมกัน

++BNdสร้างรายการ[N, N+d], ผนวก+...t-Nd ดังนั้นเราจึงมีได้รับรายชื่อN-d-1 การตรวจสอบสำหรับแต่ละหมายเลขคำนวณถ้าดังนั้นนี้จะช่วยให้รายการที่มีเงื่อนไข[N, N+d, N-d-1]m<3%k8k3 < k % 8[A, B, C]

i...Tแปลงค่านี้ให้เป็นตัวเลขทศนิยมจากนั้น@" \// \/\\"ทำการค้นหาในสตริง

มากกว่าหรือน้อยกว่ารหัสเดียวกันใน Python2: 98 ไบต์ :

R=range(8)
for r in R*3:print''.join(" \// \/\\"[4*(r>3)+2*((r+c)%8>3)+((r-c-1)%8>3)]for c in R*6)

เพียงแค่พยายามที่จะจับกับ Pyth ดังนั้นคำตอบที่ดีพร้อมคำอธิบายที่ดีจะได้รับการโหวตจากฉัน กำลังจะไปลอง Pyth หลังจากที่ฉันฐานที่ 3 การทดลอง :)
ElPedro

คุณควรโพสต์คำตอบของ Python2 เช่นกัน ...
Jerry Jeremiah

3

Perl, 209 + 17 = 226 ไบต์

ทำงานด้วย-mList::Util=max -M5.010(ตั้งค่าสถานะที่สองได้ฟรี) มันไม่ชนะการแข่งขันนับไบต์ แต่นี่คือทางออกของฉัน

for(0..7){@b=(1)x8;@b[$_+3..$_+7]=(3)x4;@b[7-$_..10-$_]=(2)x4;for$c(0..2){$b[$c+8]=max$b[$c+8],$b[$c];$b[5-$c]=max$b[5-$c],$b[13-$c];}push@a,sprintf("%-8s",join("",@b[3..10])=~tr[123][ /\\]r)x6;}say for@a,@a,@a

อ่านได้:

for(0..7){
    @b=(1)x8;
    @b[$_+3..$_+7]=(3)x4;
    @b[7-$_..10-$_]=(2)x4;
    for$c(0..2){
        $b[$c+8]=max$b[$c+8],$b[$c];
        $b[5-$c]=max$b[5-$c],$b[13-$c];
    }
    push@a,sprintf("%-8s",join("",@b[3..10])=~tr[123][ /\\]r)x6
}
say for@a,@a,@a

สร้างแต่ละเซกเมนต์แบบเป็นขั้นตอนจากนั้นทำซ้ำรูปแบบ 6 ครั้งจากนั้นแสดงผลลัพธ์ทั้งหมด 3 ครั้ง


ว้าวฉันไม่ใช่คำตอบที่ยาวที่สุดอีกแล้ว :) +1 สำหรับการใช้ภาษา Perl
ElPedro

ฉันสามารถทำมันได้เช่นเดียวกับคนอื่น ๆ (แค่พิมพ์เส้นจำนวนมาก) แต่ฉันตัดสินใจที่จะทำสิ่งที่เป็นอัลกอริธึมแทนที่จะทำอย่างชัดเจนเพราะฉันรู้สึกว่ามันเจ๋งกว่า
Gabriel Benamy

เท่ห์ตามมาตรฐานของฉัน ฉันใช้วิธีที่ฉันไม่เคยลองมาก่อนเพราะมันเป็นความท้าทายที่น่าสนใจ ตามที่ฉันพูดไว้ +1 ไม่มีเจตนาดูถูกโดยความคิดเห็นของฉัน นั่นเป็นเหตุผลที่ฉัน upvoted
ElPedro

3

Python 3, 174 172 138 ไบต์

print("\n".join(o*6for o in("bbbb////"," bb//// ","  ////  "," ////bb ","////bbbb","b//  bbb","bb    bb","bbb  //b")*3).replace("b","\\"))

พบรูปแบบที่เล็กที่สุดที่ฉันสามารถหาได้ในผ้าห่ม (รูปแบบ "ภายใต้" และ "เหนือ") ติดไว้ในรายการและเพิ่มความเข้าใจของรายการและการจัดการสตริงเพื่อดึงมันออกมาทั้งหมด ทดแทนเครื่องหมายแบ็กสแลชที่ผ่านการ Escape ทั้งหมดด้วย "b" และแทนที่กลับในภายหลังเพื่อบันทึกสองสามไบต์

ขอบคุณ Oliver สำหรับการเล่นกอล์ฟ 2 ไบต์!

เอา 34 ไบต์ออกโดยการเปลี่ยนรูปแบบ - ทั้งรูปแบบของผ้าห่มตอนนี้อยู่ในรายการเดียวดังนั้นจึงจำเป็นต้องใช้รูปแบบวนซ้ำหนึ่งอันเท่านั้นในการแกะรูปแบบ


1
ยินดีต้อนรับสู่ PPCG! โพสต์แรกที่ดี! คุณสามารถโกนไบต์ในไพ ธ อน 2 ฉันคิดว่าคุณไม่จำเป็นต้องมีการตีพิมพ์
Rɪᴋᴇʀ

1
ขอบคุณ Irly อีสเตอร์ฉันได้ซุ่มอยู่รอบ ๆ ในรหัสกอล์ฟมานานเกินไปแล้วดังนั้นฉันจึงตัดสินใจเข้าร่วม :)
TheCrazyInventor

1
คุณสามารถประหยัดสองไบต์โดยการลบช่องว่างหลังจาก0*6และu*6
Oliver Ni

1
คุณสามารถบันทึก 4 ไบต์โดยใช้ "b" สำหรับแบ็กสแลชสองครั้งและทุกที่ที่คุณต้องการแบ็กสแลชเดี่ยวเพียงใช้การหลบหนี:print((("\n".join(o*6 for o in("bb////"," b//// "," //// "," ////b ",""))+"\n".join(u*6 for u in("////bb","\\// b\\","b b","b\\ //\\","")))*3).replace("b","\\\\"))
dzaima

dzaima: รหัสของคุณดูเหมือนจะไม่สร้างผ้าห่มที่ถูกต้อง
TheCrazyInventor

3

Python 2, 171 170 168 ไบต์

a,b,c=r"\\","/"*4," "
f,g=c*2,c+a+b+c
d=(a*2+b)*6,g*6,(f+b+f)*6,g[::-1]*6,(b+a*2)*6,('\\//'+f+a+"\\")*6,(a+f*2+a)*6,(a+"\\"+f+'//\\')*6
for e in 0,1,2:print'\n'.join(d)

ไม่สวยและไม่ฉลาด เพียงแค่ตั้งค่าตัวแปรสำหรับกลุ่มของสตริงที่ใช้บ่อยที่สุดจากนั้นรวมพวกเขาและพิมพ์ผล 3 ครั้ง อาจลองเล่นกอล์ฟในภายหลังถ้าฉันไม่พบวิธีที่ดีกว่า

บันทึก 1 ไบต์โดยใช้การป้อนข้อมูลดิบบนการกำหนด ขอบคุณ @ nedla2004

-2 โดยการกำหนดตัวแปรสองสามตัว แต่ก็ยังไม่ใช่คู่แข่งที่จริงจัง


1
คุณสามารถกำหนดเป็น r "\\"
nedla2004

ขอบคุณ @ nedla2004 จุดดี โยนสิ่งนี้เข้าด้วยกันอย่างรวดเร็วและกำลังจะดูในภายหลัง เป็นการเริ่มต้นที่ดี :)
ElPedro

ส่วนใหญ่สนใจในการหาวิธีรอบ*6ในแต่ละองค์ประกอบ tuple ว่า ความคิดใด ๆ
ElPedro

1
ฉันไม่รู้ว่าคุณจะทำอย่างไร แต่บรรทัดสุดท้ายอาจเป็นexec r"print'\n'.join(d);"*3ได้
nedla2004

ฉันเพิ่งโพสต์ทางเลือกที่ไม่สนใจ จะให้ความคิดเห็นของคุณเกี่ยวกับเรื่องนั้นด้วย
ElPedro

2

SOML , 106 ไบต์

3{"\\\\////”6*p" \\//// ”6*p"  ////  ”6*p" ////\\ ”6*p"////\\\\”6*p"\//  \\\”6*p"\\    \\”6*p"\\\  //\”6*p

รุ่นที่ไม่แข่งขันโดยใช้ฟังก์ชั่นที่ฉันเพิ่งเพิ่มเมื่อเร็ว ๆ นี้: ( 83 67 66 ไบต์)

คำอธิบาย:

  →$\\→#////→@”6*p"→~3{"##@~ #@ ~$@$~ @# ~@##~\//$#\~#$$#~#\$//\~”
  →$                                                                in the further code replace "$" with "  "
    \\→#                                                            replace "#" with "\\"
        ////→@                                                      replace "@" with "////"
              ”6*p"→~3{"##@~ #@ ~$@$~ @# ~@##~\//$#\~#$$#~#\$//\~” the code to exchange stuff in

so that results in:
”6*p"→~3{"\\\\////~ \\//// ~  ////  ~ ////\\ ~////\\\\~\//  \\\~\\    \\~\\\  //\~”
”6*p"→~3{"A~B~C~D~E~F~G~H~”  modified version of the program (removing "/","\" and " " and replaced with A,B,C,ect.)
”6*p"→~                      replace in the further program "~" with ”6*p" which is:
”                            end string
 6*                          repeat the last thing in stack 6 times
   p                         output the result
    "                        start a string
resulting program: 
3{"A”6*p"B”6*p"C”6*p"D”6*p"E”6*p"F”6*p"G”6*p"H”6*p"”
shortened example:
3{"A”6*p"B”6*p"H”6*p"”
3{                      repeat 3 times
  "A”                   push "A" (original: "\\\\////")
     6*p                output it multiplied by 6
        "B”             push "B" (original: " \\//// ")
           6*p          output it multiplied by 6
              "H”       push "H" (original: "\\\  //\")
                 6*p    output it multiplied by 6
                    "”  push an empty string (shorter to do ~” than ”6*p)

2

Ruby, 75 ไบต์

1152.times{|i|$><<"\\/ /\\\\ /"[(i+j=i/48)/4&1|(i-j)/2&2|j&4]+$/*(i%48/47)}

ตีกอล์ฟได้ดีขึ้นโดยใช้การค้นหาสตริงขนาด 8 ไบต์เดียวที่จัดทำดัชนีโดย j & 4 นอกเหนือจากพารามิเตอร์อื่น ๆ แทนที่จะเป็นสตริง 4 ไบต์ที่แก้ไขได้

Ruby, 81 ไบต์

1152.times{|i|j=i/48%8;$><<"\\#{'/\\'[j/4]} /"[(i+j)/4&1|(i-j)/2&2]+$/*(i%48/47)}

พิมพ์ตัวอักษรลายเส้นทแยงมุมตามตัวอักษร อักขระที่ถูกต้องถูกเลือกจากสายอักขระ 4 ตัวขึ้นอยู่กับว่ามี / ไม่มีของแต่ละเส้น อักขระการทับซ้อนนั้นแปรผันตามสแตรนด์ใดที่อยู่ด้านบน

แสดงความคิดเห็น

1152.times{|i|j=i/48%8;        #Iterate through all printable chars. j is line number.
  $><<"\\#{'/\\'[j/4]} /"[     #Print a char from "\/ /" if j/4 even or "\\ /" if odd. character changes depending which strand on top.
   (i+j)/4&1|(i-j)/2&2]+       #Print \ if (i+j)/4==0, / if (i-j)/2&2 >0, space if both false. As above if both true. 
   $/*(i%48/47)                #If on column 47, print a newline.
}

2

Perl, 132 131 113 ไบต์

@a=((0)x4,1..4);map{say+(map$a[7-$_]?$a[$_]*$r?'/':'\\':$a[$_]?'/':$",0..7)x6;push@a,shift@a;$_%4||($r=!$r)}0..23

Ungolfed:

use strict;
use warnings;
use feature 'say';

my @a = ((1) x 4, (0) x 4);  # print '\' if true
my @b = ((0) x 4, (1) x 4);  # print '/' if true
my $r = 0;                   # print '\' over '/' if true

for (0 .. 23) {
    say((map { $a[$_] ? ($b[$_] * $r ? '/' : '\\') : ($b[$_] ? '/' : ' ') } 0 .. 7) x 6);
    unshift(@a, pop(@a));    # circular shift to left
    push(@b, shift(@b));     # circular shift to right
    $r = !$r if !($_ % 4);   # change print priority
}

2

05AB1E , 37 ไบต์

ใช้การเข้ารหัสCP-1252

24FNU48FXXN+XN-<)8%3›J" \// \/\"è?}¶?

ลองออนไลน์!

คำอธิบาย

ใช้ mod-8 เคล็ดลับอธิบายเชี่ยวชาญในคำตอบของ pyth Jakube

24F                                    # for N in [0 ... 23] do:
   NU                                  # save N in X
     48F                               # for N in [0 ... 48] do:
        XXN+XN-<)                      # push [X,X+N,X-N-1]
                 8%                    # mod each by 8
                   3›                  # compare with 3
                     J                 # join
                      " \// \/\"è?     # index into string and print
                                  }    # end inner loop
                                   ¶?  # print newline

2

Python, 245 236 234 233 230 216 212 198 195 ไบต์

ตกลงนานกว่าคำตอบสุดท้าย (และอื่น ๆ ) ของฉัน แต่จะสนใจข้อเสนอแนะเกี่ยวกับวิธีการ

for a in(40,4496,6200,5456,3240,1188,720,228)*3:print((`a%6561/2178`+`a%2178/729`+`a%729/243`+`a%243/81`+`a%81/27`+`a%27/9`+`a%9/3`+`a%3/1`)*6).replace('0','\\').replace('1','/').replace('2',' ')

แก้ไข

-9 เนื่องจาก @ nedla2004 เป็นมากกว่าบอลมากกว่าฉัน

-2 โดยการนำแลมบ์ดาออกไปนอกวงและสูญเสียการเว้นวรรค 2 อัน

-1 โดยใช้in' '*3แทนin 0,1,2เพราะฉันไม่ได้ใช้hอยู่ดี มันเป็นเพียงเคาน์เตอร์

-3 ทำไมทำไมทำไมฉันถึงปล่อยให้บรรทัดใหม่และ 2 เยื้องระหว่างที่สองและพิมพ์? สายแล้ว. จะกลับมาในวันพรุ่งนี้

-14 สามารถสูญเสียแลมบ์ดาได้อย่างแท้จริงและเพียงแค่รวมตัวถอดรหัส 3 ฐานโดยตรงหลังจากคำสั่งพิมพ์ ดูยุ่ง แต่หลังจากทั้งหมดนี่คือ code golf :)

-4 ไม่มีการตั้งค่าตัวแปรสำหรับรายการจำนวนเต็ม เพียงใช้โดยตรงในวินาทีเพื่อวนซ้ำ

-14 และไม่มีจุดโดยใช้วงด้านนอก เพียงแค่คูณจำนวนเต็มทูเปิลด้วย 3 (ถูกขโมยโดยไร้ยางอายจาก @ nedla2004 เพื่อรับต่ำกว่า 200 :)

-3 บันทึก 3 โดยกำหนด \ = 0, / = 1 และช่องว่าง = 2 สิ่งนี้ทำให้รายการจำนวนเต็มสั้นลงเนื่องจากตัวเลขสามตัวในฐานที่ 3 มีค่า 0 เป็นผู้นำ

มันทำงานอย่างไร (และมัน)

เนื่องจากใช้เพียง 3 ตัวอักษร:

  1. l คือรายการของรูปแบบการทำซ้ำ 8 รูปแบบที่เป็นจำนวนเต็มเทียบเท่ากับการแสดงฐาน 3 โดยสมมติว่า "" = 0, "\" = 1 และ "/" = 2

  2. แลมบ์ดารหัสแรกหลังคำสั่งการพิมพ์คือตัวแปลงน้ำหนักเบาจากจำนวนเต็มเป็นสตริง 3 ฐาน

  3. ลูปแรกลูป 3 ครั้งและครั้งที่สองพิมพ์แต่ละบรรทัดด้วยอักขระฐาน 3 คูณด้วย 6 และแทนที่ด้วย /, \ หรือเว้นวรรค

ฉันแน่ใจว่าฉันสามารถใช้ regex แทนการแทนที่แบบซ้อน () แต่ฉันเหนื่อยเกินไปที่จะลองตอนนี้ นี่เป็นเพียงการทดลองและใช้เวลานานกว่าความพยายาม Python ก่อนหน้านี้ของฉัน แต่ได้โพสต์เพื่อแสดงความคิดเห็นเกี่ยวกับวิธีการ (และเพราะฉันไม่เคยทำงานในฐาน 3 มาก่อน


1
คุณสามารถลบส่วนแรกในการแปลงฐาน 3 ได้
nedla2004

ด้วยเหตุผลบางอย่างที่ทำให้ฉันมีปัญหามาก่อน แต่เพิ่งลองและใช้งานได้ในขณะนี้ ขอบคุณมากสำหรับการตื่นตัวมากกว่าฉัน ฉันจะแก้ไขคำตอบของฉันอีกครั้ง (และคุณเพิ่งจะช่วยฉันด้วย 9 ไบต์ :))
ElPedro

1
ฉันเขียนการแปลงเบส 3 อีกครั้งมันไม่ใช่แลมบ์ดาอีกต่อไปฉันต้องทำให้มันเป็นฟังก์ชั่น แต่มันอาจจะสามารถแปลงกลับเป็นแลมบ์ดาได้ คุณสามารถหาฟังก์ชั่นที่นี่
nedla2004

ขอบคุณ ฉันคิดว่าการรวมกันของทั้งสองอาจทำงานได้ แต่นั่นอาจเป็นงานสำหรับพรุ่งนี้ตอนเย็น :) ขอบคุณอีกครั้งสำหรับความคิดเห็นของคุณ
ElPedro

1
ผมได้รับมันลงไปที่ 169 ที่นี่
nedla2004

2

ทับทิมขนาด 135 ไบต์

puts [3320,1212,720,2172,6520,4144,2920,3184].map{|e|(e.to_s(3).rjust(8,"0").gsub("0"," ").gsub("1","\\").gsub("2","/"))*6+"\n"}.join*3

อาร์เรย์จำนวนสอดคล้องกับแต่ละองค์ประกอบของแต่ละบรรทัดแปลเป็นฐาน 3: = 0, \= 1, /= 2 แล้วแปลงเป็นทศนิยม แม้ว่าการเรียก gsub () นั้นใหญ่เกินไป

และตอนนี้ฉันเห็นคำตอบของ @ ElPedro :-( เป็นเรื่องบังเอิญ


e.to_s(3).rjust(8,"0")("%8s"%e.to_s(3)); gsub("0"," ").gsub("1","\\")..gsub("2","/")tr("013"," \\/"); "\n"$/; →.join *""นอกจากนี้คุณยังสามารถบันทึกไบต์โดยการหารทั้งหมดของตัวเลขในอาร์เรย์โดย 4 และแทนที่ด้วยe (e*4)
Jordan

tr("021"," /\\")โอ๊ะฉันเดาว่าควรจะเป็น
จอร์แดน


2

PHP 157 126 ไบต์

การแก้ไขรายการ @Titus ในความคิดเห็น ... ฉันรำคาญฉันพลาดจุดที่ 1 ซึ่งฉันควรจะได้ แต่ฉันไม่รู้ strtr () มีอยู่ซึ่งเป็นที่ที่ประหยัดได้มาก - ติตัสทำงานได้ดี!

ใหม่:

while($i<32)echo$b=strtr([3322,' 322 ','0220',' 223 ',2233,12013,3003,13021][$i++%8],['  ','\\','//','\\\\']),"$b$b$b$b$b\n";

อายุ:

<?$a=[zzyy,' zyy ',syys,' yyz ',yyzz,xysxz,zssz,xzsyx];while($i<32){$b=$a[$i++%8];$b=str_replace([z,x,y,s],['\\\\','\\','//','  '],$b);echo"$b$b$b$b$b$b
";}

เนื่องจากแบ็กสแลชทั้งหมดต้องหนีมันจะช่วยประหยัดพื้นที่สักหน่อยในการแพ็คมันให้เป็นอักขระที่แตกต่างกันและแทนที่มันสำหรับเอาท์พุตแล้วเมื่อฉันเรียก str_replace () มันสมเหตุสมผลที่จะใช้มันบ่อยที่สุดเท่าที่จะทำได้


1
-rคุณสามารถลบแท็กเปิดถ้าคุณใช้ ใช้ห้าขั้นตอนเหล่านี้เพื่อบันทึกอีก 30 ไบต์: ideone.com/wt4HGB 1) ใช้$a[...]เป็นstr_replaceพารามิเตอร์โดยตรงแทนที่จะกำหนด 2) แทนstrtr str_replace3) ใช้ตัวเลขแทนตัวอักษร 4) รวมการบ้านในเสียงสะท้อน 5) อย่ามอบหมาย$aเพียงแค่ใช้มัน
ติตัส

1

Python 2 169 161 165 160 155 154 152

ตามคำตอบของ @ ElPedro พร้อมการปรับปรุงเล็กน้อย เพื่อดูคำอธิบายให้ดูคำตอบของพวกเขา นี่คืองูหลาม 2 printแม้ดูเหมือนว่าจะมีวงเล็บใกล้

ที่บันทึกไว้ 8 replaceไบต์โดยใช้ตัวแปร ใช้งานได้กับสตริงเท่านั้นและการใช้ฟังก์ชั่นนั้นจะนานกว่า

บันทึกแล้ว 4 ไบต์โดยเห็นว่า @ElPedro รู้ว่าพวกเขาไม่ต้องการ l และฉันก็ไม่ได้ทำเช่นนั้น

บันทึก 5 ไบต์โดยไม่พลิกrange(8)และแทนที่จะใช้+=เพื่อต่อท้ายเพื่อเพิ่ม r ไปยังจุดสิ้นสุดของหลักใหม่ ลองใช้repl.it

บันทึก 5 ไบต์ด้วยการขโมยรายการค่าใหม่ของ @ ElPedro

ที่บันทึกไว้ 1 ไบต์โดยการเอาพื้นที่ระหว่างและin(

บันทึก 2 ไบต์โดยการลบตัวแปร

for x in(40,4496,6200,5456,3240,1188,720,228)*3:
 r=''
 for i in range(8):r=`x/3**i%3`+r
 print(r*6).replace('0','\\').replace('1','/').replace('2',' ')

คุณสามารถประหยัด 1 โดยการลบช่องว่างระหว่างinและ(ในครั้งแรกสำหรับ
ElPedro

นอกจากนี้ฉันได้สูญเสียสามไบต์โดยเรียงลำดับหมายเลขที่แสดงถึงอักขระแต่ละตัวในรายการฐาน 3 ดูคำตอบของฉันสำหรับคำอธิบาย รู้สึกฟรีเพื่อคัดลอก เท่าที่ฉันเป็นห่วงเรื่องนี้เป็นความพยายามร่วมกันและฉันดีใจที่ได้เห็นว่าความคิดดั้งเดิมของฉันมีศักยภาพอย่างน้อย :)
ElPedro

a=3**iคุณไม่จำเป็นต้อง เพียงใช้for i in range(8):r=x / 3 ** i% 3 +rเพื่อบันทึก ลำดับความสำคัญของผู้ให้บริการจะดูแลส่วนที่เหลือ :)
ElPedro

ไม่แน่ใจว่าจะกำหนดเขตอักขระการแปลงสตริงได้อย่างไร ตัวแยกวิเคราะห์พวกเขาออกในความคิดเห็นล่าสุดของฉันจึงไม่เพียงคัดลอกและวางจากข้อเสนอแนะของฉันหรือมันจะทำลาย :)
ElPedro

จุดดีฉันเข้าใจ
nedla2004

1

PHP, 184 ไบต์

<?$p=['1111////',' 11//// ','  ////  ',' ////11 ','////1111','1//  111','11    11','111  //1'];for($j=0;$j<3;$j++)for($i=0;$i<8;$i++)echo str_replace(1,'\\',str_repeat($p[$i],6))."\n";

เอาท์พุท:

C:\PHP>php make-me-a-blanket.php
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
 \\////  \\////  \\////  \\////  \\////  \\//// 
  ////    ////    ////    ////    ////    ////  
 ////\\  ////\\  ////\\  ////\\  ////\\  ////\\ 
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\
\\    \\\\    \\\\    \\\\    \\\\    \\\\    \\
\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
 \\////  \\////  \\////  \\////  \\////  \\//// 
  ////    ////    ////    ////    ////    ////  
 ////\\  ////\\  ////\\  ////\\  ////\\  ////\\ 
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\
\\    \\\\    \\\\    \\\\    \\\\    \\\\    \\
\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
 \\////  \\////  \\////  \\////  \\////  \\//// 
  ////    ////    ////    ////    ////    ////  
 ////\\  ////\\  ////\\  ////\\  ////\\  ////\\ 
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\\//  \\\
\\    \\\\    \\\\    \\\\    \\\\    \\\\    \\
\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\\\\  //\

0

แบตช์ 152 ไบต์

@call:l
@call:l
:l
@for %%s in (\\\\//// " \\//// " "  ////  " " ////\\ " ////\\\\ "\//  \\\" "\\    \\" "\\\  //\")do @echo %%~s%%~s%%~s%%~s%%~s%%~s

การประมวลผลสตริงใน Batch sucks ดังนั้นนี่อาจเป็นวิธีที่ดีที่สุด การเรียกและการตกผ่านจะสั้นกว่าforลูปซ้อนกันเล็กน้อย อย่างน้อยฉันก็ไม่ต้องพูดแบ็กสแลช!


0

APL, 110 ไบต์

ฉันใหม่สำหรับ APL ดังนั้นนี่เป็นวิธีแก้ปัญหาที่ง่าย

A←48⍴'\\\\////'⋄B←48⍴' \\//// '⋄C←48⍴'  ////  '⋄F←48⍴'\//  \\\'⋄G←48⍴'\\    \\'⋄24 48⍴A,B,C,(⊖B),(⊖A),F,G,⊖F  

นี่เป็นวิธีการของฉัน: โปรดทราบว่าหลังจากผ้าห่ม 8 บรรทัดแรกแล้วลวดลายจะซ้ำรอยเดิม ดังนั้นฉันต้องกำหนด 8 บรรทัดแรกเท่านั้นจากนั้นฉันสามารถทำซ้ำได้ 3 ครั้ง โปรดทราบว่าแต่ละบรรทัดจะเล่นซ้ำหลังจากตัวละคร 8 ตัวแรก ดังนั้นในการกำหนดบรรทัดเดียวฉันต้องกำหนดอักขระ 8 ตัวแรกแล้วจึงทำซ้ำ 8 ครั้ง

นี่คือวิธีการแก้ปัญหาที่ไม่ดี

A←48⍴'\\\\////'⋄ ⍝ set A to a 48 element vector (48⍴) of repeated '\\\\////'s
B←48⍴' \\//// '⋄ ⍝ set B to a 48 element vector (48⍴) of repeated ' \\//// 's
C←48⍴'  ////  '⋄ ⍝ ...
D←48⍴' ////\\ '⋄ ⍝ Note that this is actually the reverse of vector B
E←48⍴'////\\\\'⋄ ⍝ Note that this is actually the reverse of vector A
F←48⍴'\//  \\\'⋄
G←48⍴'\\    \\'⋄
H←48⍴'\\\  //\'⋄ ⍝ Note that this is actually the reverse of vector F

24 48 ⍴ A,B,C,D,E,F,G,H ⍝ Make a 24 by 48 character matrix (24 48⍴) by concatenating A,B...H
                        ⍝ and repeating the string until the matrix is full

ฉันสังเกตข้างบนว่า D คือการย้อนกลับของ B, E คือการย้อนกลับของ A และ H คือการย้อนกลับของ F ในรหัสที่แท้จริงของฉันฉันใช้ประโยชน์จากสิ่งนี้โดยไม่กำหนด D, F หรือ H และการใช้ฟังก์ชันย้อนกลับ:

24 48⍴A,B,C,(⊖B),(⊖A),F,G,⊖F


0

ทับทิม 132 ไบต์

puts Zlib.inflate Base64.decode64 "eJzt0bENADAMAsGeKdggC/3+cyQRC+A2ipuT3RgJgHWGUjm6VXb2Vjn/3KpJ/qtIPlp1v+XSKZKPVk3y/x5+D6/3sAEUXQ+Q"

คำตอบที่ง่ายมาก


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