メキシコの波を作る


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
@Winny入力はありません。出力は修正されています。実際、それはコルモゴロフ複雑性の質問の一般的な考え方です。
クリスジェスターヤング

これは、投稿してから一貫してHNQリストに含まれています。よくやった。:)
アレックスA.

1
ここには、参照されていないPython実装のリファレンスがあります。->リンクが壊れています
フランクダーノンクール

フランク・デルノンクールの主張は今も変わりません。リンクが壊れています。
ジョナサンフレッチ

回答:


64

Pyth、12バイト

V+Gt_GXGNrN1

デモンストレーション。

PythではG、小文字のアルファベットです。+Gt_Gabcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba、各行で大文字にする必要がある文字です。

VNループ変数として、この文字列でforループを設定します。

本文にXGNrN1は、文字列変換関数があります。X翻訳G交換、アルファベット、NrN1の大文字のバージョン、Nr ... 1は大文字の関数です。これにより、目的の出力が得られます。


31
小文字のアルファベットが大文字で表されることを面白いと思うのは私だけですか?
アレックスA.

31

C、73

時には、最も単純なアプローチが最善である場合があります。すべての文字を1つずつ印刷します。これは、本来すべきではない多くの言語に勝ります。

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


20

Brainfuck(8ビット)、231バイト

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

わかりましたので、最短になることはありませんが、重要なのは参加することです...そうですか?!

ここで試してみてください(「動的メモリ」にチェックを入れてください)


5
目標が、平均的な人間のプログラマーにとってまだ完全に判読できない最長のコードになることであった場合…
カレブ

7
@Caleb BFコードは、存在する中で理解するのが最も簡単なコードの一部だと思います。理解するのが難しいのはプログラム/機能です。>たとえば、1つのセルが右にシフトすることを誰もが知っている必要があります。
mbomb007

4
常にBFの回答を愛するようになりました;)
RedPanda

今、このコードを直接書いていませんか?
BAR

6
やったと言って恥ずかしい!
Jarmex

13

MS-DOSバイナリ、61

このコードをコンパイルする必要はありません。wave.comというファイルに書き込むと、MS-DOSで実行されます。16進数のコード:

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
Ventero

ど eの再利用を最適化するためにいくつかの馬鹿げたアイデアを試しましたが、もちろん正しい方法ではありません。ありがとう、@ Ventero。
マナトワーク

10

Matlab、60 58 54バイト

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

4バイト節約してくれたDennis Jaheruddinに感謝します。


ここでは、典型的なトリックを使用して、バイトを保存すること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値のリストのペアを取り、両方を連結しますが、2番目のリストの最初の値は大文字になります。メイン関数は、97..122すべての位置で小文字のアルファベット(asciiで指定)を分割し、0,..,24,25,24,..,0すべてのステップでラムダを呼び出します。印刷する前に、各値は対応する文字に変換されます。


私のアプローチは次のとおり
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
ScalaのOMG⇒シンボルが使用されていますか?==ではなく⇒???
shabunc

2
両方とも有効です:)
gilad hoch

私は変更する場合は1つのバイトを剃り落とすことができforeach printlnmkString("\n")画面にそれを印刷するのではなく、戻り値として文字列を、出力
ギラッドの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目的の出力を出力するIOアクションです。

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

Luis Mendoのソリューションに似ていますが、の放送機能を使用していbsxfunます。

ASCIIでは、大文字と小文字の違いが互いに正確に32値離れていることを利用して、最初にASCIIコード97から122から小文字を生成します。これは、小文字aから小文字zまでのASCIIコードです。 97から122までの26個のASCIIコードを含む51行のマトリックスを作成します。したがって、このマトリックスの各行には、97から122までの数値シーケンスが含まれます。次に、このマトリックスの各i 番目の行にi 番目の列に32 。このマトリックスの最初の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/'

または、ここでオンライン(-l argを追加できなかったため、これに。 "\ n"を追加する必要がありました)。

説明

一般的なアプローチは、正規表現の置換を使用してすべてのハードワークを行うことです。以下から始めます。

0abcdefghijklmnopqrstuvwxyz1

これは一致し(([A-Z])|0)(\D)\U\3(\ Uが大文字に変更される)に置き換えられ、次の結果が得られます。

Abcdefghijklmnopqrstuvwxyz1

この時点から、同じ正規表現に一致し続け、次のものに置き換え\L\2\U\3ます:

aBcdefghijklmnopqrstuvwxyz1
abCdefghijklmnopqrstuvwxyz1
...
abcdefghijklmnopqrstuvwxyZ1

これで、正規表現の2番目の代替が一致します(.)((?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のデフォルトは空の文字列です。」– join()の最初のパラメーターに関するPHPドキュメント。
マナトワーク

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どうもありがとう!私はそれ\nがそこにあったことを完全に忘れていました。の初期化は$i事故として残されました。そして、ありがとうございます25-abs($i-25)。私は自分でそこに着くことはありません。
イスマエルミゲル

2
あなたのforループを最適化することができる:for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'↵';(-2バイト)。
ブラックホール


5

TISノードタイプT21アーキテクチャ-216 215バイト

こちらで実際にご覧ください!ありますDOWN、私は後でにgolfedそのビデオには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
TIO用のTISエミュレータを実装したので、オンラインで試してみることができます!
プラックス

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つのバイトを保存writetio.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にコンパイルするためのスペースの無駄があるようです(膨張するゼロがたくさんあります)。DOSのCOMプログラムとして実行すると、大幅に削減できます。Linuxのdosboxで実行できると思います:)
ルスラン

知っているし、それをやった。私の他の投稿コードを見てくださいgolf.stackexchange.com/a/53984/42642 :)
user2845840

うん、それを見た、それを支持した。でもあなたにも気づかなかった。
ルスラン

4

DOS用x86アセンブリ、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)));
}

@ Gunther34567のおかげで1バイトを節約しました。if

4バイトを保存してから、その3項をループ内にネストし、アルファベットをループの外側に移動します

@eatonphilのおかげで、整数宣言を組み合わせて3バイトを節約


1
に変更if(i==25)d=-1;することで1バイトを節約できますd=i==25?-1:d;
-grabthefish

1
に変更var d=1すると、3バイト節約できます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呼び出しを削除しただけです。編集を拒否したので、自分でテストできます。
マーティンエンダー

はい私は見ました。(サイトは、編集とその運命について私に通知しました。)変数aにアルファベットを配置する1行目がないため、2行目は変数aから空の文字列のみを印刷できます。:(
マナトワーク

3

セッド: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));

downvotesを説明してください。出力が間違っていますか?
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バイトを保存して修正してくれたmanatworkに感謝します(以前のコードは機能しませんでした)。


これ\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バイト。または、K4 @[.Q.a;;.q.upper]@'x,1_|x:!2629バイト
ストリートスター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.