Beni bir daha yap!


19

Beni bir daha yap ! Size genişliği, graham krakeri miktarını, çikolata miktarını ve hatmi miktarını söylüyorum. Bir örnek:

Giriş:

Genişliği: 10 Graham: 3 Çikolata: 2 Marshmallow: 1.

Çıktı:

GGGGGGGGGG
GGGGGGGGGG
GGGGGGGGGG
CCCCCCCCCC
CCCCCCCCCC
MMMMMMMMMM
GGGGGGGGGG
GGGGGGGGGG
GGGGGGGGGG

Bu kadar kolay mı? Um ... evet.

Girdinin bir işleve ya da programa ilişkin bağımsız değişkenlerin bir listesi olması gerektiğini unutmayın; dize değil. İlk önce Genişlik'i, sonra Graham'ı seçebilirsiniz, ancak herhangi bir sipariş iyidir.

Eğer ilgileniyorsanız tam test vakaları.

Yığın snippet'i (test vb. İçin)

Bu çıktıyı test etmektir.

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>

Notlar:

  • Son satırın sonuna bir satırsonu işareti ekleyebilirsiniz. Ayrıca \bir satırsonu yerine de kullanabilirsiniz .
  • Bu .
  • Sorusu olan? Aşağıdaki yorum:

21
Let For Google For You bağlantınızı düzenledim. Gerçekten komik değildi.
Level River St

1
@FelipeNardiBatista evet.
programmer5000

1
Bazı cevaplar esnek giriş sırası ve biçimi varsaymaktadır (her zamanki gibi PPCG'de), ancak zorluk belirli bir sipariş gerektiriyor ve dizeleri dışlıyor (bunun ne anlama geldiğinden emin değil). Açıklayabilir misin?
Luis Mendo

2
Açıkladığınız için teşekkürler. Daha sonra girdinin, bir işleve veya bir programa yönelik argümanların bir listesi olması, bir dize değil, ilki Genişlik, sonra Graham vb . Şahsen ben "Giriş biçimi her zamanki gibi esnek" gibi bir şey söyleyebilirim
Luis Mendo

4
@ programmer5000 ama neden? Eğer aşağı düştüylerse, bunun% 90 olması sıkıcı ve önemsiz bir zorluk olduğunu düşünüyor. Dahası, insanlara açıklamasını veya geri çekmesini söylemek oldukça kaba. Yorum yapmadan aşağı oy hakkı vardır.
Rɪᴋᴇʀ

Yanıtlar:


2

Jöle , 11 bayt

ṁ4“GCMG”x×Y

Çevrimiçi deneyin!

Nasıl çalışır

ṁ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.


8

05AB1E , 21 19 19 bayt

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

Çevrimiçi deneyin!

- Gözetim ve Emigna sayesinde.

"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.

(Emigna'nın cevabına bakın, daha iyi: /codegolf//a/116787/59376 )


1
Yanlışlıkla ©orada bir a bırakmış gibisin.
Emigna

1
Ayrıca yerini alabilecek ¬¸ile Dsize zip ekstra unsurlar kaybolur olarak.
Emigna

@Emigna Bu işlevselliği hem seviyorum hem de nefret ediyorum.
Sihirli Ahtapot Urn

Evet, genellikle çok sinir bozucu ama şimdi ve sonra (şimdi olduğu gibi) yararlı oluyor :)
Emigna

8

JavaScript (ES6), 71 bayt

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

Woohoo, diğer 3 JavaScript yanıtını yen!


Güzel, çok güzel - oyumu alır.
Shaggy

7

MATL , 17 bayt

'GCMG'iK:)Y"!liX"

Giriş formatı: ilk giriş [G, C, M], ikinci giriş W.

Çevrimiçi deneyin!

Örnek ile açıklama

Girişleri [3 2 1] ve 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

7

C # , 204 bayt


golfed

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

Ungolfed

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

Okunmamış okunabilir

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

Tam kod

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

Salıverme

  • v1.0 - 204 bytes- İlk çözüm.

notlar


Takdir! : D
auhmaan

7

05AB1E , 17 16 bayt

Carusocomputing sayesinde 1 bayt kaydedildi .

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

Çevrimiçi deneyin!

Giriş sırası W, [G,C,M]

açıklama

10, [3,2,1] örnek olarak kullanılmıştır.

"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

1
"GCMG"S×vy²Nè.D»harika ikiz güçler, aktive! 05AB1E kodunun biçimi! Ayrıca, argümanlar değişti, ama hala 16
Magic Octopus Urn

@ carusocomputing: Yığının üzerinde baskısız bir saçmalık bırakmamak gibi bir yararı var, ama benim için de aynı şekilde indirgenemez görünüyor.
Emigna

1
Hala 1 bayt daha az ve MATL ile kravatınızı yenecek;).
Sihirli Ahtapot Urn

@carusocomputing: Oooh, bu ne zaman oldu? Gördüğümde 17 yaşında olduğundan emindim. Güzel! ;)
Emigna

Aptal olduğumu anladıktan 1 dakika sonra sık sık aptalca şeyler yayınlarım ve düzenlemeler yaparım.
Sihirli Ahtapot Urn

6

Ruby, 47 bayt

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

ventero sayesinde

Ruby, 51 bayt

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

Bu şekilde arayın:

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

f[10,3,2,1]

->w,g,c,m{puts r=[?G*w]*g,[?C*w]*c,[?M*w]*m,r}biraz daha kısa
Ventero

5

PowerShell , 49 bayt

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

Çevrimiçi deneyin!

Girdiyi dört komut satırı bağımsız değişkeni olarak alır, width graham chocolate marshmallowilkini içine $ave geri kalanını $b(örtük olarak bir dizi olarak) depolar . Aralıktan döngüler 0,1,2,0. Her döngü, dizeye dizine ekleriz, bunu bir dize olarak GCMyeniden charyayınlarız ve $a(genişlik) ile çarparız ve sonra virgül operatörünü kullanarak ,, uygun dizini $b(yani, kaç tane katmanlar). Ortaya çıkan dize dizilerinin tümü boru hattında bırakılır ve çıktılar, öğeler arasında yeni bir satır ile örtüktür.


5

C, 108105 bayt

3 bayt tasarruf ettiği için @Quentin'e teşekkürler!

#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)}

Çevrimiçi deneyin!


1
#define F(i,c)for(;i--;puts(""))for(j=w;j--;)putchar(c);üç bayt kaydeder :)
Quentin

@Quentin Teşekkürler! Neden ilk etapta kaçırdım acaba :)
Steadybox

4

Toplu, 146 bayt

@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

Dört döngüyü iç içe bir döngüye daraltmak için echogenellikle arasındaki sembolü echove yankılanacak metni görmezden gelebileceği belirsiz davranışlarına dayanır .


4

V , 22 bayt

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

Çevrimiçi deneyin!

HexDump:

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

Giriş sırası

Graham, Marshmallow, Chocolate, Width

Açıklama:

é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

Bir açıklama ekleyebilir misiniz?
programmer5000

@ programmer5000 Elbette! Düzenlememi görün
DJMcMayhem

4

Excel, 104 bayt

Ah, oğlum! Satır kesmeleri gerektiren bir formül.

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

A1Genişliği
A2var Graham
A3var Çikolata
A4var Mallow


Ön biçimlendirmeye izin veriliyorsa, hücreyi Dikey Metin için biçimlendirebilir ve formülü 65 bayta kısaltabilirsiniz:

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

4

Jöle , 13 bayt

“GCM”ẋ"ṁ4Fẋ€Y

İkili bir program. Girişler: [Graham's, Chocolates, Marshmallows], Width.

Çevrimiçi deneyin!

Nasıl?

“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

3

PHP, 85 Bayt

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

veya

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

Çevrimiçi Sürümler

PHP, 96 Bayt

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

Çevrimiçi sürüm

Expanded

[$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

3

05AB1E , 14 bayt

Kod:

…GCM‚øü׬)˜S×»

CP-1252 kodlamasını kullanır . Çevrimiçi deneyin!

Açıklama:

…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

3

Python 2 ,6757 bayt

(Düzenle: şimdi matrislere izin verildiği için, yeni satıra katılmanıza gerek yok.)

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

3

C # (150 bayt)

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

Ungolfed:

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

3

Java, 138 bayt

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

Çevrimiçi deneyin!

Açıklama:

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


3

Swift, 138 137 134 130 bayt

@Kevin sayesinde 7 bayt kaydedildi

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

Beklenen değeri döndüren iki işlev: fyardımcı bir işlevdir ve rçıktıyı üreten gerçek lamdba benzeri işlevdir. Kullanımı: print(r(10,3,2,1))

Bunu kontrol et!


Doğrudan dize başlatıcısına ( var f=String.init(repeating:count:);) doğrudan başvurarak birkaç karakter kaydedebilirsiniz . Ve size hiçbir karakter kazandırmaz, ancak hiçbir maliyeti yoktur, bu yüzden her ikisi de gerçekten olmalıdır let.
Kevin

Ve 3 daha açık ve net argümanlar bırakarak 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 Teşekkürler, böyle bir şeye bir değer başlatabileceğiniz hakkında hiçbir fikrim yoktu: f=String.init(repeating:count:)...
Bay Xcoder

@Kevin, ikinci önerinize gelince, UTF-8'deki bayt sayısını aşmış gibi görünüyor, TIO'daki bayt sayısını kontrol etti, neden bilmiyorum
Bay Xcoder


2

JavaScript (ES6), 91 bayt

Sondaki satırsonu içerir.

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


2

JS (ES6), 87 bayt

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

xbağımsız bir lambda fonksiyonu olarak işlev görür. Sonuçta bir satırsonu vardır.

Snippet'te deneyin:


2

C, 90 bayt ( Steadybox'ın cevabına göre )

Değişkenleri yeniden adlandırdı ve makro parametrelerini azaltmak için stringification önişlemci operatörünü kullandı. Umarım bu fikri kendi cevabı olarak göndeririz :)

#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 bağlantısı


Olumlu oy, ancak isabet sınırı :(
programmer5000

2

F # ( 148 99 bayt)

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

Kullanımı:

s 10 [2;3;4]

Ungolfed:

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

Hala F # için yeniyim, bu yüzden garip veya aptalca bir şey yaptıysam lütfen bana bildirin.


F # bağlantısı iyi olurdu.
programmer5000

2

JavaScript ES6, 69 68 66 bayt

Bir bayt golf için teşekkürler @Arnauld

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

Çevrimiçi deneyin!

açıklama

Girdi biçiminde alır (Width)([Graham,Chocolate,Marshmallow])

Kullanarak, .replace(/./g,...)dizedeki her karakteri GCMGişlevden döndürülen değerle değiştirir(c,i)=>`${c.repeat(a)} `.repeat(b[i%3])

`${c.repeat(a)} `graham krakerinin her satırını bir satırsonu ekleyerek oluşturur, .repeat(b[i%3])bu satırı gerekli sayıda tekrarlar


Kullanmak replace()bir bayt tasarrufu sağlar:a=>"GCMG".replace(/./g,(c,i)=>`${c.repeat(a[0])}\n`.repeat(a[1+i%3]))
Arnauld

1

JS (ES6), 111 bayt

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)

1

Mathematica 102 Bayt (100 Karakter)

Yerleşiklerin V12'ye kadar çıkmadığını duydum.

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

İlk önce bir sütun oluşturma fikrini kullanarak oldukça basit. Uzun işlev adları 35 bayt harcar. Bir kutu görünümlü sembol aslında bir devrik karakterdir ve Mathematica'ya iyi yapışır.

Kullanım: %@{Graham, Chocolate, Marshmallows, Width} eg %@{3, 2, 1, 11}


1

Java 7, 226 bayt

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

VEYA (ayrıca 226 bayt ):

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

Açıklama:

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)

Test kodu:

Burada deneyin.

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

Çıktı:

GGGGGGGGGG
GGGGGGGGGG
GGGGGGGGGG
CCCCCCCCCC
CCCCCCCCCC
MMMMMMMMMM
GGGGGGGGGG
GGGGGGGGGG
GGGGGGGGGG

1
Fena değil ... java için!
programmer5000

1
@ programmer5000 Hehe, teşekkürler! Ben hiç hatta diğer yanıtlarla yarışacak sanmıyorum, ancak Java 7 (ve bazen 8) içinde golf gibi ben .. bir Java cevap 'biraz yarıştı' sadece zaman oldu bu 8 bayt cevap ve bu 19 byte cevap aslında Python'u ilk kez geride bıraktı. ; p 1 veya 2 baytlık gönderimleri olan golf dilleri hala Java'nın tozunda kalmasına rağmen.
Kevin Cruijssen

1

Haskell , 91 bayt

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

Kendini açıklayıcı olmalı. Bir yorumda karakter matrislerine izin verildiği belirtildiği için, burada bir dizgi listesi (her katman için bir tane) döndüren 58 baytlık bir sürüm var:

(#)=replicate
f w g c m=map(w#)$g#'G'++c#'C'++m#'M'++g#'G'
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.