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.