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


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


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)+`
`:''

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



@Pavel Это не будет работать с тех пор input, будет вызываться каждый раз, когда forцикл повторяется, даже если есть только одна строка ввода.
notjagan


57 байт с использованием подписки.
Мистер Кскодер


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

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}]}]&

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; Благодарность! Я всегда забываю делать записи для списков.
Ними



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

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[]





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

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

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.



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++);}

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

  • Обновление: только функция! Спасибо, Оливье Грегуар

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.