Ich hatte erwartet, als mein erstes Rätsel in PCG etwas Komplexeres zu veröffentlichen, aber eine bestimmte, ähm ... Hausaufgabenfrage zu Stack Overflow hat mich dazu inspiriert, dies zu veröffentlichen. Sie möchten:
Gib das folgende Muster für ein bestimmtes Wort aus, das eine ungerade Anzahl von Buchstaben enthält:
P M R A O R G O R R A P M
Beachten Sie, dass Buchstaben in dem Muster, das Sie drucken möchten, nur einen Springer voneinander entfernt sind. Jede zweite Spalte ist also leer. - (Danke xnor für den Hinweis.)
Regeln
- Die Verwendung von C ++ ist verboten. Da darf ich diese Frage da verlinken.
- Sie können
stdout
eine Zeichenfolge verwenden oder auf beliebige Weise schnell ausgeben (zalert()
. B. in JavaScript). - Wie immer gewinnt der kürzeste Code.
Antworten:
Pyth , 22
Prüfung:
Erläuterung:
quelle
~
war bitweise nicht in Pyth. Dann könnten wirt-lzd
zu+lz~d
- noch 5 Zeichen wechseln .Vz
ist ein ordentlicher Trick: Ich wusste nicht, dass esU<string>
gabrange(len(<string>))
.APL (
37353427)Es nimmt Eingaben von der Tastatur entgegen, wie folgt:
quelle
Python 2 -
94 90 8988Eingang:
Ausgabe:
quelle
i in[j,L+~j]
.L+~j
.+~
Trick ...for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)
, ein Zeichen zu retten? (Ich habe jetzt keinen Zugriff auf Python 2 zum Testen.)Python 3: 75 Zeichen
Für line
i
beginnen wir mit einer Liste von Leerzeichen und setzen die Einträgei
von vorne und hinten so, dass sie den Buchstaben der Eingabezeichenfolge entsprechen. Dann drucken wir das Ergebnis.Python-Strings sind unveränderlich, daher
a
muss es sich stattdessen um eine Liste von Zeichen handeln. Die Listea
muss innerhalb der Schleife initialisiert werden, sonst werden die Änderungen zwischen den Schleifen übertragen. Wir verwendenprint(*a)
, um jedes Zeichen in der Liste mit Leerzeichen zu drucken, was Python 3 erfordert.Die Ausgangsleitungen sind symmetrisch, so dass wir
i
mit einer while-Schleife eher abwärts als aufwärts zählen können .Es funktioniert auch für eine gerade Anzahl von Buchstaben.
quelle
VlzJ*]dlz=@JN@zN=@Jt_N@_zNjdJ
das in Pyth konvertiere, bekomme ich 29 Bytes ... Ich denke, ich muss etwas anderes ausprobieren, um APL zu schlagen. +1 für den Beweis, dass Python 3 Python 2 (manchmal)len("raw_input()") + len("print ") > len("input()") + len("print()")
.input()
es auch in Python 2 gilt (es verhält sich einfach etwas anders). Wenn die Eingabe für die Herausforderung also nicht sehr streng ist, gewinnt Python 2 normalerweise.print" ".join(a)
Ihr Code ist kürzer (82) als meiner.CJam,
2725 BytesProbieren Sie es online aus.
Beispiellauf
Als Beispiel in der Antwort weist jede Zeile ein nachgestelltes Leerzeichen auf.
Wie es funktioniert
quelle
Java - 168
Eine einfache verschachtelte Schleife, hier ist nichts wirklich Besonderes los.
Mit Zeilenumbrüchen:
quelle
Pure Bash, 94 Bytes
quelle
t%l
Berechnungen. Speichern Sie es bei der ersten Verwendung in einer Variablen((x=t%l))
und reduzieren Sie es dann mit der Variablen auf 94 Zeichen.x=t%l
undy=t/l
und es war mehr ... überqueren hat meine Meinung nicht nur zu Verwendung nur xRubin, 64
Erläuterung
String
.n
insgesamt):n
Leerzeichen besteht.i
th undn-i
th (~i
, danke xnor) Leerzeichen durch dasi
th undn-i
th Zeichen der Eingabe.quelle
-i-1
als Bit-Ergänzung tun~i
.gets.size.times{|x|u=?\s*~/$/;u[x]=$_[x];u[~x]=$_[~x];puts u}
(setzt voraus, dass die Eingabe nicht durch eine neue Zeile abgeschlossen wird, zecho -n CODE-GOLF
. B. ). Man kann dann zusätzlichen Gebrauch machen.chars
, um ein anderes Zeichen zu speichern:x=0;gets.chars{|r|u=?\s*~/$/;u[x]=r;u[~x]=$_[-x+=1];puts u}
JavaScript (E6) 101
95 129 136Bearbeiten Sie den falschen Buchstabenabstand. Fest.
Bearbeiten Einfacher und kürzer mit classic for-Schleifen
. Ausgabe über Popup.
Vorherige Version mit .map
Test In FireFox / Firebug - Konsole
Ausgabe
quelle
Befunge-93,
6871Sie können es hier testen . Bei jedem Durchlauf wird ein Eingabedialogfeld angezeigt
~
. Geben Sie Ihr Wort zeichenweise ein (es besagt, dass die Eingabe doch "klunky" ist) und schließen Sie mit einem Leerzeichen ab.Es wird nicht auf der Konsole gedruckt. das wäre doch keine Befunge ohne einen Hauch von Selbstveränderung! Stattdessen ändert es sein eigenes Raster, um die Nachricht anzuzeigen. Nachdem es fertig ist, sieht das Gitter ungefähr so aus:
(Beachten Sie das edle Opfer der Zelle bei (0,0), nachdem wir wissen, dass der Zeiger nicht mehr dorthin geht, um ein Datenelement zu speichern.)
Es funktioniert auch mit Eingaben von gerader Länge. Beachten Sie, dass die Eingabegröße auf 21 Zeichen beschränkt ist, wenn Sie Befunge-93 in einem Befunge-93-Interpreter ausführen, da Befunge-93 auf ein Raster von 80 x 25 beschränkt ist. Wenn Sie es als Befunge-98 ausführen, sollte diese Beschränkung aufgehoben werden.
Bearbeiten - Jetzt funktioniert es mehr in Richtung der beabsichtigten Ausgabe, auf Kosten von nur drei Zeichen Länge.
quelle
Javascript 102
84 85Bearbeiten: Musste Abstand zu beheben. Nicht mehr so klein.
quelle
function(s)
weil du nicht wiederkommst?CJam,
3836353432 BytesTeste es hier. Dies liest das Eingangswort von STDIN. Es funktioniert auch für eine gerade Anzahl von Zeichen. Dies gibt eine nachfolgende Spalte mit Leerzeichen aus, aber ich sehe nichts in den Regeln dagegen.
Erläuterung
Der Inhalt des Stapels wird am Ende des Programms automatisch ausgedruckt.
quelle
l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}
auf einer Serviette als↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞
... GlucksenC 105
zwei leicht unterschiedliche Arten, es zu tun.
Wenn Sie zusätzliche Leerzeichen einfügen möchten, ersetzen Sie diese
putchar(
durchprintf(" %c",
5 zusätzliche Zeichen.quelle
J -
3630 Bytes:Bearbeiten: 6 Zeichen kürzer, Credits gehen an @algorithmshark .
z.B:
Bonus: Funktioniert auch mit Saiten mit gerader Länge:
quelle
Prolog - 240 Bytes
Aufruf:
Lesbar:
quelle
Canvas , 5 Bytes
Probieren Sie es hier aus!
Erläuterung:
quelle
R ,
99989389 BytesProbieren Sie es online!
Zeile 1 liest die Eingabezeichenfolge, teilt sie in Zeichen auf, speichert ihre Länge und erstellt eine Matrix mit dem Wort in der Hauptdiagonale. Die Buchstaben des Wortes werden in einer Identitätsmatrix überlagert (und standardmäßig wiederholt, um der Länge zu entsprechen) und nur die übereinstimmenden Einsen bleiben erhalten, andere werden durch Leerzeichen ersetzt.
Zeile 2 gibt eine Matrix aus, die aus Elementen der Diagonalmatrix oder ihrer horizontal gespiegelten Version besteht, je nachdem, welche größer sind.
−2 + 1 = −1 Byte dank JayCe
−4 Bytes dank Giuseppe
quelle
pmax
und Inlining einiger weiterer Zuweisungen.C # (
214212)(Sicherlich schlecht) Golf Version:
Ungolfed-Version:
Hinweise, Tipps, Tricks oder Bemerkungen sind sehr willkommen, da dies mein erster Versuch bei CodeGolf ist. Ich wollte es einfach mal ausprobieren, obwohl ich weiß, dass meine C # -Byte-Länge die besten Lösungen nicht annähernd verdoppelt;)
Und wie zählt ihr eure Bytes? Ich habe gerade das oben Genannte in ein Quick Watch-Fenster gepostet und habe es getan
.Length
. Ich könnte ein kleines Programm schreiben, um Bytes für mich zu zählen, aber ich wette, es gibt einen einfacheren Weg, den ich noch nicht kenne.quelle
for(;i < l;i++)
.JavaScript (ES6) -
185177175170 BytesFügen Sie dies in die Firefox-Konsole ein und führen Sie es aus als
f('PROGRAM')
:f("CODE-GOLF")
:quelle
Mathematica, 149 Bytes
Eingabe als Parameter an die Funktion übergeben; Funktion gibt die Ausgabezeichenfolge zurück. Am Ende der Ausgabe befindet sich eine nachgestellte Zeile.
Erläuterung: Wir erstellen eine diagonale Matrix mit der Zeichenfolge und erstellen dann eine Kopie davon, die vertikal gespiegelt ist, indem wir
Reverse@#
die Zeilen umkehren. Dann haben wir eine dritte Matrix mit den gleichen Dimensionen, die nur 32 enthält (ASCII-Raum). Wir verwendenMapThread
, um das elementweise Maximum dieser 3 Matrizen zu nehmen. Schließlich setzen wirRiffle
in jede ZeileAppend
ein Leerzeichen , eine neue Zeile am Ende undFlatten
das Ergebnis.quelle
C 119
Dies könnte nicht als C ++ kompiliert werden, daher hoffe ich, dass ich nicht gegen Regeln verstoßen habe :)
quelle
i=0
undj=0
wird nicht benötigt, da globale Variablen auf Null initialisiert werden. 3. Sie könnenmain(l,v)char**v;
anstelle von verwendenmain(int l,char**v)
. 4. Wenn Sie aktualisieren ,i
wiei+=puts("")
können Sie loswerden der äußeren Schleife die geschweiften Klammern bekommen.Perl - 90
Es könnte möglich sein, einige weitere Zeichen daraus herauszuholen:
89
+1
für-n
.Laufen mit:
Ausgabe:
quelle
T-SQL: 180
Übernahme der Eingabe von der Variablen @i
Dadurch werden einzelne Zeichen vom Anfang bis zum Ende in eine Folge von Leerzeichen eingefügt bzw. dekrementiert.
Testergebnis
quelle
PowerShell
11810297Ausgänge:
quelle
Jelly , 11 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 81 Byte
EDIT : -1 Danke Joe King. Ich habe nicht gesehen, dass TIO eine vorformatierte Direktpaste für CG enthält.
Probieren Sie es online!
quelle
-i-1
kann sein+~i
C # 208
quelle
t+=i==j?s[i]:i==n-j-1?s[n-i-1]:"";
.GolfScript 46 ( DEMO )
quelle
Egal wie lange, es muss immer eine Antwort geben ...
Java -
289234 BytesUngolfed:
Die Ausgabe, mies gemacht, ist:
Fügte dasVerdammt, ich bin echt beschissen.import java.util.Scanner
Innere des Codes hinzu, weil ich mich nie daran erinnere, ob die Importe für die Byteanzahl zählen ...quelle
from math import floor as f
ein bisschen betrügerischSystem.out.print
Aufrufe mit ein paar ternären Operatoren zu einer kombinieren .System.out.print
Aufrufs am Ende.C # (192/170)
Oder als "Main () only":
quelle