Şimdi Hapishanede


18

Meydan okuma

Girdi olarak bir tamsayı n(burada 4<=n<=10**6) verildiğinde , aşağıdaki örnekteki sembolleri kullanarak n-1geniş ve nkarakter yüksekliğini ölçen bir ASCII sanat "cezaevi kapısı" * oluşturun .


Misal

╔╦╗
╠╬╣
╠╬╣
╚╩╝

Kullanılan karakterler aşağıdaki gibidir:

┌───────────────┬─────────┬───────┐
│ Position      │ Symbol  │ Char  │
├───────────────┼─────────┼───────┤
│ Top Left      │    ╔    │ 9556  │
├───────────────┼─────────┼───────┤
│ Top           │    ╦    │ 9574  │
├───────────────┼─────────┼───────┤
│ Top Right     │    ╗    │ 9559  │
├───────────────┼─────────┼───────┤
│ Right         │    ╣    │ 9571  │
├───────────────┼─────────┼───────┤
│ Bottom Right  │    ╝    │ 9565  │
├───────────────┼─────────┼───────┤
│ Bottom        │    ╩    │ 9577  │
├───────────────┼─────────┼───────┤
│ Bottom Left   │    ╚    │ 9562  │
├───────────────┼─────────┼───────┤
│ Left          │    ╠    │ 9568  │
├───────────────┼─────────┼───────┤
│ Inner         │    ╬    │ 9580  │
└───────────────┴─────────┴───────┘

kurallar

  • Standart G / Ç kuralları tarafından izin verildiği sürece girdiyi makul, uygun yollarla alabilirsiniz .
  • Bu zorluğun amaçları doğrultusunda, "kapı" yı oluşturmak için kullanılan sembollerin çok baytlık karakterler olduğu dillerde, her biri tek bir bayt olarak puanınıza doğru sayılabilir.
  • Diğer tüm karakterler (tek veya çok baytlı) normal olarak sayılmalıdır.
  • Çıktıda herhangi bir sondaki boşluk bulunmayabilir, ancak kesinlikle gerekliyse sondaki yeni satıra izin verilir.
  • Bu yani en düşük bayt sayısı kazanır.

Test Durumları

Input: 4
Output:
╔╦╗
╠╬╣
╠╬╣
╚╩╝

Input: 8
Output:
╔╦╦╦╦╦╗
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╚╩╩╩╩╩╝

Input: 20
Output:
╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝

* Evet, büyüdükçe hapishane kapısı gibi göründüğünün farkındayım! : D


4
Hem x hem de y boyutlarını
Beta Decay

15
Sandbox'ta bunu önerebilmeniz için yeterince uzun sürdü.
Shaggy

Programım kod sayfasında değil bile çukur içerebilir mi? Değilse, "'Z“ζbir bayt maliyeti (veya 2) olarak izin verilir? (9580'i itin, unicode'a dönüştürün)?
dzaima

@dzaima Bu zorluğun amaçları doğrultusunda, "kapı" için kullanılan sembollerin birden fazla bayt aldığı dillerde, her biri tek bir bayt olarak puanınıza sayılabilir.
Okx

@Okx `╬ - herhangi bir bayt miktarında temsil edilemez, bir bayta "'Z“ζeşit olması "╬"1 baytlık maliyetle javascript'teki gibi olur
dzaima

Yanıtlar:


9

Java 8, 156 151 148 118 bayt

n->{String a="╔",b="╠",c="╚";for(int i=n;i-->3;a+="╦",b+="╬")c+="╩";a+="╗\n";for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}

5 bayt golf sonra bir port @raznagul C # (.NET Core) cevap oluşturarak.

Çevrimiçi deneyin.

Eski 148 bayt cevap:

n->{String r="╔";int i=n,j;for(;i-->3;r+="╦");r+="╗\n╠";for(i=n;i-->2;r+="╣\n"+(i>2?"╠":"╚"))for(j=n;j-->3;r+="╬");for(;n-->3;r+="╩");return r+"╝";}

@Raznagul sayesinde -5 bayt .

Açıklama:

Burada deneyin.

n->{                   // Method with integer parameter and String return-type
  String r="╔";        //  Result String (starting with the top-left corner)
  int i=n,j;           //  Indexes `i` and `j`
  for(;i-->3;          //  Loop (1) `n`-3 times:
      r+="╦"           //   Append result with top edges
  );                   //  End of loop (1)
  r+="╗\n╠";           //  Append result with the top-right corner, new-line and left edge
  for(i=n;i-->2        //  Loop (2) `n`-2 times
      ;                //     After every iteration:
      r+="╣\n"         //   Append result with right edge and new-line
      +(i>2?"╠":"╚"))  //    + either the left edge or bottom-left corner
    for(j=n;j-->3;     //   Inner loop (3) `n`-3 times:
        r+="╬"         //    Append result with middle section
    );                 //   End of inner loop (3)
                       //  End of loop (2) (implicit / single-line body)
  for(;n-->3;          //  Loop (4) `n`-3 times:
    r+="╩"             //   Append result with bottom edges
  );                   //  End of loop (4)
  return r+"╝";        //  Return result with its bottom-right corner
}                      // End of method

Hardcoding yerine kaçış / karakter kodlarıyla bayt kaydedebilir misiniz?
TheLethalCoder

@TheLethalCoder Belki de, ancak meydan okuma kuralı durumundan beri sembolleri her biri 1 bayt olarak sayabiliriz, muhtemelen bu şekilde daha kısadır (dolayısıyla gerçek 176 yerine 156 bayt sayısı). Ancak karakter kodlarını kısaltmak için bazı şeyleri denemekten çekinmeyin.
Kevin Cruijssen

Ah kuralların bu kısmını kaçırdım.
TheLethalCoder

2
( -->) Operatörüne giden +1 için .
raznagul

1
Eğer kullanırsanız i-->3, i-->2ve j-->3´ you can save 5 bytes by removing the n- = 3` ve n+1.
raznagul

7

Kömür , 34-5 = 29 bayt

A⁻N³γUB╬↓×╠γ╠¶╚×╩γ‖BOγ‖BO↑⁺γ

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. 5 bayt azaltma, kutu çizim karakterleri içindir.

ReflectOverlapOverlap(0)eşdeğer olmalıdır, ReflectMirror()ancak bunun yerine Charcoal bunun yerine bir şey yapar ReflectTransform(), aksi takdirde bu çözüm de işe yarayacaktır n=3. n=338 - 5 = 33 bayt için ne olacağını gösteren bir geçici çözüm :

A⁻N³γUB╬↓×╠γ╠¶╚×╩γ¿γ‖BOγ‖M‖BO↑⁺γ¹

Daha da iyisi, eğer ReflectOverlapOverlap(0)çalıştıysa, ama desteklemekten rahatsız n=3olmadım, o zaman bunu 31 - 4 = 27 bayt için yapabilirdim:

A⁻N³γUB╬↓×╠γ╚×╩γ‖BOγ‖BO↑⁻γ¹

1
Hmm, Kömür da / aynalar yansıtır biliyordu vermedi etmek ve bu tür. " Kömür bayt-sayacı bir nedenden dolayı çalışmıyor. " Belki de karakterin kod sayfasının bir parçası olmadığı için Kömür bayt-sayacı çalışmıyor?
Zorluk

@KevinCruijssen Hangi operatörü kullandığınıza bağlıdır. (Her seferinde geri dönüp tekrar kontrol etmeliyim; bir dizi var ve kafa karıştırıcı oluyor ...)
Neil

@Neil Oops, bu bir hata, ASAP'yi düzeltir. Bulduğunuz için teşekkürler!
Yalnızca ASCII

@Neil Ayrıca n = 4
sadece ASCII-sadece



6

Haskell, 75 bayt

w i(a:b:c)=a:(b<$[4..i])++c
f n=concat$w(n+1)$w n<$>["╔╦╗\n","╠╬╣\n","╚╩╝"]  

Çevrimiçi deneyin!

İşlev wbir tamsayı ive ailk, bikinci öğe ve clistenin geri kalanı olan bir liste alır ve yeni bir liste oluşturur a, ardından i-3kopyalarını ve bardından gelir c. Uygulama w, ilk listenin her biri, her elemanın ["╔╦╗\n","╠╬╣\n","╚╩╝"](tekrar ve sonra iartmıştır 1elde edilen listede). Tek bir listede birleştirin.


<$ Operatörü nedir? Sadece >> argümanlar ters çevrilmiş mi?
Aneesh Durg

@AneeshDurg: <$başlangıçta Data.Functorve içine konuldu Prelude. Neredeyse aynı >>. a <$ bher bileşeni yerine bsahip aise, b >> abeklediği abir listesi ve bitiştirir uzunlukta olması bkopyaları a. [1,2] >> "aa"-> "aaaa", "aa" <$ [1,2]-> ["aa","aa"]. Not: 'x' <$ [1,2]eşittir [1,2] >> "x".
nimi

5

Vim, 29 bayt

3<C-x>C╔╦╗
╠╬╣
╚╩╝<Esc>h<C-v>kkx@-Pjyy@-p

Kontrol karakterleri olduğundan, işte bir xxd dökümü:

00000000: 3318 43e2 9594 e295 a6e2 9597 0de2 95a0  3.C.............
00000010: e295 ace2 95a3 0de2 959a e295 a9e2 959d  ................
00000020: 1b68 166b 6b78 402d 506a 7979 402d 70    .h.kkx@-Pjyy@-p

Çevrimiçi deneyin! (V yorumlayıcısının egzotik karakterlerle ilgili sorunları var gibi görünüyor, böylece bağlantı daha sıradan olanlar kullanıyor.)

açıklama

3<C-x>     " Decrement the number by 3
C╔╦╗
╠╬╣
╚╩╝<Esc>   " Cut the number (goes in @- register) and enter the "template"
h<C-v>kkx  " Move to the middle column, highlight and cut it
@-P        " Paste @- copies of the cut column
jyy        " Move to the middle line and copy it
@-p        " Paste @- copies of the copied line

Onaylamak için: Sadece sembolleri tıkayan TIO yorumlayıcısı mı?
Shaggy

@Shaggy Evet, bir Vim hatası değil, Latin-1 hakkında bir Python hatası atıyor. (V sayfasını sadece TIO'nun düz bir Vim sayfası olmadığı ve V'nin Latin-1 kullandığı için kullandım.) Makinemdeki Vim'in karakterlerle ilgili bir sorunu yok.
Ürdün

5

GNU sed, 74 + 1 = 75 bayt

-rBayrak için +1 bayt . Girdiyi tekli bir sayı olarak alır.

s/1111(1*)/╔╦\1╗\n;\1╠╬\1╣\n╚╩\1╝/
:
s/(.)1/\1\1/
t
s/;([^;\n]+)/\1\n\1/
t

Çevrimiçi deneyin!

açıklama

Bu oldukça basit. Girişin 6 olduğunu varsayalım (tekli 111111). İlk satır dört 1s düşer ve kalan girişi buna dönüştürür:

╔╦11╗
;11╠╬11╣
╚╩11╝

Üçüncü satır, bir döngü içinde, her birini 1ondan önceki karakterle değiştirir . Bu sütunlarımızı oluşturur:

╔╦╦1╗
;11╠╬11╣
╚╩11╝

╔╦╦╦╗
;11╠╬11╣
╚╩11╝

...

╔╦╦╦╗
;;;╠╬╬╬╣
╚╩╩╩╝

Bunun ;karakteri de kopyaladığına dikkat edin . Son olarak, beşinci satır, bir döngüde, her ;karakteri aşağıdaki satırın bir kopyasıyla değiştirir :

╔╦╦╦╗
;;╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝

╔╦╦╦╗
;╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝

╔╦╦╦╗
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝

4

Jöle , 33 bayt

... 33 mü? - bir bayt dizgi değişmezinden (kod sayfası dizinleri) Unicode karakterlere dönüştürmenin maliyeti 5'dir.

_2µ“€ðБẋ“¡Ø¤“©ßµ‘js3x€2¦€’+⁽"7ỌY

Sonucu basan tam bir program.

Çevrimiçi deneyin!

Nasıl?

_2µ“€ðБẋ“¡Ø¤“©ßµ‘js3x€2¦€’+⁽"7ỌY - Main link: n
_2                                - subtract 2
  µ                               - start a new monadic chain with n-2 on the left
   “€ðБ                          - code page indexes [12, 24, 15] (middle row characters)
        ẋ                         - repeat n-2 times (make unexpanded middle rows)
         “¡Ø¤“©ßµ‘                - code page indexes [[0,18,3],[6,21,9]] (top & bottom)
                  j               - join (one list: top + middles + bottom)
                   s3             - split into threes (separate into the unexpanded rows)
                          ’       - decrement n-2 = n-3
                        ¦€        - sparsely apply to €ach:
                       2          -   at index 2
                     x€           -   repeat €ach (expand centre of every row to n-3 chars)
                            ⁽"7   - literal 9556
                           +      - addition (0->9556; 12->9568; etc...)
                               Ọ  - cast to characters (╠; ╔; etc...)
                                Y - join with newlines
                                  - implicit print

@Shaggy - Dize değişmezleri içindeki karakterleri temsil etmek için 9 bayt kullanıyorum - bunlar kod sayfası dizinleridir. 5 byte önce Ysonunda, +⁽"7Ọbunlara 9556 ekler ve sonra karakterlere atmalarını. Onlar (5) özgür mü? Unicode karakterleri doğrudan kullanabileceğim gibi hissediyorum. (Kod sayfası dizinleri yerine gerçek karakterleri kullanabilir ve daha fazla bayt için bir eşleme kullanabilirim).
Jonathan Allan

Hayır! Tartışmadan sonra, sadece karakterin kendisinin her zaman 1 olarak sayılabileceği, başka bir temsil olmadığı sonucuna varıldı.
Outgolfer Erik


3

Dyalog APL, 71 bayt

{('╔',('╠'⍴⍨⍵-2),'╚'),((⍵-3)\⍪('╦',('╬'⍴⍨⍵-2),'╩')),'╗',('╣'⍴⍨⍵-2),'╝'}

Çevrimiçi deneyin!


Kesinlikle bu golf. Örneğin Hep yerini alabilir (some expr)f Yile Y f⍨ some expr.
Adám

@ Adám Biliyorum, devam ediyor, şu anda bilgisayarda değilim
Uriel

3

Japt , 60 52 49 48 36 bayt

"╔{Uµ3 ç'╦}╗{UÄ ç"
╠{ç'╬}╣"}
╚{ç'╩}╝

Çevrimiçi deneyin!

Başka bir sürüm (47 bayt + -Rbayrak)

"8{Uµ3 ç'J};{UÄ ç"D{ç'P}G"}>{ç'M}A"c_+9500ÃòU+2

-RBayrağa gereksinim var (giriş alanına eklendi). Çevrimiçi deneyin!

O nasıl çalışır?

Başlangıçta 'kapı karakterlerinin' bir bayttan daha pahalı olduğunu düşündüğüm için, bunları kodlayarak birkaç bayt tasarruf edebileceğimi düşündüm. Daha sonra, karakter kodlarından 9500 çıkardım, bu da beni karakterlerle bıraktı 8J; DPG >MA, her biri sadece bir bayt. Sonra, her karakter koduna 9500 ekleyebilirim ve her şey iyi olurdu.

 "8{   Uµ 3 ç'J}  ;{   UÄ  ç"D{   ç'P}  G"}  >{   ç'M}  A"c_+9500Ã òU+2
 "8"+((U-=3 ç'J)+";"+((U+1 ç"D"+(Uç'P)+"G")+">"+(Uç'M)+"A"c_+9500} òU+2
 "8"+           +";"+                      +">"+      +"A"              # Take this string of characters
     ((U-=3 ç'J)                                                        # Repeat "J" input - 3 times
                     ((    ç              )                             # Repeat the string
                            "D"+(Uç'P)+"G"                              # "D" + input-3 times "P" + "G"
                       U+1                                              # Input - 2 times
                                                (Uç'M)                  # Repeat "M" input - 3 times
                                                          c_     }      # Take the character code of every character
                                                            +9500       # Add 9500 to it
                                                          c_     }      # And convert it back to a character
                                                                   òU+2 # Split this string on every (input)th character
                                                                        # Print the resulting array, joined with newlines.

Oh, evet, haklısın.
Luke



2

Swift, 161 bayt

let f:(String,Int)->String={String(repeating:$0,count:$1)};var p={i in print("╔\(f("╦",i-3))╗\n\(f("╠\(f("╬",i-3))╣\n",i-2))╚\(f("╩",i-3))╝")}

Un-golfed:

let f:(String,Int)->String = {
    String(repeating:$0,count:$1)
}
var p={ i in
    print("╔\(f("╦",i-3))╗\n\(f("╠\(f("╬",i-3))╣\n",i-2))╚\(f("╩",i-3))╝")
}

Bu yanıtı burada deneyebilirsiniz


2

QBIC , 78 bayt

[:-3|X=X+@╦`]?@╔`+X+@╗`[b-2|Y=Z[b-3|Y=Y+@╬`]?@╠`+Y+@╣`}[b-3|W=W+@╩`]?@╚`+W+@╝`

Neyse ki, hücre kapısında kullanılan tüm semboller QBasic kod sayfasındadır.

açıklama

            The TOP
[:-3|       FOR a = 1 to n-3 (-1 for the width, -2 for beginning and end)
X=X+@╦`]    Build out X$ with the parts of the middle-top
?@╔`+X+@╗`  Then print that preceded and followed by the corners
┘           Syntactic linebreak

            The MIDDLE
[b-2|       FOR c = 1 to n-2 (all the middle rows)
Y=Z         Reset Y$ to ""
            Build up the middle rows in the same way as the top,
            just with different symbols and once for each middle row
[b-3|Y=Y+@╬`]?@╠`+Y+@╣`
}           Close the FOR loop
            The BOTTOM
            The same as the top, just with different symbols
[b-3|W=W+@╩`]?@╚`+W+@╝`

Örnek Çıktı

Command line: 7

╔╦╦╦╦╗
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╚╩╩╩╩╝

1
Varsayılan kod sayfasında onları bir bayt karakter olarak kullanan bir dili kullanmak için +1.
Joshua

Bir TIO (veya eşdeğeri) ekleyebilir misiniz?
Shaggy

Günaydın
enha

1
Ah evet! Sonunda hatırlayacağım, söz veriyorum! : D
Shaggy

@Çok iyi, fikre çok alışma. QBasic çalıştıran bir Dosbox çalışan Emscripten-build buldum. Önümüzdeki ay bunu QBIC'ye yöneltmeye çalışacağım, bu yüzden bir web env henüz gelebilir ...
steenbergh

2

PHP , 131 bayt, 113 karakter

for($z=str_split("╔╠╚╦╬╩╗╣╝",3);$i<$a=$argn;)echo str_pad($z[$b=$i++?$i<$a?1:2:0],3*$a-3,$z[$b+3]),$z[$b+6],"\n";

Çevrimiçi deneyin!

PHP , 133 bayt, 115 karakter

for(;$i<$a=$argn;)echo str_pad(["╔","╠","╚"][$b=$i++?$i<$a?1:2:0],3*$a-3,["╦","╬","╩"][$b]),["╗","╣","╝"][$b],"\n";

Çevrimiçi deneyin!


2

JavaScript (ES6), 86 bayt

Bu, diğer JS yanıtından önemli ölçüde daha uzun , ancak alternatif bir yöntemle denemek istedim.

n=>(g=i=>--i?`╬╣╠╩╝╚╦╗╔
`[(j=i%n)?!--j+2*!(n-j-2)+3*(i<n)+6*(i>n*n-n):9]+g(i):'')(n*n)

Nasıl?

Izgaranın her kenarına bir ağırlık atarız: 1 sağ için, 2 sol için, 3 alt için ve 6 üst için. Ağırlıkların toplamı, kullanılacak karakterin dizinini verir.

8666667    0 1 2 3 4 5 6 7 8
2000001    ╬ ╣ ╠ ╩ ╝ ╚ ╦ ╗ ╔
2000001
2000001
2000001
2000001
2000001
5333334

gösteri


2

JavaScript (ES6), 80 74 bayt

n=>`╔${"╦"[a="repeat"](n-=3)}╗${`
╠${"╬"[a](n)}╣`[a](n+1)}
╚${"╩"[a](n)}╝`

Sembolleri her biri bir bayt olarak sayabilir ve bu 80 baytı oluşturabilirsiniz. Ve birkaç bayt kaydetmek için şablon değişmezlerini daha iyi kullanabilmelisiniz;)
Shaggy

CP437 girişini yerel olarak alacak bir ES6 uygulaması bulursanız, sembolleri yalnızca bir bayt olarak sayabilirsiniz.
user5090812

@ user5090812, Bu zorluğa özgü bir ödenek.
Shaggy

@ user5090812 Bu uygulamayı bulmaya gerek yok, çünkü meydan okuma kuralları " Bu meydan okuma amacıyla," kapı "için kullanılan sembollerin birden fazla bayt aldığı dillerde, her biri tek bir bayt olarak puanınıza sayılabilir. "Yani bunun 98 yerine 80 baytlık bir bayt sayısı var (doğru saydıysam).
Kevin Cruijssen

Bu kötü bir kural. Karakterleri depolamanın daha iyi bir yolunu bulmak için tüm teşvikleri kaldırır.
Luke

2

Yakut, 54 52 bayt

Ymbirtt sayesinde -2 bayt.

->n{?╔+?╦*(n-=3)+"╗
"+(?╠+?╬*n+"╣
")*-~n+?╚+?╩*n+?╝}

Çevrimiçi deneyin!

Ungolfed

Bu çok sıkıcı:

->n{
   ?╔ + ?╦ * (n-=3) + "╗\n" + 
  (?╠ + ?╬ * n      + "╣\n") * -~n + 
   ?╚ + ?╩ * n      + ?╝
}

(n+1)Yazarak biraz kısaltabilirsiniz -~n- operatör önceliği parantezleri de kurtaracaktır.
ymbirtt

2

Java 8, 102 + 101 bayt

java.util.function.BiFunction<String,Integer,String>r=(c,n)->"".valueOf(new char[n]).replace("\0",c);

n->{n-=3;return "╔"+r.apply("╦",n)+"╗\n"+r.apply('╠'+r.apply("╬",n)+"╣\n",-~n)+"╚"+r.apply("╩",n)+"╝";}

Bu, aynı uzunlukta başka bir dize tekrarlayıcıdır:

java.util.function.BiFunction<String,Integer,String>r=(c,n)->{String p=c;for(;--n>0;p+=c);return p;}

Çevrimiçi deneyin!


Fena değil, yaklaşımınızı cevabımdan bile daha düşük yapabilirsiniz. Her şeyden önce BiFunction: yerine bir Java 7 yöntemi kullanarak 78 + 72 bayta (toplam 150) düşürebilir n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}ve String r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);} çevrimiçi olarak deneyebilirsiniz. Ve ikinci yöntem de String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}(63 bayt) olarak değiştirilebilir , bu yüzden toplam 141 bayt
Kevin Cruijssen

Düzeltme, hatta 130 bayta düşürebilirsiniz : n->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"ve String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;} çevrimiçi deneyin.
Kevin Cruijssen

2

C # (.NET Core) , Puan 123 (141 bayt) Puan 118 (136 bayt)

n=>{string a="╔",b="╠",c="╚";for(int i=3;i++<n;a+="╦",b+="╬")c+="╩";a+="╗\n";for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}

Çevrimiçi deneyin!

-5 bayt sayesinde @KevinCruijssen

Açıklama:

n => 
{
    string a = "╔", b = "╠", c = "╚"; //Initialize the first, last and the middle lines with the starting character.
    for (int i = 3; i++ < n;          //Loop n-3 times
        a += "╦", b += "╬")           //Add the middle character to the first and middle line.
        c += "╩";                     //Add the middle character to the last line.
    a += "╗\n";                       //Add the end character to the first line.
    for (b += "╣\n";                  //Add the end character to the first line.
        n-- > 2;)                     //Loop n-2 times.
        a += b;                       //Add the middle line to the first line.
    return a + c + "╝";               //Add the last line and the final character and return.
}

1
Güzel cevap, benden +1. Bir süre geçtiğini biliyorum, ancak çevrimiçi denemeye b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};geçerek 5 bayt daha golf edebilirsiniz for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";} .
Kevin Cruijssen

@KevinCruijssen: Teşekkür ederim.
raznagul

2

Stax , 23 bayt

÷ÅoB↔╒╢Fm|╦a⌐á5µ┐»♫÷d╕Ñ

Çalıştır ve hata ayıkla

İşte ungolfed versiyonu. Eğlenceli, o Stax için aslında daha küçük değil kaynak paketleme önleyecek bir değişmez olarak dahil çünkü edebi karakterler kullanmak.

"2Pfj_EQGG]T"!  packed representation of the 9 characters
3/              split into groups of 3
GG              call into trailing program twice
m               print each row
}               trailing program begins here
1|xv\           [1, --x - 1]; x starts as original input
:B              repeat each element corresponding number of times
                effectively, this repeats the internal row of the matrix
M               transpose door; this way it expands the two dimensions

Bunu çalıştır


1

Mathematica, 106 bayt

(T[a_,b_,c_]:=a<>Table[b,#-3]<>c;w=Column;w[{T["╔","╦","╗"],w@Table[T["╠","╬","╣"],#-2],T["╚","╩","╝"]}])&

Bir TIO (veya eşdeğeri) ekleyebilir misiniz?
Shaggy

1
Goto sandbox.open.wolframcloud.com/app/objects yapıştırın (Ctrl + h), uç ve basın shift + [8] ekleyin butonu
J42161217

Her satır arasında fazladan bir satır sonu var gibi görünüyor, bunun çıktının kendisinden ziyade çıktının oluşturulmasıyla ilgili bir sorun olduğunu söyleyebilir miyim?
Shaggy

@Shaggy wolfram bulutu tüm karakterleri komik, bozuk bir şekilde görüntüler, bu nedenle bu tür görevleri sunmanın en iyi yolu değildir. Ekstra satırlar yoktur ve mathematica'da her şey yolunda görünür. kontrol etmek için test durumunuzu kopyalayıp yapıştırın. Yaptım ve aynı görünüyorlar
J42161217

1

Tamam, 38 karakter

`0:"╔╠╚╦╬╩╗╣╝"{+x+/:3*0,2_x}@&1,|1,-2+

Çevrimiçi deneyin.

k unicode'u iyi işlemek istemiyor gibi görünüyor, bu yüzden OK ile gittim.


1

Toplu, 126 bayt

@set s=
@for /l %%i in (4,1,%1)do @call set s=%%s%%Î
@echo É%s:Î=Ë%»
@for /l %%i in (3,1,%1)do @echo Ì%s%¹
@echo È%s:Î=Ê%¼

CP437 veya CP850'de çalışır. Bu kod sayfalarında şöyle görünür:

@set s=
@for /l %%i in (4,1,%1)do @call set s=%%s%%╬
@echo ╔%s:╬=╦%╗
@for /l %%i in (3,1,%1)do @echo ╠%s%╣
@echo ╚%s:╬=╩%╝

1

Retina , 56 50 bayt

.+
$*╬╣
^╬╬╬
╠
.?
$_¶
T`╠╬╣`╔╦╗`^.*
T`╠╬╣`╚╩╝`.*¶$

Çevrimiçi deneyin! Bir kare kare oluşturarak ve sonra kenarları sabitleyerek çalışır (özellikle kenarlar eklendiğinde üç sütun silinir).


1

PowerShell , 67 bayt

'╔'+'╦'*($x=$args[0]-3)+'╗';,('╠'+'╬'*$x+'╣')*($x+1);'╚'+'╩'*$x+'╝'

Girdi alır $args[0], çıkarır 3, kaydeder $x, uygun sayıda orta bölüm çıkarmak için kapının üst yapısında kullanır. Sonra sahip olduğumuz orta sıraları çıkarıyoruz $x+1. Son olarak, alt sıra üst sıraya benzer. Bunların hepsi boru hattında kaldı ve üstü kapalıWrite-Output öğeler arasına ücretsiz olarak yeni bir satır ekler.

Çevrimiçi deneyin!


1

Perl 5 , 61

60 karakterlik kod (çok baytlı kapı karakterleri dahil 90 karakter) + 1 -p

$_='╔'.'╦'x($n=$_-3)."╗\n";$_.=y/╔╦╗/╠╬╣/r x++$n.y/╔╦╗/╚╩╝/r

Çevrimiçi deneyin!



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.