カスタムアルファベットを印刷


20

チャレンジ

コンソール入力から読み取った特定の文字のアルファベットを表示します。文字が大文字の場合、アルファベットを大文字で表示する必要があります。印刷されるアルファベットは、挿入されたアルファベットの前の文字で終わる必要があります。追加のパラメーターが入力(単純なドット.)に追加される場合、アルファベットは各行に1文字ずつ印刷される必要があります。そうでない場合は、アルファベットを同じ行に印刷し、単純なスペースで区切る必要があります。間違った入力がプログラムに送信された場合、何も印刷されません。

入力例:

入力:

c

プログラムの出力:

d e f g h i j k l m n o p q r s t u v w x y z a b

入力

H.

プログラムの出力:

I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G

Sage Notebookは「コンソールレベル」で動作するため、この場合に必要な「コンソール入力」は、ワークシートセルに入力を入力するだけですか?
解像度

最短のコードが勝ちますか?
-ardnew

@ardnewはい、最短のコードが優先されます。
アベロス

@res何らかの方法で入力読み取り値をコーディングする必要があるが、ルールの観点からは公平であると思います。
アベロス

6
@Averroes GolfScriptを使用する場合のペナルティは、この種の競合以外では実際に使用されていない言語を習得するのにかかる時間です。仕事に適切なツールを使用したことに対して人々を罰することは、非常に生産的だとは思わない。
ガレス

回答:


12

GolfScript 48 75 73 70 67 66 63 57 53

(91,65>.+.{32+}%+.@?>(;25<''+.,1>*\['''.']?[' 'n 0]=*

オンラインデモ:

更新:

これで、最後のルールも実装されました。問題を指摘してくれたVenteroに感謝します。

更新:

コードをゼロから書き直し、さらに短縮する新しい方法を見つけました。

変更の履歴:

.,3<\(:x;:§['''.']?)and{91,65>.+.{32+}%+.x?).{>25<''+{§n' 'if}%}{;;}if}''if
.,3<\(:x;:§['''.']?)*{91,65>.+.{32+}%+.x?).{>25<''+{§n' 'if}%}{;;}if}''if
.,3<\(:x;:§['''.']?)*{91,65>.+.{32+}%+.x?).!!@@>25<''+{§n' 'if}%*}''if
.,3<\(:x;:§['''.']?)*!!91,65>.+.{32+}%+.x?).!!@@>25<''+{§n' 'if}%**
.,3<\(:x;:§['''.']?)*91,65>.+.{32+}%+.x?).@@>25<''+{§n' 'if}%@@*!!* 
.(@,3<@:§['''.']?)*91,65>.+.{32+}%+@1$?).@@>25<''+{§n' 'if}%@@*!!*
.(@,3<@:§['''.']?)*91,65>.+.{32+}%+@1$?):x>25<''+{§n' 'if}%\x*!!*
.(@,3<@:§['''.']?)*91,65>.+.{32+}%+@1$?):x>25<''n' 'if*\x*!!*
(\:§['''.']?)91,65>.+.{32+}%+@1$?):x>25<''n' 'if*\x*!!*
(91,65>.+.{32+}%+.@?>(;25<''+.,1>*\['''.']?[' 'n 0]=* 

2
このソリューションは、最後の要件を満たしていませんIf wrong input is send to the program it will not print anything.
。– Ventero

@Venteroそう。これを修正します。
クリスチャンルパスク

63-ナイス、私たちはhead2headです:)、golfscriptを理解できたらいいのに;)
bua

Q.すばらしい仕事です!;-)
クリスチャンルパスク

+1すごい!喜んで50を破ります;-)?
ブア

10

C、135 129 128文字

くそ、非常に多くの異なるマジックナンバーが、それらを取り除く方法はありません。

入力をプログラムパラメーターとして実行する必要があります。「間違った入力」の要件に従います。

c;main(a,b)char**b;{if(a==2&&isalpha(**++b)&&!(c=1[*b])||c==46&&!2[*b])for(;++a<28;)printf("%c%c",**b-=**b+6&31?-1:25,c?10:32);}

説明:

c;                   // Variable that will be used later
main(a,b)char**b;{   // There's one parameter => a = 2, b[1] = the parameter
                     // Wrong input checks: We want...
  if(
     a==2 &&         // 1 parameter and ...
     isalpha(**++b)  // lower- or uppercase letter as parameter,
                     // increase b so we can access it better
     &&              // and ...
     !(c=1[*b]) ||   //   either no further character,
                     //     save the character in c, or...
     (c==46&&!2[*b]) //   a dot as next character and no further characters
    )                // if check succeeded, execute the for loop, else do nothing
  for(;++a<28;)      // This will loop 26 times (2..27)
    printf("%c%c",   // Print two characters
                     // First character to print:
      **b            // We'll print the first character of the parameter,
       -=            // but decrement it before printing
       **b+6&31?     // if the last five bits (31 = 11111b) are not 26 (6 == -26 mod 32)
        -1           //   decrement it by -1 (aka increment it)
        :25,         //   else (char=z/Z) decrement by 25, so we start over at a/A
                     // Second character to print:
      c?             // c is either ASCII 0 or a dot (ASCII 46)
       10            //   dot     -> print a newline
       :32);         //   ASCII 0 -> print a space (ASCII 32)
}

この**b+6&31部分では、最後の5ビットのみを調べ、残りの5ビットが1..26の範囲にある場合、小文字/大文字のASCIIコードは同じであるという事実を使用しています。

「間違った入力」要件のないバージョン(82文字):

main(a,b)char**b;{for(b++;++a<28;)printf("%c%c",**b-=**b+6&31?-1:25,1[*b]?10:32);}

コンパイル方法に関する指示はありますか?実行中にセグメンテーション違反が発生します。
マナトワーク

@manatworkは入力をパラメーターとして受け取るようです。
塩奈

はい、確かに、明確にするために編集しました。たとえば、プログラム名がの場合はtesttest cまたはtest X.
-schnaader

ありがとう、わかった。私のCは思ったより錆びているようです。
マナトワーク

2
K&R定義スタイルは次のことに役立ちますmain(a,b)char**b;{。また、-> と-> b++を置き換えることができます。*b[1]**bb[1][1]1[*b]
-ugoren

7

ルビー、72 71 61文字

gets;25.times{$><<$_=$_.succ[0]+=$1?$/:' '}if~/^[a-z](\.)?$/i

このrubyバージョンは、正規表現を使用して入力を検証します。幸いなことに、Rubyの文字列メソッドsuccは(ラップアラウンドを含む)ほとんどの作業を行います。

編集:chronVenteroの助けを借りて61文字。


私のものはあなたのものとあまりにも似通っており、別々に投稿することを気にしませんでした。同じアプローチですが、数文字短く(65):c=gets[0];25.times{$><<c.next![-1]+($1?$/:' ')}if~/^[a-z](\.)?$/i
ポール・プレスティッジ

2
そしてこれは62です:gets;25.times{$><<$_=$_.next[0]+($1?$/:' ')}if~/^[a-z](\.)?$/i-基本的にあなたのちょうど虐待$_と同じ$/
ポールPrestidge

2
@chron:の+=代わりにを使用して+、括弧をドロップできます$1?$/:' '
-Ventero

@chron and Ventero:ありがとう。私のソリューションにコードを追加しました。
ハワード

6

ルビー:127 113 92(?)文字

(使用時のペナルティスコアに関するルールが見つかりません-p。今のところ1を追加しました。間違っている場合は修正してください。)

$_=if ~/^([a-z])(\.)?$/i;s,e=$1>?Z?[?a,?z]:[?A,?Z];[*$1.succ..e,*s...$1]*($2==?.?$/:" ")end

サンプル実行:

bash-4.2$ ruby -pe '$_=if ~/^([a-z])(\.)?$/i;s,e=$1>?Z?[?a,?z]:[?A,?Z];[*$1.succ..e,*s...$1]*($2==?.?$/:" ")end' <<< c
d e f g h i j k l m n o p q r s t u v w x y z a b

bash-4.2$ ruby -pe '$_=if ~/^([a-z])(\.)?$/i;s,e=$1>?Z?[?a,?z]:[?A,?Z];[*$1.succ..e,*s...$1]*($2==?.?$/:" ")end' <<< H.
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G

bash-4.2$ ruby -pe '$_=if ~/^([a-z])(\.)?$/i;s,e=$1>?Z?[?a,?z]:[?A,?Z];[*$1.succ..e,*s...$1]*($2==?.?$/:" ")end' <<< seven


6

GolfScript、80 72文字

.).46={;)}*25,{65+.32+}%?)\""=*!!\([{)..31&26-!26*-}25*;]n+\"."=n" "if**

多くのコードは、有効な入力と「何も印刷しない」オプションをテストしています。実際のロジックは37文字のみです。

オンラインのテストケース


6

q / k4 66 64 63 60 58 56 + 2ペナルティ

グローバル変数initのペナルティ。アルゴリズムは次のように56です。

56:

if[&/x in".",l:(a;A)90>*x;1@/1_,/|_[0,l?x;l,'"  \n"@#x]]

58:

if[&/x in".",l:(a;A)90>*x;1@/(1_,/|_[0,l?x;l]),'"  \n"@#x]
  • if-elseからコードの再編成と「;」の削除が許可されている場合に変更します。最後に

60:

1@/$[&/x in".",l:(a;A)90>*x;1_,/|_[0,l?x;l];" "],'"  \n"@#x;
  • 最終的にこの冗長なチェックを取り除きました

63:

1@/$[&/x in".",l:(a;A)90>*x;1_,/|_[0,l?x;l];" "],'" \n""."in x; 
  • オブジェクト全体ではなく、再帰的に文字を出力します
  • それでも、「。」でアイデンティティ比較xを取得することはできません2か所で... :(
  • 最後にセミコロンが必要です。そうでない場合、印刷関数(1 @)は戻り値を標準出力に出力します。

64:

2@,/$[&/x in".",l:(a;A)90>*x;1_,/|_[0,l?x;l];" "],'" \n""."in x;  

編集:

グローバル初期化(x :)に2のペナルティを追加しました。ブラケットに関数をラップする場合と同じです(スラックウェアが示唆したように)
名前空間の変更も同様に罰せられるべきかどうかがわかりません...それからもう3つです

(.Q`a`A) instead of (a;A)

例:

q)\         - switch interpreter to k4
 \d .Q     - change to native namespace
  x:"c"
  if[&/x in".",l:(a;A)90>*x;1@/1_,/|_[0,l?x;l,'"  \n"@#x]]
d e f g h i j k l m n o p q r s t u v w x y z a b

  x:"@"
  if[&/x in".",l:(a;A)90>*x;1@/1_,/|_[0,l?x;l,'"  \n"@#x]]    
  x:"H."
  if[&/x in".",l:(a;A)90>*x;1@/1_,/|_[0,l?x;l,'"  \n"@#x]]
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
  x:...

+1すてきな進歩。ここで、コードを短縮する別の方法を見つけようとします。
クリスチャンルパスク

qkの定義を使用している場合、実際に有効なkと呼ぶことができますか?;-)また、関数でラップする場合、x: "a"セットアップ手順をスキップできます。例:{$ [...]}
skeevey

@slackwearあなたは正しい、それがq / k4と呼ばれる理由です;-)。
ブア

6

Perl、131 127 117 112 106 104 102 98 96 92 91 90 93 71 66 65 64 58文字

s!^([a-z])(\.?)$!print chop,$2?$/:$"for($1..az)[1..25]!ie

使用法:

perl -ne 's!^([a-z])(\.?)$!print chop,$2?$/:$"for($1..az)[1..25]!ie'

nオプションのカウントに1文字が追加されました。

最大のカットは++ジョンパーディの回答でのオンキャラクターの動作を見るためにのみ可能でした。


最後の2つのセミコロンを削除することにより、いくつかの文字を削ることができます
-ardnew

@ardnewありがとう。:
ガレス

1
このことは印象的です
-bua

ありがとうございます :
ガレス

s/a.$1/az/さらに2つ保存します。chop().($2?$/:$")-> chop,$2?$/:$"さらに4人
暴徒

5

Perlの、149、167

更新

  • 健全性チェックを追加しました。
  • セパレーターアプリケーションについての最新の提案を受けました。
exit if $ARGV[0] !~ /[a-z]\.?/i;    # sanity check input
($x,$d)=split //,$ARGV[0];          # split input arguments
@l=65..90;                          # define uc letter range
push @l,splice @l,0,ord(uc $x)-64;  # rotate letter range
pop @l;                             # remove the argument letter
print join $d?$/:$",                # print the joined list
  map {ord($x)>90?lc chr:chr} @l;   # map chr and lc as appropriate

あなたは置き換えることができます$s=($d)?"\n":" ";$s=$d?$/:$";、多分ちょうど取り払う$s完全
ardnew

4

Python、83

r=raw_input()
i=ord(r[0])
exec"i+=1-26*(i%%32>25);print chr(i)%s;"%","["."in r:]*26

私はこの制限のファンではありませんが、それは存在し、あなたのプログラムはそれに従いません:「間違った入力がプログラムに送られた場合、何も印刷しません。」
マット

また、1文字を必要以上に印刷するように見えます。出力例は25文字です。
マット

4

PHP、 120 119 113

<?$v=fgets(STDIN);$f=$c=$v[0];ctype_alpha($c++)||die;for(;$c[0]!=$f;$c=$c[0],$c++)echo$c[0],$v[1]=='.'?"\n":" ";

1
これはコードとゴルフの課題なので、速度とリソース使用の最適化は必要ありません。$v[1]=='.'?"\n":" "の結果を変数$ s に保存する代わりに、echoステートメントで毎回PHPに計算させます。そうすれば、6文字を節約できます。
マナトワーク

1
@manatworkありがとう、変更しました。
lortabac

4

Mathematicaの158 159 204 199 183 167 165 162

コード

f@h_ := Most@RotateLeft[#, Position[#, h][[1, 1]]] &[FromCharacterCode /@ 
        (65~Range~90 + 32 Boole@LowerCaseQ@h)];
g = Characters@# /. {{p_} :> Row[f@p, " "], {p_, "."} :> Column@f@p, _ -> ""} &

使用法

g["c"]
g["H"]
g["H."]
g["seven"]

usage


3番目の使用例は、f ["H"]またはf ["H。"]?です。
アベロス

「。」の処理を修正して、コードに50文字を追加する必要がありました。しかし、現在の指示に従って動作します
-DavidC

3

J 43

|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0

例:

|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0 's'

tuvwxyzabcdefghijklmn opqr

|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0 's.'

t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r

|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0 '['

このソリューションは、Jプログラミングフォーラムで進化しました:http : //jsoftware.com/pipermail/programming/2012-August/029072.html

著者:AlvordBossCerovskiCyrEllerHuiLambertMcCormickMillerQuintanaSchottSherlockTaylorTherriault

説明

Jフレーズは右側から実行され、進行中の結果が評価されると左側に渡されます。インタラクティブであるため、ソリューションの各部分を個別に見て、理解を深めることができます。

中間部分は、Unicodeで大文字と小文字のアルファベットを生成します。

   u:,2#65 97+/i.26
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

「u:」動詞は、数値の右引数をUnicode文字に変換します。数値引数は、「i.26」によって生成される0〜25の値に「A」と「a」の数値をそれぞれ加算することにより、大文字と小文字のASCII値から生成されます。

   65 97+/i.26
65 66 67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

右側の部分、

   ((>:@i.}.[)])"0

左([)-上にある文字のベクトルである-の右引数(])の位置を検索(i。)し、その数よりもう1つ(>:)をドロップ(}。)します。'"0'は、このフレーズを0次元(スカラー)引数に適用します。

   ('123H999' (>:@i.}.[)])"0 'H'
999

「25 {。」フレーズは、右側のベクトルの最初の25要素を取ります。

左側の最後から2番めのフレーズ「1j1#」は、左側の数字に従って右側の引数を複製します。単純な数は単純な複製を行います:

   2 # 'ABCD'
AABBCCDD

ただし、実数部と虚数部の間の「j」で示される複素数は、虚数部に応じて塗りつぶし要素を挿入します。ここでは、「j」の右側にある要素によって、1つのフィル要素を示します。

   2j1 # 'ABCD'
AA BB CC DD 

ほとんどのJプリミティブと同様に、レプリケート動詞(#)は、数値配列で機能し、文字配列で機能する方法と類似しています。ここに示すように、

   1j1 # 1 2 3
1 0 2 0 3 0

デフォルトの数値塗りつぶし要素はゼロであるのに対して、文字の場合はスペース文字です。

最後に、左端のトークン "|:"は、先行する動詞の結果を右に置き換えます。

デボンマコーミックが提供する説明。デボンありがとうございます。


+1本当に素晴らしい解決策と説明。Jで試すことを検討しましたが、入力が有効であることを確認する良い方法(短い方法)がわかりませんでした。私はこれが少なくとも2倍の長さだったと思います。
ガレス

Garethに感謝します。ディスカッションリンクの初期のソリューションを見ると、開始の多くが長かったことがわかります。我々が発見きちんとことの一つは、我々はJ.歓声、ボブで使用できることを、様々なアプローチだった
ボブtherriault

3

Brainfuck、303

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

現在、このIf wrong input is send to the program it will not print anything部分はサポートされておらず、おそらくより短くなる可能性があります。後で修正する予定です。現在、私の脳はあまりにも**** edで続行できません。


2

C、110

文字の間に「スペース」を印刷することもあれば、印刷しないこともあります。

i,j;main(int c,char*l){gets(l);l[1]&=10;j=*l%32;c=*l&~31;for(i=j;i<j+25;i++){l[0]=c+i%26+1;printf("%2s",l);}}

少し読みやすい:

i,j;
main(int c,char*l)
{
  gets(l);
  l[1]&=10;          // makes . to line feed and some other chars to "start of text" 
                     // which looks like space in some cases 
                     // (the byte can become either 0, 2, 8 or 10)

  j=*l%32;           // 0b 000c cccc, these five bits code which letter was chosen
  c=*l&~31;          // 0b ccc0 0000, these three bits code upper/lowercase

                     // 0b ccc0 0000 + (0b 000c cccc + [0..24])%26 + 1
  for(i=j;i<j+25;i++){l[0]=c+i%26+1;printf("%2s",l);}
}

実行:

$ ./a.out
G
 H I J K L M N O P Q R S T U V W X Y Z A B C D E F

$ ./a.out
p.
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o

2

JavaScript、137

残念ながら、少し冗長です(String.fromCharCodeおよびcharCodeAt)。

for(x=b=(n=prompt(m={122:97,90:65})).charCodeAt(r='');/^[a-z]\.?$/i.test(n)&&(x=m[x]||x+1)!=b;)r+=String.fromCharCode(x)+(n[1]?"\n":" ");

2

Perl、 77 76 70 68

chomp(($a,$b)=split//,<>);$"=$/if$b;map{++$a=~/(.)$/}1..25;print"@a"

編集:

  1. の代わりに正規表現を使用して文字を保存しましたsubstr

  2. map代わりに6文字を保存しましたfor

  3. 最終改行を省略して2文字を保存しました。


3
いいですが、あなたが指摘したように、無効な入力は出力を与えないという要件を満たしていません。それを修正すれば、あなたは私の賛成を得ます。
ガレス

perl 5.14.2では動作しないようです。また、私は信じてはいけない\n、あなたの決勝では、printカップルの文字保存されますこれは、必要とされる
ardnew

@ardnew:5.12.3を搭載した仕事用コンピューターで作成しました。を殺します\n、ありがとう。
ジョンパーディ

2

R、219

longい、長い...まだ動作します。

f=function(l){if(!nchar(l)%in%c(1,2))invisible()else{s=ifelse(nchar(l)==1," ","\n");l=substr(l,1,1);v=letters;if(l%in%v){}else v=LETTERS;l=grep(l,v);if(l==26)cat(v[1:25],sep=s)else cat(c(v[l+1:(26-l)],v[1:l-1]),sep=s)}}

使用法:

f("a")
f("c.")
f("H")
f("z")
f("Z.")
f("seven")

2

C、146文字(ひどい)

main(){char b[100];gets(b);for(char a=b[0],c=a,d=a&223,e=b[1];++c!=a&64<d&d<91&(!e|e==46&!b[2]);(c&31)>26?(c&=96):(putchar(c),putchar(e?10:32)));}

私はCであまり経験していないので、おそらく...を示しています。しかし、ここで私の試みを残します。改善を提案してください。

縮小版:

main() {
  char b[999]; // assume that the line will fit in 999 chars...
  gets(b);

  // a is the char we start on, c is the char that we iterate,
  // d is toUppercase(a), e is just an alias for the second char.
  for (char a = b[0], c = a, d = a&223, e=b[1];
      // increment c, make sure that we haven't reached a yet.
      // also check the other conditions (first char is letter, second char
      // is either '.' or NULL, third char is NULL if second char was '.').
      ++c != a & 64 < d & d < 91 & (!e | e == 46 & !b[2]);
      (c&31) > 26     // check if we need to wrap around
        ? (c &= 96)   // if so, wrap
        : (putchar(c), putchar(e?10:32))  // otherwise, print char & separator
  );
}

2

VBA 225

イミディエイトウィンドウから実行するようにフォーマット:

s=InputBox(""):n=Asc(Left(s,1)):l=Len(s):p=IIf(l<3,IIf(l=2,IIf(Right(s,1)=".",vbCr,"")," "),""):c=IIf(n>64 And n<91,65,IIf(n>96 And n<123,97,99)):o=n-c+1:If o>0 And p<>"" Then For i=o To o+24:x=x & Chr(i Mod 26+c) & p:Next:?x

個々の行に分割されます(Subブロックで囲む必要がありprint、モジュール内で動作するために別のメソッドが必要であるため、コードが長くなります)。

s=InputBox("")
n=Asc(Left(s,1))
l=Len(s)
p=IIf(l<3,IIf(l=2,IIf(Right(s,1)=".",vbCr,"")," "),"")    
c=IIf(n>64 And n<91,65,IIf(n>96 And n<123,97,99))
o=n-c+1
If o>0 And p<>"" Then 
For i=o To o+24
x=x & Chr(i Mod 26+c) & p
Next
End If 'Not needed when completed in single line format
MsgBox x

2

Java 8、127バイト

a->{String r="",d=a.length>1?"\n":" ";char c=a[0],C=c;for(;++c<(c<97?91:123);r+=c+d);for(c=C<97?64:'`';++c<C;r+=c+d);return r;}

説明:

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

a->{                        // Method with character-array parameter and String return-type
  String r="",              //  Result-String, starting empty
         d=a.length>1?      //  If the length of the input is larger than 1
            "\n"            //   Set the delimiter to a new-line
           :                //  Else:
            " ";            //   Set the delimiter to a space
  char c=a[0],              //  Get the input letter
       C=c;                 //  And create a copy of it
  for(;++c<(c<97?91:123);   //  Loop from this letter + 1 to (and including) 'Z'/'z'
    r+=c+d);                //   And append the result with a letter + the delimiter
  for(c=C<97?64:'`';++c<C;  //  Loop again from 'A'/'a' to (and excluding) the input-letter
    r+=c+d);                //   And append the result with a letter + the delimiter
  return r;}                //  Return the result

1

おたふく風邪、91868279、76

r t i t?1A.1"." s a=$A(t),p=a>90*32+65 f i=1:1:25 w *(a+i-p#26+p) w:t["." !

そんな現代的な言語ではありません;)最適化のスペースが少し残っていると確信しています。

説明:

r t 

入力を読む

i t?1A.1"."

tが必要な入力と一致するかどうかを確認します

s a=$A(t),p=a>90*32+65 f i=1:1:25 { w *(a+i-p#26+p) w:t["." !}

アルファベットの基本的なforループ。ムンプスは厳密に左から右に評価していることに注意してください。True = 1、pの結果として65または97を取得します。#はモジュロ演算子です

テスト:

USER>d ^golf
d.e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c

USER>d ^golf
tuvwxyzabcdefghijklmnopqrs
USER>d ^golf
h.i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g

USER>d ^golf
hallo
USER>

(これを実行するには、mumpsランタイムenv、つまりCachéが必要です)

編集:太字の見出し

編集:間違った解決策がありましたが、今は修正されました。これを指摘してくれたrtfsとAverroeesに感謝します


コードは、ない80の長さの79個の文字のように見える
クリスティアンLupascu

残念ながら、最初のスペースはオプションではないので、数える必要があると思いました
。-風間

テストケースは、パラメータとして渡されたものの前の文字で終わりませんか?
アベロス

1

JavaScript:141

c="",b=c[0].charCodeAt()<91,a="abcdefghijklmnopqrstuvwxyz",b&&(a=a.toUpperCase()),a=a.split(c[0]),a=a[1]+a[0],a=c[1]?a.split("").join("\n"):a

コメント版:

c="", //write input here (examples "a", "B", "c.", "D.")
b=c[0].charCodeAt()<91, //true for upperC, false for lowerC
a="abcdefghijklmnopqrstuvwxyz", //the abc
b&&(a=a.toUpperCase()), //if upper, turn main string to upperC
a=a.split(c[0]), //split by the first char of input
a=a[1]+a[0], //swap the two parts
a=c[1]?a.split("").join("\n"):a //if input second char, add breaklines in between
//the output is inside 'a'

jsFiddleデモ


0

これがAPLでの最初の試みです。

⍞{1 1≡(2⌈⍴⍺)⍴⍺∊'.',⍵:⊃(~=/2⍴⍺)⌷(,X,' ')(X←25 1⍴1↓(X⍳⊃⍺)⌽X←(⎕A∊⍨⊃⍺)⌷2 26⍴⍵)}6↓26⌽⎕UCS 65+⍳58

単一のグローバル変数を使用できる場合A←2 26⍴6↓26⌽⎕UCS 65+⍳58、上記を次のように短縮できます。

{1 1≡(2⌈⍴⍵)⍴⍵∊'.',,A:⊃(~=/2⍴⍵)⌷(,X,' ')(X←25 1⍴1↓(X⍳⊃⍵)⌽X←(⎕A∊⍨⊃⍵)⌷A)}⍞

0

C ++ 11

#include <iostream>
#include <vector>
#include <cstdio>

int main(int argc, const char * argv[])
{
    std::vector<char> list1,list2;
    for( char c = 'a'; c <='z'; c++ )
    {
        list1.push_back( c );
        list2.push_back( toupper( c ) );
    }
    char c = getchar();
    auto f = [ c ]( std::vector<char> list )
    {
        auto i = std::find( list.begin(), list.end(), c );
        if( i == list.end() )
            return;
        auto c = i;
        for( ;; )
        {
            c++;
            if( c == list.end() ) c = list.begin();
            if( c == i )break;
            std::cout<<*c<<"\n";
        }
    };
    f( list1 );f(list2);
    return 0;
}

0

C(111)

main(int i, char**c){if(isalpha(*c[1]))for(i=0;i<25;i++) printf("%c",isalpha((*c[1])+1)?++*c[1]:(*c[1]-=25));}

解剖

if(isalpha(*c[1])) // start with char-check.

for(i=0;i<25;i++) // we need 25 values, excluding input char. reusing i.

printf("%c", // print char. ofcourse.

isalpha((*c[1])+1) ? ++*c[1] : (*c[1]-=25)); 
//check if we are past z/Z and fall back to a/A. 
//make that available to print. 

Works] $ ./test 5

Works] $ ./test W XYZABCDEFGHIJKLMNOPQRSTUV

Works] $ ./test M NOPQRSTUVWXYZABCDEFGHIJKL

Works] $ ./test g hijklmnopqrstuvwxyzabcdef

Works] $ ./test [

Works] $ ./bcdefghijklmnopqrstuvwxyzをテスト

Works] $ ./test Z ABCDEFGHIJKLMNOPQRSTUVWXY


何か考えてくれてありがとう。


「。」の場合、改行を追加していません。与えられます。また、[A-Za-z]\.?質問が正解であれば、入力がでない場合は何も出力しないでください。
マリナス

#1。ああ!コードを短くすることに夢中になりました。「test [」の出力を参照してください。何も出力されません。@marinus
essbeev

0

Perl、226文字

die "Invalid input " if $ARGV[0] !~ /[a-z]\.?/i;
@listA=(a...z);
$index=ord(lc(substr($ARGV[0],0,1)))-97;
print join(substr($ARGV[0],1) ? "\n" : " ",map{$ARGV[0] =~ /[A-Z]/?uc $_:$_}(@listA[$index+1...25],@listA[0...$index]));

テキストをフォーマットして、コードブロックとして表示できます。投稿のフォーマットについては、こちらのガイドをご覧ください。また、1文字の変数名を使用して一部の文字を保存できます。
ガレス

1
無効な入力では何も印刷されないため、dieステートメントを削減して束を節約できます
...-Gaffi

0

C#170

using System.Linq;namespace N{class P{static void Main(string[]a){foreach(char e in"abcdefghijklmnopqrstuvwxyz".ToCharArray().Where(o =>o>'c'))System.Console.Write(e);}}}

非圧縮

using System.Linq;
namespace N {
    class P {
        static void Main(string[]a){
            foreach (char e in "abcdefghijklmnopqrstuvwxyz".ToCharArray().Where(o => o > 'c'))
                System.Console.Write(e);
        }
    }
}

答えに説明を追加することを忘れないでください。
ジャスティン14

このプログラムは、ルールでプレイしようとすることすらありません。1:文字が大文字の場合、アルファベットを大文字で表示する必要があります。2:印刷されるアルファベットは、挿入されたアルファベットの前の文字で終わる必要があります。3:追加のパラメーターが入力(単純なドット。)に追加される場合、アルファベットは各行に1文字印刷される必要があります。そうでない場合は、アルファベットを同じ行に印刷し、単純なスペースで区切る必要があります。4:間違った入力がプログラムに送信された場合、何も印刷されません。これは4アウト4ミスです。
RobIII 14

^それ以外には、ここで以前のコメントを見てください。スコアの1ポイントに置き換えcharvarシェービングし、ルーズ.ToCharArray()(a string すでに反復処理可能なchar配列です!)、string[] aコマンドライン引数を処理していないために失い、ネームスペースを失います、定数 'c'コンソール入力から読み取って、アルファベット文字列を失い、代わりにASCIIを使用するなど。あなたの提出物のほとんどはトローリングのみのようです。
RobIII 14


0

バッシュ:110バイト

(([[ $1 =~ [a-z] ]]&&echo {a..z})||([[ $1 =~ [A-Z] ]]&&echo {A..Z}))|([ "${1:1:1}" = . ]&&sed 's/ /\n/g'||cat)

説明の面では、それは非常に簡単であり、魔法のトリックはありません-これは、bashが本質的に適しているものです。非自明な点に関して:

  • {a..z}bashでは非常に使われていないトリックです-それはに拡張しa b c d...ます。同じことを実行して、数値シーケンスを生成できます。
  • Bashは正規表現マッチングを[[ $1 =~ [a-z] ]]実行でき、aからzまでの文字の最初のプログラム引数に対して正規表現マッチングを実行します。AZも同様です。あなたはそれのために二重角括弧が必要ですが、それは[できません。
  • ${1:1:1}$ 1の部分文字列(最初の引数)、1文字、1文字の長さを取得します-つまり、文字列の2番目の文字を返します.
  • sed 's/ /\n/g'単純な正規表現:スペースを検索して改行で置き換えます。もし.、この、またはそれ以外の文字列、我々のパイプ入力の2番目の文字は...
  • cat ここで最後のトリックです。スペースを改行で置き換えたくない場合は、代わりにstdinをcatに送ります。

説明を追加することを忘れないでください。
ジャスティン14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.