Ohne Eingabe besteht Ihre Aufgabe darin, Folgendes zu generieren:
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Nicht visuell besteht Ihre Aufgabe darin, jeden Buchstaben im Alphabet mit Leerzeichen davor zu generieren, die der Position im Alphabet minus eins entsprechen.
Wenn Sie dies ausdrucken, muss es so aussehen wie oben. Überflüssige Leerzeichen, die das Erscheinungsbild nicht beeinträchtigen, sowie abschließende Zeilenumbrüche sind zulässig. Sie können alle Kleinbuchstaben oder alle Großbuchstaben verwenden.
Sie können dies auch von einer Funktion gemäß den üblichen Regeln zurückgeben, entweder als Zeichenfolge mit Zeilenumbrüchen oder als Liste von Zeichenfolgen.
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
code-golf
kolmogorov-complexity
alphabet
Stephen
quelle
quelle
a<VERTICAL-TAB>b<VERTICAL-TAB>c...
? Wie wäre es, wenn sich dort auch ein paar Backspace-Zeichen befinden? Solange das visuelle Ergebnis dasselbe ist?4
vor dem Leerzeichen aussieht, siehtb
sie nicht sehr diagonal aus. Wenn es so aussieht, als ob die Steigung ~-1
ist, ist es in Ordnung.Antworten:
Holzkohle , 2 Bytes
Probieren Sie es online!
Wie?
Genau die Art von Herausforderung, für die Charcoal ursprünglich entwickelt wurde.
quelle
↘"abc ... xyz"q
wäre das kürzeste Arbeitsprogramm. ( Online↘``26O;)q
ausprobieren ! ) Sollte funktionieren (mit einem Backtick beginnen; für jedes I in 0 ... 25 das implizite I platzieren, das Backtick und die Ausgabe erhöhen), aber aus irgendeinem Grund wird ein "Empty Stack" -Fehler ausgegeben. .C 45 Bytes
Vielen Dank an @Dennis für das Speichern von 5 Bytes!
quelle
i
irgendwann initialisieren oder zurücksetzen . Zumindest auf TIO,f()
funktioniert nur einmal .f(i){for(i=0;++i<27;printf("%*c\n",i,i+96));}
spart ein paar Bytes.f(i){for(i=96;i<122;)printf("%c\v",++i);}
für 41 Bytes - stellen Sie sicher, dass Sie dies auf einem tatsächlichen Terminal ausführen (ja, dies ist zulässig )05AB1E ,
1486 Bytes-2 Bytes dank @Emigna
Wie es funktioniert
Probieren Sie es online!
Originalversion, 14 Bytes
quelle
AvyNú»
.ƶ
scheint so perfekt, aber es ist nicht :(.Λ
war wahrscheinlich zu diesem Zeitpunkt noch nicht verfügbar,26A3Λ
speichert aber ein Byte.₂A3Λ
wäre noch kürzer gewesen.JavaScript (ES6),
60 bis59 ByteEine rekursive Funktion, die einen String mit einer nachgestellten Newline zurückgibt.
quelle
n.toString(++n)+f(n)
ein Byte kürzer alsn.toString(36)+f(n+1)
.f=(n=10,s='')=>n-36?s+n.toString(++n)+'\n'+f(n,s+' '):""
für 55 tun ."".padEnd(n-10)+n.toString(++n)
.f=(n=10,s='')=>n-36?s+n.toString(++n)+'\n'+f(n,s+' '):s
scheint zulässig zu sein.Ruby , 28 Bytes
Probieren Sie es online!
Erläuterung:
Der << -Operator für eine Zeichenfolge in Ruby führt den in der Dokumentation beschriebenen Trick aus
str << Ganzzahl → str
str << obj → str
Anhängen - Verkettet das angegebene Objekt mit str. Wenn das Objekt eine Ganzzahl ist, wird es als Codepunkt betrachtet und vor der Verkettung in ein Zeichen konvertiert.
quelle
R,
383736 Bytes(Die Verwendung von
write
ist von @ Giuseppes Antwort inspiriert .)quelle
1
anstatt es""
zu rasieren.Vim, 29 Bytes
Probieren Sie es online!
↵ bedeutet die Eingabetaste drücken
<Esc> bedeutet, dass Sie die Escape-Taste drücken
Wie funktioniert das?
quelle
+
Erklärung verpasst haben, die mich für eine Sekunde geworfen hat.␛
anstelle von verwenden<Esc>
. Meiner Meinung nach sieht es ein bisschen besser aus.{
anstelle vongg
Python 2 , 36 Bytes
Dies nutzt das überflüssige Leerzeichen, das die Darstellungsregel nicht beeinflusst .
Probieren Sie es online!
Alternative Version, 38 Bytes
Dies ergibt die exakte Ausgabe der Herausforderungsspezifikation.
Probieren Sie es online!
quelle
%*c
überhaupt?%*<identifier>
Es werden zwei Argumente benötigt: die Länge zum Auffüllen und das eigentliche zu ersetzende Element. Einigeprintf
Implementierungen haben noch mehr undurchsichtige Funktionen, wie die, die%1$<identifier>
ich hier verwendet habe .PHP, 39 Bytes
quelle
Pure Bash, 13
Hier
^K
und dort^H
stehen buchstäblich vertikale Tabulator- und Backspace-ASCII-Steuerzeichen. Derxxd
Speicherauszug dieses Skripts sieht folgendermaßen aus: Verwenden Siexxd -r
diese Option, um das aktuelle Skript neu zu generieren:{a..z}
ist eine Standarderweiterung für Bash-Klammerna b c ... z
(durch Leerzeichen getrennt)^K
vertikalen Registerkarte wird der Cursor eine Zeile nach unten an dieselbe Position verschoben^H
Rücktaste bewegt den Cursor um eins zurück, um das Trennzeichen zu löschenProbieren Sie es online aus .
col
undtac
werden in der Fußzeile verwendet, um dies in einem Browserfenster korrekt wiederzugeben. Dies ist jedoch in einem normalen Terminal nicht erforderlich.Wenn die obigen unorthodoxen Steuerzeichen in der Ausgabe für Sie zu lang sind, können Sie Folgendes tun:
Bash + gemeinsame Dienstprogramme, 24
Hier
^K
und dort^H
stehen buchstäblich vertikale Tabulator- und Backspace-ASCII-Steuerzeichen. Derxxd
Speicherauszug dieses Skripts sieht folgendermaßen aus: Verwenden Siexxd -r
diese Option, um das aktuelle Skript neu zu generieren:Probieren Sie es online aus . Die vertikale Registerkarte und die Rücktaste werden möglicherweise von Ihrem Browser unsichtbar gemacht, sind jedoch vorhanden (auf Chrome unsichtbar, auf Firefox sichtbar).
col -x
Rendert die Eingabe erneut, sodass lustige Steuerzeichen durch Leerzeichen und Zeilenumbrüche ersetzt werden, um dasselbe visuelle Ergebnis zu erzielencol
Zeilen in umgekehrter Reihenfolge ausgegeben.tac
korrigiert das.quelle
^K
als Cursor auf, was das Verhalten ist,col
das hier emuliert werden muss.col
Manpage nennt einen VT einen "Reverse Line Feed". xterm, gnome-terminal und OSX-terminal fallen alle in einer Zeile ...Brain-Flak ,
124, 116, 106 BytesProbieren Sie es online!
Erläuterung:
Diese Antwort missbraucht die Stapelhöhe Nilad , aber auf eine neue Art und Weise, die ich noch nie benutzt habe, auf die ich ziemlich stolz bin. Davon abgesehen ist die Antwort nicht allzu klug.
Wenn man also die in dieser ASCII-Grafik verwendeten Zeichen analysiert, gibt es tatsächlich drei Werte, die häufig verwendet werden:
32 (Leerzeichen),
64 (addiere 64 zu N, um den N-ten Buchstaben des Alphabets zu erhalten) und
10 (newline)
Sowie 26. (Anzahl der Schleifen) Und diese Zahlen werden an verschiedene Stellen verschoben, so dass wir Zwischenwerte nicht wirklich wiederverwenden können, um die großen Zahlen kleiner zu machen. Und alle diese Zahlen zu pushen, sind allein satte 86 Bytes:
Das ist schrecklich. So machen wir es Ihnen bequemer. Der naheliegende Ansatz besteht darin, a
32
auf den alternativen Stapel zu schieben , wodurch unser32
Snippet zu:(<>({})<>)
und unser64
Snippet zu wird(<>({})({})<>)
. Wenn wir unseren anfänglichen Push 32 mit unserem anfänglichen Push 26 kombinieren , können wir ungefähr 8 Bytes einsparen. (mein erstes Golf).Aber hier kommt der Trick ins Spiel, auf den ich wirklich stolz bin. Da wir den alternativen Stack für nichts anderes verwenden, könnten wir genauso gut die 10 runter spielen. Dazu legen wir gleich zu Beginn des Programms 4 beliebige Zahlen auf den Stack. Da wir auch 32 drücken, erhöht dies den Wert von
[]
nilad auf 5, was unser10
Snippet viel praktischer macht. Und zum Glück können wir damit auch den Push-32- und den Push-26- Snippet nach unten spielen!Wird
Also hier ist eine detaillierte Erklärung:
quelle
V ,
151311 BytesProbieren Sie es online!
Erläuterung
quelle
Google Sheets,
6765 Bytes= ArrayFormula (IF (ROW (A1: Z) = COLUMN (A1: Z26), CHAR (96 + ROW (A1: Z26)), ""))Nach der Klarstellung, dass Whitespace ausreichend ist, habe ich sichtbar leere Zellen verwendet
Lassen Sie mich wissen, wenn dies nicht zählt, wenn ich die Byteanzahl falsch verstanden habe oder wenn ich eine Etikette durcheinander gebracht habe, da dies mein erster Beitrag hier ist.
Bearbeiten: Es stellt sich heraus, dass ich 2 Bytes einsparen kann, indem ich das "" weglasse, da Google Sheets einen leeren if-Wert akzeptieren.
quelle
APL (Dyalog) ,
97 Bytes SBCS-2 Bytes dank des Hinweises von ngn.
[Online ausprobieren!] [TIO-j3o0ipjy]
⎕A
der Großbuchstabe A lphabet⌸
Fügen Sie zwischen jedem (Element, Liste der Indizes) Paar die folgende implizite Funktion ein:↑⍨
aus dem Element (dem Buchstaben) nehmen ...∘
das…-
negierter Index Anzahl der Zeichen, dh die Anzahl der Zeichen von hinten, die auf der Vorderseite mit Leerzeichen aufgefüllt sind.Probieren Sie es online!
quelle
↑
ist{.
und⍳
isti.
Adverbien:¨
ist"0
und⍨
ist~
.(a.{~97+i.26){."0~-1+i.26
⌸
dieseOktave,
25,19 oder 12? BytesProbieren Sie es online!
Andere von @LuisMendo vorgeschlagene Lösung (12 Bytes), die ich in der Windows-Version von Octave getestet habe:
Erläuterung:
Erzeugt eine diagonale Matrix von
a:z
.quelle
Java 8,
72717061 Bytes-1 Byte durch Ausgabe des Großbuchstabens anstelle des Kleinbuchstabens.
-1 Byte durch direktes Drucken, anstatt einen mehrzeiligen String zurückzugeben.
-8 Bytes dank @ OliverGrégoire mit
printf
direkt loswerdenString s="";
. Und auch -1 Byte durch Ändern()->
aufo->
.Probieren Sie es hier aus.
quelle
c=65
(oder64
tatsächlich) speichern, sodass Sie die dreistellige Nummer nicht benötigen. Kann die Rückgabe eines Arrays anstelle der Zeichenfolge Byte sparen, wenn Sie das Array entfernen können+"\n"
?()->{for(int a=0;a++<26;)System.out.printf("%"+a+"c%n",a+96);}
Verwendung der gleichen Idee wie bei einer anderen Herausforderung .Gelee ,
109 Bytes-1 Byte dank Dennis (Vermeiden Sie Dekrementierung
J
durch26Ḷ
direkte Verwendung eines niedrigeren Bereichs )Ein vollständiges Programm, das das Ergebnis druckt.
Probieren Sie es online!
(
ØaJ’⁶ẋż
Bei 7 handelt es sich um einen monadischen Link, der eine Liste von Listen mit Listen von Zeichen zurückgibt, aber[["a"],[" ","b"],[" ","c"],...]
das ist wahrscheinlich nicht akzeptabel.)Es würde mich jedoch nicht wundern, wenn es einen kürzeren Weg gäbe, über den ich nicht nachgedacht habe!
Wie?
quelle
[["a"],[" ","b"],[" "," ","c"],...]
da eine Liste von Zeichen eine alternative Definition für eine Zeichenfolge ist, aber ein Tupel scheint nicht zu passen :)"..."
Abschnitten jeweils eine Liste von Zeichen aufgeführt ist. In Wirklichkeit hat[[['a']],[[[' '],['b']],[[' ',' '],['c']],...]
Jelly keine Zeichenfolgen, sondern nur Listen.26Ḷ⁶ẋżØaY
Speichert ein Byte.ØaJ’⁶ẋż
für7
, für deine alternative version.PowerShell, 29 Byte
quelle
$_
während Sie gehen, nett.Alice ,
22-20BytesProbieren Sie es online!
Obwohl es sich bei der Ausgabe um eine Zeichenfolge handelt, stellt sich heraus, dass der Ordinalmodus für diese Herausforderung nicht geeignet ist.
Erläuterung
Vorherige Lösung
Probieren Sie es online!
Ich habe ungefähr zehn 23-Byte-Lösungen durchgearbeitet, bevor ich diese finden konnte.
Erläuterung
Dieses Programm verwendet das Band, um die Anzahl der auszugebenden Leerzeichen zu verfolgen. Kardinal- und Ordinalmodus verwenden dasselbe Band, haben jedoch separate Bandköpfe. Die beiden Modi interpretieren das, was sie auf dem Band sehen, unterschiedlich, und das Programm nutzt diesen Unterschied voll aus.
Die Befehle werden in der folgenden Reihenfolge ausgeführt:
quelle
Brainfuck, 103 Bytes
Probieren Sie es online!
Die Position der Variablen ist irgendwie verbesserbar.
Erläuterung
quelle
Google Sheets, 69 Bytes
Hier ist nichts kompliziert. Der einzige Trick ist die Verwendung von
ArrayFormula
undROW(A1:A26)
, um 26 verschiedene Werte für dieJOIN
Funktion zurückzugeben. Die Ausgabe sieht folgendermaßen aus:Ich denke, Excel 2016 kann dasselbe tun,
TEXTJOIN
aber ich kann in der Online-Version keine Array-Formeln eingeben und habe nur 2013 selbst. Die Formel sollte lauten:Wenn Sie es als Matrixformel ( Ctrl+ Shift+ Enter) eingeben, werden
{ }
auf beiden Seiten geschweifte Klammern eingefügt, sodass es 67 Byte lang ist. Jeder, der überprüfen kann, ob es funktioniert, kann es als eigene Antwort verwenden.quelle
Seed , 6014 Bytes
Ich denke nicht, dass dies Preise gewinnen wird, aber nur zum Spaß, hier ist eine Lösung in Seed.
Es übersetzt in das folgende Befunge-Programm:
quelle
shortC , 33 bytes
Probieren Sie es online!
quelle
++ hinzufügen , 1069 Bytes
Probieren Sie es online!
Ja. Das ist hartcodiert. Ich bin mir sicher, dass es einen besseren Weg gibt, und wenn Sie ihn finden möchten, fahren Sie fort, aber dieser Weg scheint am besten zu funktionieren, da es schwierig ist, mit dem Arbeitsspeicher in Add ++ zu arbeiten.
quelle
R ,
594947 Byte-10 bytes dank djhurio
-2 Bytes danke an Sven Hohenstein
Druckt nach Standard. Vom User2390246 überfordert
Probieren Sie es online!
quelle
26^2
mit676
einem Byte zu speichern.m=matrix("",26,26);diag(m)=letters;write(m,'',26)
(49 Bytes)cat(m,fill=27)
"diag<-"(x, y)
ist ähnlich wiediag(x) <- y
. Der Wert wird keiner Variablen zugewiesen, sondern zurückgegeben.> <> ,
46 4442 BytesProbieren Sie es online!
Erläuterung
Dies ist eine völlig andere Einstellung als meine vorherigen 46 Bytes, daher habe ich auch die TIO in die einzige aufgenommen. 46 bytes Online testen!
Unten ist ein Link zu Emignas Einsendungen, es war die erste Antwort, aber ich glaube, meine ist anders genug (und spart ein paar Bytes), um eine zweite zu rechtfertigen.
Emignas Antwort
quelle
Haskell ,
66 65 58 57 4543 BytesVielen Dank an @nimi und @maple_shaft für das Speichern von
12 bis14 Bytes.Probieren Sie es online!
quelle
<$
anstelle von replizieren:(' '<$[1..(fromEnum n-97)])
(' '<$['b'..n])
.f=
.['a'..'z']>>= \n->(' '<$['b'..n])++[n,'\n']
.PHP, 23 Bytes
Anmerkung: Verwendet die IBM-850-Codierung.
Laufen Sie wie folgt:
Erläuterung
Erstellen Sie ein Array aller Buchstaben des Alphabets und fügen Sie es mit einem vertikalen Tabulator als Klebstoff hinzu.
quelle
Brainfuck , 80 Bytes
Probieren Sie es online!
Formatiert:
Verwendet eine einfache multiplikative Generierungsfunktion, um einige Konstanten im Speicher abzulegen, und wiederholt dann den Vorgang des Druckens von N Leerzeichen
'A' + N
fürN = 0..25
.Kommentiert:
quelle
RProgN 2 , 5 Bytes
\ x0B ist ein vertikales Tabulatorliteral
Dies nimmt nur das Kleinbuchstaben, teilt es und verbindet es mit vertikalen Tabulatoren. Dies bewirkt den beabsichtigten Effekt auf bestimmte Bash-Terminals.
quelle