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


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.