Зробіть мені ковдру!


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


Правий край здається нерівним.
Чарівний восьминога Урна

Чи лівий край не перекривається?
xnor

@xnor Вибачте, мій поганий.
Олівер Ні

Виправлено @carusocomputing.
Олівер Ні

10
Якби ви використовували «Пісочницю», цих проблем можна було б уникнути, перш ніж це почалося в основному.
Мего

Відповіді:


8

Пітон 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 байт перетворив арифметичні операції в бітові.


Що ... як ????
Олівер Ні

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.

Тепер до коду:

V24ітерація N(рядок-idx) понад [0, 1, ..., 23].

sm...48відображає числа d(стовпчик-idx) у [0, 1, ..., 47]символи та друкує комбінований рядок.

++BNdгенерує список [N, N+d], +...t-Ndдодає N-d-1. Отже, у нас є список [N, N+d, N-d-1]. m<3%k8перевіряє кожне обчислене число k, якщо 3 < 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 ...
Джеррі Єремія

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 за те, що роблю це в Перлі.
ElPedro

Я міг би зробити це так само, як і всі інші (просто надрукувавши купу рядків), але я вирішив робити алгоритмічно, а не явно, бо відчував, що це крутіше.
Габріель Бенамі

Класна за моїми мірками. Я взяв підхід, який я ніколи не пробував, тому що це був цікавий виклик. Як я вже сказав, +1. Жодної образи, яку я не міркував моїм коментарем. Ось чому я підтримав.
ElPedro

3

Пітон 3, 174 172 138 байт

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

Я знайшов найменший візерунок, який я міг знайти в ковдрі (шаблон "під" і "над"), застряг у списку і додав деяке розуміння списку та маніпуляції з рядками, щоб розпакувати все це. Замінили всі втеклі риски на "b" і замінили їх пізніше, щоб зберегти кілька байт.

Дякуємо Оліверу за те, що ти граєш на 2 байти!

Знявши 34 байти, змінивши шаблон - весь шаблон для ковдри тепер знаходиться в одному списку, тому для розгортання шаблону потрібно лише один цикл.


1
Ласкаво просимо до PPCG! приємний перший пост! Ви можете поголити байт у python 2 Я думаю, вам не потрібні паренди для друку.
Rɪᴋᴇʀ

1
Дякую Вам, Ірлі, Ірк, я вже занадто довго ховаюсь у кодовому гольфі, тому вирішив взяти участь. :)
TheCrazyInventor

1
Ви можете зберегти два байти, видаливши пробіл після 0*6таu*6
Олівер Ні

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: ваш код, здається, не генерує дійсну ковдру.
TheCrazyInventor

3

Пітон 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кожного елемента кортежа. Будь-які ідеї?
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

Рубін, 75 байт

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

Краще гольф, використовуючи один 8-байтний рядок пошуку, індексований j & 4 на додаток до інших параметрів, а не модифікований 4-байтовий рядок.

Рубін, 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

Безголівки:

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" \// \/\"è?}¶?

Спробуйте в Інтернеті!

Пояснення

Використовує трюк мод-8, вміло пояснений у відповіді Якубе .

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

Пітон, 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 декодер безпосередньо після заяви про друк. Виглядає безладним, але зрештою, це код гольфу :)

-4 Немає точки встановлення змінної для цілого списку. Просто використовуйте його безпосередньо у другому для циклу.

-14 і немає точки використання зовнішньої петлі. Просто помножте цілий кортеж на 3 (безсоромно вкрадено з @ nedla2004, щоб отримати менше 200 :))

-3 Збережено 3, зробивши \ = 0, / = 1 і пробіл = 2. Це робить цілий список коротшим, оскільки три основні 3 числа тепер мають провідні 0

Як це працює (і це робить)

Оскільки використовуються лише 3 символи:

  1. l - перелік 8 повторюваних шаблонів у вигляді цілочисних еквівалентів їх базового представлення 3, припускаючи, що "" = 0, "\" = 1 і "/" = 2

  2. Лямбда Перший код після заяви про друк - це легкий перетворювач від цілого числа до базового 3 рядка

  3. Перша петля циклічно тричі, а друга друкує кожен рядок із базовими 3 символами, помноженими на 6 та заміненими на /, \ або пробіл.

Я впевнений, що міг би використати регулярний вимір замість вкладеної заміни (), але я занадто втомився, щоб спробувати прямо зараз. Це був лише експеримент і довший, ніж мої попередні зусилля 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).
Йорданія

На жаль, я думаю, що це повинно бути 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_replace. 3) Використовуйте цифри замість літер. 4) Включіть завдання в ехо. 5) Не призначайте $a, просто використовуйте його.
Тит

1

Пітон 2, 169 161 165 160 155 154 152

На основі відповіді @ ElPedro з невеликими вдосконаленнями. Щоб побачити пояснення, дивіться їх відповідь . Це Python 2, навіть незважаючи на те, що поруч із дужкою є дужки print.

Збережено 8 байт за допомогою змінної для replace.Це працює лише для рядків, і використання функції для нього було б довше.

Зберегли 4 байти, побачивши, що @ElPedro зрозумів, що вони мені не потрібні, і я теж не став.

Збережено 5 байтів, не перегортаючи range(8), а замість того, +=щоб додати до r, додавши r до кінця нової цифри. Спробуйте це за допомогою repl.it

Збережено 5 байт, викравши новий список значень @ ElPedro.

Збережено 1 байт, видаливши пробіл між inі( .

Збережено 2 байти, видаливши змінну a.

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 відстій, тому це, мабуть, найкращий підхід. Виклик і пропуск дуже коротший, ніж вкладений 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"

дуже проста відповідь.


0

Haskell, 96 байт

f n=n`mod`8`div`4
putStr$unlines[["\\ //\\ \\/"!!(f(x-y)+2*f(x+y)+4*f y)|x<-[0..47]]|y<-[0..23]]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.