Pół-przekątny alfabet

35

Biorąc pod uwagę literę alfabetu angielskiego, Twoim zadaniem jest zbudowanie pół-przekątnego alfabetu na wejściu.

Jak zbudować alfabet pół-przekątny?

Krótki opis : Najpierw zajmujesz pozycję litery w alfabecie P(tutaj Pjest indeksowana 1). Następnie drukujesz każdą literę, aż do wejścia (włącznie) w wierszu, poprzedzonego P-1i powtarzającego Prazy tę literę , z przeplotem.

Przykłady :

  • Biorąc pod uwagę F, twój program powinien wypisać:

    ZA 
     nocleg ze śniadaniem 
      CCC 
       DDDD 
        EEEEE 
         FFFFFF 
    
  • Biorąc pod uwagę K, twój program powinien wypisać:

    ZA
     nocleg ze śniadaniem 
      CCC 
       DDDD 
        EEEEE 
         FFFFFF 
          GGGGGGG 
           HHHHHHHH 
            IIIIIIIII 
             JJJJJJJJJJ 
              KKKKKKKKKKK 
    
  • Biorąc pod uwagę A, twój program powinien wypisać:

    A
    

Zasady

  • Możesz wybrać małe lub wielkie litery, ale to powinno być spójne.

  • Możesz mieć dodatkowe przestrzenie w następujący sposób:

    • Jedna spójna spacja wiodąca (w każdej linii).
    • Końcowe lub wiodące znaki nowej linii.
    • Końcowe spacje.
  • Dane wejściowe i wyjściowe można przyjmować dowolną standardową wartością i obowiązują domyślne luki.

  • Zamiast tego możesz wypisać listę wierszy, o ile podasz również wersję .

  • To jest , więc wygrywa najkrótszy kod w bajtach!

Zainspirowany tym wyzwaniem .


źródło
Czy wyjście jako lista ciągów jest w porządku?
Adám
2
Dlaczego głosowanie negatywne? Co mogę poprawić?
1
Kiedy mówisz „P ma tutaj indeks 1”, czy odnosi się to do wyzwania czy przykładu?
Dave
3
@pizzakingme Nie, możesz nie.
1
Przypadkowo dostałem interesujący wzór podczas gry w golfa moją odpowiedź: tio.run/##K0nO@f@/…
sergiol

Odpowiedzi:

10

Python 3 , 59 bajtów

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

Wypróbuj online!

Python 3 , 61 bajtów

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

Wypróbuj online! (link do wersji z ładnym drukiem)

Pan Xcoder
źródło
8
Nie widzę absolutnie żadnego powodu, by głosować negatywnie. Czy @downvoter może to wyjaśnić?
Pan Xcoder
1
Wyobrażam sobie, że to tylko błędne kliknięcie, a może ktoś nie lubi braku wyjaśnienia (ten drugi jest dość mało prawdopodobny IMO)
Conor O'Brien
Nie lubię Pythona i nie mogę zaimplementować go w Pythonie, więc odpowiedź nie jest dla mnie przydatna? Żartuję, ale podpowiedzi przycisków prawdopodobnie nie pasują do zasad tej witryny
Thomas Weller
Czy to tylko ja, czy mówi, że Pan Xcoder ma 1 powtórzenie ...?
Stan Strum,
9

Python 2 , 63 61 59 bajtów

-2 bajty dzięki Rod. -2 bajty dzięki Felipe Nardi Batista.

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

Wypróbuj online!

całkowicie ludzki
źródło
8

C, 89 bajtów

i,j;f(l){for(i=64;i++<l&&printf("%*c ",i-64,i);puts(""))for(j=i-65;j--;)printf("%c ",i);}

Wypróbuj online!

Steadybox
źródło
7

PowerShell , 45 42 bajtów

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

Wypróbuj online!

Pobiera dane wejściowe jako literalny znak, a następnie zapętla przez wielkie litery do tego miejsca, każda iteracja poprzedza odpowiednią liczbę spacji, a następnie hybryda char \ space.

Zaoszczędź 3 bajty dzięki TessellatingHeckler.

AdmBorkBork
źródło
@TessellatingHeckler Rzeczywiście. Grałem w to "$args"tak bardzo, że tutaj by to nie zadziałało, zapomniałem o [0]metodzie. Ha ha.
AdmBorkBork
5

JavaScript (ES6), 85 bajtów

Działa małymi literami zarówno dla wejścia jak i wyjścia. Generuje spację wiodącą i spację końcową w każdej linii.

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

Próbny

Arnauld
źródło
`${s} `można zastąpić (s+"")jednym zapisaniem bajtu
Luke
@Luke Potrzebuję tego miejsca. Można go zastąpić (s+" "), ale to równie długo.
Arnauld
5

APL (Dyalog) , 26 bajtów

Monituje o charakter skalarny. Wyświetla listę linii.

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

Wypróbuj online! (ma wersję ASCII w jednym bajcie)

 monit o wprowadzenie

⎕A⍳ znajdź d ndex w A lphabet

 Pierwszy, że wiele ɩ ntegers

( Zastosuj następującą funkcję ukrytą dla każdego:

⊃∘⎕A wybierz literę argumentu z litery A alfabetu

⊢⍴ cyklicznie przekształcaj go do długości argumentu

' ',¨⍨ dodaj spację do każdego

⍴∘'', dodaj ciąg długości argumentu (wypełniony spacjami)

ε nlist (spłaszczyć)


Wersja artystyczna ASCII ma po lewej stronie; mieszaj listę ciągów w tabeli znaków.

Adám
źródło
4

Perl 5 , 31 bajtów

Kod 30 bajtów + 1 dla -l.

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

Wypróbuj online!

Dom Hastings
źródło
Możesz to zmniejszyć, używając sayzamiast -lflagi: Wypróbuj online!
Xcali,
@Xcali Jestem rozdarty -E/ -M5.01, używałem sayznacznie w przeszłości i prawdopodobnie nadużyłbym faktu, że sayjest to alternatywa dla printograniczonego źródła lub podobnego wyzwania, ale ze względu na -3 zachowam jak na razie. Zobacz ten meta post jako uczciwy argument . Doceń wejście!
Dom Hastings
3

Dyalog APL, 38 bajtów

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

Wypróbuj online!

W jaki sposób?

⎕A↑⍨ - weź alfabet do

⎕A⍳⍵ - znak wejściowy

¨ - dla każdego znaku

    ⍵,' ' - weź char i przestrzeń

    (...)⍴ - przekształć do

    2×y←⎕A⍳⍵ - dwukrotność indeksu znaku w alfabecie

    (y/' ') - i poprzedzają spacje indeksem char

- następnie spłaszczyć

Uriel
źródło
3

APL (Dyalog Classic) , 26 bajtów

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

Wypróbuj online!

Wyjaśnienie

                      ⍳⎕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
źródło
Dobroć ... 4 APL-er rozwiązuje ten sam problem w tym samym czasie! :) Myślę, że w codegolf masz prawo do usuwania zewnętrznej {}, wymienić się i twierdzą, że to „kompletny program” zamiast funkcją. To sprawi, że twoje rozwiązanie będzie najlepsze (jak dotąd).
ngn
To musi być dobry znak :) Dzięki za sugestię. Widziałem to zrobione, ale nie byłem pewien, gdzie narysować linię. Myślę, że mogę zapisać 3 bajty, jeśli usunę loki i zmiksuję.
Gil
3

V , 28, 26, 25 , 23 bajtów ( konkurencyjne )

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

Wypróbuj online!

Zauważ, że chociaż od dawna planowałem dodać pewne funkcje , to wyzwanie przekonało mnie, że w końcu to zrobiłem.

Dane wyjściowe zawierają jedną spację wiodącą w każdej linii i jedną nową linię.

Hexdump:

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

Wyjaśnienie:

¬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
źródło
1
To jest konkurencja. Możesz usunąć uwagę dotyczącą tytułu.
Jest przydatny dla tych, którzy nie byli świadomi nowej meta, takich jak ja
Conor O'Brien
3

05AB1E , 10 bajtów

A¹¡н«ðâƶāú

Wypróbuj online!

-2 dzięki Adnan .

Dołącz, »aby drukować w osobnych wierszach.

Erik the Outgolfer
źródło
Możesz pominąć, <ponieważ jedna spójna wiodąca przestrzeń jest w porządku.
Emigna
@Emigna Thanks!
Erik the Outgolfer
A¹¡н«ðâƶāúpowinien działać przez 10 bajtów
Adnan
@Adnan Myślę, że ¹¡to sprawi, że to nie zadziała ... och, więc dlatego jest «tam. : p
Erik the Outgolfer
3

R, 94 88 bajtów

-6 bajtów dzięki Giuseppe

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

Nie golfowany:

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
źródło
88 bajtów : zwracanie anonimowej funkcji jest w porządku, możesz pozbyć się nawiasów klamrowych, ponieważ fjest to jednowierszowy, i używanie matchzamiast whichzapisywania bajtu.
Giuseppe,
71 bajtów
Giuseppe,
68 bajtów pobierających dane wejściowe ze standardowego wejścia.
Giuseppe
3

Haskell, 52 44 bajty

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

Zwraca listę wierszy.

Wypróbuj 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

Edycja: @jferard: zapisano trzy bajty. Dzięki!

nimi
źródło
49 bajtów:f k=[tail$[" ",s:" "]>>=(['A'..s]>>)|s<-['A'..k]]
Jferard
@jferard: Wielkie dzięki. Powtarzając wyzwanie zauważyłem, że dozwolone jest wiodące miejsce na linię, więc nie potrzebujemy tail$.
nimi
2

JavaScript (ES8), 92 bajty

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

Używa małych liter. Linie mają jedno miejsce wiodące i jedno końcowe. Zwraca tablicę wierszy.

Test Snippet

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
źródło
2

Łuska , 13 bajtów

z+ḣ∞øzRNC1…'A

Bierze znak w pojedynczym cudzysłowie jako argument wiersza poleceń, wypisuje wynik do STDOUT. Wypróbuj online!

Wyjaśnienie

Wykorzystuję sposób, w jaki Husk drukuje listy list ciągów: łącz wewnętrzne listy ze spacjami i zewnętrzne listy z nowymi liniami.

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
źródło
2

05AB1E , 15 14 13 bajtów

Zaoszczędzono 1 bajt dzięki Adnanowi

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

Wypróbuj online! lub artystyczna wersja Ascii

Wyjaśnienie

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
źródło
Wygląda na to, że potraktowaliśmy to nieco inaczej : D
Erik the Outgolfer
@EriktheOutgolfer: Zrobiliśmy to dość podobnie, ale twój bardzo fajny pomysł, aby dodać przestrzeń przed podniesieniem, eliminując potrzebę łączenia, skrócił twój. Nie przeczytałem tych spacji wiodących / końcowych ani danych wyjściowych, ponieważ lista była w porządku, więc mam nadzieję, że nauczy mnie czytać całe wyzwanie przed wdrożeniem: P
Emigna
tl; dr: wektoryzacja: p
Erik the Outgolfer
A¹¡н«zamiast ADIk>£powinien działać
Adnan
@Adnan: Dzięki! Miałem, A¹¡нale nie zastanawiałem «się nad ostatnim listem, więc nie było wystarczająco dobre: ​​P
Emigna
2

QBasic, 79 74 72 bajty

Dzięki Taylor Scott za oszczędności bajtów (dwa razy!)

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

Używa wielkich liter. Wprowadzanie odbywa się poprzez naciśnięcie klawisza i nie jest powtarzane na ekranie.

Wyjaśnienie

Zapętlamy iod 1pozycji ograniczającej litery w alfabecie (na podstawie 1). Do każdego z nich iprzechodzimy do kolumny iekranu za pomocą TAB; Następnie, iczasy, możemy wydrukować ith literę alfabetu, a następnie za pomocą przestrzeni.

DLosc
źródło
Jak się okazuje, możesz użyć INPUT$(1) polecenia jako bezpośredniego zamiennika zmiennej z$dla delty -2 bajtów
Taylor Scott,
@TaylorScott Dobry pomysł, dzięki!
DLosc
2

Japt -R , 24 23 17 15 bajtów

Generuje tablicę, zawiera wiodącą nową linię oraz wiodącą i końcową spację w każdej linii.

IòUc ÏçSiXd¹iYç

Sprawdź to

  • 1 bajt zapisany z pomocą Olivera i kolejne 6 dzięki nim wskazując lepszy sposób na wygenerowanie początkowej tablicy.
Kudłaty
źródło
1

Węgiel drzewny , 18 bajtów

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

Wypróbuj online!

Erik the Outgolfer
źródło
Nie, nie możesz pozwolić 05AB1E pokonać Charcoal ...: P
totalnie ludzkie
@totallyhuman the zemsta: p
Erik the Outgolfer
Niestety arbitralne wiodące białe znaki nie są dozwolone, w przeciwnym E…·?θ⁺× κ⪫× κιrazie wykona zadanie w 14 bajtach.
Neil
@Neil Jeden wiodący biały znak jest dozwolony, ale nie jestem pewien, jak ?się tam dostał. AMyślę, że tak powinno być . Och, czekaj, och, rozumiem o co ci chodzi.
Erik the Outgolfer
1

Braingolf , 65 bajtów

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

Wypróbuj online!

Małe litery.

Zawiera 1 końcowe miejsce w każdym wierszu i końcowy znak nowej linii na końcu wyniku.

Skidsdev
źródło
1

C # (.NET Core) , 103 bajty

n=>{var i='`';var l="";for(;i<n;l+='\n'){l+="".PadLeft(i++-96);for(int s=96;s++<i;)l+=i+" ";}return l;}

Wypróbuj online!

jkelm
źródło
1

JavaScript, 102 94 bajty

2 bajty zapisane dzięki Neilowi

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`)


źródło
1

Siatkówka , 51 bajtów

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

Wypróbuj online! Wyjaśnienie:

^.
$&$&

Zduplikuj (pierwszą) literę.

}T`L`_L`^.

Obróć go z powrotem o 1 w alfabecie lub usuń, jeśli jest duplikatem A. Powtarzaj i obracaj, dopóki nie powielimy. AW tym momencie usunięcie cofnie duplikację i pętla się zakończy.

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

Zastąp każdą literę linią z literą wyłożoną po obu stronach.

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

Wstaw zduplikowane litery między wszystkimi parami dopełniania po prawej stronie istniejących liter.

Neil
źródło
1

Węgiel drzewny , 15 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

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

Gdyby dodatkowe dopełnienie było legalne, działałoby to dla 14 bajtów:

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

Wypróbuj online! Link jest do pełnej wersji kodu.

Neil
źródło
1

Mathematica, 70 bajtów

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

małe litery

wypisuje listę

thanx @ngenisis dla poprawek

Dla wersji umieść Column@na początku

J42161217
źródło
1

Excel VBA, 72 bajty

Anonimowa funkcja bezpośredniego okna VBE, która przenosi dane wejściowe z komórki A1i dane wyjściowe do bezpośredniego okna VBE

For i=1To Asc([A1])-64:[B1]=i:?Space(i-1)[REPT(CHAR(B1+64)&" ",B1)]:Next
Taylor Scott
źródło
1

Pyth , 17 bajtów

.e+*kd*+bdhk<GhxG

Wypróbuj tutaj (ładna wersja do wydruku).


Jak to działa?

  • hxG - Pobiera indeks danych wejściowych zapisanych małymi literami.

  • <G - Przycina każdy znak po wprowadzeniu z alfabetu.

  • .e- Wyliczona mapa. Mapy nad przyciętym alfabetem z indeksami as ki literami as b.

  • *kd- Dołącz kspacje.

  • +bd- b+ spacja (bieżąca litera + spacja).

  • *...hk- Powtórz k+1czasy.

  • +(...)(...) - konkatenat.

Pan Xcoder
źródło
1
Jedną z moich ulubionych rzeczy w Pyth jest pisanie odpowiedzi i stwierdzenie, że ktoś napisał tę samą odpowiedź, znak za postacią. Uderza to, że Python „jest najlepsza odpowiedź” spot doskonale!
Dave
@pizzakingme Tak, zastanawiam się, czy dam radę lepiej
Mr. Xcoder,
dodanie miejsca wydaje się złe, myślę, że lepiej jest możliwe
Dave
@pizzakingme Mógłbym dostać .e+*kdjd*bhk<GhxGrównież 17 bajtów
Mr. Xcoder
16 bajtów:.e+*kd*+bdhkhcGQ
Dave
1

C ++ (gcc) , 164 bajty

#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';}}

Moja pierwsza próba po długim przyczajeniu się!

Kod niepoddany golfowi poniżej:

#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;
  }
}

Wypróbuj online!

Drise
źródło
Wiem, że musi być kilka rzeczy do gry w golfa, ale jak dotąd jest to najmniejsze, jakie dostałem.
Drise