Diagonales Alphabet zum Eingang

26

Inspiriert von diesem Beitrag . Für diejenigen, die diese Frage als Duplikat markieren, möchte ich Sie dringend bitten, die Frage tatsächlich zu lesen, um festzustellen, dass meine eine Modifikation der verknüpften ist. Der verknüpfte fragt nicht nach einer Eingabe und soll nur das Alphabet diagonal drucken.

Die Herausforderung

Bei einer Eingabe zwischen einschließlich 1-26 wird das Alphabet diagonal gedruckt, der vertikale Druck beginnt jedoch am Index der angegebenen Eingabe.

Beispiele

Angesichts der Eingabe:

16

Ihr Programm sollte folgendes ausgeben:

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

Eingang:

4

Ausgabe:

a
 b
  c
   d
   e
   f
   g
   h
   i
   j
   k
   l
   m
   n
   o
   p
   q
   r
   s
   t
   v
   w
   x
   y
   z

Eingang:

1

Ausgabe:

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

Eingang:

26

Ausgabe:

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

Wertung

Das ist , also gewinnt die kürzeste Antwort in jeder Sprache.

Viel Glück!

SpookyGengar
quelle
6
Dürfen wir entweder 0- oder 1-Indizierung wählen?
Notjagan
Ist ein konsistenter Leerraum akzeptabel?
Giuseppe
Sind Leerzeichen akzeptabel?
Dom Hastings
Dürfen wir Großbuchstaben verwenden?
Adám
Dürfen wir eine Liste von Zeichenketten zurückgeben?
Adám

Antworten:

13

Kohle , 9 Bytes

↘✂β⁰N↓✂βη

Probieren Sie es online!

Wie es funktioniert

↘✂β⁰N↓✂βη
 ✂β⁰N         the alphabet from position 0 to the input
↘               print diagonally, down and to the right
        ✂βη    the alphabet starting from the position of the input
       ↓        print downwards

Diese Lösung funktioniert in der aktuellen Version von Charcoal nicht mehr (höchstwahrscheinlich aufgrund einer Fehlerbehebung), aber das Problem wurde für 10 Bytes mit behoben ↘✂β⁰N↓✂βIθ.

notjagan
quelle
2
Ich bin mir nicht sicher, warum das funktioniert. Es könnte ein Bug sein, der vor ein paar Wochen eingeführt wurde. (Sie müssten normalerweise Iθanstelle von verwenden η.)
Neil
@Neil Es scheint heute kaputt. Die Verwendung von Iθ löst es.
JP de la Torre
Speichern Sie 1 Byte, indem Sie …βNanstelle von verwenden ✂β⁰N.
Neil
7

05AB1E , 11 Bytes

AvNI<‚Wysú,

Das erste Mal versucht 05AB1E, also bin ich offen für Tipps.

Probieren Sie es online!

Wenn eine durch Null indizierte Eingabe von 0bis 25zulässig ist, können dies 10 Bytes sein, indem das weggelassen wird <.

Justin Mariner
quelle
Niiice! Genau das habe ich bekommen. Ich habe versucht "zu heben", aber es funktioniert nicht wie geplant. Ich finde das ziemlich optimal :).
Magic Octopus Urn
4

JavaScript (ES2017), 73 72 71 66 Bytes

Dank @JustinMariner einige Bytes gespart

f=(n,x=26)=>x?f(n,x-1)+(x+9).toString(36).padStart(x<n?x:n)+`
`:''
ETHproductions
quelle
1
Dadurch wird ein 10nach zam Ende wegen mit ++xvor x.toString(). Bugfixed und auf 68 Bytes golfen mit padStart: TIO
Justin Mariner
@JustinMariner Danke, ich denke, ich könnte dafür zu ES8 wechseln ...
ETHproductions
Kannst du durch Curry etwas sparen? n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':""
Shaggy
@Shaggy Vielleicht weiß ich nicht, ob diese Art des Currys erlaubt ist.
ETHproductions
Ah, verrückt, sieht aus wie Ihr Vorschlag , dies zu ermöglichen, kein Konsens mehr :(
Shaggy
4

Python 2, 61 58 57 Bytes

n=input()-1
for i in range(26):print(' '*i)[:n]+chr(i+97)

-3 Bytes dank Rod

-1 Byte mehr dank Mr. Xcoder

Pfeffer
quelle
@Pavel Das würde seitdem nicht funktionieren, inputwürde jedes Mal aufgerufen for, wenn die Schleife iteriert, obwohl es nur eine Eingabezeile gibt.
Notjagan
57 Bytes mit exec
officialaimm
57 Bytes unter Verwendung der Indexierung.
Mr. Xcoder
56 Bytes
Mr. Xcoder
4

Ruby, 51 46 43 Bytes

->n{(0..25).map{|x|(' '*x)[0,n-1]<<(x+97)}}

Gibt eine Liste von Zeichenfolgen zurück.

Sieht so aus, als ob die Python-Typen mit ihren Indizes etwas zu tun hatten. -5 Bytes, indem Sie sich von Mr. Xcoders Verbesserung der ppperry-Lösung inspirieren lassen.

Bisherige Lösung mit rjust(51 Bytes):

->n{i=0;(?a..?z).map{|c|c.rjust i+=n>c.ord-97?1:0}}
m-chrzan
quelle
3

R 99 89 Bytes

@MickeyT sparte 10 Bytes

Funktion

function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")

Demo

f <- function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")
f(1)
f(10)
f(15)
f(26)
Langsame Loris
quelle
1
Ein paar kleine Einsparungen. Eher dann der ifelseVersuch min. print.noquotekann durch cateine '\n'in der Paste ersetzt werden. Das \nkann ein gerader Wagenrücklauf sein. Geschweifte Klammern für den Funktionskörper können weggelassen werden.
MickyT
Sie können etwas mehr sparen, indem Sie writeanstelle von catund pastewrite(c(rep(" ",min(x,i)),letters[i]),"",26,,"")
Folgendes verwenden
3

Retina , 72 68 Bytes

^
z
{2=`
$`
}T`l`_l`^.
\D
$.`$* $&¶
\d+
$* 
s`( *)( +)(?=.*¶\1 $)
$1

Probieren Sie es online! Die Ausgabe enthält nachgestellte Leerzeichen. Speichern Sie 1 Byte, indem Sie den Speicherplatz löschen, bevor die $Indizierung auf Null zulässig ist. Bearbeiten: 4 Bytes mit dem Alphabet-Generator von @ MartinEnder gespeichert. Erläuterung:

^
z
{2=`
$`
}T`l`_l`^.

Füge das Alphabet ein.

\D
$.`$* $&¶

Diagonalisiere es.

\d+
$* 

Konvertieren Sie die Eingabe in unär als Leerzeichen.

s`( *)( +)(?=.*¶\1 $)
$1

Schneiden Sie überlange Linien so ab, dass keine Linie länger als die leere Linie am Ende ist.

Neil
quelle
2

Mathematica, 103 Bytes

(T=Table;a=Alphabet[];c=Column)[c/@{T[""<>{T[" ",i],a[[i]]},{i,#}],T[""<>{T[" ",#],a[[i]]},{i,#,26}]}]&
J42161217
quelle
2

Pyth , 21 17 15 Bytes

Geschehen auf einem Telefon mit 3% Akku.

VlG+*d?>QNNQ@GN

Erläuterung:

VlG        For each character in the alphabet (G)
+          Concatenate...
 *d        Space (d) times...
   ?>QNNQ  Ternary; if Q (input) is less than N, return N, else Q
 @GN       The Nth character of the alphabet (G)

Probieren Sie es online!

Stan Strum
quelle
1
@totallyhuman Ich hatte gerade eine tolle Pizza in Las Vegas, New Mexico
Stan Strum
Ich fand einige wesentlich kürzere Ansätze und beschloss, meine eigene Antwort zu posten .
Mr. Xcoder
@ Mr.Xcoder Ja, gute Arbeit.
Stan Strum
2

Common Lisp, 84 Bytes

(lambda(x)(dotimes(i 26)(format t"~v,,,@a~%"(if(< i x)(1+ i)x)(code-char(+ i 97)))))

Probieren Sie es online!

Renzo
quelle
2

Haskell, 58 54 Bytes

f n=do m<-[1..26];([2..min n m]>>" ")++['`'..]!!m:"\n"

Probieren Sie es online!

Wie es funktioniert

f n=                  -- input number is n
  do m<-[1..26]       -- for each m from [1..26], construct a string and concatenate
                      -- them into a single string. The string is:
   [2..min n m]>>" "  -- min(n,m)-1 spaces,
      ++              -- followed by
   ['`'..]!!m         -- the m-th char after `
      :               -- followed by
   "\n"               -- a newline 

Edit: @Lynn hat 4 Bytes gespeichert. Vielen Dank!

nimi
quelle
@Lynn; Vielen Dank! Ich vergesse immer die Schreibweise für Listen.
nimi
2

Gaia , 12 Bytes

…26⊃§×¦₵a+†ṣ

Probieren Sie es online!

Erläuterung

…             Range 0..input-1
 26⊃          Repeat the last number enough times to make it have length 26
    §×¦       Turn each number into a string of that many spaces
       ₵a+†   Add the corresponding letter to each
           ṣ  Join with newlines
Geschäfts-Katze
quelle
1

JavaScript (Node.js) , 72 Byte

n=>[..."abcdefghijklmnopqrstuvwxyz"].map((e,i)=>" ".repeat(i<n?i:n-1)+e)

Gibt eine Liste von Zeichenfolgen zurück.

Probieren Sie es online!

Conor O'Brien
quelle
Darf ich fragen, warum node.js? scheint gültig zu sein normal JS
Downgoat
@ Downgoat Es ist die automatische TIO-Formatierung
Conor O'Brien
Übrigens können Sie Bytes mit.padStart
Downgoat
Warten Sie nvm, wie ich dachte, macht es im Grunde genommen zur Antwort der ETH
Downgoat
Wechseln Sie zu ES8 und speichern Sie ein Byte mit padEndanstelle von repeat.
Shaggy
1

Mathematica, 67 Bytes

SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&

Gibt eine SparseArrayder Zeichenfolgen zurück. Zum Visualisieren Grid@vorne anhängen .

Probieren Sie es auf Wolfram Sandbox

Verwendung

Grid@SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&[5]
a
 b
  c
   d
    e
    f
    g

    ⋮

    z 
JungHwan min
quelle
1

Python 2 , 52 Bytes

lambda n:['%*c'%(min(i+1,n),i+97)for i in range(26)]

Probieren Sie es online!

Ich gehe davon aus, dass eine Liste von Zeichenfolgen in Ordnung ist ...

Kürzeste, die ich mit Rekursion bekommen konnte:

f=lambda n,i=0:i<26and['%*c'%(min(i+1,n),i+97)]+f(n,i+1)or[]
total menschlich
quelle
1

C # (.NET Core) , 66 + 18 Bytes

n=>new int[26].Select((x,i)=>$"{(char)(i+97)}".PadLeft(i<n?i+1:n))

Die Byteanzahl umfasst auch

using System.Linq;

Probieren Sie es online!

Dies gibt eine Sammlung von Zeichenfolgen zurück, eine für jede Zeile. Wenn dies nicht zulässig ist, nimmt die Antwort für string.Concat()und um 17 Byte zu\n innerhalb der Zeichenfolge

Erläuterung:

n =>
    new int[26]                      // Create a new collection of size 26
    .Select((x, i) =>                // Replace its members with:
        $"{(char)(i + 97)}"          // String of an alphabet character corresponding to the index
        .PadLeft(i < n ? i + 1 : n)  // Add spaces to the left
    )
Grzegorz Puławski
quelle
1

MATL, 14 Bytes

26:tiXl2Y2oZ?c

Probieren Sie es bei MATL Online aus

Erläuterung

26      % number literal
:       % range; vector of equally spaced values [1...26]
t       % duplicate
i       % explicitly grab the input
Xl      % clamp the array to have a maximum value of the input
2Y2     % predefined literal: ['a'...'z']
o       % convert to a numeric array
Z?      % create sparse matrix using the first two inputs as the rows/columns 
        % and the letters 'a'...'z' as the values
c       % convert back to character and implicitly display
Suever
quelle
1

Pyth , 12 Bytes

j.e+<*kdtQbG

Probieren Sie es hier aus!

Wenn Listen von Strings zulässig sind, kann dies auf 11 Byte verkürzt werden :

.e+<*kdtQbG

Pyth , 12 Bytes

VG+<*dxGNtQN

Probieren Sie es hier aus!

Pyth , 14 Bytes

jm+<*d;tQ@Gd26

Probieren Sie es hier aus.

Wenn Listen von Strings zulässig sind, kann dies auf 13 Byte verkürzt werden :

m+<*d;tQ@Gd26

Wie funktionieren diese?

Im Gegensatz zu den meisten anderen Antworten wird bei allen drei Lösungen das Kleinbuchstaben-Alphabet durchlaufen.

Erklärung # 1

j.e+<*kdtQbG - Full program.

 .e        G - Enumerated map over "abcdefghijklmnopqrstuvwxyz", with indexes k and values b.
     *kd     - Repeat a space a number of times equal to the letter's index.
    <   tQ   - Crop the spaces after the input.
   +      b  - Concatenate with the letter.
j            - (Optional): Join by newlines.

Erklärung # 2

VG+<*dxGNtQN  - Full program.

VG            - For N in "abcdefghijklmnopqrstuvwxyz".
      xGN     - Index of the letter in the alphabet.
    *d        - Repeat the space a number of times equal to the index above.
   <     tQ   - But crop anything higher than the input.
  +        N  - Append the letter (at the end)

Erklärung # 3

jm+<*d;tQ@Gd26 - Full program.

 m          26 - Map over [0...26) with a variable d.
    *d;        - Space repeated d times.
   <   tQ      - Crop anything whose length is higher than the input.
  +      @Gd   - Concatenate with the letter at that index in the alphabet.
j              - (Optional): Join by newlines.
Mr. Xcoder
quelle
1

Haskell, 60 Bytes

f n=unlines$scanl(\p c->take(n-1)(p>>" ")++[c])"a"['b'..'z']

Dies ist eine Funktion, die die Ausgabe als String zurückgibt.

Probieren Sie es online aus.

Cristian Lupascu
quelle
1

Japt , 16 13 Bytes

3 Bytes gespart dank @Oliver

;C£RiXiYmUÉ î

Online testen!

ETHproductions
quelle
@ Oliver Dang, ich war müde ...
ETHproductions
1

q / kdb + 33 31 Bytes

Lösung:

-1{(&[x-1;til 26]#'" "),'.Q.a};

Beispiel:

q)-1{(&[x-1;til 26]#'" "),'.Q.a}16;
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

Erläuterung:

Erstellen Sie eine Liste von Leerzeichen (26) bis zur Länge des Minimums der Eingabe und des Bereichs von 0..25), fügen Sie jeden Buchstaben des Alphabets hinzu und drucken Sie auf stdout.

-1{(&[x-1;til 26]#'" "),'.Q.a}; / solution
-1                            ; / print result to stdout and swallow return
  {                          }  / lambda function
                         .Q.a   / "abcd..xyz"
                       ,'       / concatenate (,) each
   (                  )         / do all this together
    &[   ;      ]               / minimum of each 
      x-1                       / implicit input (e.g. 10) minus 1 (e.g. 9)
          til 26                / 0 1 2 ... 23 24 25
                   '#" "        / take " " each number of times (0 1 2 )

Anmerkungen:

  • -2 Bytes durch Umstellen der Klammern
Streetster
quelle
1

Java 1.8 (ohne Lambda), 98 Bytes

void m(int i){int c=0,o=97;String s="";for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);}

Die Logik ist einfach. Bietet keine Validierung der Eingabedaten, sehr schlecht!

  • Update: Nur Funktion! Vielen Dank an @Olivier Grégoire
Douglas Held
quelle
1
Um einige Bytes zu for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);sparen, können Sie auch nur eine Funktion oder ein Lambda anstelle eines vollständigen Programms schreiben.
Olivier Grégoire
Wenn ich nur den Körper einer Funktion einschließen würde, wie würde der Leser dann wissen, worauf sich dies a[0]bezieht? Ich denke, Schnipsel sind nicht fair, wenn sie nicht kompiliert werden. Genauso interessant ist die Herausforderung mit einer konstruktionsreichen Sprache.
Douglas Held
1
Hallo! Ich habe eine Funktion oder ein Lambda gesagt, kein Snippet. ;-) Du kannst also schreiben void f(int i){...}(kein Static nötig) oder i->{...}anstelle deines ganzen Programms. Sehen Sie alle Java - Tipps . Siehe meine Antwort für dieselbe Herausforderung als Beispiel. Viel Spaß auf der Seite! :-)
Olivier Grégoire