Сделай мексиканскую волну


64

Как можно меньше байтов, напишите программу или функцию, которая выводит следующее:

Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwxyZ
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
Abcdefghijklmnopqrstuvwxyz

Завершающий перевод строки разрешен. Вы можете найти справочную реализацию Python без гольфа здесь .


1
Можно ли предположить, что ввод никогда не вводится в верхнем регистре?
Винни

40
@ Винни Нет ввода. Выход исправлен. На самом деле, это общая идея вопросов колмогоровской сложности .
Крис Шестер-Янг

Это было в списке HNQ последовательно, так как вы опубликовали его. Хорошо сделано. :)
Алекс А.

1
Вы можете найти ссылку на реализацию Python без гольфа здесь. -> ссылка не работает
Франк Дернонкурт

Точка зрения Франка Дернонкура остается в силе. Ссылка не работает.
Джонатан Фрех

Ответы:


64

Pyth, 12 байт

V+Gt_GXGNrN1

Демонстрация.

В Pyth Gэто строчный алфавит. +Gt_Gэто abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba, символ , который должен быть в верхнем регистре в каждой строке.

Vустанавливает цикл for для этой строки, Nв качестве переменной цикла.

В теле, XGNrN1это функция перевода строки. Xпереводит G, алфавит, заменяя Nна rN1, заглавную версию N. r ... 1это заглавная функция. Это дает желаемый результат.


31
Я единственный, кому смешно, что строчные буквы представлены заглавными буквами?
Алекс А.

31

С, 73

Иногда самый простой подход лучше всего: печатать каждый символ один за другим. это бьет много языков, которые действительно не должны.

i;f(){for(i=1377;i--;)putchar(i%27?123-i%27-32*!(i/702?i%28-4:i%26):10);}

объяснение

i;f(){
   for(i=1377;i--;)
   putchar(i%27?                 //if I not divisible by 27
     123-i%27-                   //  print lowercase letter from ASCII 122 downards
       32*!(i/702?i%28-4:i%26)   //  subtract 32 to make it uppercase where necessary: above i=702, use i%28-4, below it use i%26
     :10);                       //if I divisible by 27 print a newline (10)
}

26

Python 2, 69 байт

i=25
exec"L=range(97,123);L[~abs(i)]^=32;i-=1;print bytearray(L);"*51

Красиво и просто, я думаю.


Это действительно умно. Петля раскатывается!
Алекс Ван Лью

20

Brainfuck (8 бит), 231 байт

++++++++++>++[>>+++++[-<+++++>]<[>>>>>[-]>[-]--[-----<+>]<----->[-]>----[----<+>]<++<<<+++++[-<<+++++>>]<<+>[>>>.+>+<<<<-<->]>>>+>.+<<<<<-[>>>>.+>+<<<<<-]<<<<[<+>>>>>>>>-<<<<<<<-]<[>+<-]>>>>>>>>+[<+<+>>-]<[>+<-]<<<<<.>>-]+<-<<++>>]

Хорошо, так что это никогда не будет самым коротким, но важна роль ... правильно ?!

Попробуйте здесь (не забудьте отметить «Динамическая память»)


5
Если цель должны была быть самым длинным возможным кодом , который до сих пор полностью расшифровки к среднему человеческому программисту ...
Калеб

7
@Caleb Я думаю, что BF-код является одним из самых простых для понимания кода. Это программа / функциональность, которую трудно понять. Каждый должен знать, что >сдвигает одну клетку вправо, например.
mbomb007

4
Всегда должен любить BF ответы;)
RedPanda

Вы не написали этот код прямо сейчас?
BAR

6
Мне стыдно сказать, что я сделал!
Jarmex

13

MS-DOS Binary, 61

Этот код не нужно компилировать, он будет работать в MS-DOS, если вы запишите его в файл с именем wave.com. Код в шестнадцатеричном виде:

ba3d0189d7b91a00b061aa404975fbb00aaab00daab024aa31f6e8130046
83fe1a75f7be1800e807004e75fae80100c389d3802820b409cd21800020
c3

Или, если вы предпочитаете что-то более читаемое, вот как это сделать, используя debug.exe (важна пустая строка после кода):

debug.exe wave.com
a
mov dx,13d
mov di,dx
mov cx,1a
mov al,61
stosb
inc ax
dec cx
jnz 10a
mov al,a
stosb
mov al,d
stosb
mov al,24
stosb
xor si,si
call 130
inc si
cmp si,1a
jnz 11a
mov si,18
call 130
dec si
jnz 126
call 130
ret
mov bx,dx
sub byte ptr [si+bx],20
mov ah,9
int 21
add byte ptr [si+bx],20
ret

rcx
3e
w
q

11

Рубин: 71 68 65 63 персонажа

puts f=(e=*?a..?z).map{|c|(e*"").tr c,c.upcase},f[0,25].reverse

Образец прогона:

bash-4.3$ ruby -e 'puts f=(e=*?a..?z).map{|c|(e*"").tr c,c.upcase},f[0,25].reverse' | head
Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz

1
63:puts f=(e=*?a..?z).map{|c|(e*"").tr c,c.upcase},f[0,25].reverse
Вентеро

Doh. Я попробовал пару глупых идей, чтобы оптимизировать повторное использование e, но, конечно, не правильный путь. Спасибо, @Ventero.
Манатворк

10

Matlab, 60 58 54 байта

I=32*eye(26);[ones(51,1)*(97:122) '']-[I;I(25:-1:1,:)])

Спасибо Деннису Джарудудину за то, что он спас мне 4 байта.


Здесь вы также можете использовать типичный трюк, чтобы заменить char(x)его, [x '']чтобы сохранить байт.
Деннис Джаэруддин

Также end-1довольно многословный способ написать 25!
Деннис Джаэруддин

@DennisJaheruddin Упс. Спасибо за оба! На самом деле этот [x '']трюк для меня совсем не обычен. Но теперь я помню, как видел это в одном из твоих гневов :-)
Луис Мендо

8

SWI-Пролог, 136 байт

a:-(R=0;R=1),between(1,26,I),(I=1,R=0;I\=1,nl),between(1,26,J),(R=0,L=I;R=1,L is 27-I),(J=L,K is J+64,put(K);J\=L,K is J+96,put(K)),\+!.

Злоупотребление возвратом к циклу ...


8

Haskell 100 89 88 байт

putStr$map toEnum.(\(h,c:t)->h++c-32:t++[10]).(`splitAt`[97..122]).(25-).abs=<<[-25..25]

Вспомогательная лямбда-функция \(h,c:t)принимает пару списков значений ascii и объединяет оба, но с первым заглавным значением второго списка. Основная функция разбивает строчный алфавит (заданный в ascii, 97..122) на каждую позицию 0,..,24,25,24,..,0и вызывает лямбду на каждом шаге. Перед печатью каждое значение превращается в соответствующий символ.


Вот мой подход: codegolf.stackexchange.com/a/53895/3852
Линн

8

Scala 110 109 символов

val a=('a'to'z').map(c⇒('a'to'z').map(v⇒if(v==c)c.toUpper else v).mkString)
a++a.init.reverse foreach println

5
OMG в Scala ⇒ символ используется? Я имею в виду не => но ⇒ ???
Шабун

2
Оба действительны :)
Гилад Хох

мог бы сбрить 1 байт, если я изменился foreach printlnна mkString("\n"), и вывести строку как возвращаемое значение вместо того, чтобы печатать ее на экране
gilad hoch

7

SQL (postgreSQL), 107 101

Генерировать серии от -25 до 25 и использовать абсолютное значение для замены символов их заглавной версией. Спасибо manatwork за совет об операторе @.

select replace('abcdefghijklmnopqrstuvwxyz',chr(122- @i),chr(90- @i))from generate_series(-25,25)a(i)

Вы знаете, что у PostgreSQL есть @оператор?
Манатворк

@manatwork Нет, я не знал этого, но теперь я благодарен
MickyT

7

Haskell, 81 байт

Подсчет байтов, как это сделал @nimi; fявляется действием ввода-вывода, которое печатает желаемый результат

x!y|x==min(50-y)y=65|0<1=97
f=mapM putStrLn[[toEnum$x+x!y|x<-[0..25]]|y<-[0..50]]

Очень элегантный. Не знал, что охранники могут быть использованы в линию.
user2845840


6

MATLAB - 58 байт

char(bsxfun(@minus,97:122,32*[eye(25,26);rot90(eye(26))]))

Подобно решению Луиса Мендо , но с использованием возможностей вещания bsxfun.

Воспользовавшись тем, что в ASCII разница между заглавными и строчными буквами составляет ровно 32 значения друг от друга, мы сначала генерируем строчные буквы из кодов ASCII от 97 до 122, которые представляют собой коды ASCII от строчных букв a до строчных букв z, а затем создайте матрицу из 51 строки, которая содержит 26 кодов ASCII от 97 до 122. Поэтому каждая строка этой матрицы содержит числовую последовательность значений от 97 до 122. Затем мы создадим другую матрицу, в которой каждая i- я строка этой матрицы содержит 32 в i- м столбце. Первые 26 строк этой матрицы имеют этот шаблон, который по сути является единичной матрицей, умноженной на 32. Функцияeyeсоздает для вас матрицу идентичности. Последние 25 строк этой матрицы - это масштабированная единичная матрица, повернутая на 90 градусов.

Взяв эту пользовательскую взвешенную матрицу идентификаторов и вычтя ее из первой матрицы, а затем преобразовав получившиеся коды ASCII в символы, можно получить желаемую последовательность «мексиканская шляпа».

Пример выполнения

>> char(bsxfun(@minus,97:122,32*[eye(25,26);rot90(eye(26))]))

ans =

Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwxyZ
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
Abcdefghijklmnopqrstuvwxyz

Вы также можете запустить этот пример, используя онлайновую среду IDEone Octave. Octave по сути является MATLAB, но бесплатен: http://ideone.com/PknMe0


1
rot90-- хорошо продумано!
Луис Мендо

char (ones (26,1) * [97: 122] -eye (26) * 32)
user3528438

@ user3528438 как ты справляешься со второй половиной? Код вычисляет только первую половину волны. Вам нужно вычислить остальное.
rayryeng - Восстановить Монику

@ user3528438 - Также обратите внимание, что то, что вы написали, в основном является первой половиной ответа Луиса Мендо. Я решил написать что-то немного другое, чтобы достичь того же самого :)
rayryeng - Восстановить Монику

@rayryeng Да, меня удивляет, что со второй половиной сложнее справиться, а также как избежать дублирования центра.
user3528438


5

Perl, 51 байт

50-байтовый код + 1 байтный параметр командной строки

@a=a..z,@a[-1-abs]=uc@a[-1-abs],print@a for-25..25

Может использоваться следующим образом:

perl -le '@a=a..z,@a[-1-abs]=uc@a[-1-abs],print@a for-25..25'

Или онлайн здесь (обратите внимание, я должен был добавить ,"\n"к этому, поскольку я не мог добавить -l arg).


Гораздо более продолжительный метод До укороченной версии, описанной выше, я попробовал другой метод, который оказался довольно коротким. Я все равно оставил его для справки.

86-байтовый код + 1-байтовая командная строка

$_=join"",0,a..z,1;print s/1//r while s/(([A-Z])|0)(\D)|(.)((?2))(1)/\L\2\U\3\4\6\L\5/

Первый Perl Я когда-либо играл в гольф должным образом, поэтому я думаю, что с этим можно многое сделать - пожалуйста, предложите улучшения!

Можно использовать следующим образом:

perl -le '$_=join"",0,a..z,1;print s/1//r while s/(([A-Z])|0)(\D)|(.)((?2))(1)/\L\2\U\3\4\6\L\5/'

Или онлайн здесь (обратите внимание, я должен был добавить. "\ N" к этому, поскольку я не мог добавить -l arg).

объяснение

Общий подход заключается в использовании подстановки регулярных выражений для выполнения всей тяжелой работы. Мы начинаем с:

0abcdefghijklmnopqrstuvwxyz1

Это соответствует (([A-Z])|0)(\D)и заменяется на \U\3(\ U изменяется на верхний регистр), чтобы дать:

Abcdefghijklmnopqrstuvwxyz1

Начиная с этого момента, мы продолжаем соответствовать тому же регулярному выражению и заменяем на \L\2\U\3:

aBcdefghijklmnopqrstuvwxyz1
abCdefghijklmnopqrstuvwxyz1
...
abcdefghijklmnopqrstuvwxyZ1

Теперь второе чередование регулярных выражений совпадает (.)((?2))(1)(что так же, как (.)([A-Z])(1)). Мы заменим, \U\4\6\L\5чтобы дать:

abcdefghijklmnopqrstuvwxY1z

Это продолжает соответствовать и заменять, пока мы не достигнем:

A1bcdefghijklmnopqrstuvwxyz

и больше нет регулярных выражений.

В каждой точке цикла мы удаляем 1 и печатаем.


5

PHP, 87 71 69 байт

Не самый короткий, но работает как задумано.
Спасибо @manatwork за несколько советов, чтобы значительно уменьшить его размер.
А благодаря @Blackhole размер был уменьшен на 2 байта.

for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'
';

Не совсем красиво, но работает.


1
“Glue По умолчанию используется пустая строка.” - документация PHP о join()первом параметре.
Манатворк

1
Этот строковый индекс не совсем оптимален: $i<25?$i:25-($i-25)25-abs($i-25)
manatwork

1
Учитывая, что вы уже игнорируете предупреждения (для неопределенных констант a и z), вы можете игнорировать другое для неинициализированных $ i. Прикасаясь к $ i, переместите его приращение в строковый индекс. for(;$i<51;){$L=range(a,z);$L[25-abs($i++-25)]^=" ";echo join($L),"↵";}(Просто оберните строку, где я использовал «↵» в коде.)
manatwork

@manatwork Большое спасибо! Я полностью забыл, что там \nбыло. Инициализация $iбыла оставлена ​​как несчастный случай. И большое спасибо за 25-abs($i-25). Я бы туда не попал.
Исмаэль Мигель

2
Ваш forцикл может быть оптимизирован: for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'↵';(-2 байта).
Blackhole


5

Архитектура узла TIS Тип T21 - 216 215 байт

Смотрите это в действии здесь! В DOWNэтом видео есть кое-что, к чему я позже присоединился ANY, но оно функционально идентично.

Этот язык не имеет понятия о строках или символах, поэтому я должен отметить, что я использую значения ASCII, т.е. вывод начинается 97, 66, 67... 88, 89, 90, 10, 65, 98...

Вот код в формате сохраненных данных TIS-100 для целей оценки:

@5
ADD 25
L:MOV 27 ANY
SUB 1
JGZ L
MOV 25 ANY
JRO -1
@6
JRO 2
S:MOV 10 ANY
ADD 65
MOV ACC ANY
SUB 90
JEZ S
ADD 26
@9
MOV 32 ANY
ADD UP
L:MOV 0 ANY
SUB 1
JGZ L
@10
MOV UP ACC
ADD ANY
SUB 42
D:JEZ D
ADD 42
MOV ACC ANY

объяснение


это первый вопрос в TIS-100 или как?
noɥʇʎԀʎzɐɹƆ

1
Я реализовал эмулятор TIS для TIO, так что теперь вы можете попробовать его онлайн!
Phlarx

4

JavaScript ES6, 121 байт

_=>Array(51).fill('abcdefghijklmnopqrstuvwxyz').map((e,i)=>e.replace(/./g,(f,j)=>j==i|i+j==50?f.toUpperCase():f)).join`
`

Это действительно долго, потому что имеет больше смысла жестко кодировать алфавит, чем использовать абсурдно долго String.fromCharCodeдля генерации символов. Проверьте это ниже с помощью фрагмента стека, который использует ES5 с лучшей поддержкой и ниже.

f=function(){
  return Array(51).fill('abcdefghijklmnopqrstuvwxyz').map(function(e,i){
    return e.replace(/./g,function(f,j){
      return j==i|i+j==50?f.toUpperCase():f
    })
  }).join('\n')
}

// Polyfill for ES6-only fill()
Array.prototype.fill = Array.prototype.fill || function(val){
  for(i=0;i<this.length;i++){
    this[i] = val
  }
  return this
}

document.getElementById('p').innerText=f()
<pre id="p"></pre>


4

CJam, 23 байта

51{25-z~'{,97>'[2$+tN}/

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

Как это устроено

51{                  }/ e# For I from 0 to 50:
   25-                  e#   Compute J := I - 25.
                        e#   This maps [0 ... 50] to [-25 ... 25].
      z                 e#   Compute K := abs(J).
                        e#   This maps [-25 ... 25] to [25 ... 0 ... 25].
       ~                e#   Compute L := ~K = -(K + 1).
                        e#   This maps [25 ... 0 ... 25] to [-26 ... -1 ... -26].
        '{,             e#   Push ['\0' ... 'z'].
           97>          e#   Discard the first 97. Pushes ['a' ... 'z'].
              '[2$+     e#   Add L to '['. Pushes 'A' for -26, 'Z' for -1.
                   t    e#   Set ['a' ... 'z'][L] to '[' + L.
                    N   e#   Push a linefeed.

4

R, 78 70

M=replicate(26,c(letters,"\n"));diag(M)=LETTERS;cat(M,M[,25:1],sep="")

Улучшено @MickyT


2
Почти идентичный тому, который я придумал, но положил в одну сторону. Я использовал, M=replicate(26,c(letters,"\n"))а не матрицу. Это сэкономит вам несколько байтов
MickyT

Сохраните 1 байт, используя write: tio.run/##K/r/…
JayCe

4

Сборка Linux, 289

К сожалению, не конкурентоспособен с языками высокого уровня и, вероятно, далеко не оптимален, но довольно прост. Запустите его используя nasm -f elf64 -o a.o wave.S; ld -s -o a a.o; ./a(результирующий двоичный файл размером всего 568 байт):

section .data
s:db 'abcdefghijklmnopqrstuvwxyz',10
section .text
global _start
_start:
mov esi,0
a:call c
inc esi
cmp esi,26
jne a
mov esi,24
b:call c
dec esi
jnz b
call c
mov eax,1
call d
c:mov ecx,s
sub byte [ecx+esi],32
mov eax,4
mov edx,27
d:mov ebx,1
int 80h
add byte [ecx+esi],32
ret

Кажется, пустая трата места, чтобы скомпилировать это в ELF (там много вздувающихся нулей). Это может быть значительно уменьшено, если сделано как программа COM DOS. Я предполагаю, что он мог тогда работать в dosbox в Linux :)
Руслан

Я знаю, и я сделал это. Посмотрите на мой другой пост codegolf.stackexchange.com/a/53984/42642 :)
user2845840

Да, видел это, проголосовал за это. Хотя и не заметил, что это был ты.
Руслан

4

сборка x86 для DOS, скомпилировано 41 байт

Binary:

00000000  b9 e6 ff b3 61 b8 61 02  50 38 d8 75 02 24 df 88
00000010  c2 cd 21 58 40 3c 7b 75  ef b2 0a cd 21 41 79 02
00000020  43 43 4b 80 f9 19 75 dd  c3

Исходный код, сохранить как «wave.asm», скомпилировать с «nasm -f bin -o wave.com wave.asm» и запустить с «dosbox wave.com»

org 100h 
section .text
start:
mov cx,-26
mov bl,'a'
next_line:
mov ax, 0261h
next_char:
push ax
cmp al,bl
jnz lower_case
and al,255-32
lower_case:
mov dl,al
int 21h
pop ax
inc ax
cmp al,'z'+1
jnz next_char
mov dl,0ah
int 21h
inc cx
jns move_left
inc bx
inc bx
move_left:
dec bx
cmp cl,25
jnz next_line
ret

4

C #, 140 139 135 132

void f(){int d=1,i=0;var s="abcdefghijklmnopqrstuvwxyz\n";for(;i>=0;i+=d=i==25?-1:d)Console.Write(s.Replace(s[i],(char)(s[i]-32)));}

расширенный

void f()
{
    int d = 1, i =0;
    var s = "abcdefghijklmnopqrstuvwxyz\n";
    for (; i >= 0; i += d = i == 25 ? -1 : d)
        Console.Write(s.Replace(s[i], (char)(s[i] - 32)));
}

Сохранено 1 байт благодаря @ Gunther34567, использующему троичный вместоif

Сохранены 4 байта, затем вложены эти троицы в цикл и перемещены алфавит за пределы цикла

Сохраненные 3 байта, объединяющие целочисленные объявления благодаря @eatonphil


1
Вы можете сэкономить 1 байт, перейдя if(i==25)d=-1;наd=i==25?-1:d;
grabthefish

1
Вы можете сохранить 3 байта, изменив var d=1на int d=1,i.
eatonphil

3

Баш: 76 66 символов

printf -va %s {a..z}
for c in {a..z} {y..a};{ echo ${a/$c/${c^}};}

Образец прогона:

bash-4.3$ printf -va %s {a..z};for c in {a..z} {y..a};{ echo ${a/$c/${c^}};} | head
Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz

Анонимный пользователь предположил, что первая строка вообще не нужна, что уменьшило бы число байтов до 45.
Мартин Эндер,

Интересно. Тогда откуда появится алфавит?
manatwork

Я не мог тебе сказать. Редактирование просто удалило printfзвонок. Я отклонил редактирование , поэтому вы можете проверить его самостоятельно.
Мартин Эндер

Да я увидел. (Сайт уведомил меня о редактировании и его судьбе.) Поскольку без 1-й строки, которая помещает алфавит в переменную a, 2-я строка может печатать только пустые строки из переменной a, я не вижу другого разрешения, кроме как отклонить его. :(
manatwork

3

Sed: 135 119 116 111 символов

(109 символов кода + 1 символ опции командной строки + 1 ввод символов.)

s/.*/abcdefghijklmnopqrstuvwxyz/
h;H;G;H;G;H;g;G
s/.{,28}/\u&/gp
s/$/\t/
:;s/(\w+\n?)\t(.*)/\t\2\1/;t
s/.*Z//

Образец прогона:

bash-4.3$ sed -rf mexican.sed <<< '' | head
Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz

3

Javascript (ES6), 113 байт

c=-1;while(c++<50){console.log('abcdefghijklmnopqrstuvwxyz'.replace(/./g,(x,i)=>i==c|i+c==50?x.toUpperCase():x))}

110 байт

for(c=-1;c++<50;)console.log('abcdefghijklmnopqrstuvwxyz'.replace(/./g,(x,i)=>i==c|i+c==50?x.toUpperCase():x))

102 байта

Старая школа непобедима, если у нас не будет оператора дальности / функция / генератор / что-нибудь в JS

for(c=-1;c++<50;){for(s='',i=-1;i++<25;)s+=String.fromCharCode(i+(i==c|i+c==50?65:97));console.log(s)}

100 байт

К сожалению, Math.abs слишком длинный

for(c=51;c--;){for(s='',i=26;i--;)s+=String.fromCharCode(c+i==25|c-i==25?90-i:122-i);console.log(s)}

96 94 байта

Несмотря на то, что я голосую без объяснения причин, я продолжаю борьбу

for(c=-26;c++<25;){for(s='',i=26;i--;)s+=String.fromCharCode(c*c-i*i?122-i:90-i);console.log(s)}

Мы можем сбрить пару байтов, переставив инструкции цикла:

for(c=-26;c++<25;console.log(s))for(s='',i=26;i--;s+=String.fromCharCode(c*c-i*i?122-i:90-i));

Пожалуйста, объясните отрицательные голоса. Вывод неверный?
Шабун

2
Может быть, потому что у вас есть несколько ответов в одном посте? Черт, если я знаю, хорошее бритье, хотя!
Сэнди Гиффорд

Кроме того, я думаю, что вы можете сбрить эту последнюю точку с запятой
Сэнди Гиффорд

Нет, я был не прав
Сэнди Гиффорд

3

Perl - 95 64 байта

Воспользовавшись тем, \uчто следующий символ печатается заглавными буквами в Perl.

for$c(0..50){$n=1;print map{++$n==27-abs$c-25?"\u$_":$_}a..z,$/}

Спасибо Manatwork за сохранение 31 байта и исправление его (мой предыдущий код не работал.)


Это , \uкажется, работает в отдельном образце, но не в вашем коде. :( Все символы оставались строчными. Не могли бы вы показать нам, как должен выполняться ваш код? (Я поместил его в файл, затем назвал, perlпередав ему имя файла, без переключателей.) Кстати, я использую perl5.20.2.
manatwork

Кстати, это похоже на работу, когда \uследует буква для преобразования в тот же строковый литерал:for$c(0..50){$n=1;print map{++$n==27-abs$c-25?"\u$_":$_}a..z,$/}
manatwork

@manatwork Странно, это сработало, когда я это сделал. (Я использую 5.18.) Ваш код работает, и он значительно сокращает размер, поэтому я буду его использовать. Спасибо!
ASCIIThenANSI

2

q (37 символов)

Первый разрез

@[.Q.a;;upper]'[(raze(|:\)til 26)_26]

@[.Q.a;;upper]@'x,1_reverse x:til 26для 36 байтов . Или @[.Q.a;;.q.upper]@'x,1_|x:!26для 29 байтов в K4.
Стритстер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.