Diagonalny alfabet do wejścia


26

Inspirowany tym postem . Dla tych, którzy zaznaczają to pytanie jako duplikat, zachęcam do przeczytania pytania, aby przekonać się, że moje jest modyfikacją powiązanego z nim pytania. Ten, do którego prowadzi link, nie wymaga podania danych i ma po prostu wydrukować alfabet po przekątnej.

Wyzwanie

Biorąc pod uwagę od 1 do 26 włącznie, wydrukuj alfabet po przekątnej, ale zacznij drukować pionowo na podstawie podanego wpisu.

Przykłady

Biorąc pod uwagę wkład:

16

Twój program powinien wypisać:

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

Wkład:

4

Wydajność:

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

Wkład:

1

Wydajność:

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

Wkład:

26

Wydajność:

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

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź w każdym języku.

Powodzenia!


6
Czy możemy wybrać indeksowanie 0 lub 1?
— notjagan

Czy spójna wiodąca przestrzeń jest akceptowalna?
— Giuseppe,

Czy dopuszczalne są spacje końcowe?
— Dom Hastings,

Czy możemy używać wielkich liter?
— Adám,

Czy możemy zwrócić listę ciągów znaków?
— Adám

Odpowiedzi:


13

Węgiel , 9 bajtów

↘✂β⁰N↓✂βη

Wypróbuj online!

Jak to działa

↘✂β⁰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

To rozwiązanie nie działa już w bieżącej wersji węgla drzewnego (najprawdopodobniej z powodu poprawki błędu), ale problem został rozwiązany dla 10 bajtów z ↘✂β⁰N↓✂βIθ.


2
Nie jestem pewien, dlaczego to działa; może to być błąd, który został wprowadzony kilka tygodni temu. (Zwykle musiałbyś użyć Iθzamiast η.)
— Neil

@Neil Wydaje się dziś zepsuty. Użycie Iθ rozwiązuje to.
— JP de la Torre,

Zaoszczędź 1 bajt, używając …βNzamiast ✂β⁰N.
— Neil,

7

05AB1E , 11 bajtów

AvNI<‚Wysú,

Pierwszy raz próbuję 05AB1E, więc jestem otwarty na wskazówki.

Wypróbuj online!

Jeśli dozwolone jest wejście od zindeksowane od z 0do 25, może to być 10 bajtów przez pominięcie <.


Niiice! Dokładnie to, co mam. Próbowałem „podnieść”, ale to nie działa zgodnie z planem. Myślę, że to całkiem optymalne :).
— Magic Octopus Urn

4

JavaScript (ES2017), 73 72 71 66 bajtów

Oszczędność niektórych bajtów dzięki @JustinMariner

f=(n,x=26)=>x?f(n,x-1)+(x+9).toString(36).padStart(x<n?x:n)+`
`:''

1
Dodaje to 10po zkońcu z powodu ++xwcześniejszego x.toString(). Naprawiono i grał w golfa do 68 bajtów przy użyciu padStart: TIO
— Justin Mariner

@JustinMariner Dzięki, myślę, że mogę przejść na ES8 w tym celu ...
— ETHproductions

Czy możesz coś uratować, curry? n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':""
— Shaggy

@ Shaggy Być może nie wiem, czy tego rodzaju curry jest dozwolone.
— ETHproductions

Ach, orzechy, wygląda na to, że twoja propozycja na to nie jest już konsensusem :(
— Kudłaty

4

Python 2, 61 58 57 bajtów

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

-3 bajty dzięki Rod

-1 więcej bajtów dzięki Mr. Xcoder



@Pavel To nie zadziałałoby, ponieważ odtąd inputbędzie wywoływane za każdym razem, gdy foriteruje pętla, nawet jeśli jest tylko jeden wiersz danych wejściowych.
— notjagan


57 bajtów przy użyciu indeksowania dolnego.
— Pan Xcoder,


4

Ruby, 51 46 43 bajtów

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

Zwraca listę ciągów.

Wygląda na to, że ludzie Pythona mieli coś do roboty ze swoimi indeksami dolnymi. -5 bajtów, czerpiąc inspirację z ulepszenia ppperry przez pana Xcodera.

Poprzednie rozwiązanie z rjust(51 bajtami):

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


3

R 99 99 bajtów

@MickeyT zapisał 10 bajtów

funkcjonować

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

próbny

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
Kilka małych oszczędności. Zamiast tego ifelsespróbuj min. print.noquotemożna zastąpić catna '\n'w wklej. \nMoże być prosto CR. Nawiasy klamrowe dla ciała funkcji można upuścić.
— MickyT,

Można zaoszczędzić trochę więcej, używając writezamiast cati paste:write(c(rep(" ",min(x,i)),letters[i]),"",26,,"")
— user2390246

3

Siatkówka , 72 68 bajtów

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

Wypróbuj online! Dane wyjściowe obejmują końcowe białe znaki. Zapisz 1 bajt, usuwając spację przed $dopuszczeniem indeksowania zerowego. Edycja: Zapisano 4 bajty za pomocą generatora alfabetów @ MartinEnder. Wyjaśnienie:

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

Wstaw alfabet.

\D
$.`$* $&¶

Przekątna.

\d+
$* 

Przekształć dane wejściowe w jednoargumentowe jako spacje.

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

Przytnij długie linie, aby żadna linia nie była dłuższa niż pusta linia na końcu.


2

Mathematica, 103 bajty

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

2

Pyth , 21 17 15 bajtów

Wykonano na telefonie z baterią 3%.

VlG+*d?>QNNQ@GN

Wyjaśnienie:

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)

Wypróbuj online!


1
@ totallyhuman Właśnie zjadłem niesamowitą pizzę w Las Vegas w Nowym Meksyku
— Stan Strum

Znalazłem kilka znacznie krótszych podejść i postanowiłem opublikować własną odpowiedź .
— Mr. Xcoder,

@ Mr.Xcoder Tak, dobra robota.
— Stan Strum,




2

Haskell, 58 54 bajtów

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

Wypróbuj online!

Jak to działa

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 

Edycja: @Lynn zapisał 4 bajty. Dzięki!



@Lynn; Dzięki! Zawsze zapominam o notacji dla list.
— nimi


2

Gaia , 12 bajtów

…26⊃§×¦₵a+†ṣ

Wypróbuj online!

Wyjaśnienie

…             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 bajty

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

Zwraca listę ciągów.

Wypróbuj online!


Czy mogę zapytać, dlaczego node.js? wydaje się być prawidłowym normalnym JS
— Downgoat

@Downgoat To automatyczne formatowanie TIO
— Conor O'Brien,

btw możesz zapisać bajty za pomocą.padStart
— Downgoat

Poczekaj, tak jak myślałem, w zasadzie trafia do odpowiedzi ETH
— Downgoat

Przełącz na ES8 i zapisz bajt za pomocą padEndzamiast repeat.
— Shaggy

1

Mathematica, 67 bajtów

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

Zwraca ciąg SparseArrayznaków. Aby wizualizować, dołącz Grid@z przodu.

Wypróbuj na Wolfram Sandbox

Stosowanie

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

    ⋮

    z 

1

Python 2 , 52 bajty

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

Wypróbuj online!

Zakładam, że lista ciągów jest w porządku ...

Najkrótszy, jaki mogłem uzyskać z rekurencją:

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 bajtów

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

Liczba bajtów obejmuje również

using System.Linq;

Wypróbuj online!

Zwraca kolekcję ciągów, po jednym dla każdej linii. Jeśli nie jest to dozwolone, odpowiedź będzie pęcznieć o 17 bajtów dla string.Concat()i \nwewnątrz ciągu

Wyjaśnienie:

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 bajtów

26:tiXl2Y2oZ?c

Wypróbuj w MATL Online

Wyjaśnienie

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 bajtów

j.e+<*kdtQbG

Wypróbuj tutaj!

Jeśli dozwolone są listy ciągów, można to skrócić do 11 bajtów :

.e+<*kdtQbG

Pyth , 12 bajtów

VG+<*dxGNtQN

Wypróbuj tutaj!

Pyth , 14 bajtów

jm+<*d;tQ@Gd26

Wypróbuj tutaj.

Jeśli dozwolone są listy ciągów, można to skrócić do 13 bajtów :

m+<*d;tQ@Gd26

Jak to działa?

W przeciwieństwie do większości innych odpowiedzi, mapy / pętle nad małymi literami we wszystkich 3 rozwiązaniach.

Wyjaśnienie nr 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.

Wyjaśnienie nr 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)

Wyjaśnienie nr 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 bajtów

Rozwiązanie:

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

Przykład:

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

Wyjaśnienie:

Utwórz listę spacji (26) do długości minimum danych wejściowych i zakresu 0..25), połącz z każdą literą alfabetu, wydrukuj na standardowe wyjście.

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

Uwagi:

  • -2 bajty przez ponowne nawiasy klamrowe

1

Java 1.8 (bez Lambda), 98 bajtów

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

Logika jest prosta. Nie zapewnia sprawdzania poprawności danych wejściowych, bardzo źle!

  • Aktualizacja: tylko funkcja! Dziękuję @Olivier Grégoire

1
Aby zaoszczędzić trochę bajtów, użyj for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);Również możesz napisać tylko funkcję lub lambda zamiast pełnego programu.
— Olivier Grégoire,

Gdybym miał dołączyć tylko treść funkcji, to skąd czytelnik wiedziałby, o co chodzi a[0]? Myślę, że fragmenty nie są uczciwe, jeśli się nie kompilują; wyzwanie jest równie interesujące z językiem bogatym w konstrukty.
— Douglas odbył się

1
Dzień dobry! Powiedziałem funkcję lub lambda, a nie urywek. ;-) Możesz więc pisać void f(int i){...}(nie wymaga statycznego) lub i->{...}zamiast całego programu. Zobacz wszystkie porady Java . Zobacz moją odpowiedź dla tego samego wyzwania , jako przykład. Miłej zabawy na stronie! :-)
— Olivier Grégoire
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.