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.

Luc H
quelle
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
Neil
quelle
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
48

Karotte , 11 Bytes

###
# #
###

Probieren Sie es online!

Das Programm befindet sich im Caret-Modus, wobei #s durch die Eingabe ersetzt werden.

Kritixi Lithos
quelle
26
Das Gefühl, wenn ein Programm auf den ersten Blick völlig ungültig aussieht, ist tatsächlich vollkommen gültig.
Erik der Outgolfer
3
@EriktheOutgolfer schon mal von Perl gehört?
NoOneIsHere
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

Stange
quelle
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
Luis Mendo
quelle
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!

Magische Kraken-Urne
quelle
11

Python 3.6 , 33 Bytes

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

Probieren Sie es online!

Jonathan Allan
quelle
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.
Golar Ramblar
quelle
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>

Zottelig
quelle
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!

Undichte Nonne
quelle
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!

PunPun1000
quelle
5

PHP, 32 Bytes

<?=strtr("000
0 0
000",0,$argn);

Probieren Sie es online!

Jörg Hülsermann
quelle
Interessanterweise <?=$a=$argn,"$a$a\n$a $a\n$a$a$a";(echter Zeilenumbruch statt \ n natürlich) hat genau die gleiche Byteanzahl.
Christoph
@Christoph machen es als Ihre Annäherung. ich habe diesen alternativen weg nicht ausprobiert
Jörg Hülsermann
5

sed, 28 18 bytes

s:.:&&&\n& &\n&&&:

Probieren Sie es online!

eush77
quelle
Dieses neue funktioniert nicht, das alte hat es bearbeitet, aber Sie haben das vergessen: in der Antwort
Luc H
@ Ayoungcoder Sorry, das Finale falsch eingefügt : . Fest.
Eush77
Der Online-Test sollte [Online- Test !] lauten : tio.run/nexus/sed#@19spWelpqYWk6emACLU1Kz@/0/… "sed-TIO Nexus"
Luc H
@ Ayoungcoder Natürlich danke.
Eush77
5

Brain-Flak , 76 70 + 1 = 71 Bytes

Benötigt die -cFlagge

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

Probieren Sie es online!

Weizen-Assistent
quelle
Sie können 6 Bytes speichern , wenn Sie ersetzen (()()()()()){}mit ([])[]{}.
0
Einige Wettbewerbe :)
DJMcMayhem
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
Erik der Outgolfer
quelle
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
)))
DJMcMayhem
quelle
4

C (gcc) , 49 47 Bytes

2 Bytes gespart dank 2501!

j;f(i){for(j=12;j;)putchar(--j%4?j-6?i:32:10);}

Probieren Sie es online! hat einen nachgestellten Zeilenumbruch

Conor O'Brien
quelle
Sie können zwei Bytes speichern, indem Sie Folgendes tun:for(j=11;j;)...
2501
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.

Luis Mendo
quelle
3

Ruby , 27 25 Bytes

2 Bytes gespart dank Level River St

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

Probieren Sie es online!

Alex
quelle
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 '+'):

+++
+ +
+++
Zack C.
quelle
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!

Oliver Ni
quelle
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
chromaticiT
quelle
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

Martyav
quelle
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("#");
CHENGLIANG YE
quelle
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!

Algmyr
quelle
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.

Dan Howell
quelle
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)}

Cyoce
quelle
Würde :trso gut funktionieren wie :gsubhier?
Jordanien
@ Jordan ja, danke!
Cyoce