Meksika dalgasını yarat


64

Mümkün olduğunca az bayt cinsinden, aşağıdakileri veren bir program veya işlev yazın:

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

Takip eden bir yeni satıra izin verilir. Burada referans olarak adlandırılmış bir Python uygulaması referansı bulabilirsiniz .


1
Girişin hiçbir zaman büyük harf olmadığını varsaymak güvenli midir?
Winny,

40
@Winny Giriş yok. Çıkış sabittir. Aslında, bu kolmogorov karmaşıklığı sorularının genel fikridir .
Chris Jester-Young,

Siz gönderdiğinizden beri bu, HNQ listesinde sürekli olarak yer aldı. İyi iş. :)
Alex A.

1
Burada referans olarak adlandırılmış bir Python uygulaması referansı bulabilirsiniz. -> bağlantı koptu
Franck Dernoncourt

Franck Dernoncourt'un amacı hala geçerli. Bağlantı koptu.
Jonathan Frech

Yanıtlar:


64

Pyth, 12 bayt

V+Gt_GXGNrN1

Gösteri.

Pyth'te Gküçük harfli alfabedir. +Gt_Golduğu abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcbaher satırda Büyük harfli gereken karakter.

VNDöngü değişkeni ile birlikte, bu dize üzerinde bir for döngüsü kurar .

Vücutta, XGNrN1bir dize çeviri işlevidir. Xçevirir Gyerine alfabe, Nile rN1büyük harfli sürümü, N. r ... 1büyük işlevdir. Bu istenen çıktıyı verir.


31
Küçük harfli alfabenin büyük harfle gösterilmesini komik kılan tek kişi ben miyim?
Alex A.

31

Cı-73

Bazen en basit yaklaşım en iyisidir: her karakteri tek tek yazdırın. bu, gerçekten yapmaması gereken birçok dili yener.

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

açıklama

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 bayt

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

Güzel ve basit sanırım.


Bu gerçekten zekice. Açmadan döngü!
Alex Van Liew

20

Brainfuck (8bit), 231 bayt

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

Tamam, bu yüzden asla en kısa sürmeyecek, ama önemli olan önemli bir rol ... doğru mu ?!

Burada deneyin ('Dinamik bellek'i işaretleyin)


5
Amaç, ortalama insan programcısına hala tamamen çözülemeyen en uzun kod olacaksa…
Caleb

7
@Caleb BF kodunun varlığın anlaşılması en kolay kodlarından biri olduğunu düşünüyorum. Anlaşılması zor program / işlevselliktir . >Örneğin herkes bir hücreyi sağa kaydırır.
mbomb007

4
Her zaman BF cevaplarına bayıldım;)
RedPanda

Bu kodu doğrudan yazmadın, değil mi?
BAR

6
Yaptığımı söylemekten utanıyorum!
Jarmex

13

MS-DOS İkili, 61

Bu kodun derlenmesi gerekmez, eğer wave.com adlı bir dosyaya yazarsanız MS-DOS ile çalışacaktır. Onaltılı kod:

ba3d0189d7b91a00b061aa404975fbb00aaab00daab024aa31f6e8130046
83fe1a75f7be1800e807004e75fae80100c389d3802820b409cd21800020
c3

Veya daha okunaklı bir şey tercih ederseniz, debug.exe (koddan sonra boş satır önemli) kullanarak nasıl üretileceği aşağıda açıklanmaktadır:

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

Yakut: 71 68 65 63 karakter

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

Örnek çalışma:

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

Hamuru. E'nin yeniden kullanımını optimize etmek için bir kaç aptal fikir denedim, ama elbette doğru yol değil. Teşekkürler, @Ventero.
Manatwork,

10

Matlab, 60 58 54 bayt

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

Dennis Jaheruddin’e beni 4 baytı kurtardığı için teşekkürler .


Burada ayrıca yerine tipik hile kullanabilirsiniz char(x)tarafından [x '']bir byte kaydedin.
Dennis Jaheruddin

Ayrıca end-125 yazmak için oldukça ayrıntılı bir yoldur!
Dennis Jaheruddin

@DennisJaheruddin Oops. İkiniz için de teşekkürler! Aslında bu [x '']numara benim için normal değil. Ama şimdi onu kulelerinizden birinde gördüğümü hatırlıyorum :-)
Luis Mendo

8

SWI-Prolog, 136 bayt

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)),\+!.

Döngü yapmak için geri izlemeyi kötüye kullanmak ...


8

Haskell 100 89 88 bayt

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

Lambda yardımcı işlevi \(h,c:t), bir çift ascii değeri listesi alır ve her ikisini birleştirir, ancak ikinci listenin ilk değeri büyük harfle yazılır. Ana işlev küçük harfli alfabeyi (ascii ile verilen 97..122) her pozisyonda böler ve 0,..,24,25,24,..,0her adımda lambda'yı çağırır. Yazdırmadan önce her değer karşılık gelen karaktere dönüştürülür.


İşte benim yaklaşımım: codegolf.stackexchange.com/a/53895/3852
Lynn

8

Scala 110 109 karakter

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
Scala G sembolünde OMG kullanılıyor mu? Yani değil => ama? ???
shabunc,

2
Her ikisi de geçerlidir :)
gilad hoch

Ben değiştirirseniz 1 byte traş olabilir foreach printlniçin mkString("\n")ekran bunu yazdırmak yerine dönüş değeri olarak bir dize ve çıkış
gilad hoch

7

SQL (postgreSQL), 107 101

Üretmek -25 ile 25 arasındaki serilerdir ve karakterleri büyük harfli sürümleriyle değiştirmek için mutlak değeri kullanın. @ Operatörüyle ilgili ipucu için manatwork sayesinde.

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

PostgreSQL'in bir @operatörü olduğunu biliyor musunuz ?
Manatwork

@ manatwork nope Ben bilmiyordum, ama şimdi teşekkür ederim
MickyT

7

Haskell, 81 bayt

Bayt sayma @nimi gibi; fİstenilen çıktıyı basan bir GÇ işlemidir.

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

Çok zarif. Muhafızların satır içi kullanılabileceğini bilmiyordum.
user2845840


6

MATLAB - 58 bayt

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

Luis Medo'nun çözümüne benzer , ancak yayın yeteneklerini kullanmabsxfun .

ASCII'de büyük ve küçük harf karakterleri arasındaki farkın birbirinden tam 32 değer olması avantajından yararlanarak, önce ASCII kodlarından 97 ile 122 arasındaki küçük harfleri, küçük harflerden küçük harflere kadar ASCII kodları, sonra da 97 den Bu nedenle, bu matrisin her satır 97 den 122 sonraki değerleri sayısal bir dizisini ihtiva eden 122 26 ASCII kodları içeren bir 51 satır matris oluşturmak biz burada her i başka bir matris oluşturmak inci Bu matrisin satır bir içermektedir i 32 inci sütununda gösterilmiştir. Bu matrisin ilk 26 satırı, esas olarak 32 ile çarpılan kimlik matrisi olan bu desene sahiptir.eyesizin için bir kimlik matrisi oluşturur. Bu matrisin son 25 satırı, 90 derece döndürülmüş ölçekli kimlik matrisidir.

Bu özel ağırlıklı kimlik matrisini alarak ve bunu ilk matris ile çıkartarak, ardından elde edilen ASCII kodlarını karakterlere dönüştürerek, istenen "Mexican Hat" dizisi üretilir.

Örnek Çalıştırma

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

Bu örneği IDEone'un çevrimiçi Octave ortamını kullanarak da çalıştırabilirsiniz. Octave aslında MATLAB'dir fakat ücretsizdir: http://ideone.com/PknMe0


1
rot90-- iyi düşünülmüş!
Luis Mendo,

char (olanlar (26,1) * [97: 122]
-eye

@ user3528438 ikinci yarıyı nasıl idare ediyorsunuz? Kod, dalganın yalnızca ilk yarısını hesaplar. Gerisini hesaplaman gerekiyor.
rayryeng

@ user3528438 - Ayrıca yazdıklarınızın temelde Luis Mendo'nun cevabının ilk yarısı olduğunu unutmayın. Aynı şeyi başarmak için biraz farklı bir şeyler yazmaya karar verdim :)
rayryeng

@ rayryeng evet, beni ikinci yarı ele almak daha zor ve aynı zamanda merkezi yinelenen nasıl önlenebileceği beni şaşırtıyor.
user3528438

5

J, 31 23 bayt

u:|:(97+i.26)-32*=|i:25

@Mauris sayesinde 8 bayt kurtarıldı.

Burada çevrimiçi deneyin.


23 alabilirim: u:|:(97+i.26)-32*=|i:25(monad =burada gerçekten yararlıdır!)
Lynn

@ Mauris Teşekkürler, =burada monad kullanmayı düşünmedim . Bu çok hoş!
randomra

5

Perl, 51 bayt

50 bayt kodu + 1 bayt komut satırı parametresi

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

Aşağıdaki gibi kullanılabilir:

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

Veya burada çevrimiçi ( ,"\n"-l arg ekleyemediğim için buna eklemek zorunda kaldığımı unutmayın ).


Çok daha uzun yöntem Yukarıdaki kısaltılmış versiyondan önce, oldukça tıknaz olan farklı bir yöntem denedim. Yine de referans olarak aşağıda bıraktım.

86 bayt kodu + 1 bayt komut satırı arg

$_=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/

First Perl, şimdiye kadar düzgün bir şekilde golf oynamıştım, bu yüzden yapılabilecek çok şey olduğunu hayal ediyorum - lütfen iyileştirmeler önerin!

Takip edildiği gibi kullanılabilir:

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

Veya burada çevrimiçi (-l argümanı ekleyemediğim için buna "\ n" eklemek zorunda kaldığımı not edin).

açıklama

Genel yaklaşım, tüm sıkı işleri yapmak için regex ikamesi kullanmaktır. Şununla başlayalım:

0abcdefghijklmnopqrstuvwxyz1

Bu eşleşir (([A-Z])|0)(\D)ve \U\3(\ U büyük harfe değişir) ile değiştirilir:

Abcdefghijklmnopqrstuvwxyz1

Bu noktadan itibaren aynı regex ile eşleşmeye devam ediyoruz ve bununla değiştiriyoruz \L\2\U\3:

aBcdefghijklmnopqrstuvwxyz1
abCdefghijklmnopqrstuvwxyz1
...
abcdefghijklmnopqrstuvwxyZ1

Şimdi regex'in ikinci alternatifi eşleşiyor (.)((?2))(1)(ki aynı (.)([A-Z])(1)). Vermek için ile değiştiririz \U\4\6\L\5:

abcdefghijklmnopqrstuvwxY1z

Bu, ulaşana kadar eşleşmeye ve değiştirmeye devam eder:

A1bcdefghijklmnopqrstuvwxyz

ve artık regex eşleşmesi yok.

Döngünün her noktasında '1'i çıkarır ve yazdırırız.


5

PHP, 87 71 69 bayt

En kısa değil, ancak amaçlandığı gibi çalışır. @Manatwork'e , boyutlarını çok düşürmek için birkaç ipucu vererek
teşekkür ederiz . @ Blacklack sayesinde , boyut 2 bayt azaldı.

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

Tam olarak değil güzel, ama işe yarıyor.


1
“Varsayılanları boş bir dizeye yapıştır.” - PHP'nin join()ilk parametresiyle ilgili belgeler .
Manatwork

1
Bu dize abonelik gerçekten uygun değil: $i<25?$i:25-($i-25)25-abs($i-25)
manatwork

1
Uyarıları zaten görmezden geldiğinize göre (a ve z tanımsız sabitleri için), başlatılmamış $ i için bir tane daha görmezden gelebilirsiniz. $ İ öğesine dokunurken, artımını dizenin alt dizinine taşıyın. for(;$i<51;){$L=range(a,z);$L[25-abs($i++-25)]^=" ";echo join($L),"↵";}(Sadece kodda "↵" kullandığım çizgiyi
kaydırın

@ manatwork Çok teşekkürler! \nOrada olduğunu tamamen unuttum . Başlangıcı $ibir kaza olarak kaldı. Ve bunun için çok teşekkür ederim 25-abs($i-25). Oraya tek başıma gelemem.
Ismael Miguel,

2
Kişisel fordöngü optimize edilebilir:for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'↵'; (-2 bayt).
Blackhole

5

PowerShell 3.0, 82 bayt

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

5

TIS Düğümü Tipi T21 Mimarisi - 216 215 bayt

Burada çalışırken izleyin! DOWNO videoda sonradan golf oynadığım bir video var ANY, ama işlevsel olarak aynı.

Bu dize hiçbir karakter veya karakter kavramına sahip değildir, bu yüzden ASCII değerlerini kullandığımı belirtmeliyim, yani çıktı başlar 97, 66, 67... 88, 89, 90, 10, 65, 98...

İşte TIS-100 formatındaki kod, puanlama amacıyla veri kaydetme:

@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

açıklama


Bu TIS-100'deki ilk soru mu, yoksa ne?
noɥʇʎԀʎzɐɹƆ

1
TIO için bir TIS öykünücüsü kullandım, artık çevrimiçi deneyebilirsiniz!
Phlarx

4

JavaScript ES6, 121 bayt

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

Bu gerçekten çok uzun, çünkü alfabeyi kodlamak String.fromCharCode, karakterleri üretmek için saçma bir şekilde kullanmaktan daha anlamlı . Aşağıda daha iyi desteklenmiş ES5 ve daha fazlasını kullanan Stack snippet'i ile test edin.

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 bayt

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

CJam tercümanında çevrimiçi olarak deneyin .

Nasıl çalışır

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 tarafından geliştirildi


2
Neredeyse birebir aynı oldum ama bir tarafa koydum. M=replicate(26,c(letters,"\n"))Bir matris yerine kullandım . Birkaç bayt
kurtarır

Kullanarak 1 byte kazanın write: tio.run/##K/r/…
JayCe

4

Linux Meclisi, 289

Ne yazık ki, yüksek seviyeli dillerle rekabet halinde değil ve muhtemelen optimal olmaktan uzak, ama oldukça basit. Kullanarak çalıştırın nasm -f elf64 -o a.o wave.S; ld -s -o a a.o; ./a(elde edilen ikili sadece 568 byte büyüktür):

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

Bunu ELF'ye derlemek için bir alan kaybı gibi görünüyor (orada çok sayıda şişkin sıfır). Bir DOS’un COM programı olarak yapılırsa çok azaltılabilir. Sanırım Linux'ta dosbox içinde çalışabilir :)
Ruslan

Bunu biliyorum ve yaptım. Diğer postalarıma bakınız codegolf.stackexchange.com/a/53984/42642 :)
user2845840

Evet, gördüm, oy kullandı. Yine de senin olduğunu farketmedim.
Ruslan

4

DOS için x86 derlemesi, 41 bayt derlendi

İkili:

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

Kaynak kodu, "wave.asm" olarak kaydedin, "nasm -f bin -o wave.com wave.asm" ile derleyin ve "dosbox wave.com" ile çalıştırın

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

Expanded

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

@ Gunther34567 sayesinde bir ternary kullanarak kaydedilmiş 1 byteif

Kaydedilen 4 bayt sonra o üçlüyü döngünün içine yerleştirir ve alfabeyi döngünün dışına taşır

@Eatonphil sayesinde tamsayı bildirimlerini birleştiren 3 bayt kurtarıldı


1
Eğer değiştirerek 1 byte kurtarabilir if(i==25)d=-1;içind=i==25?-1:d;
grabthefish

1
Sen değiştirerek 3 bayt kaydedebilirsiniz var d=1için int d=1,i.
eatonphil

3

Bash: 76 66 karakter

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

Örnek çalışma:

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

Anonim bir kullanıcı ilk satırı 45'e kadar bayt sayısını azaltacak olan hiç gerekli olmadığını öne
Martin Ender

İlginç. Öyleyse, alfabe nereden ortaya çıkacak?
Manatwork

Sana söyleyemedim Düzenleme sadece printfçağrıyı kaldırdı . Düzenlemeyi reddettim , böylece kendin test edebilirsin.
Martin Ender

Evet gördüm. (Site düzenleme ve kader hakkında beni bilgilendirdi.) Alfabeyi a değişkenine yerleştiren 1. satır olmadığı için 2. satır yalnızca a değişkeninden boş dizeler yazdırabilir, reddetmekten başka bir çözünürlük göremiyorum. :(
manatwork

3

Sed: 135 119 116 111 karakter

(109 karakter kodu + 1 karakter komut satırı seçeneği + 1 karakter girişi.)

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

Örnek çalışma:

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

3

Javascript (ES6), 113 bayt

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

110 bayt

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

102 bayt

Old school, operatör / işlev / jeneratör / js cinsinden ne olursa olsun menzilimiz olmadığı sürece yenilmez.

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 bayt

Unluckily Math.abs çok uzun

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 bayt

Her ne kadar açıklama yapmadan reddetmeme rağmen mücadeleme devam ediyorum

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

Döngü talimatlarını yeniden düzenleyerek birkaç baytı tıraş edebiliriz:

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

Lütfen aşağı oyları açıklayın. Çıktı yanlış mı?
shabunc,

2
Belki teknik olarak tek bir gönderide birden fazla cevabınız olduğundan? Cehennem biliyorsam, iyi tıraş olsa!
Sandy Gifford

Ayrıca, son yarı kolonu tıraş edebileceğini düşünüyorum
Sandy Gifford

Hayır, hatalıydım
Sandy Gifford

3

Perl - 95 64 bayt

\uPerl'de bir sonraki karakterin büyük harfle basılması gerçeğinden faydalanır .

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

31 byte'lık tasarruf sağladığı ve düzelttiği için teşekkür ederim (önceki kodum işe yaramadı.)


Bu \uayrı bir numunede çalışmak gibi görünüyor, ama değil kodunuzda. :( Tüm karakterler küçük harflerle kalmıştır. Kodunuzun nasıl çalıştırılması gerektiğini bize gösterebilir misiniz? (Ben bir dosyaya koydum, daha sonra perldosya adı geçerek çağırdım , anahtar yok.) Bu arada, perl5.20.2 kullanıyorum.
manatwork

Bu arada, \uaynı dizgede for$c(0..50){$n=1;print map{++$n==27-abs$c-25?"\u$_":$_}a..z,$/}
değişmek

@manatwork Garip, yaptığımda işe yaradı. (5.18 kullanıyorum.) Kodunuz çalışıyor ve boyutu önemli ölçüde azaltıyor, bu yüzden kullanacağım. Teşekkürler!
ASCIIThenANSI

2

q (37 karakter)

İlk kesim

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

@[.Q.a;;upper]@'x,1_reverse x:til 26için 36 bayt . Veya K4'te 29 bayt@[.Q.a;;.q.upper]@'x,1_|x:!26 için .
Streetster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.