Виклик дня перемир'я


28

Сьогодні, 11 листопада, відомий як День пам'яті , День перемир'я або День ветеранів ( в залежності від країни), і день роздумів і подяку за військовослужбовців та їх служби, в зокрема , почали відбивати кінець європейських військових дій у першій світовій війні. Розглянемо це з простим результатом ASCII-мистецтва 11/11.

З огляду на вхід n, виведіть ASCII-художнє видання, 11/11яке становить nодиниці висоти. Зокрема, кожна 1складається з вертикальних труб ||, коса риса складається з косої риси //, а кожен символ - два пробіли. Зауважте, що це означає різну вихідну ширину - наприклад, n=3нижче, подивіться, як "нижня" коса риса - це два пробіли 1зліва наліво, але це чотири проміжки 1справа наліво, так що верхня частина косої риски вирівнюється належним чином і є двома пробілами 1праворуч.

n = 1
||  ||  //  ||  ||


n = 2
||  ||   //  ||  ||
||  ||  //   ||  ||


n = 3
||  ||    //  ||  ||
||  ||   //   ||  ||
||  ||  //    ||  ||


n = 4
||  ||     //  ||  ||
||  ||    //   ||  ||
||  ||   //    ||  ||
||  ||  //     ||  ||


n = 5
||  ||      //  ||  ||
||  ||     //   ||  ||
||  ||    //    ||  ||
||  ||   //     ||  ||
||  ||  //      ||  ||

і так далі.

Вхідні дані

Один натуральне число в будь-якому зручному форматі , n > 0.

Вихідні дані

Представлення ASCII мистецтва 11/11, дотримуючись вищезазначених правил та прикладів. Провідні / кінцеві нові рядки або інші пробіли необов’язкові, за умови, що символи розташовуються належним чином.

Правила

  • Прийнятна або повна програма, або функція. Якщо функція, ви можете повернути вихід, а не надрукувати його.
  • Стандартні лазівки заборонені.
  • Це тому діють усі звичайні правила гольфу, і найкоротший код (у байтах) виграє.

Відповіді:


4

Желе , 24 байти

⁾| Ḥẋ2µ,Ṛðj
⁶ẋṖ;⁾//ṙḶÇ€Y

СпробуйтеItOnline!

Як?

⁾| Ḥẋ2µ,Ṛðj - Link 1, join two "11"s with: middle
⁾|          - string literal: "| "
   Ḥ        - double          "||  "
    ẋ2      - repeat twice    "||  ||  "
      µ     - monadic chain separation
       ,    - pair with
        Ṛ   - reversed       ["||  ||  ","  ||  ||"]
         ð  - dyadic chain separation
          j - join with input "||  ||  middle  ||  ||"

⁶ẋṖ;⁾//ṙḶÇ€Y - Main link: n       e.g. 5
⁶            - literal ' '        ' '
 ẋ           - repeat n times     "     "
  Ṗ          - remove last entry  "    "
   ;         - concatenate with
    ⁾//      - literal "//"       "    //"
        Ḷ    - lowered range(n)   [0,1,2,3,4]
       ṙ     - rotate left        ["    //","   // ","  //  "," //   ","//    "]
         Ç€  - call last link (1) as a monad for €ach
           Y - join with line feeds

21

JavaScript (ES6), 57 байт

n=>" ".repeat(n).replace(/./g,"||  ||  $'//$`  ||  ||\n")

2
Що ... забудь мою відповідь, це геній. Я мушу щоразу переставати йти звичайним маршрутом: P
ETHproductions

Це гладко. Гарна відповідь.
AdmBorkBork

Може хтось пояснить $'і $`в регексе? Я ніколи цього не бачив і хотів би зрозуміти це краще.
Роберт Хікман

1
@RobertHickman Вони посилаються на частину рядка після і перед матчем ( $&це буде сам матч).
Ніл

@Neil, дякую! Ви дізнаєтесь щось нове щодня :)
Роберт Хікман

7

05AB1E , 24 байти

<ðׄ//J¹FD"  ||"2׊««,À

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

Пояснення

                          # implicit input n
<ð×                       # push n-1 spaces
   „//J                   # join with "//"
       ¹F                 # input times do:
         D                # duplicate top of stack
          "  ||"2×        # push "  ||  ||"
                  Â       # push "||  ||  "
                   Š      # move the top of the stack down 2 places on the stack
                    ««    # concatenate the top 3 elements of the stack
                      ,   # print with newline
                       À  # rotate top of stack left

Попередня версія 26 байт

F"||  "2שð¹N-<ׄ//ðN×®RJ,

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


2
Це було швидко!!
AdmBorkBork

" "×"//"«.s¦R"|| || "s«vyû}», виявляється, палледромізація не дуже підходить, з причин, більш очевидних зараз ... і ти б'єш мій обліковий запис швидше так чи інакше.
Чарівний восьминога Урн

6

Perl, 45 байт

-9 байт завдяки @Gabriel Benamy

47 байт коду + 1 байт для -nпрапора.

say$@="||  "x2,$"x$_,"//",$"x++$.,$@while$_--

Біжи з -nEпрапорами:

perl -nE 'say$@="||  "x2,$"x$_,"//",$"x++$.,$@while$_--' <<< 5

Зберегти 4 байта шляхом зміни "|| ||"в , "|| "x2а потім поворот (2+$_)в просто$_
Габріель Benamy

Я думаю , ви також можете опускати +( .. )навколо $@завдання. Принаймні, це працює на моєму комп’ютері.
Габріель Бенамі

@GabrielBenamy Я дійсно можу відмовитись +( .. ), дякую. Однак я не можу змінити , "|| ||"щоб , "|| "x2тому що мені потрібно два пробілу між ||.
Дада

"|| "є два пробіли після труб (це просто не відображається коректно тут чомусь), і ви "|| || "$"x(2+$_)
дублюєте

@GabrielBenamy О, дякую, це було б форматування SE, що показувало б лише один пробіл, || коли їх було два.
Дада

5

JavaScript (ES6), 88 77 байт

f=(n,i=n)=>i--?`||  ||  ${" ".repeat(i)}//${" ".repeat(n+~i)}  ||  ||
`+f(n,i):""

Рекурсивний підхід, можливо, не може бути найкоротшим .


.map версія (88 байт):

n=>[...Array(n)].map((_,i)=>`||  ||  ${" ".repeat(n+~i)}//${" ".repeat(i)}  ||  ||`).join`
`

Поняття масиву (86 байт):

n=>[for(_ of Array(i=n))`||  ||  ${" ".repeat(--i)}//${" ".repeat(n+~i)}  ||  ||`].join`
`

for версія циклу (89 байт):

n=>{for(a="",i=n;i--;a+=s+" ".repeat(i+2)+`//${" ".repeat(n-i+1)+s}
`)s="||  ||";return a}

.replace версія (85 байт):

n=>`||  ||  q  ||  ||
`[r="repeat"](n).replace(/q/g,_=>" "[r](--i)+"//"+" "[r](n+~i),i=n)

4

Сітківка, 29 байт

.+
$* 
.
xx$'//$`  xx¶
x
||  

Порт мого рішення JavaScript. Зверніть увагу на пробіл після $*та два пробіли після ||.


3

V , 30 байт

4i||  2Bi//  Àé XÀ«ñÄf/é Elx

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

Як завжди, ось шестикутник:

0000000: 3469 7c7c 2020 1b32 4269 2f2f 2020 1bc0  4i||  .2Bi//  ..
0000010: e920 58c0 abf1 c466 2fe9 2045 6c78       . X....f/. Elx

Я думаю, ви можете змінити початкову частину на 5i|| <esc>3b2r/. Ти будеш у дещо іншому місці, і я не можу читати V, тому я не впевнений, що це має значення.
nmjcman101

3

Пакетна, 130 байт

@set s=xx//  xx
@set l=@for /l %%i in (2,1,%1)do @call
%l% set s=%%s://= //%%
%l%:l
:l
@echo %s:x=^|^|  %
@set s=%s: //=// %

Не порт мого рішення JavaScript. Оскільки |s B важко маніпулювати Batch, я використовую xs як заповнювачі та замінюю їх на виході, це зручно також зменшує розмір мого коду. Починається, встановивши sпотрібний висновок для n=1( nпередається в командному рядку), потім вставляє пробіли за необхідності, щоб отримати перший рядок за фактичним значенням n, потім циклічно роздруковує рядок і зміщує косою рисою, залишеною на один символ щоразу.


3

BaCon , 71 байт

Повна програма BASIC в одному рядку.

INPUT n:FOR x=1 TO n:?"||  ||",SPC$(n-x+2),"//",SPC$(x+1),"||  ||":NEXT

Приємно! Чи можливо видалити простір в 1 TO?
DLosc

3

Лист звичайний, 216 байт

Я відразу заявляю, що це жахливе рішення проблеми. Тим не менш, це працює, і я втомився.

(defun arm (n) (format t "~{||  || ~v,,,vA//~v,,,vA ||  ||~%~}" (butlast (butlast (butlast (butlast (butlast (butlast (loop for i from 1 to (+ n 1) append `(,(- (+ n 1) i) #\Space #\Space ,i #\Space #\Space))))))))))

Використання:

* (arm 4)
||  ||     //  ||  ||
||  ||    //   ||  ||
||  ||   //    ||  ||
||  ||  //     ||  ||

Чомусь, замість того, щоб робити щось розумне, я вирішив підійти до цього з циклом всередині formatдзвінка. Цей цикл повторюється через вміст, який повертається іншою фактичною конструкцією циклу в самому кінці, при цьому останні шість елементів видаляються (таким чином, повторення butlasts). Вміст значення, повернене цією конструкцією циклу, складається з підрахунку прокладки для передньої частини косої риси, символів (пробілів), залишків на задній частині косої риски, і, нарешті, тих самих символів.

Я досить новачок у Ліспі, і я розумію, що тут, безумовно, є багато можливостей для вдосконалення.


Спробуйте спробувати рішення у гольфі (усунення простору пробілів, скорочення ідентифікаторів)
кіт

Ласкаво просимо до PPCG!
AdmBorkBork

3

Пітон 2, 76 75 71 байт

Все ще працюю над скороченою версією, не надто погано.

n=input()
k='||  ||'
for i in range(n):print k,(n-i)*' '+'//'+' '*-~i,k

дякую mbomb007 за помилку!


1 байт коротше:x='|| '*2;print x+(n-i)*' '+'//'+' '*i+x[::-1]
mbomb007

@ mbomb007 Вам потрібно два проміжки між 11-ю, а не 1. Це зробило б його рівним.
Каде

Ось тільки SE плутає це. Це все-таки байт коротший. repl.it/EViJ
mbomb007

@ mbomb007 Відповідно до цієї сторінки repl.it є три пробіли //в останньому рядку і два пробіли після //в першому рядку. В обох випадках має бути два пробіли.
Кейд

Тоді ваша поточна програма неправильна, тому що це робить ваша.
mbomb007

2

R, 86 байт

Просто простий forцикл підходу:

x="||  ||";n=scan();for(i in 1:n)cat(x,rep(" ",2+n-i),"//",rep(" ",1+i),x,"\n",sep="")

2

Сітківка , 40 байт

.+
x $&$* //  x
;{:`x
||  ||
   //
  // 

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

Пояснення

.+
x $&$* //  x

Це перетворює вхід Nу

x S//  x

Де Sвідповідає Nпробіли.

;{:`x
||  ||

Тут відбуваються дві речі. ;{:вказує, що цей етап і останній слід запускати в циклі, поки вони не змінять рядок. :вказує на те, що результат цього етапу слід надрукувати після кожної ітерації та ;вказує на те, що кінцевий результат циклу (а отже, і всієї програми) не повинен друкуватися. Сам етап просто замінює xs || ||на першій ітерації (а потім нічого не робить), так що тепер у нас є перший рядок необхідного виводу (і друкуємо його).

   //
  // 

Нарешті, це зміщує //один символ ліворуч, за умови, що залишилось щонайменше три пробіли //. Після цього ми повертаємося до попереднього етапу (який тепер друкує лише поточний рядок, оскільки більше немає xs) і повторюємо.


2

Рубін, 60 байт

->n{n.times{|i|puts (a='||  || ')+' '*(n-i)+'//  '+' '*i+a}}


1

Рубі, 76 74 73 байт

x="||  ||";n=gets.to_i;puts (1..n).map{|i|x+" "*(n-i+2)+"//"+" "*(i+1)+x}

Як функція він займає 73 72 байти, рахуючи визначення:

def f n,x="||  ||";(1..n).map{|i|x+" "*(n-i+2)+"//"+" "*(i+1)+x}*?\n;end

1

Powershell, 66 байт

$a=read-host;1..$a|%{$s="||  ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}

Ласкаво просимо на сайт!
DJMcMayhem

@DrMcMoylex Тільки цікаво, що я побачив цю відповідь і збирався зробити те саме, що ви зробили, але це сказало, що я не змінив достатньо в своїй редакції. Як вам вдалося це зробити?
nedla2004

@ nedla2004 Коли ви отримаєте 1000 репутації (або 2000 для повністю закінчених сайтів), ви отримаєте повне редагування приватних публікацій . До цього часу всі ваші зміни повинні містити не менше 6 символів, і інші користувачі будуть переглянуті з більшою кількістю повторень. Оскільки у мене є понад 1000 представників, мені дозволяють надсилати невеликі зміни негайно.
DJMcMayhem

Ласкаво просимо до PPCG! Ви можете зберегти пару байт, скориставшись введеннями командного рядка замість read-host-param($a)1..$a|%{$s="|| ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}
AdmBorkBork

Дякуємо за всі вітання, редагування та пропозиції командного рядка!
ben

1

C #, 150 байт

Гольф:

string A(int n){string a="",b= "||  ||";for(int i=0;i<n;i++)a+=b+"  //  ".PadLeft(5+n-i,'\0')+string.Concat(Enumerable.Repeat(" ",i))+b+"\n";return a;

Безголівки:

public string A(int n)
{
  string a = "", b = "||  ||";
  for (int i = 0; i < n; i++)
    a += b + "  //  ".PadLeft(5 + n - i, '\0') + string.Concat(Enumerable.Repeat(" ", i)) + b + "\n";
  return a;
}

Тестування:

Console.WriteLine(new ArmisticeDayChallenge().A(11));

Вихід:

||  ||            //  ||  ||
||  ||           //   ||  ||
||  ||          //    ||  ||
||  ||         //     ||  ||
||  ||        //      ||  ||
||  ||       //       ||  ||
||  ||      //        ||  ||
||  ||     //         ||  ||
||  ||    //          ||  ||
||  ||   //           ||  ||
||  ||  //            ||  ||

1

Groovy, 63 символів / байт

Ось моя спроба з Groovy, використовуючи анонімне закриття та прості петлі, щоб надрукувати зображення ASCII на стандартний вихід:

{n->n.times{println'|| '*2+' '*(n-it-1)+'//'+' '*it+' ||'*2}}

Ви можете спробувати онлайн тут . Просто натисніть "Змінити в консолі", а потім "Виконати сценарій".

Намагаючись зробити те саме і повертаючи рядок замість друку, я не зміг опуститися нижче 71 байта:

{n->a='';n.times{a+='|| '*2+' '*(n-it-1)+'//'+' '*it+' ||'*2+'\n'};a}


0

Пітон 3, 78 байт

a="||  ||"
def m(n):
    for e in range(n):print(a," "*(n-e),"//"," "*(e+1),a)

Ще намагаюся скоротити ...


Ласкаво просимо до PPCG! Чи можете ви перейти forна ту саму лінію, що і def? (Приблизно так:) def m(n):for e in range(n):print(a," "*(n-e),"//"," "*(e+1),a)Також ви можете зберегти два байти, замінивши (e+1)на -~e.
ETHproductions
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.