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!


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θ.


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


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

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



@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 unter Verwendung der Indexierung.
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}}


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)

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.


2

Mathematica, 103 Bytes

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

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!


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

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!



@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

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!


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 

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[]





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
    )

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

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.



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

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

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