Tantangan Hari Gencatan Senjata

28

Hari ini, 11 November, dikenal sebagai Hari Peringatan , Hari Gencatan Senjata , atau Hari Veteran (tergantung pada negara), dan merupakan hari refleksi dan terima kasih kepada anggota militer dan layanan mereka, secara khusus mulai mencerminkan akhir dari permusuhan Eropa dalam Perang Dunia pertama. Mari kita renungkan itu dengan keluaran ASCII-art sederhana 11/11.

Diberikan input n, output rendisi ASCII-art 11/11yang ntinggi. Secara khusus, masing 1- masing terdiri dari pipa vertikal ||, garis miring terdiri dari garis miring //, dan masing-masing karakter terpisah dua ruang. Perhatikan bahwa ini berarti berbagai lebar keluaran - misalnya, untuk di n=3bawah ini, lihat bagaimana "bagian bawah" dari slash adalah dua spasi dari 1ke kiri, tetapi empat spasi dari 1kanan, sehingga bagian atas slash berbaris dengan tepat dan dua spasi dari 1kanan.

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


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


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


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


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

dan seterusnya.

Memasukkan

Sebuah bilangan bulat positif dalam format yang nyaman , n > 0.

Keluaran

Representasi ASCII-art dari 11/11, mengikuti aturan dan contoh di atas. Leading / trailing newlines atau spasi putih lainnya adalah opsional, asalkan karakternya berbaris dengan tepat.

Aturan

  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber

Jawaban:

4

Jelly , 24 byte

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

TryItOnline!

Bagaimana?

⁾| Ḥẋ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
Jonathan Allan
sumber
21

JavaScript (ES6), 57 byte

n=>" ".repeat(n).replace(/./g,"||  ||  $'//$`  ||  ||\n")
Neil
sumber
2
Apa ... lupakan jawaban saya, ini jenius. Saya harus berhenti pergi ke rute konvensional setiap saat: P
ETHproduk
Itu licin. Jawaban bagus.
AdmBorkBork
Bisakah seseorang menjelaskan $'dan $`di dalam regex? Saya belum pernah melihat itu sebelumnya dan ingin memahaminya dengan lebih baik.
Robert Hickman
1
@RobertHickman Mereka merujuk pada bagian dari string setelah dan sebelum pertandingan ( $&akan menjadi pertandingan itu sendiri).
Neil
@ Neil, terima kasih! Anda belajar sesuatu yang baru setiap hari :)
Robert Hickman
7

05AB1E , 24 byte

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

Cobalah online!

Penjelasan

                          # 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

Versi 26 byte sebelumnya

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

Cobalah online!

Emigna
sumber
2
Itu cepat !!
AdmBorkBork
" "×"//"«.s¦R"|| || "s«vyû}», ternyata palendromize tidak cocok, untuk alasan yang lebih jelas sekarang ... dan Anda mengalahkan bytecount saya lebih cepat bagaimanapun heh.
Magic Octopus Mm
6

Perl, 45 byte

-9 byte berkat @Gabriel Benamy

47 byte kode + 1 byte untuk -nflag.

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

Jalankan dengan -nEbendera:

perl -nE 'say$@="||  "x2,$"x$_,"//",$"x++$.,$@while$_--' <<< 5
Dada
sumber
Hemat 4 byte dengan mengubah "|| ||"ke "|| "x2dan kemudian berbalik (2+$_)menjadi hanya$_
Gabriel Benamy
Saya pikir Anda juga bisa drop +( .. )sekitar $@tugas. Paling tidak berfungsi di komputer saya.
Gabriel Benamy
@GabrielBenamy Aku memang bisa menjatuhkan +( .. ), terima kasih. Namun saya tidak dapat mengubah "|| ||"untuk "|| "x2karena saya membutuhkan dua ruang antara ||.
Dada
"|| "memiliki dua spasi setelah pipa (itu hanya tidak render dengan benar di sini untuk beberapa alasan), dan Anda menduplikasi string itu ke "|| || "mana mengurus 2 spasi tambahan dari$"x(2+$_)
Gabriel Benamy
@GabrielBenamy Oh terima kasih, itu adalah format SE yang hanya menampilkan satu ruang || ketika ada dua ruang.
Dada
5

JavaScript (ES6), 88 77 byte

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

Pendekatan rekursif mungkin tidak mungkin menjadi yang terpendek .


.map versi (88 byte):

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

Pemahaman array (86 byte):

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

for versi loop (89 byte):

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

.replace versi (85 byte):

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

Retina, 29 byte

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

Port solusi JavaScript saya. Catat spasi setelah $*dan dua spasi sesudahnya ||.

Neil
sumber
3

V , 30 byte

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

Cobalah online!

Seperti biasa, ini hexdump:

0000000: 3469 7c7c 2020 1b32 4269 2f2f 2020 1bc0  4i||  .2Bi//  ..
0000010: e920 58c0 abf1 c466 2fe9 2045 6c78       . X....f/. Elx
DJMcMayhem
sumber
Saya pikir Anda bisa mengubah bagian awal menjadi 5i|| <esc>3b2r/. Anda akan berada di tempat yang sedikit berbeda, dan saya tidak bisa membaca V jadi saya tidak yakin apakah itu penting.
nmjcman101
3

Batch, 130 byte

@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: //=// %

Bukan port dari solusi JavaScript saya. Karena |s sulit untuk dimanipulasi dalam Batch, saya menggunakan xs sebagai penampung dan menggantinya pada output, ini juga mengurangi ukuran kode saya. Mulai dengan mengatur ske output yang diinginkan untuk n=1( ndilewatkan pada baris perintah), kemudian menyisipkan spasi yang diperlukan untuk mendapatkan baris pertama untuk nilai aktual n, kemudian loop melalui pencetakan string dan menggeser garis miring yang ditinggalkan oleh satu karakter setiap kali.

Neil
sumber
3

BaCon , 71 byte

Program BASIC lengkap dalam satu baris.

INPUT n:FOR x=1 TO n:?"||  ||",SPC$(n-x+2),"//",SPC$(x+1),"||  ||":NEXT
Peter
sumber
Bagus! Apakah mungkin untuk menghapus ruang 1 TO?
DLosc
3

Common Lisp, 216 byte

Saya akan segera menyatakan bahwa ini adalah solusi yang mengerikan untuk tantangan ini. Namun demikian, itu berhasil, dan saya lelah.

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

Pemakaian:

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

Untuk beberapa alasan, alih-alih melakukan sesuatu yang waras, saya memutuskan untuk melakukan pendekatan ini dengan loop di dalam formatpanggilan. Loop ini berulang melalui konten yang dikembalikan oleh konstruksi loop aktual lainnya di bagian paling akhir, dengan enam elemen terakhir dihapus (dengan demikian elemen berulang butlast). Isi nilai yang dikembalikan oleh konstruk lingkaran ini terdiri dari jumlah padding untuk bagian depan garis miring, karakter padding (spasi), jumlah padding untuk bagian belakang garis miring, dan akhirnya karakter padding yang sama.

Saya agak baru di Lisp, dan saya mengerti pasti ada banyak ruang untuk perbaikan di sini.

artificialnull
sumber
Anda harus mencoba bermain golf solusi Anda (menghilangkan ruang kosong yang tidak dibutuhkan, memperpendek pengidentifikasi)
cat
Selamat datang di PPCG!
AdmBorkBork
3

Python 2, 76 75 71 Bytes

Masih bekerja pada versi yang lebih pendek, tidak terlalu buruk.

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

terima kasih mbomb007 untuk menangkap kesalahan!

Kade
sumber
1 byte lebih pendek:x='|| '*2;print x+(n-i)*' '+'//'+' '*i+x[::-1]
mbomb007
@ mbomb007 Anda perlu dua spasi di antara 11-an, bukan 1. Itu akan membuatnya sama.
Kade
Itu hanya SE yang mengacaukannya. Ini masih satu byte lebih pendek. repl.it/EViJ
mbomb007
@ mbomb007 Menurut halaman repl.it itu ada tiga spasi sebelum //pada baris terakhir dan dua spasi setelah //pada baris pertama. Seharusnya dua ruang dalam kedua kasus.
Kade
Maka program Anda saat ini salah, karena itulah yang Anda lakukan.
mbomb007
2

R, 86 byte

Hanya forpendekatan loop sederhana :

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

Retina , 40 byte

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

Cobalah online!

Penjelasan

.+
x $&$* //  x

Ini mengubah input Nmenjadi

x S//  x

Dimana Ssesuai dengan Nspasi.

;{:`x
||  ||

Ada dua hal yang terjadi di sini. ;{:menunjukkan bahwa tahap ini dan yang terakhir harus dijalankan dalam satu lingkaran sampai mereka gagal mengubah string. :menunjukkan bahwa hasil tahap ini harus dicetak setelah setiap iterasi dan ;menunjukkan bahwa hasil akhir dari loop (dan karenanya seluruh program) tidak boleh dicetak. Tahap itu sendiri hanya menggantikan xs dengan || ||pada iterasi pertama (dan tidak melakukan apa-apa sesudahnya), sehingga kita sekarang memiliki baris pertama dari output yang diperlukan (dan mencetaknya).

   //
  // 

Akhirnya, ini menggeser //satu karakter ke kiri, asalkan masih ada setidaknya tiga ruang tersisa //. Setelah itu kita kembali ke tahap sebelumnya (yang sekarang hanya mencetak garis saat ini, karena tidak ada lagi x) dan kemudian ulangi.

Martin Ender
sumber
2

Ruby, 60 byte

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

C, 116 94 89 byte

c,d;f(a){for(d=a;a--;puts("  ||  ||"))for(c=-1;c<d;)printf(a-c++?c?" ":"||  ||  ":"//");}

Cobalah di Ideone

plafon
sumber
1

Ruby, 76 74 73 byte

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

Sebagai fungsi dibutuhkan 73 72 byte, menghitung definisi:

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

Powershell, 66 byte

$a=read-host;1..$a|%{$s="||  ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}
ben
sumber
Selamat datang di situs ini!
DJMcMayhem
@DrMcMoylex Hanya ingin tahu, saya melihat jawaban ini dan akan melakukan hal yang sama dengan yang Anda lakukan, tetapi dikatakan bahwa saya tidak cukup banyak berubah dalam edit saya. Bagaimana Anda bisa melakukan ini?
nedla2004
@ nedla2004 Setelah Anda memiliki 1.000 reputasi, (atau 2.000 untuk situs yang lulus penuh) Anda akan mendapatkan hak mengedit penuh . Sampai saat itu, semua hasil edit Anda harus minimal 6 karakter dan akan ditinjau oleh pengguna lain dengan lebih banyak perwakilan. Karena saya memiliki lebih dari 1.000 perwakilan, saya diizinkan untuk segera mengirimkan suntingan kecil.
DJMcMayhem
Selamat datang di PPCG! Anda dapat menyimpan beberapa byte dengan mengambil input baris perintah alih-alih read-host-param($a)1..$a|%{$s="|| ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}
AdmBorkBork
Terima kasih atas sambutannya, hasil edit, dan saran baris perintah semuanya!
ben
1

C #, 150 Bytes

Golf:

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;

Tidak Terkumpul:

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

Pengujian:

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

Keluaran:

||  ||            //  ||  ||
||  ||           //   ||  ||
||  ||          //    ||  ||
||  ||         //     ||  ||
||  ||        //      ||  ||
||  ||       //       ||  ||
||  ||      //        ||  ||
||  ||     //         ||  ||
||  ||    //          ||  ||
||  ||   //           ||  ||
||  ||  //            ||  ||
Pete Arden
sumber
1

Groovy, 63 karakter / byte

Inilah upaya saya dengan Groovy, menggunakan penutupan anonim dan loop sederhana untuk mencetak seni ASCII ke output standar:

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

Anda dapat mencobanya online di sini . Cukup klik "Edit di konsol" dan kemudian "Laksanakan skrip".

Mencoba melakukan hal yang sama dan mengembalikan string alih-alih mencetak, saya tidak dapat mencapai di bawah 71 byte:

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

Rado
sumber
0

Python 3, 78 byte

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

Masih berusaha untuk ...

Juntos
sumber
Selamat datang di PPCG! Mungkinkah Anda dapat memindahkannya forke garis yang sama def? (Seperti ini def m(n):for e in range(n):print(a," "*(n-e),"//"," "*(e+1),a):) Juga, Anda dapat menyimpan dua byte dengan menggantinya (e+1)dengan -~e.
ETHproduksi