Versuche ein Quadrat zu machen!


20

Aufgabe

Erstellen Sie bei einem druckbaren Nicht-Whitespace-Zeichen eine 3x3-Quadrat-Darstellung dieser Eingabe. Wenn zum Beispiel die Eingabe ist #, dann ist die Ausgabe:

###
# #
###

Regeln

  • Das Ausgabeformat ist streng, obwohl ein abschließender Zeilenumbruch zulässig ist. Dies bedeutet, dass das Leerzeichen in der Mitte und die zwei Zeilenumbrüche zwischen den drei Zeilen erforderlich sind.

Testfälle

Eingang: #

Ausgabe:

###
# #
###

Eingang: A

Ausgabe:

AAA
A A
AAA

Eingang: 0

Ausgabe:

000
0 0
000

Wertung

Das ist . Kürzeste Antwort in Bytes gewinnt.


2
Die Tatsache, dass die Größe festgelegt ist, ermöglicht eine gewisse Optimierung. Antworten aus der verknüpften Herausforderung werden hier wahrscheinlich nicht wettbewerbsfähig sein. Ich glaube nicht, dass es sich um ein Duplikat handelt
Luis Mendo,

12
Ich war derjenige, der das ablehnte, weil es eine einfache, langweilige Herausforderung war. Ich bin normalerweise ein Fan von einfachen Herausforderungen, da sie ein guter Ort für neue Golfer sind, aber das fühlt sich einfach zu einfach an.
Shaggy

32
@Ayoungcoder Es ist ein durchaus triftiger Grund, eine Herausforderung abzulehnen.
Weizen-Assistent

2
@ Shaggy: In Bezug auf die Schwierigkeit, das Programm zu schreiben, und die Schwierigkeit, das Programm zu golfen, gibt es Schwierigkeiten. Dieses Programm ist einfach zu schreiben, aber ich bin mir nicht sicher, ob es einfach ist, Golf zu spielen.

5
Meiner Meinung nach ist dies eine gute Herausforderung für Leute, die gerade erst mit Code-Golf anfangen. Es ist gut, eine Mischung aus Schwierigkeiten zu haben. Das Überladen eines Typs geht zu Lasten eines Teils der Community. Ich bin froh, dass diese Herausforderung geschrieben wurde.
isaacg

Antworten:


30

Kohle , 5 3 Bytes

B³S

Probieren Sie es online! Bearbeiten: 40% gespart dank @carusocomputing. Erläuterung:

B   Draw a box
³   3×3 (second dimension is implicit if omitted)
S   Using the input character

3
Ich habe das Gefühl, das betrügt ...> _>
HyperNeutrino

14
Dann, natürlich, B³Sum den lebenden Mist zu betrügen.
Magic Octopus Urn

1
Warum sollte das betrügen? @ Carusocomputing und Neil seine Antwort scheint mir richtig
Luc H

1
@Ayoungcoder "betrügen" wie in "scheint billig" nicht wie in "wörtlich betrügen"; Der Code verfügt über eine integrierte Funktion zum "Drucken eines Felds mit den Maßen n unter Verwendung des Zeichens s". Der kürzeste Code für diese Herausforderung lautet: 1. Eingabe lesen. 2. Dimension definieren. 3. Box drucken. Die Antwort auf diese Herausforderung liegt logischerweise nicht unter 2 Bytes, wenn die Eingabe implizit ist.
Magic Octopus Urn

2
@carusocomputing Ah, die Ironie - das implizite quadratische Verhalten ärgerte mich in meiner Antwort, den euklidischen Algorithmus erneut zu visualisieren .
Neil


19

Python 2 , 32 Bytes

lambda s:s+s.join(s+'\n \n'+s)+s

Probieren Sie es online!
Denn s='a': die Mitte s+'\n \n'+serzeugt a\n \naund s.joindreht es ein (fettgedruckte sind diejenigen, die es hinzufügen), weil sie eine Zeichenfolge als Iterationszeichen akzeptiert und dann mit den beiden fehlenden Zeichen umgeben istaa\na a\naaa.join.join


Wie werden die Zeichen in die mittlere Zeile eingefügt? Könnten Sie bitte die Antwort erklären?
Notts90

1
@ Notts90 fügte eine Erklärung hinzu c:
Rod

danke ich wusste nicht .join könnte eine Zeichenfolge durchlaufen.
Notts90

Dies funktioniert auch in Python 3. Sehr cool übrigens. (Mit der gleichen Methode wird auch 3*c+c.join('\n \n')+3*cum 32
Jonathan Allan,

15

MATL , 5 Bytes

3Y6*c

Probieren Sie es online!

Erläuterung

3Y6   % Push predefined literal: [true true true; true false true; true true true]
*     % Implicitly input a character. Multiply element-wise by its code point
c     % Convert to char. Implicitly display. Char 0 is displayed as space

1
das war schnell! habe nicht erwartet, dass ein 5 Byte so schnell kommt.
Luc H

2
Code-Golf-Sprachen, wissen Sie ... ¯ \ _ (ツ) _ / ¯
Luis Mendo

11
Natürlich, denn warum hätten Sie kein vordefiniertes Literal für [wahr wahr wahr; wahr falsch wahr; wahr wahr wahr]
PunPun1000

11
@ PunPun1000 Das wird (zusammen mit der Faltung) häufig verwendet, da es sich um die Standard- 8-Konnektivitätsmaske ( Moore Neighboorhood ) handelt
Luis Mendo,

3
@LuisMendo Das ist großartig, lerne hier jeden Tag etwas Neues, nicht immer über Code-Golfen
PunPun1000

13

05AB1E , 8 Bytes

4×ð«û3ô»

Probieren Sie es online!

INPUT    # ['R']                 | Implicit Input: 'R'
---------#-----------------------+-------------------------------
4×       # ['RRRR']              | Repeat string 4 times.     
  ð      # ['RRRR',' ']          | Push space onto top of stack.
   «     # ['RRRR ']             | Concatenate last 2 items.
    û    # ['RRRR RRRR']         | Palindromize.
     3ô  # [['RRR','R R','RRR']] | Split into 3 pieces.
       » # ['RRR\nR R\nRRR']     | Join with newlines
---------#-----------------------+-------------------------------
OUTPUT   # RRR                   | Implicitly print the top
         # R R                   | of the stack on exit.
         # RRR                   |

Ursprüngliche Idee, 30 als Binärzahl zu verwenden (unvollendet, jemand anderes versucht dies in einer anderen Sprache):

05AB1E , 12 Bytes

30bûTIð«‡3ô»

Probieren Sie es online!



11

Python 3.6 , 33 Bytes

lambda c:f'{3*c}\n{c} {c}\n{3*c}'

Probieren Sie es online!


Kein Problem. Es sieht so aus, als würde 3.6.1 ausgeführt. Wenn Sie versuchen, import sysund dann sys.versionin der Repl, gibt es 3.6.1 statt 3.5.2 zurück. Keine Ahnung, warum oben dann 3.5.2 steht, sie haben da wohl einen Fehler gemacht!
numbermaniac

2
Oh, haha, ein Fall von "glaube nicht immer, was du liest" - danke!
Jonathan Allan

9

RPL (Reverse Polish Lisp) , 60 Zeichen

→STR 1 4 START DUP NEXT " " + SWAP + 4 ROLLD + + SWAP 2 PICK

(Beachten Sie, dass "→" auf dem HP48 und kompatiblen Rechnern ein einzelnes Zeichen ist.)

Stellt visuell dar, was Sie möchten, indem Sie drei Elemente auf dem Stapel haben:

3.: "###"
2.: "# #"
1.: "###"

Wenn Sie darauf bestehen, es als eine Zeichenfolge zurückzugeben, müssen Sie auch die Zeilenumbrüche hinzufügen und die Zeichenfolgen kombinieren, die Sie als Übung dem nächsten Tester überlassen haben.

Eingabe (kann alles sein, muss kein String sein) Eingegebener Code Ergebnis

Erläuterung:

  • →STR: Machen Sie das letzte Objekt im Stapel zu einer Zeichenfolge. (Die Eingabe kann also alles sein, zB eine Zahl.)
  • 1 4: Schieben Sie die Nummer 1und 4auf den Stapel.
  • START [...] NEXT: Wie eine for-Schleife, jedoch ohne Zugriff auf die Zählervariable. Nimmt zwei Zahlen aus dem Stapel (hier haben wir nur geschoben 1und 4) und führt den Code [...]der entsprechenden Zeiten (hier vier Mal).
  • DUP: Dupliziere den letzten Eintrag im Stapel.
  • " ": Schieben Sie die Zeichenfolge (dh die Zeichenfolge mit einem Leerzeichen) auf den Stapel.
  • +: Nehmen Sie zwei Objekte aus dem Stapel und geben Sie sie addiert für Zeichenfolgen zurück: Verkettet.
  • 4: Schieben Sie die Nummer 4auf den Stapel.
  • ROLLD: Nimmt das letzte Element (hier: 4das wir gerade verschoben haben) vom Stapel und rollt das nächste Element so weit nach unten, wie es die Zahl angibt, die wir gerade vom Stapel genommen haben.
  • SWAP: Vertauscht die beiden letzten Stapelelemente.
  • 2: 2Zum Stapel schieben.
  • PICK: Nimmt ein Element (hier: Das, was 2wir gerade in den Stapel geschoben haben), interpretiert es als Zahl n und kopiert das n-te Element aus dem Stapel.

7

JavaScript, 28 Byte

c=>c+c+c+`
${c} ${c}
`+c+c+c

Versuch es

f=
c=>c+c+c+`
${c} ${c}
`+c+c+c
o.innerText=f(i.value="#")
i.oninput=_=>o.innerText=f(i.value)
<input id=i maxlength=1><pre id=o>


Ich denke, Sie könnten in der Lage sein, ein oder zwei Bytes zu speichern, indem Sie das Ergebnis c+'\n'+cin einer temporären Datei speichern .
Neil

Egal, ich habe falsch gezählt, es sind immer noch 28 Bytes.
Neil

@Neil: Ja, es gibt ein paar Optionen, um einer Variablen etwas zuzuweisen, aber alle kommen mit 28 Bytes oder mehr.
Shaggy

6

Gelee , 8 Bytes

1 Byte danke an Erik den Outgolfer.

x4,`Ks3Y

Probieren Sie es online!


Ich habe mich gefragt, wie ich das machen soll ... ich hatte x4µ©;⁶;®œs3Y12 Bytes, weil ich nicht herausfinden konnte, wie ich vermeiden kann, dass die Wiederholung meinen gesamten Zwischenschritt multipliziert, aber schön!
HyperNeutrino

1
Sie wissen, es gibt eine eingebaute Kzu tun j⁶. Oh, und es gibt eine schnelle `Möglichkeit, eine Dyade in eine Monade umzuwandeln, indem auf beiden Seiten dasselbe Argument verwendet wird.
Erik der Outgolfer

5

Java 7, 56 55 Bytes

-1 Danke an Leaky Nun für den Hinweis auf den Raum, den ich verpasst habe

String a(char s){return"...\n. .\n...".replace('.',s);}

Ersetzt einfach die Punkte durch das angegebene Zeichen für die Eingabe #:

...       ###
. .  =>   # #
...       ###

Probieren Sie es online!





5

Pyth, 7 Bytes

jc3.[9d

Versuchen Sie dies online.

Erläuterung:

jc3.[9d Expects quoted input.
  3     3
     9  9
      d ' '
        Q (eval'd input) as implicit argument
   .[   Pad B on both sides with C until its length is a multiple of A
 c      Split B to chunks of length A, last chunk may be shorter
j       Join A on newlines

4

Brain-Flak , 61 , 59 Bytes

(((((((({})))<([][][]())>)<(([][][]()){})>)<([]()()())>)))

Probieren Sie es online!

Dies sind 58 Byte Code- +1Byte für das -cFlag, das die ASCII-Eingabe und -Ausgabe ermöglicht.

Erläuterung:

(((
   (
    (
     (

      #Duplicate the input 3 times
      ((({})))

#Push 10 (newline)
<([][][]())>

     #Push the input again
     )

#Push 32 (space)
<(([][][]()){})>

    #Push the input again
    )

#Push 10 (newline)
<([]()()())>)

#Push input 3 times
)))



3

Oktave , 36 Bytes

x=repmat(input(0),3);x(5)=32;disp(x)

Probieren Sie es online!

Erläuterung

Dadurch wird eine 3x3-Zeichenmatrix erstellt, in der das Eingabezeichen wiederholt wird, und der fünfte Eintrag in der Hauptreihenfolge der Spalten (dh in der Mitte) wird auf 32(ASCII für Leerzeichen) gesetzt.



3

Ruby , 27 25 Bytes

2 Bytes gespart dank Level River St

->x{[s=x*3,x+" "+x,s]*$/}

Probieren Sie es online!


Wenn Sie Antworten wie diese machen, geben Sie bitte auch die Fußzeile als Code an, da dies ohne diese Funktion nicht möglich ist
Luc H

@Ayoungcoder Dies ist eine anonyme Funktion. Sie können es einer Variablen zuweisen ( f=...) und dann mitf.call(...)
Cyoce

1
Sie können eine wörtliche Newline in Anführungszeichen verwenden "\n", um 1 Byte zu sparen. Noch besser $/ist es, eine spezielle Variable zu verwenden, die standardmäßig auf newline gesetzt ist und 2 Bytes spart.
Level River St

1 Byte weniger als die trLösung. nette Arbeit
Cyoce

3

Brainfuck, 40 Bytes

+++++[->++<<++++++>],...>.<.<++.>.>.<...

Probieren Sie es online! Benötigt eine Implementierung, die links von der Startposition zugreifen kann.

Siehe auch: Gravitons Brainfuck-Antwort, die einen anderen Ansatz hat (aber länger ist).


Erläuterung:

Brainfuck kann mit seinem begrenzten Befehlssatz eine Menge cooler Tricks machen. Leider verwendet diese Antwort keine von ihnen, da es (in Form von Bytes) billiger ist, nur alles fest zu codieren.

+++++[->++<<++++++>]                         Sets the cells to |5*6|>0<|5*2|
,                   Takes input character into the middle cell | 30|>#<| 10|
...                                Print the top of the square | 30|>#<| 10| ###
>.                                   Print a newline character | 30| # |>10|    \n
<.                               Print another input character | 30|>#<| 10| #
<++.                  Add 30+2 for a space character and print |>32| # | 10|  _
>.                   And just print the 5 remaining characters | 32|>#<| 10|   #
>.                                                             | 32| # |>10|    \n
<...                                                           | 32|>#<| 10| ###

# = Eingabezeichen, _ = Leerzeichen (ASCII 32), \ n = Newline (ASCII 10)


Ergebnisse in dieser schönen Box (für Eingabe '+'):

+++
+ +
+++

3

05AB1E , 7 6 Bytes

-1 Byte dank Carusocomputing.

ж¹ðJû

Erläuterung:

         # Implicit input                  # ['R']
 Ð       # Repeat string three times       # ['R', 'R', 'R']
  ¶      # Push newline character          # ['R', 'R', 'R', '\n']
   ¹     # Push first input                # ['R', 'R', 'R', '\n', 'R']
    ð    # Push space                      # ['R', 'R', 'R', '\n', 'R', ' ']
     J   # Join stack                      # ['RRR\nR ']
      û  # Palindromize ("abc" -> "abcba") # ['RRR\nR R\nRRR']
         # Implicit output                 # []

Verwendet die CP-1252- Codierung. Probieren Sie es online!


Oooo ... Schlau, ich denke nie darüber nach, wie Palindromisieren bei Newlines funktioniert.
Magic Octopus Urn

ж¹ðJûfür 6 Bytes.
Magic Octopus Urn

3

Pyth , 11 Bytes

jc++K*z4dK3

Probieren Sie es online!

Erläuterung:

jc++K*z4dK3    expects a single char as input

j              joins on new line
 c        3    chops array into 3 sized pieces
  +            joins +K*z4d and K
   +           joins K*z4 and d
    K          initialize variable K as *z4
     *z4       duplicate the input 4 times
        d      variable initialized to string " "
         K     calls variable K, in this case *z4

Willkommen bei PPCG!
Stephen


2

Swift3, 50 Bytes

[1,2,3].map{$0==2 ? print(c+" "+c) : print(c+c+c)}

Hierbei wird der ternäre Operator verwendet, um je nach Zeile unterschiedliche Zeichenfolgen zu drucken.

Probieren Sie es online aus



2

C #, 50 Bytes

a=>Console.Write(a+a+a+"\n"+a+" "+a+"\n"+a+a+a);

Testfall:

var f = new Action<string>(
a=>Console.Write(a+a+a+"\n"+a+" "+a+"\n"+a+a+a);
);
f("#");

Sie müssen sich voll und ganz die in Frage kommen , ConsoledhSystem.Console..
TheLethalCoder

2

Vim, 9 Tastenanschläge

Vorausgesetzt, das Eingabezeichen ist in einem Puffer vorhanden, macht vim dies unkompliziert

x3pY2plr<space>

Wahrscheinlich gibt es hier einige Magic Vim-Befehle (es scheint immer welche zu geben), daher sind Verbesserungsvorschläge willkommen. Nur ein Tastendruck hinter V!


Ich bin mir ziemlich sicher, dass dies so kurz wie möglich ist. Gute Antwort!
DJMcMayhem

2

Z80- oder 8080-Baugruppe, 21 Byte Maschinencode

Angenommen, ein speicherzugeordnetes E / A-Gerät:

              Z80 8080
3A xx xx ld a, (Eingabe) lda-Eingabe; Eingabezeichen holen
11 0A 20 ld de, 200ah lxi d, 200ah; Leerzeichen & Zeilenumbruch
21 yy yy ld hl, Ausgabe lxi h, Ausgabe; Ausgabeadresse abrufen
77 ld (hl), a mov m, a; Ausgabezeichen * 3
77 ld (hl), a mov m, a
77 ld (hl), a mov m, a
73 ld (hl), e mov m, e; Ausgabe Newline
77 ld (hl), a mov m, a; Ausgabezeichen
72 ld (hl), dmovm, d; Ausgaberaum
77 ld (hl), a mov m, a; Ausgabezeichen
73 ld (hl), e mov m, e; Ausgabe Newline
77 ld (hl), a mov m, a; Ausgabezeichen * 3
77 ld (hl), a mov m, a
77 ld (hl), a mov m, a
76 halt hlt; oder C9 ret

Kein Dolmetscher nötig!

Hexdump:

0000: 3A 00 FF 11 0A 20 21 01 FF 77 77 77 73 77 72 77
0010: 73 77 77 77 76

Dabei ist die Eingabeadresse auf FF00h und die Ausgabeadresse auf FF01h abgebildet. Die tatsächlichen Adressen hängen von der tatsächlichen Hardware ab. Dies setzt natürlich voraus, dass die E / A speicherabgebildet ist. Wenn es sich um eine E / A-Zuordnung handelt, werden mehrere zusätzliche Bytes benötigt, da die E / A-Anweisungen für Z80 und 8080 jeweils aus zwei Bytes bestehen. Dies setzt auch voraus, dass das Ausgabegerät 0Ah als Zeilenumbruch interpretiert und keinen CR (0Dh) benötigt, der dem Programm zusätzliche 4 Bytes hinzufügt.


Willkommen bei Codegolf.stackexchange. Anscheinend haben Sie alles unter Kontrolle. Lesen Sie die Hilfe und die Liste der häufig gestellten Fragen. Guter erster Beitrag
Rohan Jhunjhunwala

Können Sie einen Hexdump Ihres Codes bereitstellen?
CalculatorFeline

Die hexadezimalen Bytes befinden sich in der ersten Spalte, aber wenn Sie einen "reinen" Hexdump möchten, habe ich ihn hinzugefügt.
Dan Howell

2

J-Uby , 22 20 Bytes

-2 Bytes dank @Jordan

:tr&"...
. .
..."&?.

Erläuterung

String#trist Rubys zeichenweise Ersetzungsmethode. Das erste &bindet :tran "...\n. .\n..."und das zweite trifft teilweise '.'auf es zu. Tatsächlich ist dies->s{"...\n. .\n...".tr('.',s)}


Würde :trso gut funktionieren wie :gsubhier?
Jordanien

@ Jordan ja, danke!
Cyoce
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.