Зробіть мексиканську хвилю


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

Дозвільна нова лінія дозволена. Ви можете знайти довідкову ungolfed реалізацію Пітона тут .


1
Чи безпечно припустити, що введення ніколи не є великим регістром?
Вінні

40
@Winny Вхід немає Вихід фіксований. Насправді, це загальна ідея питань, пов'язаних зі складністю колмогорова .
Кріс Єстер-Янг

Це було в списку HNQ послідовно з часу його опублікування. Хороша робота. :)
Олексій А.

1
Тут ви можете знайти довідкову непрограшну реалізацію Python. -> посилання зламана
Franck Dernoncourt

Точка Франка Дернонкура все ще стоїть. Посилання розірвано.
Джонатан Фрех

Відповіді:


64

Pyth, 12 байт

V+Gt_GXGNrN1

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

У Pyth G- це малий алфавіт. +Gt_Gє abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcbaсимволом, який потрібно мати великі літери у кожному рядку.

Vвстановлює цикл for для цього рядка зі Nзмінною циклу.

В тілі XGNrN1є функція перекладу рядків. Xпереводить G, алфавіт, замінивши Nз rN1, в верхньому регістрі N. r ... 1- це велика функція. Це дає бажаний вихід.


31
Чи я єдиний, хто вважає смішним, що алфавіт малих літер представлений великою літерою?
Олексій А.

31

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

Приємно і просто, я думаю.


Це справді розумно. Розгортання циклу!
Alex Van Liew

20

Brainfuck (8bit), 231 байт

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

Гаразд, так це ніколи не буде найкоротшим, але важлива частина бере участь ... так ?!

Спробуйте тут (переконайтесь, що позначте "Динамічна пам'ять")


5
Якби мета полягала в тому, щоб бути найдовшим можливим кодом, який все ще повністю нерозбірливий для середнього людського програміста…
Калеб

7
@Caleb Я думаю, що BF-код - це найпростіший код, який можна зрозуміти. Це програма / функціональність , що важко зрозуміти. Усі повинні знати, що, наприклад, >зміщується одна клітинка вправо.
mbomb007

4
Завжди любив відповіді BF;)
RedPanda

Ви прямо зараз не написали цей код ?
БАР

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

Ruby: 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
Вентеро

До. Я спробував кілька дурних ідей оптимізувати повторне використання електронної пошти, але, звичайно, не правильний шлях. Дякую, @Ventero.
манатура

10

Матлаб, 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-Prolog, 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
Lynn

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 ⇒ використовується? Я маю на увазі не => але ⇒ ???
shabunc

2
Обидва дійсні :)
gilad hoch

я міг би поголити 1 байт, якщо я foreach printlnmkString("\n")
перейду

7

SQL (postgreSQL), 107 101

Створюйте серії від -25 до 25 і використовуйте абсолютне значення для заміни символів у верхній регістр. Завдяки манатурності за підказку щодо @ оператора.

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

Ви знаєте, що PostgreSQL має @оператора?
манатура

@manatwork nope Я цього не знав, але тепер дякую
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]]

Дуже елегантний. Не знав, що охоронців можна використовувати в режимі реального часу.
користувач2845840


6

MATLAB - 58 байт

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

Аналогічне рішення Луїса Мендо , але з використанням можливостей мовлення bsxfun.

Користуючись тим, що в ASCII різниця між великим і великим регістровими символами знаходиться рівно на 32 значення один від одного, ми спочатку генеруємо малі літери з кодів ASCII 97 до 122, які є кодами ASCII від малого до нижнього регістру z з повагою, потім створити 51-ма рядкову матрицю, яка містить 26 кодів ASCII від 97 до 122. Тому кожен рядок цієї матриці містить числову послідовність значень від 97 до 122. Далі ми створюємо іншу матрицю, де кожен i- й рядок цієї матриці містить a 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

Ви також можете запустити цей приклад, використовуючи онлайн-середовище Octave IDEone. Octave по суті є MATLAB, але безкоштовно: http://ideone.com/PknMe0


1
rot90- добре подумав!
Луїс Мендо

char (one (26,1) * [97: 122] -eye (26) * 32)
користувач3528438

@ user3528438 як ти поводишся з другою половиною? Код обчислює лише першу половину хвилі. Потрібно обчислити решту.
rayryeng

@ user3528438 - Також зауважте, що те, що ви написали, - це, головним чином, перша половина відповіді Луїса Мендо. Я вирішив написати щось трохи інше, щоб досягти того самого: :)
rayryeng

@rayryeng Так, це мене здивує, що з другою половиною важче впоратись, а також як уникнути дублювання центра.
користувач3528438


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/'

Або онлайн тут (зверніть увагу , я повинен був додати. «\ П» до цього , як я не міг додати -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
"Клей За замовчуванням порожня рядок". - Документація PHP про join()перший параметр.
манатура

1
Цей $i<25?$i:25-($i-25)25-abs($i-25)
підрядний

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

@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

PowerShell 3.0, 82 байти

$(0..25)+$(24..0)|%{$i=$_;[string](@(97..122)|%{[char]@($_,($_-32))[$_-eq$i+97]})}

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, тому тепер ви можете спробувати його в Інтернеті!
Фларкс

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для генерування символів. Перевірте це нижче за допомогою фрагмента Stack, який використовує підтримувані 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 :)
користувач2845840

Так, бачила це, підтримувала це. Не помітили, що це теж ти.
Руслан

4

x86 збірка для DOS, 41 байт складено

Двійковий:

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.
Мартін Ендер

Цікаво. Тоді звідки з’явиться алфавіт?
манастирство

Я не міг тобі сказати. Редагування просто видалило printfвиклик. Я відхилив редагування , тому ви можете перевірити його самостійно.
Мартін Ендер

Так я бачив. (Сайт повідомив мене про редагування та його долю.) Оскільки без 1-го рядка, який розміщує алфавіт у змінній a, 2-й рядок може друкувати лише порожні рядки зі змінної a, я не бачу іншого рішення, ніж його відхилити. :(
манатура

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

Поясніть будь-ласка. Вихід неправильний?
shabunc

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

Крім того, я думаю, ви можете поголити цю останню напівкрашку
Сенді Гіффорд

Ні, я був невірним
Сенді Гіффорд

3

Perl - 95 64 байт

Користується фактом \u що наступний символ надруковує великі регістри в Perl.

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

Завдяки манатурності за збереження 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 Дивно, він працював, коли я це робив. (Я використовую 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.