Generuj pudełka!


19

Twoim zadaniem jest generowanie pól przy użyciu dowolnego znaku ASCII w odniesieniu do podanych danych wejściowych.

Przypadki testowe

1 1   --> =====
          =   =
          =====

1 2   --> =========
          =   =   =
          =========

2 1   --> =====
          =   =
          =====
          =   =
          =====

2 2   --> =========
          =   =   =
          =========
          =   =   =
          =========

2 5   --> =====================
          =   =   =   =   =   =
          =====================
          =   =   =   =   =   =
          =====================

Wejście

  • Dane wejściowe można pobrać z jednego z poniższych

    • stdin
    • Argumenty wiersza polecenia
    • Argumenty funkcyjne (2 argumenty, po jednym dla każdej liczby)
  • Dane wejściowe, jeśli zostaną pobrane z stdinargumentów lub wiersza poleceń, będą zawierać dwie dodatnie liczby całkowite, oddzielone spacją.

  • Dwie liczby oznaczają liczbę pól w każdej kolumnie i rzędzie

Wynik

  • Pola muszą być wyprowadzane w stdout(lub najbliższym odpowiedniku)
  • Każde pudełko powinno mieć trzy poziome odstępy

Zasady

  • Obie liczby będą większe niż 0, ale nie przekroczą 1000
  • Do wyświetlania pól można użyć dowolnego widocznego znaku. (o ile nie są zbyt surowe dla oka!)
  • Możesz napisać pełny program lub funkcję.
  • Nie powinno być żadnych niepotrzebnych znaków oprócz opcjonalnego końcowego znaku nowej linii.

Punktacja

To jest , więc wygrywa najkrótsze przesłanie (w bajtach).

Odpowiedzi:



10

Siatkówka , 57 bajtów

1(?=.* (1*))
$1#$1#


1(?=(1*#1*#)*$)
=   
1
====
#
=#

Pobiera dane wejściowe unarne z końcowym znakiem nowej linii.

Każda linia powinna przejść do własnego pliku i #powinna zostać zmieniona na nową linię w plikach. Jest to niepraktyczne, ale możesz uruchomić kod w postaci pliku z -sflagą, zachowując #znaczniki (i zmieniając końcowy znak nowej linii również #na wejściu). Jeśli chcesz, możesz zmienić #powrót do nowych linii w danych wyjściowych. Na przykład:

> echo -n 11 111#|retina -s boxes|tr # '\n'
=============
=   =   =   =
=============
=   =   =   =
=============

Metoda: 5 pojedynczych kroków podstawienia. Dwa pierwsze (4 pierwsze linie) Tworzy 2*N+1przez Msiatkę tych i następnych 3 etapach (6 linii) format go do wymaganej mocy.

Łańcuchy pośrednie (rozdzielone przez -'s):

11 111
------------------
111
111
111
111
 111
------------------
111
111
111
111
111
------------------
111
=   =   =   
111
=   =   =   
111
------------------
============
=   =   =   
============
=   =   =   
============
------------------
=============
=   =   =   =
=============
=   =   =   =
=============

Jeden plik na linię zawsze wydaje się bardzo dziwnym wyborem projektowym.
— curiousdannii

1
@curiousdannii Zostało to zrobione w ten sposób, aby znak nowej linii był użyteczny w wyrażeniach regularnych bez ucieczki, ale planuje się zmianę na bardziej rozsądny format 1-pliku.
— randomra

8

JavaScript ( ES6 ), 83

Funkcja z parametrami wierszy i kolumn. Za pomocą ciągów szablonów istnieją 2 osadzone znaki nowej linii, które są znaczące i zliczane.

Wyjście przez alert(popup). Jako alertużytku proporcjonalny czcionki, możemy uzyskać lepszy rezultat przy użyciu litery o szerokości podobna do przestrzeni zamiast =.

Przetestuj w Firefoksie za pomocą konsoli, aby uzyskać prawdziwe alertdane wyjściowe, lub uruchom poniższy fragment kodu.

f=(r,c)=>{for(x=y="|";c--;)x+="||||",y+="   |";for(o=x;r--;)o+=`
${y}
`+x;alert(o)}

// TEST

// redefine alert to avoid that annoying popup during test
alert=x=>O.innerHTML=x

test=_=>([a,b]=I.value.match(/\d+/g),f(a,b))

test()
<input id=I value='2 3'><button onclick="test()">-></button>
<pre id=O></pre>


Uruchom fragment kodu nie działa dla mnie, po prostu zobacz pole z „2 3” w środku i strzałką, która wydaje się sugerować, że należy kliknąć go, aby uzyskać wynik. Użycie przycisku pełnej strony lub wypróbowanie innej przeglądarki niczego nie zmienia.
— Dennis Jaheruddin

@DennisJaheruddin, To samo dzieje się w przypadku korzystania z chrome (nie obsługuje ES6). Spróbuj firefox.
— Spikatrix

1
@DennisJaheruddinTest in Firefox
— edc65

7

JavaScript (ES6), 75 73

Używając obfitych repeatwywołań, powtarzamy |, a następnie powtarzamy |z końcowymi spacjami i powtarzamy oba te powtórzenia, aby utworzyć wiersze:

f=(y,x)=>alert(((s="|"[r="repeat"](x*4)+`|
`)+"|   "[r](x)+`|
`)[r](y)+s)

(Nowe linie są znaczące, zgodnie z sugestią edc65 użycia ciągów szablonów).

Skrawek:

<input id="x" type="range" max="10" min="1" step="1" value="3"><input id="y" type="range" max="10" min="1" step="1" value="2"><pre id="o"></pre><script>function f(y,x){return ((s="|"[r="repeat"](x*4)+"|\n")+"|   "[r](x)+"|\n")[r](y)+s};function redraw(){document.getElementById("o").innerHTML=f(document.getElementById("y").value,document.getElementById("x").value)};document.getElementById("x").onchange=redraw;document.getElementById("y").onchange=redraw;document.getElementById("x").oninput=redraw;document.getElementById("y").oninput=redraw;redraw();</script>

Bez ciągów szablonów, bez ponownego użycia nazwy metody i z dodanymi białymi znakami:

f=(y,x)=>alert(
    (
      (s="|".repeat(x*4)+"|\n") + 
      "|   ".repeat(x)+"|\n"
    ).repeat(y)+s
)

(Korzystanie z zalecenia edc65 w celu |uzyskania lepszych odstępów wizualnych).


7

Pip, 29 24 = 23 + 1 bajtów

Wymaga -nflagi. Pobiera wysokość i szerokość jako argumenty wiersza poleceń i buduje pola 1s.

([1X4m]XbRLa+1)@<v.1R0s

Wyjaśnienie:

                         a,b are cmdline args; m is 1000; v is -1; s is " " (implicit)
 [1X4m]                  List containing 1111 and 1000
       Xb                String repetition of each element b times
         RLa+1           Repeat the list a+1 times
(             )@<v       Now we have one row too many at the end, so take everything
                         but the last item (equiv to Python x[:-1])
                  .1     Concatenate a 1 to the end of each row
                    R0s  Replace 0 with space
                         Print, joining list on newlines (implicit, -n flag)

Ten program w dużym stopniu wykorzystuje fakt, że ciągi są liczbami, a liczby są ciągami w Pipie. (A trzy spacje w tych polach były w sam raz, aby skorzystać z wbudowanej mzmiennej!)

Oto, w jaki sposób lista jest budowana przy użyciu danych wejściowych 2 3:

[1111;1000]
[111111111111;100010001000]
[111111111111;100010001000;111111111111;100010001000;111111111111;100010001000]
[111111111111;100010001000;111111111111;100010001000;111111111111]
[1111111111111;1000100010001;1111111111111;1000100010001;1111111111111]
[1111111111111;"1   1   1   1";1111111111111;"1   1   1   1";1111111111111]

I końcowy wynik:

C:\> pip.py 2 3 -ne "([1X4m]XbRLa+1)@<v.1R0s"
1111111111111
1   1   1   1
1111111111111
1   1   1   1
1111111111111

Więcej na Pip


6

Perl, 72 63 52 50 bajtów

Moja najkrótsza wersja wykorzystuje jeszcze $/bardziej zwięźle znak nowej linii:

$ perl -e 'print((($,="="."   ="x pop.$/)=~s/./=/gr)x(1+pop))' 2 5
=====================
=   =   =   =   =   =
=====================
=   =   =   =   =   =
=====================

Poprzednia aktualizacja umieszcza najczęściej puste linie w separatorze rekordów wyjściowych $,i drukuje listę linii ciągłych.

$ perl -e 'print((($,="="."   ="x pop."\n")=~s/./=/gr)x(1+pop))' 2 5

Poprzednia wersja może być nieco jaśniejsza dla zwykłego czytelnika:

$ perl -E 'say($y=($x="="."   ="x pop)=~s/./=/gr);for(1..pop){say$x;say$y}' 2 5

Pierwsza wersja użyta @ARGVzamiast pop:

$ perl -E 'say($y=($x="="."   ="x$ARGV[1])=~s/./=/gr);for(1..$ARGV[0]){say$x;say$y}' 2 5

5

Python 2, 58 57 bajtów

Dość prosta implementacja.

def f(x,y):a="="*(4*y+1);print(a+"\n="+"   ="*y+"\n")*x+a

Sprawdź to tutaj.

Dzięki Sp3000 za oszczędność jednego bajtu.


5

GNU sed -r, 160

Westch, myślałem, że będzie mniejszy, ale i tak jest. Niestety wyrażenia regularne sed nie mają żadnych możliwości wyszukiwania.

:
s/(.*)1$/   =\1/;t
s/([= ]+)/\1\n\1/
:b
s/   (.*\n)/===\1/;tb
s/(1*)1 $/\n\1/
:c
s/([^\n]*\n[^\n]*\n)(1*)1$/\1\1\2/;tc
s/(=+)(.*)/\1\2\1/
s/(^|\n)(.)/\1=\2/g

Przyjmowanie danych wejściowych jako jednostkowe z STDIN:

$ sed -rf boxes.sed <<< "11 111"
=============
=   =   =   =
=============
=   =   =   =
=============
$

4

CJam, 25 bajtów

q~)S3*'=5*+4/f*3f>\)*1>N*

Wypróbuj online w interpretatorze CJam .

Jak to działa

q~                        e# Read H and W from STDIN.
   S3*'=5*+               e# Push "   =====".
           4/             e# Chop into ["   =" "===="].
  )          f*           e# Repeat each string W+1 times.
               3f>        e# Cut off the first three characters.
                  \)*     e# Repeat the resulting array H+1 times.
                     1>   e# Remove the first string.
                       N* e# Join the lines.

4

Cudowny, 168 bajtów

Ta odpowiedź działa tylko do 255 x 255, a nie 1000 x 1000, ze względu na ograniczenia języka Marbelous. Pracuję nad biblioteką 32-bitową, ale nie będzie ona gotowa w najbliższym czasie.

Wejście jest dostarczane jako dwa parametry wiersza poleceń lub parametry funkcji na płycie głównej.

@2@3}1@0
SLEL//>0\/
@3@1}0--
}1&0@0/\&0
@1/\@2}1\/
:SL
..}0@0
&0/\>0&0
EN..--\/
{0@0/\ES
:EL
..@0
..>0EN
}0--\/
@0/\EX
:EX
}0
\/3D3D3D3D
:ES
}0
\/3D202020
:EN
}0
{03D0A

Pseudo kod:

MB(H,W):
    EL(W)
    for 1..H:
        SL(W)
        EL(W)
EL(W):
    for 1..W:
        EX()
    EN()
SL(W):
    for 1..W:
        ES()
    EN()
EX():
    print "===="
ES():
    print "=   "
EN():
    print "=\n"

3

CJam 52 51 46 41 bajtów

l~:B;:A;'=:U{{U4*}B*N}:V~{U{SZ*U}B*NUV}A*

Dzięki Sp3000 za -5 znaków

Podziękowania dla Martina Büttnera ♦ za kolejne 5 znaków

Spróbuj


3

funkcja c, 81

x,y;f(h,w){for(;y<=h*2;y++)for(x=0;x<w*4+2;x++)putchar(x>w*4?10:x&3&&y&1?32:61);}

Program testowy:

x,y;f(h,w){for(;y<=h*2;y++)for(x=0;x<w*4+2;x++)putchar(x>w*4?10:x&3&&y&1?32:61);}

int main (int argc, char **argv)
{
  f(2, 3);
}

x;f(h,w){for(w=w*4+2;x<=w*h*2+w;x++)putchar(x%w?x/w%2?x%w%4!=1?32:61:61:10);}

1
Powinienem był najpierw spojrzeć na inne odpowiedzi = /, mój komentarz jest dłuższą wersją odpowiedzi Reto Koradi.

tak, bardzo się starałem (i nie udało mi się), aby uzyskać to w jednej (krótszej) pętli
— Digital Trauma

3

PHP4.1, 76 71 69 bajtów

To jest tak golfa, jak tylko mogę.

$R=str_repeat;echo$R(($T=$R('-',4*$H+1))."
|{$R('   |',$H)}
",$V),$T;

Oczekuje to, że klucz Hbędzie miał liczbę linii i Vliczbę pól w linii.

Używam -i |właśnie dlatego pudełka faktycznie wyglądają jak pudełka. W razie potrzeby mogę go zmienić na =. Nie ma znaczenia zastosowany znak.
Opuszczenie, -a |także pomaga zrozumieć bałagan, który się dzieje.


Stara metoda, 76 bajtów:

for($R=str_repeat;$H--;)echo$T=$R('-',($V*4)+1),"
|{$R('   |',$V)}
";echo$T;

Przykład wyniku:

http://localhost/file.php?H=2&V=3

-------------
|   |   |   |
-------------
|   |   |   |
-------------

3

Julia, 59 bajtów

(n,m)->(l="="^(4m+1)*"\n";print(l*("="*"   ="^m*"\n"*l)^n))

Tworzy to nienazwaną funkcję, która przyjmuje dwie liczby całkowite jako dane wejściowe i drukuje wynik do STDOUT. Aby to nazwać, nadaj mu nazwę, np f=(n,m)->....

Niegolfowane + wyjaśnienie:

function f(n, m)
    # Store the solid row
    l = "="^(4m + 1) * "\n"

    # Print all rows by repeating a pattern n times
    print(l * ("=" * "   ="^m * "\n" * l)^n)
end

Przykłady:

julia> f(2, 3)
=============
=   =   =   =
=============
=   =   =   =
=============

julia> f(1, 5)
=====================
=   =   =   =   =   =
=====================

Wszelkie sugestie są mile widziane.


3

bash + coreutils, 57

dc -e"2do$2 4*1+^1-pd8*F/1+$1si[fli1-dsi0<c]dscx"|tr 0 \ 

Służy dcdo drukowania liczb binarnych, które mają 1s dla krawędzi pola i 0s dla spacji.

  • liczba jedynek X jest obliczana przez 2 ^ (width * 4 + 1) - 1, a następnie wypychana i drukowana
  • 10001...0001liczba jest obliczana , a potem pchnąłX* 8 / 15 + 1
  • stos jest następnie zrzucany heightrazy

trNastępnie konwertuje 0s do znaków spacji.

Wynik

$ ./boxes.sh 2 4
11111111111111111
1   1   1   1   1
11111111111111111
1   1   1   1   1
11111111111111111
$ 

3

R, 83 81

Jako funkcja bez nazwy przyjmująca hi jako parametry. Konstruuje pierwszą i drugą linię w wektorze dla każdego wiersza i powiela go hrazy. Dołącza wektor do dolnej linii i catwysuwa wektor za pomocą, fillaby ograniczyć długość linii. Teraz korzysta z dowolnej widocznej reguły postaci.

function(h,w)cat(rep(c(A<-rep(1,w*4+2),rep('   1',w)),h),A[-1],fill=w*4+1,sep='')

Testowe uruchomienie

> f=function(h,w)cat(rep(c(A<-rep(1,w*4+2),rep('   1',w)),h),A[-1],fill=w*4+1,sep='')
> f(4,2)
111111111
1   1   1
111111111
1   1   1
111111111
1   1   1
111111111
1   1   1
111111111
> 

3

Python 3 2, 160 87 85 79 bajtów

Wiem, że to może być golfed dużo więcej, chciałbym kilka wskazówek jak to jest moja pierwsza próba w golfa.

def d(x,y):
    for i in[1]*x:print'='*(4*y+1)+'\n'+'=   '*(y+1)
    print'='*(4*y+1)

Dzięki wskazówkom @Cool Guy i @ Sp3000 zmniejszyłem rozmiar do nieco powyżej połowy.

Np .: d (3,3)

=============
=   =   =   =   
=============
=   =   =   =   
=============
=   =   =   =   
=============

Wypróbuj tutaj .

Przepraszam za końcowe białe znaki.


1
Poziom wcięcia można zmniejszyć.
— Spikatrix

3
Nie musisz budować listy, a następnie dołączyć. Ciągi można mnożyć'='*(4*y+1)
— Sp3000

1
Ustawienie w=4*y+1oszczędza 3 bajty.
— DLosc

@Cool Guy Używam tabulacji, a nie 4 spacji.
— nsane

Oh ok Nie zauważyłem tego.
— Spikatrix

2

KDB (Q), 37 bajtów

{(3+2*x-1)#(5+4*y-1)#'(4#"=";"=   ")}

Wyjaśnienie

                      (4#"=";"=   ")     / box shape
           (5+4*y-1)#'                   / extend y axis
 (3+2*x-1)#                              / extend x axis
{                                   }    / lambda

Test

q){(3+2*x-1)#(5+4*y-1)#'(4#"=";"=   ")}[2;5]
"====================="
"=   =   =   =   =   ="
"====================="
"=   =   =   =   =   ="
"====================="

2

JavaScript, 92 85 bajtów

Miałem nadzieję, że będzie to krótsza odpowiedź niż inna odpowiedź JS (dobra robota jak zawsze, edc65), ale no cóż. Mam przeczucie, że matematykę można pograć w golfa.

f=(r,c)=>(x=>{for(i=s='';(y=i++/x)<r-~r;)s+=i%x?' *'[-~y%2|!(-~i%4)]:'\n'})(4*c+2)||s

Niestety, nie mogę pomóc w obliczeniach matematycznych - moja głowa kręci się ... ale oto kilka mikroopatów: f=(r,c)=>(x=>{for(i=s='';(y=i++/x)<r-~r;)s+=i%x?' *'[-~y%2|!(-~i%4)]:'\n'})(4*c+2)||s-> 85
— edc65

@ edc65 to świetnie, dzięki! Rzeczy takie jak 2*r+1=> r-~rsą dokładnie tym, co miałem na myśli, grając w matematykę, a ten konkretny jest genialny. :)
— vvye

2

Oktawa, 69 65 64

y=ones([2,4].*input()+1);y(1:2:end,:)=y(:,1:4:end)=4;char(y+31)

Dzięki DLosc za wskazanie problemów, które doprowadziły do ​​-1

Pobiera dane wejściowe [1 1]i wyjściowe:

#####
# #
#####

Możesz także wpisać „1” i otrzymać 1x1. Jeśli dane wejściowe naprawdę muszą być 1 1, rozmiar wzrasta do88 8584 :

y=ones([2,4].*eval(['[',input(0,'s'),']'])+1);y(1:2:end,:)=y(:,1:4:end)=4;char(y+31)

Uwaga: Matlab nie zezwala na tworzenie łańcuchów lub danych Octave (liczba całkowita), ale oto wersja Matlab ( 67 ):

y=ones([2,4].*input('')+1);y(1:2:end,:)=4;y(:,1:4:end)=4;char(y+31)

2

C, 76 bajtów

w,n;f(r,c){for(w=c*4+2,n=w*r*2+w;n--;)putchar(n%w?n/w%2&&n%w%4-1?32:61:10);}

Wywoływany jako funkcja z liczbą wierszy i kolumn jako argumentów. Na przykład:

f(5, 2)

2

CJam, 30 29 bajtów

Nowa wersja z nadmiarowymi +na końcu usunięta (dzięki, Dennis):

l~_4*)'=*N+:F\'=S3*+*'=+N++*F

Wiem, że Dennis opublikował już rozwiązanie CJam, które pokonuje to o mile. Ale to moja pierwsza próba w CJam, więc to cud, że w ogóle działa. :)

Dość brutalna siła. Tworzy pierwszą linię ze 4 * H + 1 =znaków, a następnie drugą linię z =powtarzanych Hczasów, z kolejną =dodaną. Następnie łączy dwie linie, powtarza cały Vczas, a następnie dodaje kolejną kopię pierwszej linii.

Mam wrażenie, że mam zbyt wiele manipulacji na stosie, a nawet zapisałem pierwszą linię w zmiennej, ponieważ musiałem tasować rzeczy na stosie jeszcze bardziej.

Ogólnie niezbyt elegancki, ale musisz gdzieś zacząć ... a ja najpierw chciałem spróbować prostego problemu.


Na +koniec nie potrzebujesz . CJam drukuje cały stos.
— Dennis

2

CJam, 23

q~[F8]f{2b*1+' f+N}*_0=

Wypróbuj online

Wyjaśnienie:

q~        read and evaluate the input (height width)
[F8]      make an array [15 8] - 1111 and 1000 in base 2
f{…}      for width and each of [15 8]
  2b      convert the number to base 2
  *       repeat the digits "width" times
  1+      append a 1 to the array of digits (right edge)
  ' f+    add the space character to each digit (0->' ', 1->'!')
  N       push a newline
*         repeat the resulting array "height" times
_0=       copy the first line (bottom edge)


1

Java, 181

Mam nadzieję, że według

Możesz napisać pełny program lub funkcję.

jest zgodny z regułami, aby policzyć bajty funkcji , która w tym przypadku wynosi 181

import static java.lang.System.*;
public class Boxes
{
    public static void main(String[] args)
    {
        Boxes b=new Boxes();
        System.out.println("1,1:");
        b.b(1,1);
        System.out.println("1,2:");
        b.b(1,2);
        System.out.println("2,1:");
        b.b(2,1);
        System.out.println("2,2:");
        b.b(2,2);
        System.out.println("2,5:");
        b.b(2,5);
    }

    void b(int R, int C){String s="",e=s,x,y,z=s,a="====",n="=\n";int r,c;for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="=   ";}s+=x+n+y+n;}for(c=C;c-->0;){z+=a;}s+=z+n;out.println(s);}
}

Dane wyjściowe są nieprawidłowe. Patrz wyjście nr 2: „ Każde pudełko powinno mieć trzy poziome odstępy ”. Twój kod wyświetla dwie spacje, a nie trzy
— Spikatrix

@CoolGuy Przeliczył to - teraz 2 bajty więcej, ale to niewiele zmienia ...
— Marco13,

1
dobrze. +1. Zaoszczędź dwa bajty, zmieniając for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="= ";}s+=x+n+y+n;}nafor(r=R;r-->0;s+=x+n+y+n){x=y=e;for(c=C;c-->0;y+="= "){x+=a;}}
— Spikatrix

1

C #, 153 151 150

To naprawdę nie może konkurować, ale tutaj jest tylko dla zabawy:

(h,w)=>{string s="=",e="\n",a="====",b="   =",m=a,o;int i=0,j;for(;i++<=h*2;){o=s;for(j=0;j++<w+1;o=m)System.Console.Write(o);m=m==a?b:a;s=e+s;e="";}}

Jak uruchomić:

public class Program
{
    public static void Main()
    {
        new System.Action<int, int>((h,w)=>{string s="=",e="\n",a="====",b="   =",m=a,o;int i=0,j;for(;i++<=h*2;){o=s;for(j=0;j++<w+1;o=m)System.Console.Write(o);m=m==a?b:a;s=e+s;e="";}})(3, 4);
    }
}

Otwarty na ulepszenia.


zamień ciąg na var.
— CSharpie

Niestety nie jest to dozwolone. Zobacz to
— pmudra,

1
Zadeklarowanie tych intpoza pętlą może zaoszczędzić bajt.
— Spikatrix

1

Python 2.7, 66 bajtów.

Wiem, że w Pythonie są już lepsze rozwiązania, ale to najlepsze, jakie wymyśliłem.

def f(x,y):a,b,c="="*4,"   =","\n=";print "="+a*y+(c+b*y+c+a*y)*x

Przykład:

f(3,4)

=================
=   =   =   =   =
=================
=   =   =   =   =
=================
=   =   =   =   =
=================

Przykro nam, ale powoduje to niepoprawny wynik dla przypadków testowych 2,3 i 5. Zmieszałeś kolumny i wiersze i uzyskałeś odwrotnie.
— Spikatrix,

1

Ruby, 57 48 45

f=->h,w{l=?=*w*4+?=;(l+$/+'=   '*w+"=
")*h+l}

Stosowanie:

print f[2,5]

Dzięki manatwork za oszczędność 3 bajtów.


Dwie małe możliwości poprawy: '='→ ?=i "<LF>"→ $/.
— manatwork

Kolejny mały: ?=*(w*4+1)→?=+?=*w*4
— manatwork

1

Java, 123 119 bajtów

void p(int h,int w){String b="=",d="\n=";for(;w-->0;d+="   =")b+="====";for(d+="\n"+b;h-->0;b+=d);System.out.print(b);}

Nadużywanie parametrów wejściowych jako liczników znacznie pomogło w zmniejszeniu rozmiaru kodu.

Podziękowania dla Cool Guy za sugerowanie nadużywania składni.


Zagraj w golfa bardziej, używając forpętli zamiast whilepętli.
— Spikatrix,

Niestety dla (; w -> 0;) ma taką samą długość jak podczas (w -> 0)
— ECS

1
Miałem na myśli while(w-->0){d+=" =";b+="====";}-> for(;w-->0;b+="====")d+=" =";który oszczędza trzy bajty
— Spikatrix

Masz rację. Właściwie udało mi się wycisnąć z tego 4 bajty dzięki twojej sugestii.
— ECS

1

SAS, 117 119

macro a array a[0:1]$4('#   ' '####');do x=1 to 2+2*&x-1;t=repeat(a[mod(x,2)],&y-1);put t $char%%eval(&y*3). '#';end;%

Przykład:

%let x=4;
%let y=4;
data;a;run;

Wynik:

#############
#   #   #   #
#############
#   #   #   #
#############
#   #   #   #
#############
#   #   #   #
#############

Czy jest jakiś kompilator online, w którym mógłbym to przetestować? BTW, zgodnie z twoim wynikiem, twój program generuje nieprawidłowe dane wyjściowe. Zobacz wyjście2: Każde pudełko powinno mieć trzy poziome odstępy
— Spikatrix

@CoolGuy, masz rację, nie złapałem tego, zaktualizowałem swój post. Możesz wypróbować SAS na żądanie , byłby to najmniej kłopotliwy sposób na uzyskanie dostępu do kompilatora online bez konfigurowania własnej instancji AWS
— Fried Egg

Twój pierwszy link nie działa dla mnie. Chrome dajeDNS_PROBE_FINISHED_NXDOMAIN
— Spikatrix

Wypróbuj ten, chociaż pierwszy link działa dobrze dla mnie SAS na żądanie lub kliknij link na tej stronie do „Centrum sterowania” tutaj
— Fried Egg

Nie wiem dlaczego, ale przejście do centrum kontroli powoduje taki sam błąd, jak wspomniany w moim wcześniejszym komentarzu: /
— Spikatrix
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.