Erstellen Sie ein Alphabet mit 4 Kopien jedes Buchstabens


27

Beachten Sie, dass dies nicht dasselbe ist wie das viermalige Drucken des Alphabets .

Diese Aufgabe besteht darin, ein Programm zu schreiben, mit dem vier Exemplare jedes Buchstabens des englischen Alphabets (ein Buchstabe pro Zeile) in der Standardausgabe generiert werden:

A
A
A
A
B
B
B
B

etc.

Die Ausgabe sollte nach jedem Buchstaben neue Zeilen enthalten.

Großbuchstaben ohne zusätzliche Ausgabe werden bevorzugt. Kleinbuchstaben und / oder zusätzliche Leerzeichen sind jedoch zulässig, wenn die Lösung durch Groß- / Kleinschreibung verlängert wird.

EDITIERT ZUM HINZUFÜGEN: Die Lösung muss vollständig genug sein, um ausgeführt zu werden. Ich sollte in der Lage sein, eine Implementierung der Sprache aufzurufen, den Code aus der Antwort einzufügen und Ergebnisse zu erhalten, ohne zusätzlichen Code eingeben zu müssen.

Die obige Frage nach der Vollständigkeit wurde im Zusammenhang mit einer C-Lösung gestellt. Sicherlich muss es eine ständige Regel oder Konvention darüber auf einer Code-Golf-Site geben? Wenn ja, gebe ich mich gerne den Community-Richtlinien hin. Aber das ist meine Einstellung:

  1. Im Hinblick auf die C speziell, müssen Sie umfassen (und zählen) , um die main(){... }um den Code, da es sonst nicht kompilieren. Warnungen, weil es keine gibt, #include <stdio.h>sind in Ordnung, solange der Code noch kompiliert wird. Im Allgemeinen erfordert eine kompilierte Sprache eine kompilierbare Einheit.

  2. Ein nackter Ausdruck, der die gewünschten Ergebnisse liefert, ist akzeptabel, wenn es eine Möglichkeit gibt, den Ausdruck direkt auszuführen. Zum Beispiel, wenn die Sprache eine REPL hat. So können Sie Haskell ohne einreichen, main=solange es tatsächlich so funktioniert, wie es zB an der ghciEingabeaufforderung geschrieben steht. Aber da dies bedeutet, dass Sie letIhre Erklärungen abgeben müssen, kann es ein Gewinn sein, sich an das runhaskellFormat zu halten.

  3. Ebenso sollten awkSkripte in Blöcken BEGIN(oder ENDmit der Annahme, dass stdin an /dev/nullBlöcke angehängt ist ) sein, da wir keine Eingaben verarbeiten.

etc.


4
Ich bin etwas verwirrt. Ist die Herausforderung hier nur, das Alphabet mit jedem Buchstaben viermal zu wiederholen, oder muss die Ausgabe tatsächlich auch in einer Datei gespeichert werden?
Iszi

Und muss ich nur das Alphabet ausgeben ?
Justin

@MarkReed Muss ich es mit Zeilenumbrüchen dazwischen drucken? Warum nicht einfach ausdrucken, sondern optional Zeilenumbrüche?
Justin

3
Außerdem empfehle ich, Ihre Herausforderung neu zu formulieren, damit sie eher einer Herausforderung gleicht und weniger der Geschichte, wie Sie Ihre Antwort erfunden haben.
Justin

Das letzte bisschen trübt die Leerzeichenregeln nur ein bisschen. Kannst du das bitte klären? Insbesondere lese ich es richtig, um zu interpretieren, dass zusätzliches Leerzeichen in Ordnung ist, aber das Weglassen von Zeilenumbrüchen nicht?
Iszi

Antworten:


16

APL (5)

⍪4/⎕A

Matrixformat ( ) von 4-Replikation ( 4/) des Alphabets ( ⎕A).


1
Scheint unwahrscheinlich, geschlagen zu werden. :)
Mark Reed


APL verwendet eine Codepage, die jedes der verwendeten Zeichen einem Byte zuordnet. Diese Codepage finden Sie hier auf der IBM Website.
Steven H.

@StevenH. Link ist tot
Stan Strum

@StanStrum Ich glaube, der Link ist wegen Verfalls tot, aber aus Gründen des Code-Golfspiels sollte diese Meta-Antwort funktionieren.
Steven H.

11

Python - 37

for i in range(104):print chr(i/4+65)

igeht von 0 auf 104; Es wird durch vier geteilt und zum ASCII-Wert für addiert A, und das resultierende Zeichen wird gedruckt.


Ich nehme an, Python verwendet standardmäßig eine Ganzzahldivision? Wäre ein bisschen nett, wenn PowerShell es jetzt tun würde. Der Code, der erforderlich ist, um eine Ganzzahldivision zu erzwingen, ist zu lang, als dass ich mit diesem Trick etwas in meinem Skript speichern könnte.
Iszi

@lszi - Python orientiert sich am Typ der Operanden. 3/4ist 0, während 3.0/4.00,75 ist; range()Erzeugt ganze Zahlen.
Mark Reed

1
Dies funktioniert nicht mit neueren Versionen von Python. Zunächst muss die Druckfunktion mit Klammern bezeichnet werden, und / nein tut mehr Integer - Division durch Standard (auch wenn beide Zahlen ganze Zahlen sind), die // 's Job Try ist:for i in range(104):print(chr(i//4+65))

3
@Bewusstsein, das weiß ich. Ich habe mich bewusst für eine alte Version entschieden, um besser Golf spielen zu können. Wenn Sie dies auf Ideone.com ausführen, wählen Sie "Python" anstelle von "Python 3"
Justin

3
@Consciousness - Mit "neueren Versionen von Python" meinen Sie "Python 3", das an dieser Stelle noch lange nicht allgemein anerkannt ist. Ich gehe im Allgemeinen davon aus, dass alles, was behauptet, "Python" zu sein, ohne eine bestimmte Version, Python 2.x ist, bis das Gegenteil bewiesen ist. Python 3-Code ist in der Regel ausdrücklich so gekennzeichnet.
Mark Reed

8

R 30 28 27

write(rep(LETTERS,e=4),1,1)

Frühere Version mit 30 Bytes:

cat(rep(LETTERS,e=4),sep="\n")

Ich denke, eine wörtliche Newline ist ein Byte kürzer :)
Giuseppe

@ Giuseppe Kannst du diese Idee spezifizieren?
Sven Hohenstein


@ Giuseppe Wirklich gute Idee! Vielen Dank für den Hinweis.
Sven Hohenstein

1Anstelle von können Sie auch ""stdout in angeben write, wodurch ein weiteres Byte gespeichert wird.
Giuseppe

7

C 59

Ich übermittle dies, eine nicht wettbewerbsfähige lange Antwort, einfach weil ich noch keine C-Übermittlung sehe. Und das macht mich traurig. : - /

SPÄTER: Wenden Sie sich an @moala, um eine int-Version von "/ 4" zu erstellen und 13 Zeichen zu sparen!

float i;main(){while(i<26)printf("%c\n",65+(int)i),i+=.25;}

Ich habe meine Antwort bearbeitet und jetzt noch 2 Zeichen gespeichert!
Moala

und noch einer!
Moala

6

J: 18 13

4#u:65+i.26 1

Ich bin immer noch ziemlich wackelig mit J, also könnte dies wahrscheinlich verbessert werden


3
Sie können replizieren (verwenden #wie so) statt Teilung: 4#u:65+i.26 1. Außerdem ~tauscht gegen Argumente der Funktion, so dass , wenn Sie sich jemals zu tun (expression) F value, können Sie ersetzen , dass mit value F~ expressioneinem Zeichen zu speichern.
Marinus

@marinus Danke für den Tipp. Ich lerne immer noch J und es ist schwierig, mit solchen Tricks gute Informationen zu finden.
Pswg

1
4#65{26,.\a.für 12 Bytes.
FrownyFrog

5

Rubin, 23

puts ([*?A..?Z]*4).sort

Alles Lob an @manatwork - stimme seinem Kommentar zu, nicht diesem. :)


Enorm. @manatwork, ich werde die Bearbeitung vornehmen, aber offensichtlich verdiene ich keine Anerkennung!
Darren Stone

5
Besser machen puts [*?A..?Z].map{|i|[i]*4}oder puts ([*?A..?Z]*4).sort, damit die Buchstaben wie im Beispiel geordnet werden.
manatwork

2
@manatwork: puts (?A..?Z).map{|i|[i]*4}ist ein Zeichen kürzer. Sie können mapeine Range direkt anrufen , sodass Sie in diesem Fall keinen Splat benötigen.
Mark Reed

5

PowerShell: 32 23

Golf Code:

[char[]](65..90*4)|Sort

Exemplarische Vorgehensweise:

[char[]](... )nimmt ein Array von Objekten und konvertiert sie in ASCII-Zeichen.
65..90sind die ASCII-Codes für AZ.
*4Wiederholt die Serie 4 mal.
|Sortsortiert die Ausgabe.

Hinweis:

Wenn Sie möchten, dass dies in eine Datei geschrieben wird >, geben Sie am Ende einfach einen Dateinamen ein.


5

Haskell, 46

x a=a++a
main=putStr$['A'..'Z']>>=x.x.(:"\n")

1
putStr$['A'..'Z']>>=("golf">>).(:"\n")speichert 8 Bits
Angs

5

Befunge 98 - 18

1+::'g`#@_4/'A+,a,

Speichert eine Zahl und endet bei 104. Gibt das entsprechende Zeichen des Alphabets für die durch 4 geteilte Zahl aus, gefolgt von einer neuen Zeile. Aber wenn ich nicht nach jedem Buchstaben eine neue Zeile einfügen muss, dann sind es 16 Zeichen:

1+::'g`#@_4/'A+,

Kann reduziert werden, wenn ich mehr Zeichen drucken kann (dh alle vier Mal) ( 7 6 Zeichen, funktioniert sogar in Befunge 93):

1+:4/,

Mit newline:

1+:4/,a,


4

Perl 5, 21

map{print"$_
"x4}A..Z

2
Es ist mir noch nie in den Sinn gekommen, eine wörtliche Newline in Perl in doppelte Anführungszeichen zu setzen. +1.
Mark Reed

Ich sollte beachten, dass ich es auch nicht tat, aber @manatwork erwähnte es auf einer anderen Antwort von mir und es steckt fest!
Dom Hastings

4

C 46 44 43

46 :

i;main(){while(i<104)printf("%c\n",65+i++/4);}

44 :

i=260;main(j){for(;(j=i++>>2)<91;puts(&j));}

44 auch:

i=260;main(j){while(j=i++>>2,j<91)puts(&j);}

Dank an @marinus, 43:

i=260;main(j){while(j=i++/4,j<91)puts(&j);}

Sollte ich ein Kopfgeld für die Erreichung von 42 hinzufügen? :)


6
50 Wiederholungen wird benötigt, um einen Kommentar abzugeben, und Sie haben zum Zeitpunkt der Abgabe dieses Kommentars 101.
syb0rg

Groß! Vielen Dank! Antwort bearbeitet!
Moala

1
Sie können ersetzen >>2durch /4.
Marinus

4

Java: 56

for(int i=0;i<104;)System.out.println((char)(i++/4+65));

edit: geändert von 'print' zu 'println'


Die Ausgabe sollte nach jedem Buchstaben neue Zeilen enthalten.
Pierre Arlaud

danke für den
hinweis

2
The solution must be complete enough to execute. I should be able to invoke an implementation of the language, paste the code from the answer, and get results, without typing any additional code. Ich denke, Ihre Lösung verletzt diese Bedingung
user902383

2
@ user902383 Wenn Sie es in JShell einfügen (Java REPL in Java 9), funktioniert es und Sie benötigen nicht einmal das letzte Semikolon.
David Conrad

@DavidConrad Dann ist es fantastisch, ich denke, ich könnte anfangen, REPL / JShell zu verwenden.
User902383


4

Eigentlich 6 Bytes

4ú*SÖi

Probieren Sie es hier aus!

Erläuterung

4ú*SÖi

4 *         Do 4 times
 ú          Create string of alphabet in lowercase
   S        Sort it
    Ö       Switch Case
     i      Push each character of string

4 Bytes mit Kleinbuchstaben und ohne Zeilenumbruch:

4ú*S

1
Willkommen bei PPCG!
Erik der Outgolfer

4

16-Bit-x86-Computercode MS-DOS COM, 25 Byte

In hex:

B409BA160189D7B96800F6C1037502FE05CD21E2F5C3400A24

Dies ist ein vollständiges MS-DOS-COM-Programm. Kopieren Sie die Bytesequenz in die Datei mit der Erweiterung .com und führen Sie sie von DOSBox aus

Demontage:

00: B4 09        mov    ah,0x09         ;INT 21h "Write string to STDOUT" function
02: BA 16 01     mov    dx,0x116        ;Address of the string s ('$'-terminated)
05: 89 D7        mov    di,dx           ;Because there's no way to dereference address in DX
07: B9 68 00     mov    cx,104          ;CX=26*4
_0000000A:
0A: F6 C1 03     test   cl,0x03         ;When lower two bits are zero...
0D: 75 02        jne    _00000011       ;...do not skip the next instruction
0F: FE 05        inc    b,[di]          ;*s++
_00000011:
11: CD 21        int    21              ;Print the string
13: E2 F5        loop   _0000000A       ;Until --CX==0
15: C3           retn
16: 40           db     0x40            ;s[0], starts with 'A'-1
17: 0A           db     0x0A            ;'\n'
18: 24           db     '$'             ;Terminator required by the print function

3

Brainf * , 79 60

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

4
+++++++++++++[>+>+++++>++<<<-]>--->>[<.<.>.<.>.<.>.<.>+>-]
Alephalpha

3

AWK, 48

Lass es uns mit AWK versuchen ...

END{s=65;for(i=104;i--;s+=0==i%4)printf"%c\n",s}

Wie von manatwork vorgeschlagen, können wir 2 Zeichen loswerden

AWK, 46 (Bearbeiten)

END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}

AWK, 40 (Bearbeiten des MarkReed -Codes)

END{for(;i<104;){printf"%c\n",i++/4+65}}

Durch das Entfernen der Initialisierung von Variablen s können Sie 2 Zeichen verschonen: END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}.
Handarbeit

1
Wenn Sie den Code in einen ENDBlock einfügen , ist ein Eingabestream erforderlich (auch wenn dies der Fall ist /dev/null). Ändert das die Zeichenanzahl? Wie auch immer, BEGIN{for(;++i<104;){printf"%c\n",i/4+65}}ist 5 Zeichen kürzer.
Mark Reed

@MarkReed Ihr Code funktioniert nicht. Überprüfe dies
Wasi

D'oh. So nah! :) Aber ich mag immer noch nicht die ENDAnforderung des Musters für einen Eingabestream ...
Mark Reed

3

PowerShell, 21

65..90|%{,[char]$_*4}

Eine etwas andere Herangehensweise an Iszi's. Und kürzer :-)


3

C # LINQ 115 Bytes 110 Bytes

Enumerable.Range(65, 26).SelectMany(i => Enumerable.Repeat(i,4))
.ToList().ForEach(i=> Console.WriteLine((char)i));

1
Willkommen bei PPCG! Schöner erster Beitrag!
20.

3

05AB1E, 6 Bytes

A4×{S»

Erläuterung:

A       # Push 'abcdefghijklmnopqrstuvwxyz'
 4×     # Repeat four times
   {    # Sort
    S   # Split into list
     »  # Join by newlines
        # Implicit print

Ohne Zeilenumbruch 4 Bytes

A4×{

Probieren Sie es online!



3

Perl 6, 32

.say for (('A'..'Z') »xx»4)[*;*]

Ich denke, dies ist das erste Mal, dass Perl 6 die erste Lösung war, an die ich dachte, aber der Hyperoperator schien einfach eine natürliche Passform zu sein.
Mark Reed

3

Canvas , 5 Bytes

Z41*⟳

Probieren Sie es hier aus!

Erläuterung:
Code        | Explanation                                  | Stack
------------+----------------------------------------------+------------------------------
Z          | The uppercase alphabet                       | "ABC..."
  41*     | Stretched by 4 horizontally and 1 vertically | "AAAABBBBCCCC..."
        ⟳  | Rotated clockwise                            | "A¶A¶A¶A¶B¶B¶B¶B¶C¶C¶C¶C¶..."
            | Print ToS (implicit)                         |

Mit mit ersetzt \nbeim Drucken.



3

Brainfuck , 48 Bytes

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

Probieren Sie es online!

Druckt in Kleinbuchstaben, getrennt durch Wagenrücklauf. Verwendet das Umbrechen von 8-Bit-Zellen sowie von Zellen links vom Ursprung, obwohl Sie a voranstellen können >, um dem letzteren entgegenzuwirken.


Ich wollte gerade ein neues posten, aber Sie haben es geschafft, mein Bestes zu geben. Ich habe 71 Bytes mit ++++++ [-> ++> ++++> +++++++++ ++ <<<] ++++> +> ++> +++++ <[->. <<. >>. <<. >>. <<. >>. + <<.>]
KrystosTheOverlord



2

Scala, 42

('A'to'Z')map(x=>List.fill(4)(println(x)))

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.