各母音を使用せずにアルファベットを印刷する


72

インスピレーション:1939年、アーネストヴィンセントライトという名前の男が「e」という文字を使わずにギャズビーという小説を書きました。

あなたの仕事は、アルファベットの26文字すべてを順番に出力するために、(5つまでの)プログラムのセットを任意の言語(テキストベースのシンタックス*)で書くことです。ただし、各母音aeiouについては、少なくとも1つのプログラムに母音の出現を含めてはなりません。

だからあるに違いない

  • プログラムの構文のどこでも「a」または「A」を使用しないプログラム。
  • プログラムの構文のどこでも' e 'または ' E 'を使用しないプログラム。
  • プログラムの構文のどこでも「i」または「I」を使用しないプログラム。
  • プログラムの構文のどこでも' o 'または ' O 'を使用しないプログラム。
  • プログラムの構文のどこでも「u」または「U」を使用しないプログラム。

それらはすべて出力する必要がありますabcdefghijklmnopqrstuvwxyz

勝者は、すべてのプログラムの長さが最短のソリューションとなります。

*制約は、PietまたはWhitespaceでの課題ではないため


現在のランキング(2014年3月6日):


4
@ w0lf:いいえ、「最大5つのプログラム」と「すべてのプログラムの長さ」と表示されますが、「この場合、プログラムは1つだけで、長さはカウントできます」と読みました。
シュナダー

9
@PeterTaylor:構文で母音を使用することを避ける必要はないと思いますか?JSプログラマーとしては、特に興味深いです:)
mellamokb

2
出力で改行を使用できますか(つまり、文字ごとに1つ)。その場合、コードの一部を短縮できます
...-Gaffi

2
大文字の出力は許可されていますか?
エリックアウトゴルファー

2
私はOPです。大文字は使用できません。
shamp00

回答:


48

Golfscript-8文字

123,97>+

8
いまいましい、本当に...簡潔の面でgolfscriptを打つことができない
パトリックOscity

18
そうは言っても、読みやすさはおかしくなります。
アンドリューグレー

5
それほど悪くはありません;)123個の数字のリストを生成し、97より大きくない人を削除し、それを文字列に強制します(数字の配列)。
マッケイ14年

3
91,65>+代わりに使用してください。
エリックアウトゴルファー


23

PHP、31バイト

いいえ、e、i、o、u:

<?=~žœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…;

チルダの後のバイナリ文字列には、次の16進表現があります。

\x9e\x9d\x9c\x9b\x9a\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8f\x8e\x8d\x8c\x8b\x8a\x89\x88\x87\x86\x85

言語スコアボードがあるので、私もこれを提出することができます:

Ruby(v1.8)18バイト

$><<[*97.chr..'z']

これがどのように機能するのか理解していない。説明を頂けますか?
ラマ氏

文字列に適用される場合、〜演算子はすべてのビットを反転します。ここで、abc ... xyzを反転しました。バイナリ文字列には記号文字(または空白)がないため、引用符も必要ありません。
プリモ

1
そこにあるもののエンコードを指定することもできます。
ジョーイ

1
iso-8859-1。3つの「印刷できない」文字が投稿されたときに削除されたため、ヘックスを含めました。
-primo

2
素晴らしく、おそらく最短のPHPバージョン。ファイルを生成するコマンド:php -r 'echo("<?=~\x9e\x9d\x9c\x9b\x9a\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8f\x8e\x8d\x8c\x8b\x8a\x89\x88\x87\x86\x85;");' > script.php。実行するコマンド:php -d error_reporting=0 script.php; echo
axiac

16

ルビー(24 22)

編集:括弧は省略できますが、2文字以下です:

$><<'%c'*26%[*97..122]

Rubyの24文字:

$><<('%c'*26)%[*97..122]

使い方

$>別名です$stdoutSTDOUT<<演算子を使用してそれに書き込むことができます。この用語'%c'*26は、文字列を'%c'26回繰り返します。%オペレータがエイリアスとして文字列で定義されているsprintfので、str % val書き込みに相当しますsprintf(str,val)。フォーマット文字%cは、char値をcharに変換するために使用されます。これらの値から[*97..122]、97〜122の値を含む配列が作成されます。


非常に素晴らしい。使い方を探していました<<が、忘れていました$>
マークリード

1
$>以前は知りませんでしたが、だれも$stdout思い出せないために、ドル変数のエイリアスが必要だと思いました:)
パトリックオスシティ

21文字:($><<[*"`".."z"][1,26]注:これはRuby 1.8でのみ機能します)
-Ventero

@VenteroはRuby 1.8だけでなく、Ruby 1.9.2でも機能します。しかし、p [*"".." z "] [1,26]`を使用すると、さらに短くなります。
Hauleth

@Hauleth:いいえ、1.9で実行すると正しい出力が生成されません。1.9は1.9 Array#to_sと同じですが、Array#inspect1.8ではArray#join1.9であるため、1.9では出力がの["a", "b", "c", "d", "e", ...]代わりになりabcdef...ます。同じ理由で、p使用できません(のinspect代わりに引数を呼び出しますto_s)。
ヴェンテロ

16

パイス、1キャラクター

G

Pythは特定の変数を事前定義します。Gは、小文字のアルファベットとして事前定義されています。また、Pythは各行を妥当な戻り値で暗黙的に印刷します。


3
忍者は3年で私を…
スタン・ストラム

15

JavaScript(100)

「aeou」なし:

this['\x61l\x65rt']('\x61bcd\x65fghijklmn\x6fpqrst\x75vwxyz')

いいえ 'i':

alert('abcdefgh\x69jklmnopqrstuvwxyz')

+1私の答えの素晴らしい改善:)私は\x##コードの使用を考えていましたが、それらがJavaScriptで有効であるかどうかはわかりませんでした。
mellamokb

なぜアラートが発生するのですか?js端末では、オブジェクトは自動的にエコーされます。( '\ x61bcd \ x65fghijklmn \ x6fpqrst \ x75vwxyz')@ 42文字。
antony.trupe

3
@ antony.trupe、コードゴルフの場合、IOは通常、言語に組み込まれたIOメカニズム(または一般的なプラグイン)を介して行われます。JSについては、これは一般的であるalertconfirmpromptconsole.log、とdocument.write。文字列リテラルを宣言するだけでは、実行時に出力として生成されません。そうでなければ、あなたは正しいだろうし、私はそれを使っていただろう。
zzzzBov

google chromeコンソールで出力を生成します(とにかく使用しています)が、問題を認めています。そもそも任意の制限です。
-antony.trupe

@ antony.trupe、PHPのような言語では、リテラルを使用して逃げることができます。これがIOを実行する方法だからです。
zzzzBov

15

K、9

_26#.Q.b6

K、10

"c"$97+!26

K、14

.:".Q.","c"$97

2
そして、まったく文字を使わずにそれを行う愚かな方法(12文字):(@$`)$97+!26
アーロンデイヴィス14年

1
K5の方法はほぼ2番目のソリューションですが$、文字列ではなくシンボルを使用して、次のように変換された型を制御します。 `c $ 97 +!26
JohnE

15

J、26 23 17 16文字

時間かそこらはJの下着の引き出しの中を臨検した後、私は最終的に排除する方法見つけたa.u:動詞を。

2(3!:4)96+#\26$1

以前:

a.{~96++/\26$1
u:97+i.26

randomra#\トリックのおかげで。


いい解決策!の#\ 代わりにを使用して1文字で短縮できました+/\
randomra

5
下着の引き出しから出てください
ジョー14

14

R、17 + 19 = 36文字

なし(17):

intToUtf8(97:122)

のいおう(19):

cat(letters,sep="")

12

バッシュ(38)

母音はまったくありません。

/*/*/*ntf "/*/?ch? {\x61..z}"|/*/b?sh

/ * / b?shが存在しないため、このプログラムはシステム上で失敗します。/ bin / bashではなく、/ usr / local / bin / bashがあります。
カーニグ

2
シェルグロビングの素晴らしい使用法!
機械式カタツムリ

@kernigh[[ ! -d "/bin" ]] && mkdir "/bin"; sudo cp "/usr/local/bin/bash" "/bin/bash"
スタン・ストラム

/bin/shbashの方が良いでしょう。次に、コードは/*/sh(36バイト)で終了できます。しかし、私はこれが機能するシステムを見つけていません。Debianでは、/ bin / shはbashではありません。私の古いMacでは、/ bin / shはbash 2.05b0。(1)ですが、このバージョンは古すぎて拡張しません{a..z}
カーニグ

11

C、90 88 84文字

使用してコンパイル gcc -nostartfiles

b;_exit(){for(;b<26;)printf("%c",b+++97);}    // 42 chars, works for a, u
b;_start(){putchar(b+++97)>121?:_start();}    // 42 chars, works for e, i, o

_startと移動_exitする良い方法ですmain。しかし、非標準のコンパイル行で問題ない場合は、なぜ-DX=mainですか?
ugoren

4
どういうわけか、私-DX=mainよりも気分が悪い-nostartfiles。これは、ソースコードの一部をコンパイル行に移動する方法であり、#define X main明らかに無効になるソースコードを記述するのと同じです。一方-nostartfiles、名前を変更する方法mainではありませんが、main関数(で呼び出される_start)がなければならないという制限を取り除きます。一方、使用しては-nostartfilesそれが5、「悪い」の文字:)の4が含まれ、特にとして、不正行為のようなビットを感じない
schnaader

それは滑りやすい斜面です...からの距離-nostartfilesには-DX=main小さく、なぜでいくつかの文字を保存しない-DX=main()など。しかし、私は怪しいものを一切含まない解決策を見つけることができません。
-ugoren

たとえば、メイン関数を「mn」に定義する方法はありませんか?
ニール

@Neil、のような何かをすることによってのみ-Dmn=main。などのmain非標準オプション-nostartfilesが使用されない限り、C関数には関数が必要です。
マシューフラシェン


9

ルビー、20文字

$><<[*97.chr..?z]*''
  • 97.chr 「a」と言う手の込んだ方法です
  • .. 範囲を指定します
  • ?z 「z」の短い言い方です
  • [*range]原因らのスプラットする範囲は、それが配列の値です
  • *''と同じjoin('')です。すべての配列値を結合します。
  • $><< Perlicism:標準出力に出力します。

このコードは機能していないようです。?zはの省略形ではなく'z'、むしろ122。ただし、これは18バイトで機能します$><<[*97.chr..'z']
。– primo

それは動作しないのRuby 1.9に。
-steenslag

1
1.9.3をダウンロードしました...そうです。なぜ彼らはそのようなものを変えるのでしょうか?アナーキーゴルフがまだ1.8.7を実行している理由がわかります。とにかく、18バイトのソリューションは、v1.8.7-のために働く
プリモ

2
(4年後...)あなたは置き換えることができ97.chr?\x61ために-1バイト。
ヨルダン

9

dc:18 17文字

97[dP1+dBD>m]dsmx

そして、勇敢なキャラクターが亡くなりました。


私はそうは思わない。私は頭を包んでいますが、短くする方法はありません。私はx私のソリューションをより難読化する登録に使用したことを除いて、まったく同じソリューションで終了しました。
ハイネック-Pichi- Vychodil

3
97[dP1+dBD>m]dsmx、17文字。どうやらDCで常に16進文字を入力できますが、入力ベースが10であるため、値はB*10+D=11*10+13=123='{'0xBDではなく、です。
Fors

ああ、すてきなグリッチ;-)
Hynek -Pichi- Vychodil

9

Powershell、75 62文字

編集: -f(String.Format)と配列インデックスを使用して、コード長を大幅に削減しました。

'{0}bcd{1}fgh{2}jklmn{3}pqrst{4}vwxyz'-f"$(1|gm)"[8,10,0,5,31]

使い方

gmはのエイリアスであるためget-members、次の型の1|gmvalueのメンバーを返します。1System.Int32

PS C:\> 1|gm
   TypeName: System.Int32
Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     int CompareTo(System.Object value), int CompareTo(int value)
Equals      Method     bool Equals(System.Object obj), bool Equals(int obj)
GetHashCode Method     int GetHashCode()
...

"$(1|gm)"上記のリストの文字列表現を返します。これには、アルファベットを完成させるために必要なすべての母音が含まれています: " int C omp ar eTo(System.Object val ue)..."


2
ただし、MSがSystem.Int32にメンバーを追加する場合、これは安定していません:
Joey

私は、それがなければならないであろうと思います($x=''+$(gv))[8]+"bcd$($x[4])fgh$($x[25])jklmn$($x[26])pqrst$($x[19])vwxyz":)また、75個の文字である
ダンコDurbić

ああ、そう。私は私の歴史から間違ったアイテムを釣りました。ごめんなさい。
ジョーイ

実際には、あなたが交換した場合''+$(gv)"$(gv)"あなたを得る($x="$(gv)")[8]+"bcd$($x[4])fgh$($x[25])jklmn$($x[26])pqrst$($x[19])vwxyz"74個の文字です。いいね!
ダンコドゥルビッチ

2
-f(String.Format)と配列インデックスを使用して、コード長を大幅に削減しました。
ティムルイス14年


8

ハスケル、12

['\97'..'z']

または、これは不正行為ですか?:)


私は確かにHaskellについてあまり知りませんが、次のエラーが出ます:Parse error: naked expression at top level
primo

1
インタープリターで実行します
RobAu

7

MATLAB、12 + 20 = 32文字

えいおう(12):

char(97:122)

アエオウ(20)

fprintf('%s',97:122)

7

Perlでは、

母音がなくても可能です

ただし、Rubyなどの場合よりもはるかに困難です。これは合計101文字を使用しますが、cmd行(perl -e)を呼び出す必要はありません。

`\160\145\162\154\40\55\145\40\42\160\162\151\156\164\40\123\124\104\105\122\122\40\141\56\56\172\42`

=>結果:abcdefghijklmnopqrstuvwxyz

「似たような」PHPソリューションとは対照的に、これは実際のプログラムです。デコードされたプログラムの読み取り:

perl -e "print STDERR a..z"

8進値にエンコードした後、別のperlインタープリターが ``(バックティック)によって実行中に呼び出されます。バックティックは出力を消費するため、STDERRに出力されます。

エンコードはsprintfによって行われます。

my $s = q{perl -e "print STDERR a..z"};
my $cmd = eval(
       '"' . join('', map sprintf("\\%o",ord $_), split //, $s) . '"'
       );

そして、評価されたエンコーディング投稿されたプログラムです(バックティック内):

"\160\145\162\154\40\55\145\40\42\160\162"
"\151\156\164\40\123\124\104\105\122\122"
"\40\141\56\56\172\42"

よろしく

rbo


8
母音のみをエンコードすることでこれを44文字に短縮できます:)
marinus

7

Perl 5、22文字

(1)ae、10文字のみが含まれています(5.10以降が必要、コマンドラインから実行):

-Esay+a..z

(2)「i」のみが含まれ、12文字:

print v97..z

コマンドラインからの実行が許可されていない場合はuse 5.01;say a..z、最初のコマンドに7文字ともう1つの母音を使用して使用する必要がありますが、まだ 'i'がないため、合計29の有効なエントリになります文字。


「-E」オプションは問題ないと思いますが、通常、2文字の「-E」が文字の合計長に追加されます。
ガレス

@gareth--Eは、ワンライナーを実行するための-eの代わりになります。ファイルからプログラムを実行している場合useは、コマンドラインオプションに置き換えて、-M5.01さらに2つの文字を削除することもできますが、にこだわっています。
マークリード

私は-p、2文字がカウントに追加されるオプションのルールを考えていました。ただし、このメタの質問を見ると-M5.010、そのオプションがコードの短縮に役立つ場合、無料で使用できるはずです。
ガレス

printステートメントをdie2文字削除するように置き換えることができます
-ardnew

chr 97..zv97..z3バイトで置き換えられます。
primo

7

APL(ダイアログ)(11 13)

APLフォントが必要になる場合があります。これはUnicodeのはずですが、プレビューはありません...

のみU(そしておそらくギリシャ語の母音を数える場合):

⎕UCS 96+⍳26

(それがあります。[quad]UCS 96+[iota]26

のみA

⎕A

2
U母音です...
トビア

@Tobia:誰かがそれを見るのに1年以上かかりました(私を含む)。私はそれについて考えているので、イオタも実際には母音であると思います。それを修正しました。
マリヌス

APL機能記号iota(U + 2373)はUnicodeの文字とは見なされないため、母音にはできません。ギリシャ語の小文字iota(U + 03B9)とは異なることに注意してください。
ngn 14年

7

Python 2、83

いいえaioまたはu ; 47

x=97;s='';exec"s+=chr(x);x+=1;"*26+"pr\x69nt s"

ノーE ; 36

print"abcd\x65fghijklmnopqrstuvwxyz"

6

Python 2、175文字

注:以前のpython answerとは異なり、出力に出力します

'e'を使用しますが、a、i、o、uは使用しません-63 61 59 65(誤っiた小文字への移動を修正)115文字(スペースを削除します)。

exec('fr%cm sys %cmp%crt*\nf%cr x %cn r%cnge(97,123):std%c%ct.wr%cte(chr(x)),'%(111,105,111,111,105,97,111,117,105))

(元は、スペースを挿入するコンマ付きの印刷を使用し、大文字も印刷しました。出力として 'abcdefghijklmnopqrstuvwxyz'の厳しい要件を確認しました。そのため、インポートステートメントを追加しました)。

「e」は使用しません(a、i、o、uを使用します。小さな拡張子の場合、a、uを簡単に削除できます)-61 60文字

import string
print string.__dict__['low%crcas%c'%(101,101)]

1
最初の解決策では文字を使用しているiため、次のようになりますexec('f%cr x %cn r%cnge(65,91):pr%cnt chr(x),'%(111,105,97,105))。64文字に戻りました。
BioGeek

1
exec('fr%cm sys mp%crt*\nf%cr ...
ギャレス

BioGeekと@Gareth-私の手動母音検出スキルはひどいです。指摘してくれてありがとう。しかし、私は '%c'として書かれた追加のeを持っていたので、最終的には均等になります。
ジンボブ博士12

から括弧を削除できますexec('...')
mbomb007

5

JavaScript(154)

(1)i(99文字)のみを含む:

t=this;s=-t+t+t.b;z=s[1]+'bcd'+s[7]+'fghijklmn'+s[4]+'pqrst'+s[21]+'vwxyz';t[s[1]+'l'+s[7]+'rt'](z)

(2)aeou(55文字)のみを含む:

t=0;s=''+t.b;alert('abcdefgh'+s[5]+'jklmnopqrstuvwxyz')

デモ: http //jsfiddle.net/SvN5n/


$("h\x65\x61d")[0]["\x6fwn\x65rD\x6fc\x75m\x65nt"]["l\x6fc\x61t\x69\x6fn"]="j\x61v\x61scr\x69pt:\x65v\x61l(`f\x6fr(s='',l=65;l<90;l++){s=s+Str\x69ng.fr\x6fmCh\x61rC\x6fd\x65(l);};c\x6fns\x6fl\x65.l\x6fg(s)`)"208chars、aeouiコードでは使用されません。Chromeブラウザで動作します。
EscĐiệp

5

Python 159 117

他のpythonの投稿で述べたように、最も難しい部分は、出力を行う唯一の方法がprintor を使用することであるという事実に対処することですsys.stdout.write。2つのプログラムで実行する必要があります(独立したもので、Pythonインタラクティブシェルを使用して出力を作成しない)。

これは55文字に対してのみiを使用します。

print"%cbcd%cfghijklmn%cpqrst%cvwxyz"%(97,101,111,117)

これは、104文字でiを使用することを避けます。

eval("sys.stdout.wr%cte"%105,{'sys':eval("__%cmport__('sys')"%105)})("%c"*26%tuple(range(97,123))+"\n")

編集: 大規模なブレークスルー!!! 私は、eval(またはexec)の使用はちょっとしたごまかしであり、本当に競争の精神ではないと考えていました。とにかく、ビルトインをトロールして、iを使用せずに印刷機能を保持する方法を見つけました。したがって、68文字のavoid-i(およびo)プログラムは次のとおりです。

vars(vars().values()[0])['pr%cnt'%105]("%c"*26%tuple(range(97,123)))

ただし、これによりoも回避されるため、49文字に対してa、e、uのみを回避する1つと組み合わせることができます。

print"%cbcd%cfghijklmnopqrst%cvwxyz"%(97,101,117)

互換性を捨ててキャラクターを獲得することができますvars(vars().values()[0]).values()[47]
--ugoren

5

ルビー196 164 44 47

$><<"\x61bcd\x65fgh\x69jklmn\x6Fpqrst\x75vwxyz"

pアルファベットの周りに引用符が出力されるため、これは有効な回答ですか?
マークリード

i p xは、呼び出しと同等puts str.inspectであり、引用符で囲まれます。
パトリックオスシティ

@paddeあなたはどちらも正しいです。かわった。
クリスチャンルパスク

1
@padde私はあなたのを使用したので$><<、+ 1しておめでとうございます。あなたのバージョンははるかに良いです
クリスチャンルパスク


5

VBA:76のブルートフォース、116の「チート」なし(出力で改行が許容される場合は98)

標準機能

VBAの冗長性のおかげで、標準コードモジュールで「E」または「U」がなくてもこれができるとは思わない...

  • E nd」
  • "F Uの nction"
  • 「S u b」

即時機能

mellamokbの仮定で実行すると、ここでは関数宣言がありません(SUBandを残してFUNCTION)(116文字98出力で改行が受け入れられる場合は):

以下では、「e」も「a」も使用していません(イミディエイトウィンドウで実行するようにフォーマットされた43文字)。

b=65:Do:z=z+Chr(b):b=b+1:Loop Until b=91:?z

以下では、「i」も「a」も「u」も使用しません(イミディエイトウィンドウで実行するようにフォーマットされた33文字)。

For b=65 To 90:z=z+Chr(b):Next:?z

以下では、「a」も「o」も「u」も使用していません(イミディエイトウィンドウで実行するようにフォーマットされた40文字):

b=65:While b<91:z=z+Chr(b):b=b+1:Wend:?z

出力で改行文字が許可されている場合、上記の例は短くなる可能性があります。

37文字

b=65:Do:?Chr(b):b=b+1:Loop Until b=91

27文字

For b=65 To 90:?Chr(b):Next

34文字

b=65:While b<91:?Chr(b):b=b+1:Wend

強引な

w0lfのRubyアンサーで実行する

76文字、イミディエイトウィンドウで実行するようにフォーマット):

?Chr(65)&"BCD"&Chr(69)&"FGH"&Chr(73)&"JKLMN"&Chr(79)&"PQRST"&Chr(85)&"VWXYZ"

1
私はそれを残すために公正なことだと思うSub..End Sub他のほとんどのプログラムは、関数定義を含んでいないことから、アウト。
mellamokb

@mellamokbそうですね、気分が良くなります。これに追加する例をいくつか挙げます。
ガフィ

2
「イミディエイトウィンドウで実行するコード」と考えてください:)
mellamokb

2
さて、疑問がある場合だけでなくてもファイルに含めることができるのVBScriptそれを呼び出すSub:)
ジョーイ

イミディエイトウィンドウで機能printするように変更された?、不要なスペースの束を修正しました。
ガフィ

5

Rebmu:15文字

Ctc'`L26[pn++C]

Rebmuを読むには、次のことから始めるために常に少しのアンムージングが必要です。

c: tc '` l 26 [pn ++ c]

次に、略語を展開するのに役立ちます。

c: to-char-mu '`
loop 26 [
    prin ++ c
]

小文字のaの前身に文字リテラルを使用すると、より明確になります。

c: #"`"
loop 26 [
    prin ++ c
]

しかし、それは「マッシュ」しませんので、単語リテラルを文字に変換することも同じ目的でパスします。私がそれについて気に入っているのは、ほとんどのRebmuと同様に、圧縮にもかかわらず賢明なプログラムの精神を持っているということです。(Golfscriptの答えは短くなりますが、プログラマがコーディングするときの通常の考え方に対応していません。)


5

<> <(魚)-22文字

<> <は 'o'を使用してキャラクターを印刷するため、この課題は不可能に思えます。幸いなことに、魚は実行時に独自のコードを変更できます。これにより、コードに印刷指示を追加できました。

このコードは、どの母音も使用しません。

'`78'+11pv
:X:'z'=?;>1+

ここでコードを実行できます

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