アルファベット、アルファベット、または文字のみを出力します


49

課題は簡単です。

入力xを受け取り、小文字のアルファベットのx一部である場合は小文字のアルファベットを出力し、大文字のアルファベットのx一部である場合は大文字のアルファベットを出力しx、どちらでもない場合にのみ出力する関数またはプログラムを記述します。

ルール:

  • 入力は、関数の引数またはSTDINからのものです。
  • 入力は、32〜126(ティルドまでのスペース)の印刷可能なASCII文字のいずれかになります。
  • 入力は引用符'x'またはの内側にある場合がありますが、and は有効な入力であり、サポートされる必要"x"があることを忘れないでください。'"
  • 入力はアルファベットの任意の文字にすることができます。つまり、aまたはであると仮定することはできませんA
  • 出力はアルファベットの1つまたは単一のシンボルのみである必要がありますが、末尾の改行は問題ありません。
  • アルファベットの文字は、スペース、コンマなどで区切ってはいけません。

いくつかの例:

F
ABCDEFGHIJKLMNOPQRSTUVWXYZ

z
abcdefghijklmnopqrstuvwxyz

"
"

    <- Input:  Space
    <- Output: Space

バイト単位の最短コードが勝ちます。


オプションですが、感謝します:あなたの言語がオンライン通訳者を持っている場合、他の人が簡単にテストできるようにリンクも投稿してください。


リーダーボード

この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、b)全体的なリーダーボードとして、回答からカタログを生成します。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

## Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

## Ruby, <s>104</s> <s>101</s> 96 bytes

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

## Perl, 43 + 2 (-p flag) = 45 bytes

言語名をリンクにして、スニペットに表示することもできます。

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


:私たちは、たとえばPythonで、同様のインポートパッケージを許可されimport Randomた後、使用してRandom.randint(この挑戦のために明らかではないが、それでも)?
ダニエル

はい、パッケージをインポートできます。ただし、たとえば書き込みのバイト数import stringはカウントされるため、多くの場合、回避策を実行する方が適切です。チャレンジが投稿される前にパッケージが存在する必要があることに注意してください。多くの課題には次のようなものがあります。「これを行うパッケージの使用は許可されていません」が、この課題の場合はそうではありません。
スティーヴィーグリフィン

私は「引用符は、有効な入力があるとサポートしなければならない」ことで、あなたの入力方法は、次に引用符引用符を必要とする場合、入力がエスケープされるようなことを意味することを仮定している
Cyoce

REPL環境を想定できますか?

回答:


22

TeaScript、5バイト

xN(0)

TeaScriptには、このための(ほぼ)ビルトインがあります:D

オンラインで試してください(注:オンラインインタープリターはTeaScript v3に更新されているため、これはN0

すべてのテストケースを試す


TeaScript 3、2バイト[非競合]

TeaScript 3を使用すると、これは2バイトになります。TeaScript 3はこのチャレンジの後に作成されたため、これは競合しません。

N0

1バイトの代替

0123456789数字を出力できる場合、これは次のようになります。

°

TeaScript 3 有効です。だから、あなたはそれを使うことができます!
user75200

27

Pyth、10バイト

h/#z[GrG1z

テストスイート

小文字のアルファベット、大文字のアルファベット、および入力の3つの要素を持つリストを作成することから始めます。([GrG1z)次に、このリストをフィルタリングして、要素の入力の出現回数をゼロ以外にします。(/#z)最後に、フィルタリングされたリストの最初の要素を取得します。


6
真剣に、数バイトのPythで解決できないものはありますか?私は本当に..この言語を学ぶ必要がある
Hexaholic

25
どの言語を学びますか?...名前で2つ挙げました。:P
キントピア

2
@quintopiaさて、なぜ両方ではないのですか?:)
ヘキサホリック

15

LabVIEW、23個のLabVIEWプリミティブ

セレクター(cse構造体の?)は、字句クラスと呼ばれるviに接続されています。入力に応じて1〜6の数値を出力し、5は小文字、4は大文字です。

forループは、アルファベットを作成するために26回、シンボルを通過させるために1回実行されます。


4
何年も前にLabVIEWで働いていた(特権?不幸?あなたが決める)人として、あなたの答えは私の笑顔をもたらします。=)
corsiKa

12

Haskell、48バイト

f c=filter(elem c)[['a'..'z'],['A'..'Z'],[c]]!!0

使用例:

*Main> f 'g'
"abcdefghijklmnopqrstuvwxyz"
*Main> f 'H'
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
*Main> f '\''
"'"

['a' .. 'z']、['A' .. 'Z']のすべてのリストと、要素が入力文字cであるシングルトンリストを取得しますc。文字には常に2つの一致があるため、最初の一致を選択します。


11

JavaScript(ES6)、79バイト

x=>(a="abcdefghijklmnopqrstuvwxyz",x>"`"&x<"{"?a:x>"@"&x<"["?a.toUpperCase():x)

説明

JavaScriptは、文字列を比較するときに各文字のコードをアルファベット順に比較するため、比較に使用される文字のコードは、必要な文字の範囲の上下1です。

x=>(
  a="abcdefghijklmnopqrstuvwxyz", // a = lower-case alphabet
  x>"`"&x<"{"?a:                  // if x is a lower-case letter, output alphabet
  x>"@"&x<"["?a.toUpperCase():    // if x is an upper-case letter, output upper-case
  x                               // else just output x
)

テスト


それは実際にJavascriptでアルファベット全体を含む文字列を生成する最短の方法ですか?印刷可能なASCII範囲全体が必要な場合、すべての文字を入力する必要がありますか?
スティーヴィーグリフィン

1
@stewieGriffin悲しいことにそれは。他の唯一の方法は次のようなものですfor(a="",i=64;++i<91;)a+=String.fromCharCode(i)String.fromCharCodeはゴルフには非常に不向きですが、時にはそれが唯一の方法です!
user81655

4
この場合、バランスが間にあるString.fromCharCode.toUpperCase(ダムとはDumber)が、toUpperCase勝者である
edc65

いいね!私はこれをさらにゴルフするいくつかの異なる方法を試しましたが、機能するものを見つけていません。x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")ただし、1バイト長くなります。に変更[A-Z]すると\w、を除くすべてで機能します_。あなたの解決策は可能な限り短いようです。
ETHproductions

ここで生成するshortestsの方法の一つだABC...abc...?本当なしforループ:(いくつかのパディング)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
ETHproductions

8

R、90 75バイト

a=scan(,'');l=letters;L=LETTERS;cat("if"(a%in%l,l,"if"(a%in%L,L,a)),sep="")

ジュゼッペに感謝します。

古いバージョン(90バイト):

a=scan(,'');l=letters;L=LETTERS;if(a%in%l)cat(l,sep="")else if(a%in%L)cat(L,sep="")else a

ugいように見えますが、それらcatを関数に外注することはできません。



73バイト:の2番目のパラメーターはscan、文字型の任意のオブジェクトにすることができるため、のletters代わりに使用できます''
ロビンライダー

7

Python 3、92 84 82 74バイト

現在のバージョン:74、isaacgとwnnmawに感謝!

lambda c:(c,''.join(chr(x+(67,97)[c>'Z'])for x in range(25)))[c.isalpha()]

Ungolfed:(ungolfedの定義について

lambda c:
    (
        c,
        ''.join([chr(x + (67,97)[c > 'Z']) for x in range(25)])
    )
    [c.isalpha()]

最初のバージョン:92

def f(c):print(''.join([chr(x+(97if c>'Z'else 65)) for x in range(25)])if c.isalpha()else c)

2番目のバージョン:82、isaacgに感謝!:)

lambda c:''.join(chr(x+(97if c>'Z'else 65))for x in range(25))if c.isalpha()else c

こんにちは、PPCGへようこそ!素敵な答え。ゴルフの提案は次のとおりです。lambda c:明示的な定義(def f(c):print()の代わりにラムダ式()を使用し、いくつかのバイトを節約できます。また、の前にスペースは必要ありませんfor
isaacg

ああ、私は「出力」が印刷を意味するものと仮定し、単に戻るだけではありません:)きれいlambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else cです。ありがとう!
コネケ

ええ、サイトの出力の標準定義では関数から戻ることができるため、新しいバージョンを編集して答えを出すことができます。別のゴルフでは、ブラケットは必要ありません-リストの理解ではなくジェネレータの理解として、関数はブラケットなしでもまったく同じように機能します。
isaacg

ああ、以前はジェネレーターの理解を実際に使ったことがなく、新しいことを学んでいました!再度ありがとう:)
コネケ

"関数に入力するときは、\"代わりに必要なことに注意してください。
ダニエル

6

Python 3、118 105 98 97 83バイト

シンプルなソリューション。編集:ゴルファーの提案、エリックのおかげでゴルフ。

lambda s,a='ABCDEFGHIJKLMNOPQRSTUVWXYZ':(s,(a,a.lower())[s.islower()])[s.isalpha()]

ゴルフをしていない:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s

1
三項演算子を使用して数バイトを節約できますか?のようなものreturn a.lower() if s.islower() else a
デビッドロバートソン

@DavidRobertsonコードの一番上の行である私のソリューションを正しく読んでいるかどうかはわかりませんが、それがまさに私がやっていることです。
Sherlock9

あ!私は無料版を読んでいました。ごめんなさい!
デビッドロバートソン

@DavidRobertson問題ありません
Sherlock9

ゴルフ:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
エリック・ザ・アウトゴルファー

5

PHP、62 76 82バイト

PHPは今、大丈夫です:

<?=ctype_alpha($x=$argv[1])?join(range(Z<$x?a:A,Z<$x?z:Z)):$x;

次のようなコマンドラインから入力を取得します。

$ php alphabet.php A
$ php alphabet.php "a"
$ php alphabet.php " "
$ php alphabet.php _

編集

  • 置き換えて6バイトを節約しまし91>ord($x)Z<$x。複雑に考えた方法。マナトワークに感謝します
  • 要求された範囲を直接削除して構築することにより、14バイトを節約strtoupperしました。

そのord()ルックス悪いが。試してくださいZ<$x?$a:strtoupper($a)
マナトワーク

@manatwork母、私はその第二部で複雑になる方法を考えました。指摘してくれてありがとう。
insertusernamehere

' '&$x^A大文字と小文字のaおよびzを作成してください。つまり、コードは次のようになります<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Ismael Miguel

@IsmaelMiguelこれはまったく同じバイト数になります。
insertusernamehere

1
心配しないでください-それはまだ難読化する良い方法です。;)
ユーザー名をここに挿入し

5

Perl、46 34 33バイト

+2を含む -nE

say/[a-z]/?a..z:/[A-Z]/?A..Z:$_

として実行

perl -nE 'say/[a-z]/?a..z:/[A-Z]/?A..Z:$_'

  • アップデート34はfor@ Dom Hastingsのおかげで、ベアワードを省略して使用することで12バイトを節約します。
  • 更新33は-E、のsay代わりにとを使用して1バイトを保存しますprint

@DomHastingsありがとう!裸for語が許可されていることを知っていたはずです-そして、私はそれを見たはずです:-/。、アプローチの束を試してみました(-p$"='';$_="@_"、でも$a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'...しかし、すべては長いです
ケニー

持っていたあなたが設定している場合、この上だと思う$_=の代わりをprintすると、使用-pフラグを代わりに-n別の2を保存することができます...私はまだ...もっと今のところ保存する任意の他の方法を考えることはできません
ドムヘイスティングス

@DomHastings私はそれを試しましたが、$_リストに設定することはできません(私は知っています)。補間する必要があります($_="@_")が、区切り文字としてスペースを使用するため$"=''、同様に行う必要があります(またはを使用しますjoin'',)。これには余地があまりありません!
ケニー

ああ、もちろん!あなたも言った(パブにいなかった後にコメントを読み直すと...)私はそれについて考え続けますが、あなたはあなたがsay代わりにprint
ドムヘイスティングス

5

ルビー、41 + 1 = 42

スイッチを使用して-p、実行

([*?A..?z]*'').scan(/\w+/){$&[$_]&&$_=$&}

これは文字列を生成します

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

「単語文字」の各連続ブロックをチェックします。これはたまたま小文字と大文字のアルファベットとアンダースコア文字です。Zとaの間に複数の連続した単語文字がある場合、このトリックは機能しません。

リクエストにより説明を追加するために編集:

-pフラグは、基本的にありません

while( $_ = STDIN.gets )
  #execute code
  print $_
end

[*?A..?z]ASCII順の大文字Aと小文字Zの間の文字の配列です。それは大文字のアルファベット、一部の非文字、および小文字のアルファベットです。*''配列を文字列に結合するので、呼び出すことができます.scanscan正規表現の各一致を検出し、それを/\w+/マジック変数に入力$&して、ブロックを呼び出します。ブロックが繰り返されるたびに、一致した文字列に含まれているかどうかを確認し、含まれ$_ている場合はその文字列に出力を設定します。したがって、$ _が大文字または小文字のアルファベットに含まれている場合、それに応じて変更されます。それ以外の場合は変更されません。

無料版は次のようになります

while ($_ = STDIN.gets )
 %w[ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz].each do |alphabet|
  $_ = alphabet if alphabet.include?($_)
 end
 print $_
end

ゴルフされていないバージョンを投稿できますか?私はまだこれがどのように機能するかを完全に理解していません。
Shelvacu

もちろん、投稿しました。
histocrat

4

CJam、18バイト

'[,65>_elr:R]{R&}=

'[,65>大文字のアルファベット、_el小文字のアルファベット、およびr:RSTDINから読み取られてvariableに割り当てられた単一文字ストリングをプッシュしますR。これらはarray(])にラップされ、共通の文字を持つ最初の文字がRを使用して選択され{R&}=ます。


私はCJamの方法を理解しようとしていますが、公式ドキュメントとここで読んでいるものの間で迷っています。たとえば、なぜ_elアルファベットが小文字なのかを理解できるページを誰かに教えてもらえますか?
エルダルG.

ああ、el「小文字に変換」を意味します。大文字のアルファベットをプッシュしたので、今度はそれを_で複製elし、結果のコピーを呼び出します。
リン

1
私が作りました (ほぼ)すべてのCJamコマンドを含むPDFを。
リン

4

網膜、62バイト

[a-z]
abcdefghijklmnopqrstuvwxyz
[A-Z]
ABCDEFGHIJKLMNOPQRSTUVWXYZ

2つの短い行は、一致する正規表現です。入力が小文字の場合(範囲内[a-z])、その文字(この場合、入力全体)は小文字のアルファベットに置き換えられます。プロセスは大文字でも同様です。文字でない場合、置換は行われず、そのまま出力されます。

オンラインでお試しください。


4

Python 2.7.10、 95の 93 79バイト

ゴルフをしようとするのはこれが初めてなので、どんな助けやアドバイスも大歓迎です!

from string import* 
lambda i:(i,(uppercase,lowercase)[i.islower()])[i.isalpha()]

助けてくれたMorgan Thrappに感謝します!


1
@MorganThrapp、それはうまくいかないようです。Python 2.7.10で動作しますか?
ダニエル

2.7.8で動作します。何が機能しないのですか?
モーガンスラップ

@MorganThrapp、実際には、それがどのように機能するかを最初に正確に説明していただけますか?多分それは私が理解していないということだけなので、私は何か間違ったことをしています。
ダニエル

確かに、それはその事実使用するFalse == 0と、True == 1タプルへのインデックスにします。そのため、最初にが付いている文字であるかどうかをチェックしisalpha、ある場合は戻り1、小文字で同じかどうかをチェックします。
モーガンスラップ

1
問題ない!私はゴルフが大好きなので、新しい人を助けたいといつも思っています!
モーガンスラップ

4

ルビー、46 43文字

(42文字のコード+ 1文字のコマンドラインオプション)

[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}

おかげで:

サンプル実行:

bash-4.3$ echo -n 'm' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
abcdefghijklmnopqrstuvwxyz

bash-4.3$ echo -n 'W' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
ABCDEFGHIJKLMNOPQRSTUVWXYZ

bash-4.3$ echo -n '@' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
@

4

MATL、22バイト

jtt1Y2XIm~Iw?km?Ik]]1$

これは、言語の現在のバージョン(3.1.0)を使用します。

編集(2017年9月15日):MATL Online試しください(言語の新しいバージョンで)。

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> e
abcdefghijklmnopqrstuvwxyz

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> T
ABCDEFGHIJKLMNOPQRSTUVWXYZ

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> "
"

説明

j              % input string (assumed to be a single character)        
tt             % duplicate twice
1Y2            % predefined literal: uppercase letters
XI             % copy to clipboard I         
m~             % check if not member    
I              % paste from clipboard I      
w              % swap elements in stack      
?              % if
    k          % convert string to lowercase 
    m          % check if member         
    ?          % if                          
        I      % paste from clipboard I      
        k      % convert string to lowercase 
    ]          % end                         
]              % end                         
1$             % input specification for implicit printing

3

Java、165文字

class A {public static void main(String[]p){int c=p[0].charAt(0),d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);for(;e<f;e++){System.out.print((char)e);}}}

(返すのではなく)必要な出力をstdoutに生成します。入力は、ランタイム引数を介して行われます。

使い方。

1)いくつかの整数変数を設定します
c =ランタイム引数の最初のパラメーターの最初の文字のASCII値。
d = cを小文字のASCII値に変換(32でORすることにより)
b = dが文字かどうかを確認する計算。文字の場合、<0になります。
e =出力の開始文字。dのASCII値が文字(bを参照)の場合、「A」に設定されます(または、「A」ASCII値にc AND 32を追加して「a」)、そうでない場合は、cの元の値に設定されます。
f =出力する文字数。文字でない場合(bを参照)、これは1に設定され、そうでない場合は26に設定されます
2)eからe + fにループし、各文字をstdoutに出力します。


2
ほとんどの課題に対して、完全なプログラムまたは機能としてソリューションを提供できることを知っていますか?Javaのボイラープレートコードの膨大な量を考えると、関数が短くなる場合があります。
マナトワーク

1
ロジックを変更せずに、いくつかの小さなトリックを適用すると、次のようになりましたvoid f(char c){for(int d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);e<f;)System.out.print((char)e++);}
マナトワーク

3

Perl、23バイト

-nE(通常の+1の代わりに)+2を含めて、他のperlソリューションに対して公平にする

末尾の改行なしでSTDINの入力で実行します。

echo -n g | perl -lnE 'say/\pL/?a&$_|A..Z:$_'

コードだけ:

say/\pL/?a&$_|A..Z:$_

入力が7ビット文字に制限されているという事実をうまく利用しています。
msh210

3

ルア、98 97バイト

悲しいことに、設定する26バイトより短いソリューションは見つかりませんでした aながら、アルファベットでする。実際、32より短いとは思いませんでした。

編集:@ATacoのおかげで1バイト節約、Luaで開始したときにこのエラーをたくさんしていた:p

c=io.read()a="abcdefghijklmnopqrstuvwyz"print(not c:find"%a"and c or c:find"%u"and a:upper()or a)

公式サイトまたはideoneでオンラインでテストできます。前者を使用する場合、入力は機能しません(無効)ので、関数にラップされている次のソースを使用します。

function f(c)
  a="abcdefghijklmnopqrstuvwyz"
  print(not c:find"%a"and c or c:find"%u"and a:upper()or a)
end

print(f("\""))
print(f("a"))
print(f("Q"))

Luaでアルファベットを生成する短い方法見つけられなかったのはあなただけではありません。:(
マナトワーク

@manatwork haha​​、まったく同じことですが、印刷する必要はありませんでしたが、連結する必要があります^^。少なくとも、それは私がそれを行うのを知らなかった隠されたトリックがないことを意味します^^ '。
Katenkyo

c=io.read()a="abcdefghijklmnopqrstuvwyz"a、c = ...の代わりにバイトを保存できます
ATaco

2

Mathematica、75バイト

#/.Thread[Join[a=Alphabet[],b=ToUpperCase@a]->Array[""<>If[#>26,b,a]&,52]]&

ゴルフ以外の言語ではかなり良いスコアです... ToCharacterCodeおよびのコストにより、文字コード処理を使用するソリューションではより多くのバイトが必要になりFromCharacterCodeます。


2

C(関数)、71バイト

f(s,n,c){n=1;if(isalpha(s))s-=s%32-1,n=26;for(c=s;c<s+n;)putchar(c++);}

f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}バイトを保存します。
ケニー

1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}62バイトのために
gastropner

2

Python、81バイト

f=lambda z,a="abcdefghijklmnopqrstuvwxyz":[k for k in[a,a.upper(),z]if z in k][0]

これは基本的に、Pythの回答の翻訳です。f文字として引数を取り、結果を返す関数を定義します。


1
という意味if z in kですか?また、f=デフォルトではオプションです。
xnor

@xnorはい。どうやらCtrl-Cを見逃したようです。
PurkkaKoodari

2
削除しf=、関数を匿名にします。-2
エリックOutgolfer


2

MATLAB:71 68バイト

i=input('');b=i<65|i>122|(i>90&i<97);[i*b,~b*((65:90)+32*(i>96)),'']

(3バイトを節約してくれたOPに感謝)

テスト:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

説明:大文字のアルファベットは65:90ASCII文字を占めます。小文字のアルファベットは97:122ASCIIです。したがって、b=i<65|i>122|(i>90&i<97)入力文字iがアルファベットでないかどうかを確認します。その場合、入力が返されます。b==1and i<97(大文字)の場合、大文字のアルファベットが返されます。b==1およびの場合i>96、32が小文字のアルファベットに65:90対応して追加され97:122ます。


いいね。2つのコメント:i=input('')投稿がスクリプトの場合、または関数の場合は関数の引数として使用するのが一般的@(i)i^2です。i='a'一般に受け入れられません。また、の[1,2,3,'']代わりに行うことで3バイトを節約できますchar([1,2,3])
スティーヴィーグリフィン

編集しました。提案をありがとう!
brainkz

2

SpecBAS、111バイト

私はこれのいくつかのバージョンを経験してきましたが、111は私が管理できる最高のようです。

1 INPUT l$: a$="abcdefghijklmnopqrstuvwxyz"
2  ?IIF$(l$ IN ["a" TO "z","A" TO "Z"],IIF$(l$=UP$ l$,UP$ a$,a$),l$)

行2は、?ショートカットPRINTとネストされたインラインIFステートメントを使用します

擬似コードの説明

IF character IN "a".."z","A".."Z"
THEN
 IF character = UPPERCASE character
 THEN
  print UPPERCASE alphabet
 ELSE
  print alphabet
 ENDIF
ELSE
 print the character
ENDIF

["a" TO "z","A" TO "Z"]擬似コードのように見えるようにすることは、すでに行われていることよりも困難です。"a".."z","A".."Z"少なくとも私の目には「本当のコード」のように見えます...両方とも理解するのはとても簡単です=)
Stewie Griffin

2
スペック ????
バスドロップCumberwubwubwub

2

Swift 2、142バイト

func d(s:String)->String{let a="abcdefghijklmnopqrstuvwxyz";for v in s.utf8{return v>64&&v<91 ?a.uppercaseString:(v>96&&v<123 ?a:s)};return s}

非ゴルフ

func d(s: String) -> String{
    let a="abcdefghijklmnopqrstuvwxyz"
    for v in s.utf8{
        return (
            v > 64 && v < 91 ?
            a.uppercaseString :
            (
                v > 96 && v < 123 ?
                a :
                s
            )
        )
     }
    return s
}

2

05AB1E19 16バイト

-3バイトのおかげで else

DAsåiAëDAusåiAuë

使い方

                   # implicit input
D                  # duplicate
 A                 # push lowercase alphabet
  s                # swap last two elements
   å               # push a in b
    i              # if
     A             # lowercase alphabet
      ë            # else
         D         # duplicate
          Au       # uppercase alphabet
            s      # swap last two elements
             å     # push a in b
              I    # if
               Au  # uppercase alphabet
                 ë # else leave input
                   # implicit print

オンラインでお試しください!


¹答えを投稿したときに(最初の入力)がすでに存在していたかどうかはわかりませんが、2バイトでゴルフをすることができますA¹åiAëAu¹åiAuëオンラインで試すか、スイートをテストします)。
ケビンクルーッセン

2

Java SE 8、71 69バイト

ゴルフ:

(a,s)->{char b=97;if(a<91)b-=32;a=b;b+=26;while(a<b)s+=a++;return s;}

ゴルフをしていない:

(a,s)->{          // String as a parameter. If declaration is necessary it adds 8 bytes
char b = 97;      // Uppercase A char, this is important
if (a < 91)       // If it is not past 'z', where a is a char param
    b -= 32;      // Then go back to the lowercase alphabet
a = b;            // Done to prevent a cast
b += 26;          // End of alphabet
while (a < b)     // Go to end of alphabet
    s += a++;     // Append character
return s;}        // Then return

私はもともと以下を実装していました

String s="";char b=96;if(a-91<0)b-=32;for(char c=b;++c<b+27;)s+=c;return s;

よりエレガントですが、悲しいことに1バイト大きくなります。これは、非アルファ文字の動作が未定義であり、文字列sが実行前に ""に初期化されることを前提としています。優しくしてください、それが私の最初の投稿です。

編集:Stewie Griffinが変更して保存した2バイト

a - 91 < 0 to a < 91

2
サイトへようこそ!:)
DJMcMayhem

1
ありがとう!数年間潜んでいて、競合するJava / C ++の回答を作成できるかどうかに興味があります:)
jfh

1
a<91動作するはずです、または...?
スティーヴィーグリフィン

2

Scala、91文字

(c:Char)=>{var a='a'.to('z').mkString;if(c.isUpper)a=a.toUpperCase;if(!c.isLetter)a=""+c;a}

ゴルフをしていない

def f(c: Char): String = {
    var a='a'.to('z').mkString //set up lower case default response
    if (c.isUpper) {
        a = a.toUpperCase     //mutate the result if upper case
    }        
    if (!c.isLetter) { 
      a = ""+c                 //mutate the result if not a letter
    }
    a                         //return result
}

他のブロックが2つの文字を保存していた場合、3つの異なる不変の値を返すのではなく、最初は可変の結果が得られました。

スカラトニック法

scalaのより良い方法は次のようなものです。

def convertToAlphabet(c: Char): String = {
    c match {
      case x if !x.isLetter => x.toString
      case x if x.isUpper => ('A' to 'Z').mkString
      case _ => ('a' to 'z').mkString
    }
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.