Halbdiagonales Alphabet

35

Wenn Sie einen Buchstaben des englischen Alphabets erhalten, müssen Sie ein halbdiagonales Alphabet für die Eingabe erstellen.

Wie baue ich ein halbdiagonales Alphabet?

Kurzbeschreibung : Zunächst nehmen Sie die Position des Buchstabens im Alphabet ein P( Phier 1-indiziert). Anschließend drucken Sie jeden Buchstaben bis zur Eingabe (einschließlich) in einer Zeile, der ein P-1Buchstabe vorausgeht, und wiederholen diesen Buchstaben in PAbständen von Leerzeichen.

Beispiele :

  • Vorausgesetzt F, Ihr Programm sollte Folgendes ausgeben:

    EIN 
     BB 
      CCC 
       DDDD 
        EEEEE 
         FFFFFF 
    
  • Vorausgesetzt K, Ihr Programm sollte Folgendes ausgeben:

    EIN
     BB 
      CCC 
       DDDD 
        EEEEE 
         FFFFFF 
          GGGGGGG 
           HHHHHHHH 
            IIIIIIIII 
             JJJJJJJJJ 
              KKKKKKKKKKK 
    
  • Vorausgesetzt A, Ihr Programm sollte Folgendes ausgeben:

    A
    

Regeln

  • Sie können entweder Klein- oder Großbuchstaben wählen, dies sollte jedoch konsistent sein.

  • Sie haben möglicherweise zusätzliche Leerzeichen wie folgt:

    • Ein konsistentes führendes Leerzeichen (in jeder Zeile).
    • Eine abschließende oder führende Zeile (n).
    • Nachgestellte Leerzeichen.
  • Die Eingabe und Ausgabe kann mit jedem Standardmittel erfolgen, und es gelten Standardlücken.

  • Sie können stattdessen eine ausgeben, sofern Sie auch die Version .

  • Das ist , also gewinnt der kürzeste Code in Bytes!

Inspiriert von dieser Herausforderung .


quelle
Ist die Ausgabe als Stringliste in Ordnung?
Adám
2
Warum die Gegenstimme? Was kann ich verbessern?
1
Wenn Sie sagen "P ist hier 1-indiziert", bezieht sich dies auf die Herausforderung oder das Beispiel?
Dave
3
@pizzakingme Nein, darfst du nicht.
1
Ich habe versehentlich ein interessantes Muster beim Golfen meiner Antwort erhalten: tio.run/##K0nO@f@/…
sergiol

Antworten:

10

Python 3 , 59 Bytes

lambda l:[' '*i+'%c '%(i+65)*-~i for i in range(ord(l)-64)]

Probieren Sie es online!

Python 3 , 61 Bytes

lambda l:[' '*i+-~i*(chr(i+65)+' ')for i in range(ord(l)-64)]

Probieren Sie es online! (Link zur Pretty-Print-Version)

Mr. Xcoder
quelle
8
Ich sehe absolut keinen Grund für eine Ablehnung. Kann der @Downvoter das erklären?
Mr. Xcoder
1
Ich könnte mir vorstellen, dass es nur ein falscher Klick ist oder jemand, der keine Erklärung mag (letzteres ist ziemlich unwahrscheinlich, IMO)
Conor O'Brien
Ich mag Python nicht und kann es nicht mit Python implementieren. Die Antwort ist also nicht nützlich für mich? Ich mache nur Spaß, aber die Tooltips der Schaltflächen entsprechen wahrscheinlich nicht den Regeln dieser Website
Thomas Weller
Ist es nur ich oder sagt es, dass Herr Xcoder 1 Repräsentant hat ...?
Stan Strum
9

Python 2 , 63 61 59 Bytes

-2 Bytes dank Rod. -2 Bytes dank Felipe Nardi Batista.

i=1
exec"print' '*i+'%c '%(i+64)*i;i+=1;"*(ord(input())-64)

Probieren Sie es online!

total menschlich
quelle
7

PowerShell , 45 42 Byte

65..$args[0]|%{" "*$i+++"$([char]$_) "*$i}

Probieren Sie es online!

Nimmt Eingaben als Literalzeichen auf und durchläuft dann die Großbuchstaben bis zu diesem Punkt, wobei jeder Iteration die entsprechende Anzahl von Leerzeichen und dann der Zeichen / Leerzeichen-Hybrid vorangestellt wird.

3 Bytes gespart dank TessellatingHeckler.

AdmBorkBork
quelle
@TessellatingHeckler In der Tat. Ich habe zu viel Golf gespielt "$args", was hier nicht funktioniert, ich habe die [0]Methode vergessen . Haha.
AdmBorkBork
5

JavaScript (ES6), 85 Byte

Funktioniert sowohl für die Eingabe als auch für die Ausgabe in Kleinbuchstaben. Gibt in jeder Zeile ein führendes Leerzeichen und ein nachfolgendes Leerzeichen aus.

f=(c,k=10,C=k.toString(36),r=s=>`${s} `.repeat(k-9))=>r``+r(C)+(C==c?'':`
`+f(c,k+1))

Demo

Arnauld
quelle
`${s} `kann durch (s+"")für eine Byte-Speicherung ersetzt werden
Luke
@ Luke Ich brauche diesen Raum. Es kann ersetzt werden (s+" "), aber das ist genauso lange.
Arnauld
5

APL (Dyalog) , 26 Bytes

Fordert zur Eingabe eines skalaren Zeichens auf. Druckt die Liste der Zeilen.

(∊⍴∘'',' ',¨⍨⊢⍴⊃∘⎕A)¨⍳⎕A⍳⎕

Probieren Sie es online! (hat ASCII-Art-Version bei einem zusätzlichen Byte)

 Eingabeaufforderung

⎕A⍳ finden ɩ ndex in A lphabet

 zuerst , dass viele ɩ ntegers

( Wenden auf jede folgende stillschweigende Funktion an:

⊃∘⎕A wählen Sie den argument'th Brief Brief von der A lphabet

⊢⍴ formt es zyklisch in die Länge des Arguments um

' ',¨⍨ füge jedem ein Leerzeichen hinzu

⍴∘'', Voranstellen einer Zeichenfolge mit Argumentlänge (mit Leerzeichen aufgefüllt)

ϵ nlist (Abflachen)


Die ASCII-Art-Version hat ganz links ein; Liste der Zeichenfolgen in Zeichentabelle mischen.

Adam
quelle
4

Perl 5 , 31 Bytes

30 Byte Code + 1 für -l.

print$"x$-,"$_ "x++$-for A..<>

Probieren Sie es online!

Dom Hastings
quelle
Sie können dies verringern, indem Sie sayanstelle der -lFlagge Folgendes verwenden
Xcali
@Xcali Ich bin hin und her gerissen -E/ -M5.01, ich habe sayin der Vergangenheit viel benutzt und würde wahrscheinlich die Tatsache missbrauchen, dass sayes eine Alternative zu printeiner eingeschränkten Quellen-Herausforderung oder ähnlichem ist, aber um -3 willen werde ich es behalten wie besehen. In diesem Meta-Beitrag finden Sie ein faires Argument . Schätzen Sie den Input!
Dom Hastings
3

Dyalog APL, 38 Bytes

{↑{(y/' '),(2×y←⎕A⍳⍵)⍴⍵,' '}¨⎕A↑⍨⎕A⍳⍵}

Probieren Sie es online!

Wie?

⎕A↑⍨ - Nimm das Alphabet bis

⎕A⍳⍵ - das eingegebene Zeichen

¨ - Für jedes Zeichen

    ⍵,' ' - nimm den char und ein Leerzeichen

    (...)⍴ umformen zu

    2×y←⎕A⍳⍵ - Der doppelte Index des Zeichens im Alphabet

    (y/' ') - und voranstellen von Zeichenindexräumen

- dann abflachen

Uriel
quelle
3

APL (Dyalog Classic) , 26 Byte

{↑{(≠\⍵<⍳3×⍵)\⍵⊃⎕A}¨⍳⎕A⍳⍵}

Probieren Sie es online!

Erläuterung

                      ⍳⎕A⍳⍵  generate indexes up to position of right arg 
{                          on each index apply function
   (≠\⍵<⍳3×⍵)                generate boolean mask for expansion (each line has a length 3 times its index ⍵, starting with  blanks and then alternating letter blank)
             \⍵⊃⎕A          expand character in position 
                             mix result into text matrix
Gil
quelle
Meine Güte ... 4 APL-er das gleiche Problem zur gleichen Zeit zu lösen! :) Ich denke , in codegolf sind Sie erlaubt die äußere zu entfernen {}, ersetzen Sie mit und behaupten , es ist ein „komplettes Programm“ , anstatt eine Funktion. Damit wäre Ihre Lösung (bisher) die beste.
ngn
Muss ein gutes Zeichen sein :) Danke für den Vorschlag. Ich habe es gesehen, war mir aber nicht sicher, wo ich die Grenze ziehen sollte. Ich denke, dass ich 3 Bytes sparen kann, wenn ich Locken entferne und mische.
Gil
3

V , 28, 26, 25 , 23 Bytes ( konkurrierend )

¬A[/a
lDÓ./& ò
ò-Ûä$Û>

Probieren Sie es online!

Beachten Sie, dass ich, obwohl ich schon lange vorhatte, bestimmte Funktionen hinzuzufügen , diese Herausforderung mich überzeugt hat, es endlich zu tun.

Die Ausgabe enthält ein vorangestelltes Leerzeichen in jeder Zeile und eine nachfolgende neue Zeile.

Hexdump:

00000000: ac41 5b2f 1261 0a6c 44d3 2e2f 2620 f20a  .A[/.a.lD../& ..
00000010: f22d dbe4 24db 3e                        .-..$.>

Erläuterung:

¬A[         " Insert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ['
   /        " Search for...
    <C-r>a  "   The input
l           " Move one character to the right
 D          " And delete every character after the cursor
  Ó         " Search for...
   .        "   Any character
    /       " And replace it with...
     & ò    "   That character followed by a space and a newline
ò           " Recursively...
 -          "   Move to the beginning of the next line up
  Ûä$       "   Make *line number* copies of the current line
     Û>     "   And indent this line by *line number* spaces
DJMcMayhem
quelle
1
Das konkurriert. Sie können den Titelvermerk entfernen.
Es ist nützlich für diejenigen, die sich der neuen Meta nicht bewusst waren, wie ich selbst
Conor O'Brien
3

05AB1E , 10 Bytes

A¹¡н«ðâƶāú

Probieren Sie es online!

-2 danke an Adnan .

Anhängen », damit es in separaten Zeilen gedruckt wird.

Erik der Outgolfer
quelle
Sie könnten weglassen, <da ein einheitliches führendes Leerzeichen in Ordnung ist.
Emigna
@Emigna Danke!
Erik der Outgolfer
A¹¡н«ðâƶāúsollte für 10 Bytes arbeiten
Adnan
@Adnan Ich denke, das ¹¡wird dazu führen, dass es nicht funktioniert ... oh, deshalb gibt es da einen «. : p
Erik der Outgolfer
3

R 94 88 Bytes

-6 Bytes dank Giuseppe

function(x,l=LETTERS)for(i in 1:match(x,l))cat(rep(' ',i-1),rep(paste(l[i],' '),i),'\n')}

Ungolfed:

f=function(x,l=letters){
  for(i in 1:which(l==x)){
    A=paste(l[i],' ')
    cat(rep(' ',i-1),rep(A,i),'\n')
  }
}
Andrew Haynes
quelle
88 Bytes : Das Zurückgeben einer anonymen Funktion ist in Ordnung. Sie können die geschweiften Klammern entfernen, da fes sich um einen Einzeiler handelt, und matchstattdessen whichein Byte speichern.
Giuseppe
71 Bytes
Giuseppe
68 Bytes, die von stdin eingegeben werden.
Giuseppe
3

Haskell, 52 44 Bytes

f k=[[" ",s:" "]>>=(['A'..s]>>)|s<-['A'..k]]

Gibt eine Liste von Zeilen zurück.

Probieren Sie es online!

f k=                  -- main function is f, input parameter k
  [   |s<-['A'..k]]   -- for each s from ['A'..k]
     >>=              -- map (and collect the results in a single string) the function: 
         (['A'..s]>>) --  replace each element in ['A'..s] with
    [  ,  ]           --  over the list, containing
     " "              --   a single space to get the indent
        s:" "         --   s followed by space to get the letter sequence

Edit: @jferard: drei Bytes gespeichert. Vielen Dank!

nimi
quelle
49 Bytes:f k=[tail$[" ",s:" "]>>=(['A'..s]>>)|s<-['A'..k]]
jferard
@ jferard: Vielen Dank. Als ich die Herausforderung erneut las, bemerkte ich, dass ein Leerzeichen pro Zeile zulässig ist, sodass wir das nicht benötigen tail$.
nimi
2

JavaScript (ES8), 92 Byte

c=>(g=n=>n>9?[...g(n-1),`${n.toString(36)} `.repeat(n-=9).padStart(n*3)]:[])(parseInt(c,36))

Verwendet Kleinbuchstaben. Zeilen haben ein führendes und ein hinteres Leerzeichen. Gibt ein Array von Zeilen zurück.

Testschnipsel

let f=

c=>(g=n=>n>9?[...g(n-1),`${n.toString(36)} `.repeat(n-=9).padStart(n*3)]:[])(parseInt(c,36))

;O.innerText=f("k").join`\n`
<pre id=O></pre>

Justin Mariner
quelle
2

Schale , 13 Bytes

z+ḣ∞øzRNC1…'A

Nimmt ein Zeichen in einfachen Anführungszeichen als Befehlszeilenargument und gibt das Ergebnis an STDOUT aus. Probieren Sie es online!

Erläuterung

Ich nutze die Art und Weise, wie Husk Listen mit Zeichenfolgen druckt: Verbinden Sie innere Listen mit Leerzeichen und äußere Listen mit Zeilenumbrüchen.

z+ḣ∞øzRNC1…'A  Implicit input, say 'C'
          …'A  Range from A: "ABC"
        C1     Cut into strings of length 1: ["A","B","C"]
     z N       Zip with positive integers
      R        using repetition: x = [["A"],["B","B"],["C","C","C"]]
   ∞ø          The empty string repeated infinitely: ["","","",...
  ḣ            Prefixes: [[],[""],["",""],["","",""],...
z+             Zip with x using concatenation: [["A"],["","B","B"],["","","C","C","C"]]
               Implicitly join each inner list with spaces, join the resulting strings with newlines and print.
Zgarb
quelle
2

05AB1E , 15 14 13 Bytes

Dank Adnan 1 Byte gespeichert

A¹¡н«ƶ€S»¶¡āú»

Probieren Sie es online! oder die Ascii-Kunstversion

Erläuterung

A                # push lowercase alphabet
 ¹¡              # split at input
   н             # get the first part
    «            # append the input
     ƶ           # repeat each a number of times corresponding to its 1-based index
      €S         # split each to a list of chars
        »        # join on spaces and newlines
         ¶¡      # split on newlines
           āú    # prepend spaces to each corresponding to its 1-based index
             »   # join on newlines
Emigna
quelle
Es sieht so aus, als hätten wir es ein bisschen anders gemacht : D
Erik the Outgolfer
@EriktheOutgolfer: Wir haben es ganz ähnlich gemacht, aber Ihre sehr gute Idee, vor dem Anheben ein Leerzeichen anzufügen, hat Ihre kürzere Länge erreicht, da die Verbindung nicht mehr erforderlich ist. Ich hatte weder das führende / nachfolgende Leerzeichen noch die Ausgabe als Liste gelesen, was mir hoffentlich beibringt, die gesamte Herausforderung vor der Implementierung zu lesen: P
Emigna
tl; dr: vektorisierung: p
Erik the Outgolfer
A¹¡н«statt ADIk>£sollte funktionieren
Adnan
@Adnan: Danke! Ich hatte A¹¡нaber nicht daran «
gedacht
2

QBasic, 79 74 72 Bytes

Vielen Dank an Taylor Scott für die Einsparung von Bytes (zweimal!)

FOR i=1TO ASC(INPUT$(1))-64
?TAB(i)
FOR j=1TO i
?CHR$(64+i)" ";
NEXT j,i

Verwendet Großbuchstaben. Die Eingabe erfolgt per Tastendruck und wird nicht auf dem Bildschirm wiedergegeben.

Erläuterung

Wir Schleife ivon 1bis zu der Position des Begrenzungs Buchstaben im Alphabet (1-basiert). Für jedes ibewegen wir uns in die Spalte ides Bildschirms mit TAB; dann idrucken wir mal den ith Buchstaben des Alphabets, gefolgt von einem Leerzeichen.

DLosc
quelle
Wie sich herausstellt, können Sie den INPUT$(1)Befehl als direkten Ersatz für die Variable z$für ein Delta von -2 Bytes verwenden
Taylor Scott
@ TaylorScott Gute Idee, danke!
DLosc,
2

Japt -R , 24 23 17 15 Bytes

Gibt ein Array aus und enthält in jeder Zeile einen führenden Zeilenumbruch sowie einen führenden und einen nachfolgenden Abstand.

IòUc ÏçSiXd¹iYç

Probier es aus

  • 1 Byte gespart mit Hilfe von Oliver und weitere 6 dank ihm, der einen besseren Weg zur Generierung des ersten Arrays aufzeigt.
Zottelig
quelle
1

Kohle , 18 Bytes

F⁺⌕αθ¹«P×⁺§αι ⁺ι¹↘

Probieren Sie es online!

Erik der Outgolfer
quelle
Nein, Sie können 05AB1E nicht Charcoal schlagen lassen ...: P
totalhuman
@totallyhuman die Rache: p
Erik der Outgolfer
Leider ist beliebiges führendes Whitespace nicht erlaubt, da E…·?θ⁺× κ⪫× κιdies sonst in 14 Bytes erledigt würde.
Neil
@Neil Ein führender Whitespace ist zulässig, aber ich bin mir nicht sicher, wie ich dahin gekommen bin ?. Es sollte Astattdessen sein, denke ich. Oh warte, ohhhhh ich verstehe was du meinst.
Erik der Outgolfer
1

Braingolf , 65 Bytes

a#a-# 7-,-~vc<!?>[$_]:$_|&,(.#a-!?.>[# M]1+>[.M# M]:$_!@|v#
&@R);

Probieren Sie es online!

Kleinbuchstaben.

Enthält 1 abschließendes Leerzeichen in jeder Zeile und eine abschließende neue Zeile am Ende der Ausgabe.

Skidsdev
quelle
1

JavaScript, 102 bis 94 Byte

2 Bytes gespart dank Neil

f=
a=>[...Array(parseInt(a,36)-9)].map((a,b)=>''.padEnd(b).padEnd(b*3+1,(b+10).toString(36)+' '))

console.log(f('k').join`\n`)


quelle
1

Netzhaut , 51 Bytes

^.
$&$&
}T`L`_L`^.
.
$.`$* $&$.`$* ¶
+`(\w) \B
$&$1

Probieren Sie es online! Erläuterung:

^.
$&$&

Dupliziere den (ersten) Buchstaben.

}T`L`_L`^.

Drehen Sie es im Alphabet um 1 zurück oder löschen Sie es, wenn es sich um ein Duplikat handelt A. Duplizieren und drehen Sie weiter, bis wir duplizieren A. An diesem Punkt macht das Löschen das Duplizieren rückgängig und die Schleife ist abgeschlossen.

.
$.`$* $&$.`$* ¶

Ersetzen Sie jeden Buchstaben durch eine Linie mit dem Buchstaben auf beiden Seiten.

+`(\w) \B
$&$1

Fügen Sie doppelte Buchstaben zwischen allen Paaren von Leerzeichen rechts von vorhandenen Buchstaben ein.

Neil
quelle
1

Kohle , 15 Bytes

F…·AS«P⪫E…@ιι ↘

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

 …·AS           Inclusive character range from A to the input
F    «          Loop over each character
         …@ι    Exclusive range from @ to the current character
        E   ι   Replace each element with the current character
       ⪫        Join with spaces
      P         Print without moving the cursor.
              ↘ Move the cursor down and right.

Wenn zusätzliches Auffüllen zulässig wäre, würde dies für 14 Bytes funktionieren:

E…·?θ⁺× κ⪫× κι

Probieren Sie es online! Link ist eine ausführliche Version des Codes.

Neil
quelle
1

Mathematica, 70 Bytes

(T=Table)[""<>{" "~T~i,T[Alphabet[][[i]]<>" ",i]},{i,LetterNumber@#}]&

Kleinbuchstaben

gibt eine Liste aus

Danke @ngenisis für Korrekturen

Bei Version Column@am Anfang platzieren

J42161217
quelle
1

Excel VBA, 72 Bytes

Anonyme VBE-Direktfensterfunktion, die Eingaben von der Zelle A1und Ausgaben in das VBE-Direktfenster übernimmt

For i=1To Asc([A1])-64:[B1]=i:?Space(i-1)[REPT(CHAR(B1+64)&" ",B1)]:Next
Taylor Scott
quelle
1

Pyth , 17 Bytes

.e+*kd*+bdhk<GhxG

Probieren Sie es hier aus (hübsche Druckversion).


Wie funktioniert das?

  • hxG - Nimmt den Index der Eingabe in Kleinbuchstaben.

  • <G - Schneidet jedes Zeichen nach der Eingabe aus dem Alphabet.

  • .e- Aufzählungskarte. Karten über das zugeschnittene Alphabet mit den Indizes als kund den Buchstaben als b.

  • *kd- kLeerzeichen anhängen .

  • +bd- b+ ein Leerzeichen (der aktuelle Buchstabe + Leerzeichen).

  • *...hk- Wiederholen Sie die k+1Zeiten.

  • +(...)(...) - Verketten.

Mr. Xcoder
quelle
1
Eine meiner Lieblingssachen bei Pyth ist es, eine Antwort zu schreiben und festzustellen, dass jemand die gleiche Antwort geschrieben hat, Zeichen für Zeichen. Es trifft zu, dass Python "es gibt die beste Antwort" perfekt findet!
Dave
@pizzakingme Ja, ich frage mich, ob ich es besser machen kann
Mr. Xcoder
Die Raumaddition fühlt sich falsch an, ich denke besser ist es möglich
Dave
@pizzakingme Ich könnte .e+*kdjd*bhk<GhxGauch 17 Bytes bekommen
Mr. Xcoder
16 Bytes:.e+*kd*+bdhkhcGQ
Dave
1

C ++ (gcc) , 164 Bytes

#include<iostream>
#define f for(int i=0;i<o-'`';i++)
using namespace std;int main(){char c;cin>>c;for(char o='a';o<=c;o++){f cout<<' ';f cout<<o<<' ';cout<<'\n';}}

Mein erster Versuch nach langer Lauerzeit!

Ungolfed Code unten:

#include <iostream>

using namespace std;
#define f for (auto i = 0; i < output - '`'; i++)

int main()
{
  char input;

  cin >> input;

  for (char output = 'a'; output <= input; output++)
  {
    f cout << ' ';

    f cout << output << ' ';

    cout << endl;
  }
}

Probieren Sie es online!

Drise
quelle
Ich weiß, dass es eine Menge Golf zu tun gibt, aber bis jetzt ist das die kleinste, die ich bekommen habe.
Drise