Ateşkes Günü Mücadelesi


28

Bugün 11 Kasım, Anma Günü , Ateşkes Günü veya Gaziler Günü (ülkeye bağlı olarak) olarak bilinir ve ordunun ve hizmetlerinin, özellikle Avrupa düşmanlıklarının sonunu yansıtmaya başladığı bir yansıma ve şükran günüdür. Birinci Dünya Savaşı'nda. Bunun üzerine basit bir ASCII-art çıktısı ile yansıtalım 11/11.

Bir giriş göz önüne alındığında n, çıkış bir ASCII sanat sunumu 11/11yani ntane uzun. Spesifik olarak, her 1biri dikey borulardan ||oluşur, eğik çizgi eğik çizgilerden oluşur //ve her karakter ayrı iki boşluktur. Bunun değişken çıktı genişlikleri anlamına geldiğine dikkat edin - örneğin, n=3aşağıda, eğik çizginin "alt" kısmının 1soldan iki boşluk , ama 1sağdan dört boşluk , böylelikle eğik çizginin üst kısmı olduğunu görün uygun şekilde sıralanır ve 1sağdan iki boşluktur .

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


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


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


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


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

ve bunun gibi.

Giriş

Tek bir pozitif tam sayı , herhangi bir uygun biçimde , n > 0.

Çıktı

11/11Yukarıdaki kurallara ve örneklere göre bir ASCII-sanat temsili . Lider / izleyen yeni satırlar veya diğer boşluklar, karakterlerin uygun şekilde sıralanması şartıyla isteğe bağlıdır.

kurallar

  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine geri gönderebilirsiniz.
  • Standart boşluklar yasaktır.
  • Bu olduğundan, tüm normal golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Yanıtlar:


4

Jöle , 24 bayt

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

TryItOnline!

Nasıl?

⁾| Ḥẋ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 bayt

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

2
Ne ... cevabımı unut, bu dahi. Her seferinde geleneksel rotaya gitmeyi bırakmalıyım: P
ETHproductions 11:16

Bu kaygan. Güzel cevap
AdmBorkBork

Birisi regex içinde $'ve açıklayabilir $`mi? Bunu daha önce hiç görmedim ve daha iyi anlamak isterdim.
Robert Hickman,

1
@RobertHickman Maçtan önce ve sonra dizenin bir kısmına atıfta bulunurlar ( $&maçın kendisi olur).
Neil

@Neil, teşekkürler! Hergün yeni bir şeyler öğreniyorsun :)
Robert Hickman

7

05AB1E , 24 bayt

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

Çevrimiçi deneyin!

açıklama

                          # 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

Önceki 26 byte versiyon

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

Çevrimiçi deneyin!


2
Bu kadar hızlı oldu!!
AdmBorkBork

" "×"//"«.s¦R"|| || "s«vyû}», palendromize iyi bir uyum değildir, çünkü şimdi daha açık olan nedenlerden dolayı ... ve bytecount'umu her nasılsa hızlı yendin.
Magic Octopus Urn,

6

Perl, 45 bayt

@Gabriel Benamy sayesinde -9 bayt

-nBayrak için 47 bayt kod + 1 bayt .

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

-nEBayraklarla koş :

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

Değiştirerek 4 bayt kaydet "|| ||"etmek "|| "x2ve daha sonra dönerek (2+$_)sadece içine$_
Gabriel Benamy

Ben de bırakabilirsiniz düşünüyorum +( .. )etrafında $@atama. En azından bilgisayarımda çalışıyor.
Gabriel Benamy

@ GabrielBenamy Gerçekten, gerçekten bırakabilirsiniz +( .. ), teşekkürler. Ancak değiştiremezsiniz "|| ||"için "|| "x2ben arasında iki boşluk gerekir çünkü ||.
Dada

"|| "Borulardan sonra iki boşluğu var (nedense burada doğru şekilde oluşturulmuyor) ve sizden "|| || "fazladan 2 boşluğa bakacak olan $"x(2+$_)
ipi kopyalıyorsunuz

@ GabrielBenamy Oh, teşekkürler, bu || iki tane olduğunda sadece bir boşluk gösteren SE formatı olurdu .
Dada

5

JavaScript (ES6), 88 77 bayt

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

Yinelemeli bir yaklaşım olabilir mümkün olan en kısa olamazdı .


.map sürüm (88 bayt):

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

Dizi anlama (86 bayt):

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

for döngü sürümü (89 bayt):

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

.replace sürüm (85 bayt):

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

4

Retina, 29 bayt

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

JavaScript çözümümün limanı. Sonra boşluğu $*ve sonra iki boşluğu not alın ||.


3

V , 30 bayt

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

Çevrimiçi deneyin!

Her zamanki gibi, işte bir hexdump:

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

Sanırım ilk kısmını değiştirebilirsin 5i|| <esc>3b2r/. Yine de biraz farklı bir yerde olacaksınız ve V'yi okuyamıyorum, bu yüzden önemli olup olmadığından emin değilim.
nmjcman101

3

Toplu iş, 130 bayt

@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 çözümümün bir limanı değil. Yana |ler Toplu içinde işlemek için zor, kullandığım xtutucu olarak s ve çıkış üzerine bunların yerine, bu elverişli Ayrıca benim kod boyutunu küçültür. sİstenilen çıkışa ayarlayarak başlar n=1( nkomut satırında geçirilir), sonra asıl değer için ilk satırı elde etmek için gereken boşlukları ekler n, daha sonra dizgenin yazdırılması ve her seferinde bir karakterin sola kaydırılması arasında dolaşır.


3

BaCon , 71 bayt

Tek satırda eksiksiz bir BASIC programı.

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

Güzel! İçerideki boşluğu kaldırmak mümkün mü 1 TO?
DLosc

3

Ortak Lisp, 216 bayt

Hemen yarasadan bunun zorluğa berbat bir çözüm olduğunu söyleyeceğim. Yine de işe yarıyor ve ben yoruldum.

(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))))))))))

Kullanımı:

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

Bazı nedenlerden dolayı, akıllıca bir şey yapmak yerine, formatçağrı içinde bir döngü ile buna yaklaşmaya karar verdim . Bu ilmek, diğer asıl ilmek yapısının en sonunda döndüğü içerikte tekrar eder , son altı element kaldırılır (böylece tekrarlanır)butlast s) . Bu döngü yapısı tarafından döndürülen değerin içeriği, eğik çizgilerin önü için bir dolgu sayısı, dolgu karakterleri (boşluklar), eğik çizgilerin arkası için dolgu sayısı ve son olarak aynı dolgu karakterlerinden oluşur.

Lisp için yeniyim ve burada iyileştirme için kesinlikle çok yer olduğunu biliyorum.


Çözümünüzü golf oynamayı denemelisiniz (istenmeyen boşlukları ortadan kaldırarak, tanımlayıcıları kısaltarak)
cat

PPCG'ye Hoşgeldiniz!
AdmBorkBork,

3

Python 2, 76 75 71 Bayt

Hala daha kısa bir sürümde çalışıyor, ama çok da kötü değil.

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

Bir hata yakalamak için teşekkürler mbomb007!


1 bayt kısa:x='|| '*2;print x+(n-i)*' '+'//'+' '*i+x[::-1]
mbomb007

@ mbomb007 11'ler arasında iki boşluğa ihtiyacınız var, 1 değil.
Kade

Bu sadece SE karıştırıyor. Hala bir bayt daha kısa. repl.it/EViJ
mbomb007

@ mbomb007 Bu repl.it sayfasına göre //son satırda önce üç boşluk //ve ilk satırda sonra iki boşluk vardır . Her iki durumda da iki boşluk olmalıdır.
Kade

O zaman şu anki programın yanlış, çünkü senin yaptığın şey bu.
mbomb007

2

R, 86 bayt

Sadece basit bir fordöngü yaklaşımı:

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

2

Retina , 40 bayt

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

Çevrimiçi deneyin!

açıklama

.+
x $&$* //  x

Bu girişi Ndönüştürür

x S//  x

Burada Skarşılık gelen Nboşluklar.

;{:`x
||  ||

Burada gerçekleşen iki şey var. ;{:bu evrenin ve sonuncunun dize değiştirilinceye kadar bir döngüde çalıştırılması gerektiğini belirtir. :Bu aşamanın sonucu, her yineleme sonrası baskı yapılması gerektiğini belirtir ve ;döngü nihai sonucu (ve dolayısıyla bütün programı) gerektiğini gösterir değil basılabilir. Sahne kendisi sadece değiştirir xile s || ||, birinci tekrar (ve daha sonra hiçbir şey yapmaz) bu yüzden şimdi gerekli çıkışının ilk çizgi var (ve yazdırmak) olduğu.

   //
  // 

Son olarak, //yine de en az üç boşluk kalması şartıyla , bir karakteri sola kaydırır //. Daha sonra önceki aşamaya geri dönüyoruz (bu, şu an sadece mevcut satırı basıyor çünkü artık yok x) ve sonra tekrarlıyoruz.


2

Ruby, 60 bayt

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


1

Ruby, 76 74 73 bayt

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

Bir fonksiyon olarak tanımları sayarak 73 72 bayt alır :

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

1

Powershell, 66 bayt

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

Siteye Hoşgeldiniz!
DJMcMayhem

@DrMcMoylex Sadece merak ediyorum, bu cevabı gördüm ve yaptığınız şeyi yapacağım ama düzenlememde yeterince değişiklik yapmadığımı söyledi. Bunu nasıl yapabildin?
nedla2004

@ nedla2004 1000 itibara sahip olduktan sonra (veya tamamen mezun olmuş siteler için 2.000) tam düzenleme ayrıcalıklarına sahip olacaksınız . O zamana kadar, tüm düzenlemeleriniz en az 6 karakter olmalı ve daha fazla temsilci olan diğer kullanıcılar tarafından incelenecektir. 1000'den fazla temsilcime sahip olduğum için derhal küçük düzenlemeler gönderebilirim.
DJMcMayhem

PPCG'ye Hoşgeldiniz! Komut satırı girişi yaparak çift baytları kaydedebilirsiniz read-host-param($a)1..$a|%{$s="|| ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}
AdmBorkBork

Hoşgeldiniz, düzenleme ve komut satırı için önerileriniz için teşekkürler!
ben

1

C #, 150 Bayt

golfed:

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;

Ungolfed:

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;
}

Test yapmak:

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

Çıktı:

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

1

Groovy, 63 karakter / bayt

İşte benim Groovy'ye girişimi, ASCII sanatını standart çıktıya yazdırmak için anonim bir kapatma ve basit döngüler kullanarak:

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

Burada çevrimiçi deneyebilirsiniz . "Konsolda düzenle" yi ve ardından "Komut dosyasını çalıştır" ı tıklamanız yeterlidir.

Aynı şeyi yapmaya ve yazdırmak yerine bir dize döndürmeye çalıştığımda 71 bayttan daha azını alamadım:

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


0

Python 3, 78 bayt

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

Hala kısaltmaya çalışıyorum ...


PPCG'ye Hoşgeldiniz! forAynısını aynı çizgiye taşıyabilir defmisin? (Bunun gibi: def m(n):for e in range(n):print(a," "*(n-e),"//"," "*(e+1),a)) Ayrıca, değiştirerek iki bayt kaydedebilirsiniz (e+1)ile -~e.
ETHProductions
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.