Діагональний алфавіт до вводу


26

Натхненний цією публікацією . Для тих, хто позначає це питання як дублікат, я закликаю вас насправді прочитати питання, щоб побачити, що моя є модифікацією пов'язаного. Пов'язаний не запитує введення, а мусить просто друкувати алфавіт по діагоналі.

Змагання

За умови введення між 1-26 включно, друкуйте алфавіт по діагоналі, але починайте друкувати вертикально з індексу даного введення.

Приклади

З огляду на вхід:

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

Вхід:

4

Вихід:

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

Вхід:

1

Вихід:

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

Вхід:

26

Вихід:

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

Оцінка балів

Це , тому найкоротша відповідь на кожній мові виграє.

Удачі!


6
Чи можемо ми вирішити використовувати 0- або 1-індексацію?
— неджаган

Чи прийнятний послідовний провідний простір?
— Джузеппе

Чи прийнятні проміжки проміжків?
— Дом Гастінгс

Чи можемо ми використовувати великі регістри?
— Адам

Чи можемо ми повернути список рядків?
— Адам

Відповіді:


13

Вугілля деревне , 9 байт

↘✂β⁰N↓✂βη

Спробуйте в Інтернеті!

Як це працює

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

Це рішення більше не працює в поточній версії Charcoal (швидше за все, через виправлення помилок), але проблема вирішена на 10 байт ↘✂β⁰N↓✂βIθ.


2
Я не впевнений, чому це працює; це може бути помилка, яку було введено пару тижнів тому. (Ви зазвичай повинні використовувати Iθзамість цього η.)
— Ніл

@Neil Це здається зламаним сьогодні. Використовуючи Iθ, це вирішує.
— JP de la Torre

Збережіть 1 байт, використовуючи …βNзамість ✂β⁰N.
— Ніл

7

05AB1E , 11 байт

AvNI<‚Wysú,

Перший раз пробую 05AB1E, тому я відкритий для порад.

Спробуйте в Інтернеті!

Якщо дозволено вхід з індексом нуля від 0до 25, це може бути 10 байт, опустивши <.


Нііце! Саме те, що я отримав. Я спробував "підняти", але це працює не так, як планувалося. Я думаю, що це досить оптимально :).
— Magic Octopus Urn

4

JavaScript (ES2017), 73 72 71 66 байт

Збережено кілька байт завдяки @JustinMariner

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

1
Це додає 10після zзакінчення через те, що ++xраніше x.toString(). Виправлена ​​помилка та гольф до 68 байт, використовуючи padStart: TIO
— Джастін Марінер

@JustinMariner Спасибі, я думаю, що я можу перейти на ES8 для цього ...
— ETHproductions

Чи можете ви врятувати що-небудь за допомогою каррі? n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':""
— Shaggy

@Shaggy Можливо, я не знаю, чи дозволений цей тип currying.
— ETHproductions

Ах, горіхи, схоже на вашу пропозицію дозволити це вже не консенсус :(
— Shaggy

4

Python 2, 61 58 57 байт

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

-3 байти завдяки Роду

Ще 1 байт завдяки панові Xcoder



@Pavel Це не працювало з тих пір input він буде викликати кожен раз, коли forцикл повторюється, навіть якщо є лише один рядок введення.
— notjagan


57 байт використовуючи підписку.
— Містер Xcoder


4

Рубі, 51 46 43 байт

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

Повертає список рядків.

Схоже, хлопці Python щось підписали зі своїми підписниками. -5 байт, використовуючи натхнення для вдосконалення розчину ppperry від містера Xcoder.

Попереднє рішення rjust(51 байт):

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


3

R, 99 89 байт

@MickeyT зберегла 10 байт

функція

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

демонстрація

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
Пару невеликих заощаджень. Скоріше ifelseспробуйте min. print.noquoteможе бути замінений catз '\n'в пасті. \nМоже бути прямий повернення каретки. Фігурні дужки для функціонального тіла можна скинути.
— MickyT

Ви можете зберегти деякі більше, використовуючи writeзамість того , catі paste:write(c(rep(" ",min(x,i)),letters[i]),"",26,,"")
— user2390246

3

Сітківка , 72 68 байт

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

Спробуйте в Інтернеті! Вихід включає пробіли пробілу. Збережіть 1 байт, видаливши пробіл перед $дозволеною нульовою індексацією. Редагувати: збережено 4 байти за допомогою генератора алфавітів @ MartinEnder. Пояснення:

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

Вставте алфавіт.

\D
$.`$* $&¶

Діагоналізуйте його.

\d+
$* 

Перетворити вхід в одинаковий як пробіли.

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

Обріжте довгі лінії, щоб жодна лінія не була довшою від пустої лінії в кінці.


2

Математика, 103 байти

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

2

Pyth , 21 17 15 байт

Зроблено на телефоні з 3% акумулятором.

VlG+*d?>QNNQ@GN

Пояснення:

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)

Спробуйте в Інтернеті!


1
@totallyhuman У мене просто була чудова піца в Лас-Вегасі, Нью-Мексико
— Стен Струм

Знайшов кілька значно коротших підходів, і я вирішив опублікувати власну відповідь .
— Містер Xcoder

@ Mr.Xcoder Так, хороша робота з цього питання.
— Стен Струм




2

Haskell, 58 54 байти

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

Спробуйте в Інтернеті!

Як це працює

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 

Редагувати: @Lynn зберегла 4 байти. Спасибі!



@Lynn; Спасибі! Я завжди забуваю про позначення списків.
— німі



1

JavaScript (Node.js) , 72 байти

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

Повертає список рядків.

Спробуйте в Інтернеті!


Чи можу я запитати, чому node.js? Здається, дійсний звичайний JS
— Downgoat

@Downgoat Це автоматичне форматування TIO
— Conor O'Brien

btw ви можете зберегти байти за допомогою.padStart
— Downgoat

Зачекайте nvm так, як я думав в основному, це вказує на відповідь ETH
— Downgoat

Перейдіть на ES8 і збережіть байт за допомогою, padEndа не repeat.
— Кудлатий

1

Математика, 67 байт

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

Повертає a SparseArrayрядків. Щоб візуалізувати, додайте Grid@спереду.

Спробуйте це на Wolfram Sandbox

Використання

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

    ⋮

    z 






1

C # (.NET Core) , 66 + 18 байт

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

Кількість байтів також включає

using System.Linq;

Спробуйте в Інтернеті!

Це повертає набір рядків, по одному для кожного рядка. Якщо це заборонено, відповідь набуде на 17 байт за string.Concat()і\n всередині рядка

Пояснення:

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 байт

26:tiXl2Y2oZ?c

Спробуйте в MATL Online

Пояснення

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 байт

j.e+<*kdtQbG

Спробуйте тут!

Якщо дозволені списки рядків, це може бути скорочено до 11 байт :

.e+<*kdtQbG

Pyth , 12 байт

VG+<*dxGNtQN

Спробуйте тут!

Піт , 14 байт

jm+<*d;tQ@Gd26

Спробуйте тут.

Якщо дозволені списки рядків, це можна скоротити до 13 байт :

m+<*d;tQ@Gd26

Як вони працюють?

На відміну від більшості інших відповідей, ця карта / петлі над алфавітом малих літер у всіх трьох рішеннях.

Пояснення №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.

Пояснення №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)

Пояснення №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 байт

Рішення:

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

Приклад:

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

Пояснення:

Створіть список пробілів (26) до довжини мінімуму вводу та діапазону 0..25), з'єднайте з кожною літерою алфавіту, надрукуйте до 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 )

Примітки:

  • -2 байти шляхом повторного переміщення дужок

1

Java 1.8 (без лямбда), 98 байт

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

Логіка прямолінійна. Не забезпечує перевірку вхідних даних, дуже погано!

  • Оновлення: лише функція! Дякую @Olivier Grégoire

1
Щоб зберегти кілька байтів, використовуйте for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);Також ви можете написати лише функцію або лямбда замість повної програми.
— Олів'є Грегоар

Якби я включав лише тіло функції, то як би читач знав, на що a[0]йдеться? Я вважаю, що фрагменти не справедливі, якщо вони не складаються; виклик так само цікавий з мовою, багатою на конструкції.
— Дуглас Хелд

1
Привіт! Я сказав функцію чи лямбда, а не фрагмент. ;-) Так що ви можете писати void f(int i){...}(не потрібно статичних) або i->{...}замість всієї програми. Перегляньте всі поради Java . Дивіться мою відповідь на цей самий виклик , як приклад. Веселіться на сайті! :-)
— Олів'є Грегоар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.