Вставьте слово в сетку алфавита

shooqie 09/05/2017. 23 answers, 1.214 views
code-golf string ascii-art alphabet

Вдохновленный мемом, который я видел сегодня сегодня.

Описание проблемы

Рассмотрим бесконечную сетку алфавита:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
... 

Возьмите слово ( CODEGOLF в этом примере) и сделайте его подпоследовательностью сетки, заменив неиспользуемые буквы пробелом и удалив буквы в конце бесконечной сетки:

C           O           
   DE G       O           
           L              
     F 

Примеры

STACKEXCHANGE

ST      
A C       K               
    E                  X  
  C    H                  
A            N            
      G                   
    E 

ZYXWVUTSRQPONMLKJIHGFEDCBA

Z
                        Y 
                       X  
                      W   
                     V    
                    U     
                   T      
                  S       
                 R        
                Q         
               P          
              O           
             N            
            M             
           L              
          K               
         J                
        I                 
       H                  
      G                   
     F                    
    E                     
   D                      
  C                       
 B                        
A 

F

F 

ANTIDISESTABLISHMENTARIANISM

A            N     T      
        I                 
   D    I         S       
    E             ST      
AB         L              
        I         S       
       H    M             
    E        N     T      
A                R        
        I                 
A            N            
        I         S       
            M 

Заметки

  • Разрешены прокручивающиеся пробелы.
  • Вам не нужно заполнять последнюю строку пробелами. Например, если вход ABC , вы можете выводить только ABC без 23 конечных пробелов.
  • Вы можете предположить, что ввод будет соответствовать [A-Z]+ регулярному выражению.
  • В качестве альтернативы вы можете использовать строчный алфавит, и в этом случае вывод будет соответствовать [a-z]+ .
  • Вы должны использовать новую строку ( \n , \r\n или эквивалентную) для разделения строк, то есть список строк не является правильным форматом вывода.
  • Это вызов колла , поэтому сделайте свой код как можно короче!
5 Comments
Erik the Outgolfer 09/02/2017
Разрешены ли новые рубежи?
shooqie 09/02/2017
@EriktheOutgolfer Конечно, если это не испортит структуру сетки.
Zacharý 09/02/2017
Было бы хорошо, если бы не фатальная ошибка останавливала программу?
shooqie 09/02/2017
@ Zacharý Хотя я вижу, как это может сэкономить несколько байтов, я думаю, что это уродливо и создает нежелательный, избыточный результат. Так нет. EDIT: если вы не можете сделать свою программу без фатального выхода через код выхода или что-то, что не будет печатать трассировку стека исключений или что-то похожее на stderr.
Zacharý 09/02/2017
Хорошо, мой ответ не является ошибкой.

23 Answers


Zgarb 09/02/2017.

Husk , 15 байт

TṪS`?' €…"AZ"ġ> 

Попробуйте прямо сейчас!

объяснение

TṪS`?' €…"AZ"ġ>  Implicit input, e.g. "HELLO"
             ġ>  Split into strictly increasing substrings: x = ["H","EL","LO"]
        …"AZ"    The uppercase alphabet (technically, the string "AZ" rangified).
 Ṫ               Outer product of the alphabet and x
  S`?' €         using this function:
                   Arguments: character, say c = 'L', and string, say s = "EL".
       €           1-based index of c in s, or 0 if not found: 2
  S`?'             If this is truthy, then c, else a space: 'L'
                 This gives, for each letter c of the alphabet,
                 a string of the same length as x,
                 containing c for those substrings that contain c,
                 and a space for others.
T                Transpose, implicitly print separated by newlines. 

edc65 09/02/2017.

JavaScript (ES6), 79

Edit В качестве принятой новой строки я могу сохранить 2 байта

s=>eval("for(o='',v=i=0;c=s.charCodeAt(i);v%=27)o+=v++?c-63-v?' ':s[i++]:`\n`") 

Для 1 байта больше, я могу принять ввод в нижнем регистре или в верхнем регистре:

s=>eval("for(o='',v=i=0;c=s[i];v%=27)o+=v++?parseInt(c,36)-8-v?' ':s[i++]:`\n`") 

Меньше гольф

s=>{
  var i,o,c,v
  for(o = '', v = 1, i = 0; c = s.charCodeAt(i); v %= 27)
    o += v++ ? c-63-v ? ' ' : s[i++] : '\n'
  return o
} 

Test

 f=s=>eval("for(o='',v=i=0;c=s.charCodeAt(i);v%=27)o+=v++?c-63-v?' ':s[i++]:`\n`")

function update() {
  var i=I.value
  i=i.replace(/[^A-Z]/gi,'').toUpperCase()
  O.textContent=f(i)
}

update() функция update () { f=s=>eval("for(o='',v=i=0;c=s.charCodeAt(i);v%=27)o+=v++?c-63-v?' ':s[i++]:`\n`")

function update() {
  var i=I.value
  i=i.replace(/[^A-Z]/gi,'').toUpperCase()
  O.textContent=f(i)
}

update() 
 

3 comments
Justin Mariner 09/02/2017
Вы можете заменить \n на литеральную новую строку внутри backticks за -1 байт.
edc65 09/02/2017
@JustinMariner нет, я не могу, не внутри двойной цитаты в eval
Justin Mariner 09/02/2017
О, хорошо, это позор. Виноват.

scottinet 09/03/2017.

C (gcc) , 69 байт

 i;f(char*s)NO 

Попробуйте прямо сейчас!


Kevin Cruijssen 09/04/2017.

Java 8, 161 159 байт

 s->{String x="",r=x;int p=0;for(char c:s)x+=p<(p=c)?c:";"+c;for(String y:x.split(";"))r+="ABCDEFGHIJKLMNOPQRSTUVWXYZ\n".replaceAll("[^"+y+"\n]"," ");return r;} 

-2 байта благодаря @Nevay .

Explanation: "

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

 s->{                          // Method with String as both parameter and return-type
  String x="",                //  Temp-String
         r=x;                 //  Result-String
  int p=0;                    //  Previous character (as integer)
  for(char c:s)               //  Loop (1) over the characters of the input
    x+=p<(p=c)?               //   If the current character is later in the alphabet
                              //   (replace previous `p` with current `c` afterwards)
        c                     //    Append the character to String `x`
       :                      //   Else:
        ";"+c;                //    Append a delimiter ";" + this character to String `x`
                              //  End of loop (1) (implicit / single-line body)
  for(String y:x.split(";"))  //  Loop (2) over the String parts
    r+="ABCDEFGHIJKLMNOPQRSTUVWXYZ\n"
                              //   Take the alphabet,
        .replaceAll("[^"+y+"\n]"," ");
                              //   and replace all except the characters with a space
                              //  End of loop (2) (implicit / single-line body)
  return r;                   //  Return the result-String
}                             // End of method // Конец цикла (1) (неявное / однострочное тело) s->{                          // Method with String as both parameter and return-type
  String x="",                //  Temp-String
         r=x;                 //  Result-String
  int p=0;                    //  Previous character (as integer)
  for(char c:s)               //  Loop (1) over the characters of the input
    x+=p<(p=c)?               //   If the current character is later in the alphabet
                              //   (replace previous `p` with current `c` afterwards)
        c                     //    Append the character to String `x`
       :                      //   Else:
        ";"+c;                //    Append a delimiter ";" + this character to String `x`
                              //  End of loop (1) (implicit / single-line body)
  for(String y:x.split(";"))  //  Loop (2) over the String parts
    r+="ABCDEFGHIJKLMNOPQRSTUVWXYZ\n"
                              //   Take the alphabet,
        .replaceAll("[^"+y+"\n]"," ");
                              //   and replace all except the characters with a space
                              //  End of loop (2) (implicit / single-line body)
  return r;                   //  Return the result-String
}                             // End of method // Конец цикла (2) (неявное / однострочное тело) s->{                          // Method with String as both parameter and return-type
  String x="",                //  Temp-String
         r=x;                 //  Result-String
  int p=0;                    //  Previous character (as integer)
  for(char c:s)               //  Loop (1) over the characters of the input
    x+=p<(p=c)?               //   If the current character is later in the alphabet
                              //   (replace previous `p` with current `c` afterwards)
        c                     //    Append the character to String `x`
       :                      //   Else:
        ";"+c;                //    Append a delimiter ";" + this character to String `x`
                              //  End of loop (1) (implicit / single-line body)
  for(String y:x.split(";"))  //  Loop (2) over the String parts
    r+="ABCDEFGHIJKLMNOPQRSTUVWXYZ\n"
                              //   Take the alphabet,
        .replaceAll("[^"+y+"\n]"," ");
                              //   and replace all except the characters with a space
                              //  End of loop (2) (implicit / single-line body)
  return r;                   //  Return the result-String
}                             // End of method return r; s->{                          // Method with String as both parameter and return-type
  String x="",                //  Temp-String
         r=x;                 //  Result-String
  int p=0;                    //  Previous character (as integer)
  for(char c:s)               //  Loop (1) over the characters of the input
    x+=p<(p=c)?               //   If the current character is later in the alphabet
                              //   (replace previous `p` with current `c` afterwards)
        c                     //    Append the character to String `x`
       :                      //   Else:
        ";"+c;                //    Append a delimiter ";" + this character to String `x`
                              //  End of loop (1) (implicit / single-line body)
  for(String y:x.split(";"))  //  Loop (2) over the String parts
    r+="ABCDEFGHIJKLMNOPQRSTUVWXYZ\n"
                              //   Take the alphabet,
        .replaceAll("[^"+y+"\n]"," ");
                              //   and replace all except the characters with a space
                              //  End of loop (2) (implicit / single-line body)
  return r;                   //  Return the result-String
}                             // End of method 

Первая часть метода разбивает входное слово на части с разделителем.
Например: CODEGOLFCO;DEGO;L;F или BALLOONB;AL;LO;O;N

Вторая часть пересекает эти части и использует регулярное выражение [^...\n] чтобы заменить все, что не соответствует пробелу.
Например .replaceAll("[^CO\n]"," ") оставляет C , O и новую строку \n и заменяет все остальное пробелом.

2 comments
1 NieDzejkob 09/04/2017
Разве это не B;AL;LO;O;N ?
1 Nevay 09/04/2017
-2 байта: for(char c:s)x+=p<(p=c)?c:";"+c; ,

Halvard Hummel 09/02/2017.

Python 2 , 92 байта

 f=lambda x,y=65:x and(y<=ord(x[0])and" "*(ord(x[0])-y)+x[0]+f(x[1:],-~ord(x[0]))or"\n"+f(x)) 

Попробуйте прямо сейчас!

1 comments
1 ovs 09/02/2017

Justin Mariner 09/03/2017.

Japt , 18 16 байт

-2 bytes thanks to @Shaggy

;ò¨ £B®kX ?S:Z
· 

Только вход в верхний регистр.

Попробуйте прямо сейчас!

объяснение

; 

Переключитесь на переменные переменные, где B - верхний регистр.

ò¨ 

Разделите строку ввода между символами, где первая больше или равна ( ¨ ) второй.

£ 

Сопоставьте каждый раздел с помощью функции, где X - текущий раздел.

 

Сопоставьте каждый символ в прописном алфавите следующим образом: Z - текущая буква.

kX 

Удалите все буквы в текущем разделе из текущей буквы. Если текущая буква содержится в текущем разделе, это приводит к пустой строке.

?S:Z 

Если это правда (не пустая строка), верните пробел ( S ), в противном случае верните текущую букву.

· 

Присоедините результат предыдущей строки к новой строке и распечатайте результат.

5 comments
ETHproductions 09/02/2017
10 байтов для r"[^NO кажется немного смешным, но я не могу найти лучшего способа ...
Shaggy 09/03/2017
17 байт
Justin Mariner 09/03/2017
@Shaggy Хорошее мышление с kX !
ETHproductions 09/05/2017
На самом деле, я думаю, вы можете изменить kX ?S:Z на oX ªS чтобы сохранить два байта

Dom Hastings 09/02/2017.

Perl 5 , 44 байт

40 bytes code + 4 for -lF.

 print map/$F[0]/?shift@F:$",A..Z while@F 

Попробуйте прямо сейчас!

2 comments
ThePirateBay 09/02/2017
Вы отправили ссылку на версию с 46 байтами.
Dom Hastings 09/02/2017
@ThePirateBay Спасибо! Я знал, что ничего не обновил!

Erik the Outgolfer 09/02/2017.

Pyth, 18 байт

#pbVGp?JqhzNNd=>zJ 

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

Ведущая новая строка в выводе, строчный алфавит.


Luis Mendo 09/02/2017.

MATL , 24 23 байта

''jt8+t1)wdh26X\Ys(26e! 

Использует строчные буквы.

Попробуйте в MATL Online!

объяснение

''     % Push empty string
jt     % Push input string. Duplicate
8+     % Add 8 to each char (ASCII code). This transforms 'a' 105,
       % 'b' into 106, which modulo 26 correspond to 1, 2 etc
t1)    % Duplicate. Get first entry
wd     % Swap. COnsecutive differences.
h      % Concatenate horizontally
26X\   % 1-based modulo 26. This gives a result from 1 to 26
Ys     % Cumulative sum
(      % Write values (converted into chars) at specified positions
       % of the initially empty string
26e    % Reshape into a 26-row char matrix, padding with char 0
!      % Transpose. Implicitly display. Char 0 is shown as space h% Конкатенация по горизонтали ''     % Push empty string
jt     % Push input string. Duplicate
8+     % Add 8 to each char (ASCII code). This transforms 'a' 105,
       % 'b' into 106, which modulo 26 correspond to 1, 2 etc
t1)    % Duplicate. Get first entry
wd     % Swap. COnsecutive differences.
h      % Concatenate horizontally
26X\   % 1-based modulo 26. This gives a result from 1 to 26
Ys     % Cumulative sum
(      % Write values (converted into chars) at specified positions
       % of the initially empty string
26e    % Reshape into a 26-row char matrix, padding with char 0
!      % Transpose. Implicitly display. Char 0 is shown as space Ys% Совокупная сумма ''     % Push empty string
jt     % Push input string. Duplicate
8+     % Add 8 to each char (ASCII code). This transforms 'a' 105,
       % 'b' into 106, which modulo 26 correspond to 1, 2 etc
t1)    % Duplicate. Get first entry
wd     % Swap. COnsecutive differences.
h      % Concatenate horizontally
26X\   % 1-based modulo 26. This gives a result from 1 to 26
Ys     % Cumulative sum
(      % Write values (converted into chars) at specified positions
       % of the initially empty string
26e    % Reshape into a 26-row char matrix, padding with char 0
!      % Transpose. Implicitly display. Char 0 is shown as space 

Erik the Outgolfer 09/03/2017.

Желе , 19 байт

<2\¬0;œṗfȯ⁶$¥€@€ØAY 

Попробуйте прямо сейчас!

4 comments
Jonathan Allan 09/03/2017
OI<1®; ->> >2\0; для сохранения одного байта (я действительно сделал >2\0;œṗµØAf€ȯ€⁶µ€Y для 18 тоже, что мне лично легче анализировать)
Erik the Outgolfer 09/03/2017
@JonathanAllan Я думаю, что это не удастся для BALLOON или чего-то еще.
Jonathan Allan 09/03/2017
Вы правы, да - для этого потребуется другой байт с чем-то вроде <2\1;¬ ; Ну что ж.
Erik the Outgolfer 09/03/2017
@JonathanAllan В любом случае, я воплощу вашу идею в свой ответ ... сделаю.

Jenny_mathy 09/02/2017.

Mathematica, 184 байта

(t=Characters@#;s=Flatten@Table[Alphabet[],(l=Length)@t];q=1;For[i=1,i<=l@s,i++,If[s[[i]]!=t[[q]],s[[i]]=" ",q++];If[q>l@t,q--;t[[q]]=0]];StringRiffle[StringPartition[""<>s,26],"\n"])& 

Justin Mariner 09/02/2017.

JavaScript (ES6), 87 байт

 f=([...s])=>s[0]?(g=i=>i>35?`
`+f(s):(i-parseInt(s[0],36)?" ":s.shift())+g(i+1))(10):"" 

Принимает ввод в верхнем или нижнем регистре. Выход соответствует случаю ввода.

тесты

 f=([...s])=>s[0]?(g=i=>i>35?`
`+f(s):(i-parseInt(s[0],36)?" ":s.shift())+g(i+1))(10):""

;O.innerText=["CODEGOLF","STACKEXCHANGE","F","ZYXWVUTSRQPONMLKJIHGFEDCBA","ANTIDISESTABLISHMENTARIANISM"]
.map(f).join("=".repeat(26)+"\n") 
 
 


Neil 09/02/2017.

Retina , 130 байт

$
¶ABCDEFGHIJKLMNOPQRSTUVWXYZ
+`(?<=(.)*)((.).*¶(?<-1>.)*(?(1)(?!)).+\3.*$)
 $2
(?<=(.)*)((.).*¶(?<-1>.)*(?<-1>\3.*$))
¶$2
}`¶.*$ ) + $
¶ABCDEFGHIJKLMNOPQRSTUVWXYZ
+`(?<=(.)*)((.).*¶(?<-1>.)*(?(1)(?!)).+\3.*$)
 $2
(?<=(.)*)((.).*¶(?<-1>.)*(?<-1>\3.*$))
¶$2
}`¶.*$ . $
¶ABCDEFGHIJKLMNOPQRSTUVWXYZ
+`(?<=(.)*)((.).*¶(?<-1>.)*(?(1)(?!)).+\3.*$)
 $2
(?<=(.)*)((.).*¶(?<-1>.)*(?<-1>\3.*$))
¶$2
}`¶.*$ 

Попробуйте прямо сейчас! Объяснение:

$
¶ABCDEFGHIJKLMNOPQRSTUVWXYZ 

Добавьте алфавит.

+`(?<=(.)*)((.).*¶(?<-1>.)*(?(1)(?!)).+\3.*$)
 $2 ) + +`(?<=(.)*)((.).*¶(?<-1>.)*(?(1)(?!)).+\3.*$)
 $2 . +`(?<=(.)*)((.).*¶(?<-1>.)*(?(1)(?!)).+\3.*$)
 $2 

Выровняйте как можно больше букв с их позицией в алфавите.

(?<=(.)*)((.).*¶(?<-1>.)*(?<-1>\3.*$))
¶$2 

Начните новую строку перед первой буквой, которая не может быть выровнена.

}`¶.*$ 

Удалите алфавит, но затем делайте все заново, пока не будет никаких несогласованных букв.

2 comments
Justin Mariner 09/02/2017
Кажется, это печатает только одну строку, не выравнивая буквы на последующих строках.
Neil 09/02/2017
@JustinMariner. Плохо, я сделал опечатку в своем последнем гольфе и не смог проверить ее должным образом.

GolfWolf 09/03/2017.

Haskell, 81 74 73 байт

q@(w:y)!(x:z)|w==x=x:y!z|1<2=min ' 'x:q!z
x!_=x
a=['A'..'Z']++'\n':a
(!a) 

Сохранено 1 байт благодаря Лайкони !

Попробуйте в Интернете.

Оптимизация Haskell Hugs

  1. Интерпретатор Hugs позволяет мне сохранить еще один байт, выполнив (!cycle$['A'..'Z']++"\n") вместо: (!cycle(['A'..'Z']++"\n")) , но GHC не нравится первый . (Это теперь устарело, Лайкони уже переписал эту строку таким образом, чтобы сохранить 1 байт.)

  2. По-видимому, Hugs также не требует скобок вокруг шаблона шаблона списка, поэтому я мог бы сохранить еще два байта: q@(w:y)!(x:z) до q@(w:y)!x:z .

4 comments
Laikoni 09/02/2017
Вы можете сохранить байт с помощью a=['A'..'Z']++'\n':a;(!a) . Интересно теперь, что у Hugs, похоже, есть несколько более слабые правила.
GolfWolf 09/03/2017
@Laikoni Я смотрю на Haskell уже несколько месяцев, и это не перестает меня удивлять. Мне нравится a=...:a трюк. Благодаря!
Wheat Wizard 09/03/2017
Я не знаю, знаете ли вы об этом, но я думаю, что его стоит упомянуть. Причина, по которой Hugs отличается, заключается в том, что для пользовательских операторов есть более низкий приоритет оператора, чем в ghc.
GolfWolf 09/03/2017
@WheatWizard Я не знал. Это имеет смысл, учитывая ошибку, которую я получил в GHC.

FryAmTheEggman 09/03/2017.

Retina , 80 байт

^
;¶
{`;.*
¶;ABCDEFGHIJKLMNOPQRSTUVWXYZ
¶¶
¶
)+`;(.*)(.)(.*¶)\2
$.1$* $2;$3
;.* . ^
;¶
{`;.*
¶;ABCDEFGHIJKLMNOPQRSTUVWXYZ
¶¶
¶
)+`;(.*)(.)(.*¶)\2
$.1$* $2;$3
;.* 

Попробуйте прямо сейчас!

Всегда есть одна ведущая новая строка. Код несколько clunkily добавляет слово с алфавитом вместе с маркером (точка с запятой). Затем он перемещает маркер до первой буквы слова, изменяя все остальные буквы, которые он передает в пробелы. Он также удаляет первую букву слова. Он повторяет это до тех пор, пока первая буква слова не будет после маркера. Затем он очищает этот маркер и остальную часть алфавита и заменяет его новой строкой и алфавитом с маркером снова. Он продолжает повторять это до тех пор, пока входное слово не будет пустым, затем очистит последний алфавит и маркер, оставив желаемый результат.


Leaky Nun 09/02/2017.

Желе , 24 21 байт

3 байта благодаря Эрику Outgolfer.

O64;I%26’⁶ẋЀ;"⁸Ẏs26Y 

Попробуйте прямо сейчас!

1 comments
7 Justin Mariner 09/02/2017
Я считаю, что это не удается для ввода «BALLOON» - повторяющиеся символы находятся на одной строке.

dzaima 09/02/2017.

SOGL V0.12 , 22 байта

±E⁄Z*{@;eJι=?Xē}}¹∑z⁄n 

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


Zacharý 09/02/2017.

Dyalog APL, 47 37 34 байт

{↑{⍵∘{⍵∊⍺:⍵⋄' '}¨⎕A}¨⍵⊂⍨1,2≥/⎕A⍳⍵} 

Попробуйте прямо сейчас!

Как? (аргумент )

  • ⍵⊂⍨1,2≥/⎕A⍳⍵ , разделенные на алфавитно упорядоченные сегменты
  • {...}¨ , применяем эту функцию к каждой букве (аргумент ):
    • ⎕A , алфавит
    • ...¨ , примените эту функцию к каждому аргументу (аргумент ):
      • ⍵∘ , перейдите в качестве левого аргумента ( ) к функции:
        • {⍵∊⍺:⍵⋄' '} , если в , то верните , в противном случае - пробел. Эта функция создает строку текста.
  • , превратитесь в массив (эквивалент добавления новых строк)

JungHwan Min 09/03/2017.

Mathematica, 73 71 72 байт

Print@@(Alphabet[]/.Except[#|##,_String]->" ")&@@@Split[#,Order@##>0&];&
(* or *)
Print@@@Outer[If[!FreeQ@##,#2," "]&,Split[#,Order@##>0&],Alphabet[],1];& 

sacrificed a byte to fix the output

Принимает список символов нижнего регистра (который является «строкой» для каждого консенсуса ).

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

Применение

f = (Print@@(Alphabet[]/.Except[#|##,_String]->" ")&@@@Split[#,Order@##>0&];&) 

f[{"c", "o", "d", "e", "g", "o", "l", "f"}] 
c           o           
  de g       o           
          l              
    f 
4 comments
2 Bill Steihn 09/03/2017
Ваш ввод - это список строк? Действительно ли это?
1 Bill Steihn 09/03/2017
Также это выводит {Null, Null, Null, Null} в конце. Это разрешено ОП?
JungHwan Min 09/03/2017
@BillSteihn Да, за метаконференцию. Для вашего второго вопроса он печатает строку в STDOUT. Null s - это то, что выражение оценивает, а не часть STDOUT (это можно легко увидеть в ядре Mathematica). На данный момент я исправил проблему, добавив байт.
JungHwan Min 09/03/2017
@BillSteihn задает вопрос о том, что список строк (я предполагаю список, содержащий каждую строку) не является допустимым форматом output . Я считаю, что это нормально, поскольку формат input , особенно если это список символов (плюс, некоторые языки не имеют различия между строкой и списком символов, поэтому запрет на это только делает вопрос несправедливым).

H.PWiz 09/03/2017.

Husk , 22 21 19 17 байт

-2 байта благодаря Zgarb (и новой языковой функции)

mȯΣẊṠ:ȯR' ←≠:'@ġ> 

Попробуйте прямо сейчас!

объяснение

ġ>    Group into increasing sublists
mȯ                   To each sublist apply the following three functions
            :'@      ¹Append '@' (The character before 'A') to the start
   Ẋ                 ²Apply the following function to all adjacent pairs
           ≠            Take the difference of their codepoints
          ←             Minus 1
      ȯR'               Repeat ' ' that many times
    Ṡ:                  Append the second argument to the end.
  Σ                  ³concatenate 
2 comments
Zgarb 09/02/2017
19 байтов с новой бинарной перегрузкой .
H.PWiz 09/02/2017
@Zgarb Ничего себе!

Josiah Winslow 09/03/2017.

Golfscript, 22 21 байт

Попробуйте прямо сейчас!

-1 байт благодаря тщательному окончательному переопределению n встроенного.

{.n>{}{'
'\}if:n}%:n; 

Объяснение (с немного другой версией):

{.n>{}{"\n"\}if:n}%:n; # Full program
{                }%    # Go through every character in the string
 .n>         if        # If ASCII code is greater than previous...
                       # (n means newline by default, so 1st char guaranteed to fit)
    {}                 # Do nothing
      {"\n"\}          # Else, put newline before character
               :n      # Redefine n as the last used character
                   :n; # The stack contents are printed at end of execution
                       # Literally followed by the variable n, usually newline
                       # So because n is by now an ASCII code...
                       # ...redefine n as the new string, and empty the stack , {.n>{}{"\n"\}if:n}%:n; # Full program
{                }%    # Go through every character in the string
 .n>         if        # If ASCII code is greater than previous...
                       # (n means newline by default, so 1st char guaranteed to fit)
    {}                 # Do nothing
      {"\n"\}          # Else, put newline before character
               :n      # Redefine n as the last used character
                   :n; # The stack contents are printed at end of execution
                       # Literally followed by the variable n, usually newline
                       # So because n is by now an ASCII code...
                       # ...redefine n as the new string, and empty the stack 

streetster 09/04/2017.

q / kdb +, 48 байт

Solution:

-1{@[26#" ";.Q.A?x;:;x]}@/:{(0,(&)x<=prev x)_x}; 

Examples:

q)-1{@[26#" ";.Q.A?x;:;x]}@/:{(0,(&)x<=prev x)_x}"STACKEXCHANGE";
                  ST
A C       K
    E                  X
  C    H
A            N
      G
    E
q)-1{@[26#" ";.Q.A?x;:;x]}@/:{(0,(&)x<=prev x)_x}"BALLOON";
 B
A          L
           L  O
              O
             N 

Explanation:

Решение разделено на две части. Сначала разделите строку, где следующий символ меньше или равен текущему:

"STACKEXCHANGE" -> "ST","ACK","EX","CH","AN","G","E"

Затем возьмите строку из 26 пробелов и примените ввод к ней по индексам, где ввод появится в алфавите, и распечатайте на stdout.

" " -> __________________ST______

Сломать:

-1{@[26#" ";.Q.A?x;:;x]}each{(0,where x<=prev x)_x}; / ungolfed solution
-1                                                 ; / print to stdout, swallow return value
                            {                     }  / first lambda function
                                                _x   / cut (_) x at these indices
                             (                 )     / do this together
                                      x<=prev x      / is current char less-or-equal than previous?
                                where                / indices where this is true
                              0,                     / prepended with 0
                        each                         / take each item and apply function to it
  {                    }                             / second lambda function
   @[      ;      ; ; ]                              / apply[variable;indices;function;arguments]
     26#" "                                          / 26 take " " is "      "...
            .Q.A?x                                   / lookup x in the alphabet, returns indices
                   :                                 / assignment
                     x                               / the input to apply to these indices 

scottinet 09/04/2017.

05AB1E , 18 байт

ćIgµ¶?AvDyÊið?ë¼?ć 

Попробуйте прямо сейчас!

У вас возникли проблемы с 05AB1E ć (extract 1), оставив пустую строку / список в стеке после того, как последний элемент был извлечен. Это решение было бы на 1-2 байта короче, если бы не это.

ćIgµ¶?AvDyÊið?ë¼?ć  Implicit input 
ć                   Extract the 1st char from the string
 Igµ                While counter != length of the string
    ¶?              Print a newline
      Av            For each letter of the lowercased alphabet
        DyÊ         Is the examined character different from the current letter?
           ið?      If true, then print a space

              ë¼?ć  Else increment the counter, print the letter and push
                    the next character of the string on the stack 
2 comments
Erik the Outgolfer 09/04/2017
Фактически, ð, означает «распечатать пробел и новую строку».
scottinet 09/04/2017
Ты прав. Исправлен код для фактической печати новой строки.

HighResolutionMusic.com - Download Hi-Res Songs

1 Alan Walker

Diamond Heart flac

Alan Walker. 2018. Writer: Alan Walker;Sophia Somajo;Mood Melodies;James Njie;Thomas Troelsen;Kristoffer Haugan;Edvard Normann;Anders Froen;Gunnar Greve;Yann Bargain;Victor Verpillat;Fredrik Borch Olsen.
2 Sia

I'm Still Here flac

Sia. 2018. Writer: Sia.
3 Cardi B

Taki Taki flac

Cardi B. 2018. Writer: Bava;Juan Vasquez;Vicente Saavedra;Jordan Thorpe;DJ Snake;Ozuna;Cardi B;Selena Gomez.
4 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
5 Halsey

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
6 Lady Gaga

I'll Never Love Again flac

Lady Gaga. 2018. Writer: Benjamin Rice;Lady Gaga.
7 Bradley Cooper

Shallow flac

Bradley Cooper. 2018. Writer: Andrew Wyatt;Anthony Rossomando;Mark Ronson;Lady Gaga.
8 Bradley Cooper

Always Remember Us This Way flac

Bradley Cooper. 2018. Writer: Lady Gaga;Dave Cobb.
9 Kelsea Ballerini

This Feeling flac

Kelsea Ballerini. 2018. Writer: Andrew Taggart;Alex Pall;Emily Warren.
10 Mako

Rise flac

Mako. 2018. Writer: Riot Music Team;Mako;Justin Tranter.
11 Dewain Whitmore

Burn Out flac

Dewain Whitmore. 2018. Writer: Dewain Whitmore;Ilsey Juber;Emilio Behr;Martijn Garritsen.
12 Avril Lavigne

Head Above Water flac

Avril Lavigne. 2018. Writer: Stephan Moccio;Travis Clark;Avril Lavigne.
13 Khalid

Better flac

Khalid. 2018. Writer: Charlie Handsome;Jamil Chammas;Denis Kosiak;Tor Erik Hermansen;Mikkel Stoleer Eriksen;Khalid.
14 Lady Gaga

Look What I Found flac

Lady Gaga. 2018. Writer: DJ White Shadow;Nick Monson;Mark Nilan Jr;Lady Gaga.
15 Deep Chills

Run Free flac

Deep Chills. 2018.
16 Dynoro

In My Mind flac

Dynoro. 2018. Writer: Georgi Kay;Feenixpawl;Ivan Gough.
17 Charli XCX

1999 flac

Charli XCX. 2018. Writer: Charli XCX;Troye Sivan;Leland;Oscar Holter;Noonie Bao.
18 NCT 127

Regular (English Version) flac

NCT 127. 2018.
19 Lukas Graham

Love Someone flac

Lukas Graham. 2018. Writer: Don Stefano;Morten "Rissi" Ristorp;Morten "Pilo" Pilegaard;Jaramye Daniels;James Alan;David LaBrel;Lukas Forchhammer Graham.
20 Rita Ora

Let You Love Me flac

Rita Ora. 2018. Writer: Rita Ora.

Related questions

Hot questions

Language

Popular Tags