Диагональный алфавит на вход

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

счет

Это , поэтому выигрывает самый короткий ответ на каждом языке.

Удачи!

SpookyGengar
источник
6
Можем ли мы выбрать индексирование 0 или 1?
notjagan
Является ли приемлемым последовательное ведущее пространство?
Джузеппе
Приемлемы ли пробелы?
Дом Гастингс
Можем ли мы использовать заглавные буквы?
17
Можем ли мы вернуть список строк?
Адам

Ответы:

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θ.

notjagan
источник
2
Я не уверен, почему это работает; это может быть ошибка, которая была введена пару недель назад. (Обычно вы должны использовать Iθвместо η.)
Нейл
@Neil Кажется, сегодня сломан. Использование Iθ решает это.
JP de la Torre
Сохраните 1 байт, используя …βNвместо ✂β⁰N.
Нил
7

05AB1E , 11 байт

AvNI<‚Wysú,

Первый раз пробую 05AB1E, так что я открыт для советов.

Попробуйте онлайн!

Если разрешен вход с нулевым индексом от 0to 25, это может быть 10 байтов, опуская <.

Джастин Маринер
источник
Niiice! Именно то, что я получил. Я попытался «поднять», но это не работает, как планировалось. Я думаю, что это довольно оптимально :).
Волшебная Урна Осьминога
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)+`
`:''
ETHproductions
источник
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 Возможно, я не знаю, разрешен ли такой тип карри.
ETHпродукция
Ах, чокнутый, похоже, что ваше предложение разрешить это больше не является консенсусом :(
Лохматый
4

Python 2, 61 58 57 байт

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

-3 байта благодаря Роду

-1 байт благодаря мистеру Xcoder

pppery
источник
@Pavel Это не будет работать с тех пор input, будет вызываться каждый раз, когда forцикл повторяется, даже если есть только одна строка ввода.
notjagan
57 байт с использованием подписки.
Мистер Кскодер
56 байтов
г-н 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}}
м-chrzan
источник
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

Retina , 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

Mathematica, 103 байта

(T=Table;a=Alphabet[];c=Column)[c/@{T[""<>{T[" ",i],a[[i]]},{i,#}],T[""<>{T[" ",#],a[[i]]},{i,#,26}]}]&
J42161217
источник
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 У меня только что была потрясающая пицца в Лас-Вегасе, Нью-Мексико
Стэн
Нашел несколько короче подходов и решил опубликовать свой ответ .
Мистер Кскодер
@ 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; Благодарность! Я всегда забываю делать записи для списков.
Ними
2

Gaia , 12 байт

…26⊃§×¦₵a+†ṣ

Попробуйте онлайн!

объяснение

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

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

Возвращает список строк.

Попробуйте онлайн!

Конор О'Брайен
источник
Могу я спросить, почему node.js? похоже на действительный нормальный JS
Downgoat
@Downgoat Это автоматическое форматирование
Конор О'Брайен
Кстати, вы можете сохранить байты, используя.padStart
Downgoat
Подожди, как я думал, в основном это превращает ответ ETH
Downgoat
Переключитесь на ES8 и сохраните байт padEndвместо repeat.
Лохматый
1

Mathematica, 67 байт

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

Возвращает SparseArrayстроку. Чтобы визуализировать, добавьте Grid@спереди.

Попробуйте это на Wolfram Sandbox

использование

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

    ⋮

    z 
Юнг Хван Мин
источник
1

Python 2 , 52 байта

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

Попробуйте онлайн!

Я предполагаю, что список строк в порядке ...

Самое короткое, что я мог получить с рекурсией:

f=lambda n,i=0:i<26and['%*c'%(min(i+1,n),i+97)]+f(n,i+1)or[]
totallyhuman
источник
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
Suever
источник
1

Pyth , 12 байт

j.e+<*kdtQbG

Попробуй это здесь!

Если списки строк разрешены, это может быть сокращено до 11 байтов :

.e+<*kdtQbG

Pyth , 12 байт

VG+<*dxGNtQN

Попробуй это здесь!

Pyth , 14 байт

jm+<*d;tQ@Gd26

Попробуй это здесь.

Если списки строк разрешены, это может быть сокращено до 13 байтов :

m+<*d;tQ@Gd26

Как это работает?

В отличие от большинства других ответов, это отображает / перебирает строчный алфавит во всех 3 решениях.

Объяснение № 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.
Мистер Xcoder
источник
1

Haskell, 60 байт

f n=unlines$scanl(\p c->take(n-1)(p>>" ")++[c])"a"['b'..'z']

Это функция, которая возвращает вывод в виде строки.

Попробуйте онлайн.

Кристиан Лупаску
источник
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 байта путем перенастройки скобок
streetster
источник
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++);}

Логика проста. Не обеспечивает проверки входных данных, очень плохо!

  • Обновление: только функция! Спасибо, Оливье Грегуар
Дуглас Хельд
источник
1
Чтобы сэкономить несколько байтов, используйте for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);Также, вы можете написать только функцию или лямбду вместо полной программы.
Оливье Грегуар
Если бы я включил только тело функции, то как бы читатель узнал, что к ней a[0]относится? Я думаю, что фрагменты не являются справедливыми, если они не компилируются; Задача столь же интересна с языком, богатым конструкциями.
Дуглас
1
Здравствуйте! Я сказал функцию или лямбда, а не фрагмент. ;-) Таким образом, вы можете написать void f(int i){...}(без статической необходимости) или i->{...}вместо всей вашей программы. Посмотреть все советы по Java . Смотрите мой ответ на этот же вызов , как пример. Веселитесь на сайте! :-)
Оливье Грегуар