Buatkan aku lebih banyak!

19

Membuat saya s'more ! Saya beri tahu Anda lebar, jumlah kerupuk graham, jumlah cokelat, dan jumlah marshmallow. Sebuah contoh:

Memasukkan:

Lebar: 10 Graham: 3 Chocolate: 2 Marshmallow: 1.

Keluaran:

GGGGGGGGGG
GGGGGGGGGG
GGGGGGGGGG
CCCCCCCCCC
CCCCCCCCCC
MMMMMMMMMM
GGGGGGGGGG
GGGGGGGGGG
GGGGGGGGGG

Apakah itu mudah? Um ... ya.

Perhatikan bahwa input harus berupa daftar argumen untuk suatu fungsi atau program, bukan string. Anda mungkin memilih Lebar yang pertama, lalu Graham, tetapi pesanan apa pun baik-baik saja.

Kasing uji lengkap jika Anda tertarik.

Cuplikan tumpukan (untuk pengujian, dll.)

Ini untuk menguji output.

var smore = function(width, graham, chocolate, marshmallow){
	return ("G".repeat(width) + "\n").repeat(graham) + 
	("C".repeat(width) + "\n").repeat(chocolate) + 
	("M".repeat(width) + "\n").repeat(marshmallow) + 
	("G".repeat(width) + "\n").repeat(graham);
};
Snippetify(smore);
<script src="https://programmer5000.com/snippetify.min.js"></script>
Width: <input type = "number">
Graham: <input type = "number">
Chocolate: <input type = "number">
Marshmallow: <input type = "number">
<button>Try it out!</button>
<pre data-output></pre>

Catatan:

  • Anda dapat menyertakan baris tambahan di akhir baris terakhir. Anda juga dapat menggunakan \bukan baris baru.
  • Ini adalah .
  • Ada pertanyaan? Komentar dibawah:
programmer5000
sumber
21
Saya mengedit tautan Let Me Google That For You Anda. Itu benar-benar tidak lucu.
Level River St
1
@FelipeNardiBatista ya.
programmer5000
1
Beberapa jawaban mengasumsikan urutan dan format input fleksibel (seperti biasa dalam PPCG), tetapi tantangannya tampaknya membutuhkan urutan tertentu dan mengesampingkan string (tidak yakin apa artinya). Bisakah Anda mengklarifikasi?
Luis Mendo
2
Terima kasih telah mengklarifikasi. Anda kemudian harus menulis ulang kalimat input harus daftar argumen untuk fungsi atau program, bukan string, dengan yang pertama Lebar, lalu Graham, dll . Secara pribadi saya akan mengatakan sesuatu seperti "Format input fleksibel seperti biasa"
Luis Mendo
4
@ programmer5000 tapi mengapa? Jika mereka kalah, itu 90% kemungkinan karena mereka pikir itu tantangan yang membosankan dan sepele. Selain itu, cukup kasar untuk memberi tahu orang lain untuk menjelaskan atau menarik kembali. Mereka memiliki hak untuk mengundurkan diri tanpa komentar.
Rɪᴋᴇʀ

Jawaban:

2

Jelly , 11 byte

ṁ4“GCMG”x×Y

Cobalah online!

Bagaimana itu bekerja

ṁ4“GCMG”x×Y  Main link. Left argument: g, c, m. Right argument: w

ṁ4           Mold 4; repeat g, c, m until length 4 is reached. Yields [g, c, m, g].
  “GCMG”x    Repeat 'G' g times, then 'C' c times, then 'M' m times, and finally
             'G' g times. This yields a string.
         ×   Multiply each character w times. This is essentially a bug, but
             Jelly's × behaves like Python's * (and vectorizes), so it can be
             abused for character repetition.
          Y  Join, separating by linefeeds.
Dennis
sumber
13

Python 2 , 73 48 byte

lambda w,g,c,m:zip(*['G'*g+'C'*c+'M'*m+'G'*g]*w)

Cobalah online!

Membuat versi jawaban yang ditransposisikan, daripada memindahkannya ke format yang benar zip(*l)

Felipe Nardi Batista
sumber
8

05AB1E , 21 19 19 byte

"GCMG"S×|D«‚øvy`.D»

Cobalah online!

Terima kasih atas pengawasan dan Emigna saya.

"GCMG"S×            # Push GCMG, separate, duplicate n times.
        |D«         # Push rest of inputs, doubled.
           ‚ø       # Wrap GCMG array and input array, then zip them into pairs.
             vy`.D» # For each pair, print n of G/C/M/G.

(Lihat jawaban Emigna, lebih baik: /codegolf//a/116787/59376 )

Guci Gurita Ajaib
sumber
1
Anda tampaknya secara tidak sengaja meninggalkan a ©di sana.
Emigna
1
Anda juga bisa menggantinya ¬¸dengan Delemen tambahan yang hilang saat Anda zip.
Emigna
@Emigna Saya suka dan benci fungsi itu.
Magic Octopus Urn
Ya, ini sering sangat menjengkelkan tetapi sekarang dan kemudian (seperti sekarang) ini menjadi berguna :)
Emigna
8

JavaScript (ES6), 71 byte

(W,G,C,M)=>[...'GCMG'].map(X=>`${X.repeat(W)}
`.repeat(eval(X))).join``

Woohoo, kalahkan 3 jawaban JavaScript lainnya!

Darrylyeo
sumber
Bagus, sangat bagus - mendapatkan suara saya.
Shaggy
7

MATL , 17 byte

'GCMG'iK:)Y"!liX"

Format input adalah: input pertama [G, C, M], input kedua W.

Cobalah online!

Penjelasan dengan contoh

Pertimbangkan input [3 2 1] dan 10.

'GCMG' % Push this string
       % STACK: 'GCMG'
i      % Take first input: array of three numbers
       % STACK: 'GCMG', [3 2 1]
K:     % Push [1 2 3 4]
       % STACK: 'GCMG', [3 2 1], [1 2 3 4]
)      % Index (modular, 1-based). This repeats the first entry of the input array
       % STACK: 'GCMG', [3 2 1 3]
Y"     % Run-length decoding
       % STACK: 'GGGCCMGGG'
!      % Transpose. Gives a column vector of chars
       % STACK: ['G'; 'G'; 'G'; 'C'; 'C'; 'M'; 'G'; 'G'; 'G']
l      % Push 1
       % STACK: ['G'; 'G'; 'G'; 'C'; 'C'; 'M'; 'G'; 'G'; 'G'], 1
i      % Take second input: number
       % STACK: ['G'; 'G'; 'G'; 'C'; 'C'; 'M'; 'G'; 'G'; 'G'], 1, 10
X"     % Repeat the specified numbers of times along first and second dimensions
       % STACK: ['GGGGGGGGGG';'GGGGGGGGGG';'GGGGGGGGGG';'CCCCCCCCCC';...;'GGGGGGGGGG']
       % Implicitly display
Luis Mendo
sumber
7

C # , 204 byte


Golf

(w,g,c,m)=>{string G="\n".PadLeft(++w,'G'),C="\n".PadLeft(w,'C'),M="\n".PadLeft(w,'M'),o="".PadLeft(g,'G');o+="".PadLeft(m,'M')+"".PadLeft(c,'C')+o;return o.Replace("G",G).Replace("C",C).Replace("M",M);};

Tidak disatukan

( w, g, c, m ) => {
   string
      G = "\n".PadLeft( ++w, 'G' ),
      C = "\n".PadLeft( w, 'C' ),
      M = "\n".PadLeft( w, 'M' ),
      o = "".PadLeft( g, 'G' );

   o +=
      "".PadLeft( m, 'M' ) +
      "".PadLeft( c, 'C' ) +
      o;

   return o
      .Replace( "G", G )
      .Replace( "C", C )
      .Replace( "M", M );
};

Tidak terbaca dibaca

// Function with 4 parameters
//   w : Width
//   g : Graham
//   c : Chocolate
//   m : Marshmallow
( w, g, c, m ) => {

   // Initialization of vars with the contents
   //    of each line, with a new line at the end
   string
      G = "\n".PadLeft( ++w, 'G' ),
      C = "\n".PadLeft( w, 'C' ),
      M = "\n".PadLeft( w, 'M' ),

      // Trick to reduce the byte count
      //   Initialize the output with n 'G's
      o = "".PadLeft( g, 'G' );

   // Add again n 'M's and n 'C's
   //   Append the 'G's at the end.
   o +=
      "".PadLeft( m, 'M' ) +
      "".PadLeft( c, 'C' ) +
      o;

   // Replce every instance of 'G'/'C'/'M'
   //    with the full line
   return o
      .Replace( "G", G )
      .Replace( "C", C )
      .Replace( "M", M );
};

Kode lengkap

using System;
using System.Collections.Generic;

namespace Namespace {
   class Program {
      static void Main( String[] args ) {
         Func<Int32, Int32, Int32, Int32, String> f = ( w, g, c, m ) => {
            string
               G = "\n".PadLeft( ++w, 'G' ),
               C = "\n".PadLeft( w, 'C' ),
               M = "\n".PadLeft( w, 'M' ),
               o = "".PadLeft( g, 'G' );

            o +=
               "".PadLeft( m, 'M' ) +
               "".PadLeft( c, 'C' ) +
               o;

            return o
               .Replace( "G", G )
               .Replace( "C", C )
               .Replace( "M", M );
         };

         List<Tuple<Int32, Int32, Int32, Int32>>
            testCases = new List<Tuple<Int32, Int32, Int32, Int32>>() {
               new Tuple<Int32, Int32, Int32, Int32>( 1, 1, 1, 1 ),
               new Tuple<Int32, Int32, Int32, Int32>( 1, 1, 1, 2 ),
               new Tuple<Int32, Int32, Int32, Int32>( 1, 1, 2, 1 ),
               //
               // ...
               //
               // The link above contains the code ready to run
               //    and with every test from the pastebin link
               //
               // Yes, it contains 342 tests ready to run.
               //
               // I can barely fit every test on a 1080p screen...
               //    ... and there's 6 tests per line... Jebus...
               //
            };

         foreach( var testCase in testCases ) {
            Console.WriteLine( $"Input:\nWidth: {testCase.Item1,3} Graham: {testCase.Item2,3} Chocolate: {testCase.Item3,3} Marshmellow: {testCase.Item4,3}\nOutput:\n{f( testCase.Item1, testCase.Item2, testCase.Item3, testCase.Item4 )}\n" );
         }

         Console.ReadLine();
      }
   }
}

Rilis

  • v1.0 - 204 bytes- Solusi awal.

Catatan

auhmaan
sumber
Dihargai! : D
auhmaan
7

05AB1E , 17 16 byte

1 byte disimpan berkat carusocomputing .

"GCMG"S×vy²Nè.D»

Cobalah online!

Urutan input adalah W, [G,C,M]

Penjelasan

10, [3,2,1] digunakan sebagai contoh.

"GCMG"S           # push the list ['G','C','M','G']
       ×          # repeat each W times
                  # STACK: ['GGGGGGGGGG', 'CCCCCCCCCC', 'MMMMMMMMMM', 'GGGGGGGGGG']
        v         # for each [string, index] y,N in the list
          ²Nè     # get the amount of layers at index N from the [G,C,M] list
         y   .D   # duplicate the string y that many times
               »  # join strings by newlines
Emigna
sumber
1
"GCMG"S×vy²Nè.D»kekuatan ajaib-kembar, aktifkan! Bentuk, kode 05AB1E! Juga, pertengkaran dapat ditukar, tapi itu masih 16.
Magic Octopus Mm
@carusocomputing: Ini memiliki manfaat tidak meninggalkan sampah yang belum dicetak di tumpukan, tetapi tampaknya sama-sama tidak dapat direduksi ke saya.
Emigna
1
Ini masih 1 byte lebih sedikit dan akan mengalahkan dasi Anda dengan MATL;).
Guci Gurita Sihir
@carusocomputing: Oooh, kapan itu terjadi? Saya yakin itu ketika saya melihatnya. Bagus! ;)
Emigna
Saya sering memposting hal-hal bodoh dan mengeditnya 1 menit setelah saya menyadari saya menjadi idiot.
Magic Gurita Guci
6

Ruby, 47 byte

->w,g,c,m{puts r=[?G*w]*g,[?C*w]*c,[?M*w]*m,r}

terima kasih pada ventero

Ruby, 51 byte

->w,g,c,m{(?G*g+?C*c+?M*m+?G*g).chars{|i|puts i*w}}

Panggil seperti ini:

f=->w,g,c,m{(?G*g+?C*c+?M*m+?G*g).chars{|i|puts i*w}}

f[10,3,2,1]
Level River St
sumber
->w,g,c,m{puts r=[?G*w]*g,[?C*w]*c,[?M*w]*m,r}sedikit lebih pendek
Ventero
5

PowerShell , 49 byte

$a,$b=$args;0..2+0|%{,("$('GCM'[$_])"*$a)*$b[$_]}

Cobalah online!

Mengambil input sebagai empat argumen baris perintah width graham chocolate marshmallow,, menyimpan argumen first ke $adan sisanya menjadi $b(secara implisit sebagai sebuah array). Loop dari rentang 0,1,2,0. Setiap loop, kami indeks menjadi string GCM, melemparkan kembali itu charsebagai string, dan mengalikannya dengan $a(lebar), dan kemudian menggunakan operator-koma ,, mengubahnya menjadi array dengan mengalikan indeks yang sesuai $b(yaitu, berapa banyak lapisan). Array string yang dihasilkan semuanya ditinggalkan di pipa dan output tersirat, dengan garis baru di antara elemen-elemen.

AdmBorkBork
sumber
5

C, 108 105 byte

Terima kasih kepada @ Quentin karena telah menghemat 3 byte!

#define F(i,c)for(;i--;puts(""))for(j=w;j--;)putchar(c);
i,j;f(w,g,c,m){i=g;F(i,71)F(c,67)F(m,77)F(g,71)}

Cobalah online!

Steadybox
sumber
1
#define F(i,c)for(;i--;puts(""))for(j=w;j--;)putchar(c);menghemat tiga byte :)
Quentin
@ Quentin Terima kasih! Saya ingin tahu mengapa saya melewatkan hal itu sejak awal :)
Steadybox
4

Batch, 146 byte

@set s=
@for /l %%i in (1,1,%1)do @call set s=G%%s%%
@for %%w in (%2.%s% %3.%s:G=C% %4.%s:G=M% %2.%s%)do @for /l %%i in (1,1,%%~nw)do @echo%%~xw

Bergantung pada perilaku yang tidak jelas echokarena seringkali dapat mengabaikan simbol di antara echodan teks yang akan digaungkan untuk menciutkan empat loop menjadi loop bersarang.

Neil
sumber
4

V , 22 byte

éGÄÀäjMoC
MÀÄkÀÄHdêÀP

Cobalah online!

Hexdump:

00000000: e947 c4c0 e46a 4d6f 430a 4d1b c0c4 6bc0  .G...jMoC.M...k.
00000010: c448 64ea c050                           .Hd..P

Urutan input adalah

Graham, Marshmallow, Chocolate, Width

Penjelasan:

éG                  " Insert 'G'
  Ä                 " Duplicate this line
   Àäj              " *arg1* times, duplicate this line and the line below it
      M             " Move to the middle line
       o            " Open up a newline, and enter insert mode
        C<cr>M<esc> " Insert 'C\nM'
ÀÄ                  " Make *arg2* copies of this line (Marshmallow)
  k                 " Move up one line
   ÀÄ               " Make *arg3* copies of this line (Chocolate)
     H              " Move to the first line
      dê            " Delete this column
        ÀP          " And paste it horizontally *arg4* times
DJMcMayhem
sumber
Bisakah Anda menambahkan penjelasan?
programmer5000
@ programmer5000 Tentu! Lihat hasil edit saya
DJMcMayhem
4

Excel, 104 byte

Oh Boy! Formula yang membutuhkan jeda baris.

=REPT(REPT("G",A1)&"
",A2)&REPT(REPT("C",A1)&"
",A3)&REPT(REPT("M",A1)&"
",A4)&REPT(REPT("G",A1)&"
",A2)

A1memiliki Lebar
A2memiliki Graham
A3memiliki Coklat
A4memiliki Mallow


Jika pra-format diizinkan, maka Anda dapat memformat sel untuk Teks Vertikal dan mempersingkat rumus menjadi 65 byte:

=REPT(REPT("G",A2)&REPT("C",A3)&REPT("M",A4)&REPT("G",A2)&"
",A1)
Toast insinyur
sumber
4

Jelly , 13 byte

“GCM”ẋ"ṁ4Fẋ€Y

Program diad. Inputnya adalah: [Graham's, Chocolates, Marshmallows], Width.

Cobalah online!

Bagaimana?

“GCM”ẋ"ṁ4Fẋ€Y - Main link: [g,c,m], w    e.g. [1,2,1], 2
“GCM”         - literal ['G', 'C', 'M']
      "       - zip that and [g,c,m] with the dyadic operation:
     ẋ        -     repeat list               [['G'],['C','C'],['M']]
       ṁ4     - mould like [1,2,3,4]          [['G'],['C','C'],['M'],['G']]
         F    - flatten                       ['G','C','C','M','G']
          ẋ€  - repeat €ach w times           [['G','G'],['C','C'],['C','C'],['M','M'],['G','G']]
            Y - join with line feeds          ['G','G','\n','C','C','\n','C','C','\n','M','M','\n','G','G']
              - implicit print                GG
                                              CC
                                              CC
                                              MM
                                              GG
Jonathan Allan
sumber
3

PHP, 85 Bytes

for($m=$argv;$i++<4;)for($c=$m[_2342[$i]]*$m[1];$c;)echo$c--%$m[1]?"":"\n",_GCMG[$i];

atau

for($m=$argv;$i++<4;)for($c=$m[_2342[$i]];$c--;)echo"\n".str_pad("",$m[1],_GCMG[$i]);

Versi Online

PHP, 96 Bytes

<?[$n,$w,$G,$C,$M]=$argv;for(;$i<4;$i++)for($t=${"$n[$i]"};$t--;)echo"\n".str_pad("",$w,$n[$i]);

Versi Online

Diperluas

[$n,$w,$G,$C,$M]=$argv; # $argv[0] must contain a file beginning with "GCMG"
for(;$i<4;$i++) # Take the first 4 values of the filename
for($t=${"$n[$i]"};$t--;) # How many rows should be printed
echo"\n".str_pad("",$w,$n[$i]); # print $w times the actual letter
Jörg Hülsermann
sumber
3

05AB1E , 14 byte

Kode:

…GCM‚øü׬)˜S×»

Menggunakan pengkodean CP-1252 . Cobalah online!

Penjelasan:

…GCM              # Push the string "GCM"
    ‚             # Wrap with the input
     ø            # Transpose the array
      ü×          # Compute the string product of each element (['A', 3] --> 'AAA')
        ¬)˜       # Get the last element and append to the list
           S      # Split the list
            ×     # Vectorized string multiplication with the second input
             »    # Join by newlines and implicitly print
Adnan
sumber
3

Python 2 ,6757 byte

(Sunting: sekarang matriks diizinkan, tidak perlu bergabung dengan baris baru.)

def s(w,g,c,m):g=['G'*w]*g;print g+['C'*w]*c+['M'*w]*m+g
rassar
sumber
3

C # (150 byte)

void S(int w,int g,int c,int m){P(w,g,'G');P(w,c,'C');P(w,m,'M');P(w,g,'G');}void P(int w,int i,char c){while(i-->0)Console.Write("\n".PadLeft(w,c));}

Tidak Disatukan:

void SMores(int w, int g, int c, int m)
{
    Print(w,g,'G');
    Print(w,c,'C');
    Print(w,m,'M');
    Print(w,g,'G');
}
void Print(int w, int i, char c)
{
    while(i-->0)
        Console.Write("\n".PadLeft(w,c));
}
Rik
sumber
3

Java, 138 byte

String s(int w,int g,int c,int m){String b="";int i=-g-c,j;for(;i++<g+m;){for(j=0;j++<w;)b+=i<=-c|i>m?'G':i<=0?'C':'M';b+="\n";}return b;}

Cobalah online!

Penjelasan:

String s(int w, int g, int c, int m) {
    String b = "";
    int i = -g - c, j;              // i is the layer
    for (; i++ < g + m;) {          // Repeat (G+C+M+G) times, starting from -g-c to m+g 
                                    //Layer 0 is the last chocolate layer

        for (j = 0; j++ < w;) {     // Repeat W times
            b += 
                i <= -c | i > m ? 'G': //If before the chocolate or after the marshmellow, output a G
                i <= 0 ? 'C' :      // Else if equal or before last chocolate layer output C
                'M';                //Otherwise output an M
        }
        b += "\n";
    }
    return b;
}
Brenton P.
sumber
Lumayan ... untuk Jawa!
programmer5000
3

Swift, 138 137 134 130 byte

Disimpan 7 byte berkat @Kevin

let f=String.init(repeating:count:)
let r={w,g,c,m in f(f("G",w)+"\n",g)+f(f("C",w)+"\n",c)+f(f("M",w)+"\n",m)+f(f("G",w)+"\n",g)}

Dua fungsi yang mengembalikan nilai yang diharapkan: fadalah fungsi pembantu dan rmerupakan fungsi seperti lamdba aktual yang menghasilkan output. Pemakaian: print(r(10,3,2,1))

Coba lihat!

Tuan Xcoder
sumber
Anda dapat menyimpan beberapa karakter dengan hanya merujuk penginisialisasi string secara langsung ( var f=String.init(repeating:count:);). Dan itu tidak menyelamatkan Anda karakter apa pun tetapi tidak ada biaya sehingga mereka berdua harus benar-benar let.
Kevin
Dan 3 lainnya dengan menjatuhkan argumen eksplisit di r( let r={f(f("G",$0)+"\n",$1)+f(f("C",$0)+"\n",$2)+f(f("M",$0)+"\n",$3)+f(f("G",$0)+"\n",$1)})
Kevin
@Kevin Terima kasih, saya tidak tahu bahwa Anda dapat menginisialisasi nilai untuk sesuatu seperti ini: f=String.init(repeating:count:)...
Mr. Xcoder
@Kevin ketika datang ke saran kedua Anda, sepertinya itu melebihi jumlah byte dalam UTF-8, memeriksa jumlah byte pada TIO, tidak tahu mengapa
Tn. Xcoder
2

JavaScript (ES6), 91 byte

Termasuk trailing newline.

f=

(w,g,c,m)=>(b=(`G`[r=`repeat`](w)+`
`)[r](g))+(`C`[r](w)+`
`)[r](c)+(`M`[r](w)+`
`)[r](m)+b

console.log(f(10,3,2,1))

Shaggy
sumber
2

JS (ES6), 87 byte

x=(w,g,c,m)=>(f=>f`Gg`+f`Cc`+f`Mm`+f`Gg`)(([[x,y]])=>(x.repeat(w)+`
`).repeat(eval(y)))

xbertindak sebagai fungsi lambda mandiri. Hasilnya memiliki baris baru yang tertinggal.

Coba dalam cuplikan:

Florrie
sumber
2

C, 90 byte (berdasarkan jawaban Steadybox )

Mengganti nama variabel dan mengeksploitasi operator preprocessor pengetatan untuk mengurangi parameter makro. Saya harap memposting ide ini karena jawabannya sendiri baik-baik saja :)

#define F(x)for(i=x;i--;puts(""))for(j=w;j--;)printf(#x);
i,j;f(w,G,C,M){F(G)F(C)F(M)F(G)}

TIO link

Quentin
sumber
Akan mengungguli, tetapi mencapai batas suara :(
programmer5000
2

F # ( 148 99 byte)

let s w q="GCMG"|>Seq.iteri(fun i c->for j in 1..(q|>Seq.item(i%3))do printf"%A"("".PadLeft(w,c)))

Pemakaian:

s 10 [2;3;4]

Tidak Disatukan:

let smores width quantities =
    "GCMG"
    |>Seq.iteri(fun i char ->
        for j in 1..(quantities|>Seq.nth(i%3))
            do printf "%A" ("".PadLeft(width,char))) 

Saya masih baru di F #, jadi jika saya melakukan sesuatu yang aneh atau bodoh, beri tahu saya.

Rik
sumber
Tautan ke F # akan menyenangkan.
programmer5000
2

JavaScript ES6, 69 68 66 byte

Terima kasih @Arnauld untuk bermain golf satu byte

a=>b=>"GCMG".replace(/./g,(c,i)=>`${c.repeat(a)}
`.repeat(b[i%3]))

Cobalah online!

Penjelasan

Menerima input dalam format kari (Width)([Graham,Chocolate,Marshmallow])

Menggunakan .replace(/./g,...)menggantikan setiap karakter dalam string GCMGdengan nilai balik dari fungsi(c,i)=>`${c.repeat(a)} `.repeat(b[i%3])

`${c.repeat(a)} `membuat setiap baris graham cracker dengan baris baru ditambahkan .repeat(b[i%3])mengulangi baris ini sebanyak yang diperlukan

fəˈnɛtɪk
sumber
Menggunakan replace()akan menghemat byte:a=>"GCMG".replace(/./g,(c,i)=>`${c.repeat(a[0])}\n`.repeat(a[1+i%3]))
Arnauld
1

JS (ES6), 111 byte

n=`
`,G="G",C="C",M="M",r=(s,t)=>s.repeat(t),(w,g,c,m)=>r(r(G,w)+n,g)+r(r(C,w)+n,c)+r(r(M,w)+n,m)+r(r(G,w)+n,g)
programmer5000
sumber
1

Mathematica 102 Bytes (100 Karakter)

Mendengar s'mores built-in tidak keluar sampai V12.

s=StringRepeat;StringReplace[s@@@({Characters@"GCMG",#/.#[[4]]->#[[1]]})<>"",x_:>x~s~#[[4]]<>"\n"]&

Cukup mudah menggunakan ide membangun kolom terlebih dahulu. Nama fungsi yang panjang menghabiskan 35 byte. Simbol satu kotak yang tampak sebenarnya adalah karakter transpose dan akan menempel ke Mathematica.

Penggunaan: %@{Graham, Chocolate, Marshmallows, Width} mis %@{3, 2, 1, 11}

Kelly Lowder
sumber
1

Java 7, 226 byte

String c(int w,int g,int c,int m){return x(w,'G',g)+x(w,'C',c)+x(w,'M',m)+x(w,'G',g);}String x(int w,char c,int x){String r="";for(;x-->0;r+=x(w,c));return r;}String x(int w,char c){String r="";for(;w-->0;r+=c);return r+"\n";}

ATAU (juga 226 byte ):

String c(int w,int g,int c,int m){return x(w,71,g)+x(w,67,c)+x(w,77,m)+x(w,71,g);}String x(int...a){String r="";for(;a[2]-->0;r+=x(a[0],(char)a[1]));return r;}String x(int w,char c){String r="";for(;w-->0;r+=c);return r+"\n";}

Penjelasan:

String c(int w,int g,int c,int m){  // Main method with four integer parameters and String return-type
  return x(w,'G',g)                 //  Return all Graham-rows
        +x(w,'C',c)                 //   plus all Chocolate-rows
        +x(w,'M',m)                 //   Plus all Marshmallon-rows
        +x(w,'G',g);                //   Plus all Graham-rows again
}                                   // End of main method

String x(int w,char c,int x){       // Separate method (1) with two integers & character parameters and String return-type
  String r="";                      //  Result-String
  for(;x-->0;                       //  For the given amount of rows of a certain type
             r+=x(w,c)              //   Append the result-String with a row of the given character
  );                                //  End of for-loop (implicit / no body)
  return r;                         //  Return the result-String
}                                   // End of separate method (1)

String x(int w,char c){             // Separate method (2) with integer and character parameters and String return-type
  String r="";                      //  Result-String
  for(;w-->0;                       //  For the amount given as width
             r+=c                   //   Append the character to the row
  );                                //  End of for-loop (implicit / no body)
  return r+"\n";                    //  Return the result-String including a new-line
}                                   // End of separate method (2)

Kode uji:

Coba di sini.

class M{
  String c(int w,int g,int c,int m){return x(w,'G',g)+x(w,'C',c)+x(w,'M',m)+x(w,'G',g);}String x(int w,char c,int x){String r="";for(;x-->0;r+=x(w,c));return r;}String x(int w,char c){String r="";for(;w-->0;r+=c);return r+"\n";}

  public static void main(String[] a){
    System.out.print(new M().c(10,3,2,1));
  }
}

Keluaran:

GGGGGGGGGG
GGGGGGGGGG
GGGGGGGGGG
CCCCCCCCCC
CCCCCCCCCC
MMMMMMMMMM
GGGGGGGGGG
GGGGGGGGGG
GGGGGGGGGG
Kevin Cruijssen
sumber
1
Lumayan ... untuk java!
programmer5000
1
@ programmer5000 Hehe, terima kasih! Saya suka bermain golf di Java 7 (dan kadang-kadang 8), meskipun saya pikir itu tidak akan pernah bersaing dengan jawaban lain .. Satu-satunya waktu 'agak bersaing' dengan jawaban Java adalah dengan jawaban 8 byte ini dan jawaban 19 byte ini , sebenarnya mengalahkan Python untuk pertama kalinya. ; p Meskipun bahasa-bahasa golf dengan kiriman 1 atau 2 byte mereka masih meninggalkan Jawa.
Kevin Cruijssen
1

Haskell , 91 byte

import Data.List
(#)=replicate
f w g c m=intercalate"\n"$map(w#)$g#'G'++c#'C'++m#'M'++g#'G'

Seharusnya cukup jelas. Karena tercantum dalam komentar bahwa matriks karakter diperbolehkan, berikut ini adalah versi 58 byte yang mengembalikan daftar string (satu untuk setiap layer):

(#)=replicate
f w g c m=map(w#)$g#'G'++c#'C'++m#'M'++g#'G'
Julian Wolf
sumber