アルファベットを4回印刷する


37

プログラムは、アルファベットを4回印刷する必要があります。最初は通常のアルファベット順、2番目はqwertyキーボード、3番目はdvorakキーボード、最後は逆アルファベット順です。出力は次のようになります。

abcdefghijklmnopqrstuvwxyz
qwertyuiopasdfghjklzxcvbnm
pyfgcrlaoeuidhtnsqjkxbmwvz
zyxwvutsrqponmlkjihgfedcba

出力では大文字と小文字が区別されず、必要に応じて改行またはスペースを追加または削除できます。

キャッチ:プログラムは104文字未満である必要があります。つまり、アルファベットの長さの4倍より小さい必要があります。

もっと感銘を受けた、本当に賢い、または面白い何かが見られない限り、最短のコードで答えを受け入れます。

編集:2011年4月27日水曜日に最短回答を受け入れます。

EDIT2:そして、勝者は(いつものように)64文字のGolfscriptです!2番目は3文字しか後ろにありませんが、67文字でGolfscriptにあり、3番目に72文字でBashが続きます。

しかし、のような、私は言及したかったいくつかの他、ありました。この1あなたの定義に応じて、唯一の52「文字」を使用し、かつ、これ彼は、彼が作成した言語でそれを書きました。

書かれていないルール破り、資格を与えられなかった いましたが、私はそれらを箱なしでの彼らの考え方だけで言及します。


11
あなたに感銘を与えた答えに賞金を使うことを検討してください。コードゴルフで回答を受け入れることは、常に自然な基準(つまり長さ)である必要があります。
ジョーイ

:私は、Tcl使用して失われたtio.run/...
sergiol

回答:


16

Python 2、97文字

q="qwertyuiopasdfghjklzxcvbnm"
a="".join(sorted(q))
print a,q,"pyfgcrlaoeuidhtnsqjkxbmwvz",a[::-1]

QWERTYのソートとリストから文字列への逆変換は、アルファベット自体よりも短いです!*

アルファベット自体よりも少ない文字数でアルファベットを生成する別のオプション:

print map(chr,range(65,91))

ただし、これは文字のPythonリストを出力します。

ここでは、データ圧縮の方法で行うことはあまりありません。文字を5ビットに詰め込むと39文字しか節約されません。文字を詰め直す必要がある場合はそれほど多くありません(そして、バイトを文字通り表現する必要があります)。zlibは(例として)20バイト未満しか保存しません。次の文字へのデルタのリストとしてシーケンスをエンコードすると、このシーケンスの最大値は-22であるため、デルタごとに5ビットが必要です。

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
 1, 1, 1, 1, 1, 1, 1, -9, 6, -18, 13, 2, 5, -4, -12, 6, 
 1, -15, 18, -15, 2, 1, 2, 1, 14, -2, -21, 19, -20, 12, 
 -1, 3, 9, -19, 1, -4, 15, -6, -11, 14, -10, 16, -12, -5, 
 4, 12, -6, 5, -2, -7, 1, 13, -22, 11, 10, -1, 4, 0, -1, 
 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]

*ほんのわずかですが。


1
Python 3.5:q="qwertyuiopasdfghjklzxcvbnm";a=sorted(q);print(*a,q,"pyfgcrlaoeuidhtnsqjkxbmwvz",*a[::-1])
Veedrac

15

PHP、100バイト

ISO 8859-1として:

<?=base64_encode("i·yø!9%z)ª»-ºü1Ë:°z»rº*)jÇ_ä<\½¹æ§'àr¹Z¡ë¢vg²¨äŹ°¿<òÇî¶Êê¦æHâÞuÆÚ");

確実に再現するために、

printf '<?=base64_encode("' > 4times.php
printf abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba | base64 -d >> 4times.php
printf '");' > 4times.php

5
それはそれを行うための興味深い方法です。他のすべては同じアイデアのバリエーションですが、これは少し異なります。
ピーターオルソン

これは重要ではないと思います。質問には「コルモゴロフの複雑さ」というタグが付けられ、「104文字」が指定されています。つまり、文字と見なされるものを区別する必要があります。それ以外の場合は、問題を解決するプログラム全体のASCIIにマップする単一の文字で独自の文字エンコードを定義し、それをデコードします。
エイドリアンペトレスク

2
@Adrian Petrescu:これは、チャレンジが提示された時点でエンコーディングが既に存在していることを要求することで簡単に解決できます。
ロージャッカー

@Lowjackerもちろんですが、それはこれを解決するためのかなりarbitrary意的な方法のようです。
エイドリアンペトレスク

5
@Adrian、文字対バイトを使用する場合のユニコードの利点は、長い間認められてきました。私の意見では、キャラクターに尋ねるときに質問にコルモゴロフのタグを付けるのは意味がありません。バイトをカウントする必要があります。これらの用語に注意するのは質問者の責任です。
ニブラー



9

Python、97 96「文字」

「文字」という言葉を自由に使用して、16ビットのUnicode文字を使用してそれぞれ3つの通常の文字をエンコードするpythonをいくつか紹介します。プログラムは合計96文字で、そのうち35文字は私が見た中で最も奇妙なUnicode文字です。

for i in range(104):print chr((ord(u'ࠠᒃ⃦ⵉ��割廕��匓�เ᳅ⵉૹ�懬ࣅű傎ᱨ�⤰〷�弙劶��ⶍKᓇࡤ^A'[i/3])>>i%3*5&31)+97),

ユニコードガベージが正しく来るかどうかはわかりませんので、上記のpythonプログラムを生成するpythonプログラムを次に示します。

#!/usr/bin/python                                                                                                                                                                 
import codecs
f=codecs.open('alpha.py','w','utf-8')
f.write('#!/usr/bin/python\n')
f.write('# coding=utf-8\n')
f.write('for i in range(104):print chr((ord(u\"')
S='''abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcbaa'''
for i in xrange(0,104,3):
 n=32*32*(ord(S[i+2])-97)+32*(ord(S[i+1])-97)+ord(S[i+0])-97
 f.write(u'%c'%n)
f.write('"[i/3])>>i%3*5&31)+97),\n')

9

バッシュ、72

echo {a..z} qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz {z..a}

編集:削除されましたtr -d

クレジット:アレクサンダー、ロジャー。


2
ルールはオミットにあなたをできるように|tr -d ' '書いている現時点ではリーダーを10個の文字を保存し、このバージョンを作り、:-)
アレクサンダーGladysh

@Alexander、Cool ;-)それを知りませんでした。しかし、正しい方向に私を向けてくれた@Rogerに感謝します。
asoundmove

私は素数とモジュロの累乗を持つある種の多項式でよりエレガントな解決策を見つけようとしていました(または言い換えれば、そのシーケンスを介して機能する十分に単純な置換関数を見つけます)...しかし、必要な時間を費やすことはできませんそのようなソリューションのために、私はそれでそれを残します。さらに、簡潔に表現するのはかなり難しいでしょう。
asoundmove

9

Golfscript、64文字

"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz".$2%\1$-1%

注:64バイトも。実際には、Unicodeとベースの変更で遊ぶことbaseは、キーワードが長すぎるため逆効果のようです。


6

Windows PowerShell、89

特に良いわけではありませんが、少なくとも出力文字列よりも短くなります。

[char[]](65..90)
'qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz'
[char[]](90..65))

余白に緩和があることがわかりました。そして、私が許されているケースを無視すると、まだ少し短くなります。


2
余分なもの)があります。88でなければなりません
Iszi


4

CI -92文字

'a(1p'z((,0(4d)(.$)<)$)(0c0c.1+2p$.)>)$)qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz

CI(「コンパイラー/インタープリター」)は、「Self-Interpreting Interpreter」チャレンジ(answerへのリンク)のために作成した単純なスタックベースの言語です。このチャレンジが投稿される約2時間前にその回答を投稿しました。私の目標はインタープリターを短くすることだったので、GolfScriptではありません(まだ学習に慣れていません)。

このプログラムはci、標準入力を介してインタープリターに渡される必要があります。インタープリターは、終了後の文字を)プログラムへの入力として扱います。私の言語は文字列リテラルをサポートしていないため、stdinが代わりになります。


3

Python 2.7.X-皮肉なことに103文字...

a='abcdefghijklmnopqrstuvwxyz'
print a,'qwertyuiopasdfghjklzxcvbnm pyfgcrlaoeuidhtnsqjkxbmwvz',a[::-1]

結局のところ、Pythonでアルファベットを生成するには、ハードコーディングするよりも多くの文字が必要です。アルファベットのインポートも同様です。時々、読みやすさを重視した言語が大好きです。


1
QWERTY文字列とDVORAK文字列の間にスペースは必要ありません。1文字少なくなります。
ロージャッカー

trueですが、Pythonはコンマ区切りの印刷リストの各項目の間にスペースを自動的に追加するため、スペースは読み取り可能な出力の変更に対する個人的な犠牲になります。
arrdem

+代わりにを使用して、,そのスペースを節約できます。
マーティンUeding

3

C — 133文字

ケーシーの短縮版:

main(i){char a[105];strcpy(a+26,"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz");for(i=0;i<26;)a[i]=a[103-i]=i+++65;puts(a);}

空白:

main(i) {
    char a[105];
    strcpy(a+26, "qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz");
    for(i=0;i<26;)
        a[i]=a[103-i]=i+++65;
    puts(a);
}

転置出力

転置出力を行うバージョンをお楽しみください。134文字。

main(i){char*a="qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz";for(i=0;i<26;i++,a++)printf("%c%c%c%c\n",i+65,*a,*(a+25),90-i);}

空白:

main(i){
  char*a="qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz";
  for(i=0;i<26;i++,a++)
    printf("%c%c%c%c\n",i+65,*a,*(a+25),90-i);
}

プリント:

AqmZ
BwpY
CeyX
DrfW
EtgV
FycU
GurT
ヒルズ
IoaR
JpoQ
KaeP
LsuO
MdiN
NfdM
ああ
PhtK
QjnJ
RksI
SlqH
TzjG
UxkF
VcxE
WvbD
XbmC
YnwB
ZmvA

もちろん、まだ合いません。
アレクサンダーグラディッシュ

1
iグローバルとして宣言しstrcpy(...)、forループの最初のブロックに配置することにより、129が得られます。
ベベ14

3

J

x=:(97+/i.26){a.
x
261329910883437428257896643x A.x
247073478763191548160234722x A.x
(_1+/-i.26){x

Jでの最初の経験。アイデアは、単に必要な順列の標準(辞書式)番号を使用することです。残念ながら、これにはハードコーディングよりも多くの文字が必要です。しかし、魔力の数をもたらす算術式(べき乗など)を見つけることができれば、短縮することができます。


261329910883437428257896643には素因数分解7 * 601 * 991 * 213987797 * 292923318887があるため、この因子には力がありません。
ジェリージェレミア

3

Python、90個のUnicode文字

#coding:u8
print u"扡摣晥桧橩汫湭灯牱瑳癵硷穹睱牥祴極灯獡晤桧歪穬捸扶浮祰杦牣慬敯極桤湴煳歪扸睭究祺睸當獴煲潰浮歬楪杨敦捤慢".encode("u16")[2:]

ideoneで実行-http : //ideone.com/R2dlIまたはcodepad- http: //codepad.org/lp77NL9w


2
実際には、52個の「キャラクター」しかありません。
ピーターオルソン

3

Javascript 139 121

新しい:

q='qwertyuiopasdfghjklzxcvbnm'
a=q.split('').sort()
alert(a.join('')+q+'pyfgcrlaoeuidhtnsqjkxbmwvz'+a.reverse().join(''))

古い:

a=[]
a[26]='qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz'
for(i=0;i<26;i++)a[i]=a[52-i]=String.fromCharCode(i+65)
alert(a.join(''))

あなたはまた、と121を持つことができます:alert((a=(q='qwertyuiopasdfghjklzxcvbnm').split('').sort()).join('')+q+'pyfgcrlaoeuidhtnsqjkxbmwvz'+a.reverse().join(''))
WallyWest

2

Lua — 111文字

CとC ++に勝ちます!:-)

print'abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba'

Luaの「賢い」バージョン

129文字

q='qwertyuiopasdfghjklzxcvbnm'a={q:byte(1,-1)}table.sort(a)a=q.char(unpack(a))print(a,q,'pyfgcrlaoeuidhtnsqjkxbmwvz',a:reverse())

空白:

q='qwertyuiopasdfghjklzxcvbnm'
a={q:byte(1,-1)}
table.sort(a)
a=q.char(unpack(a))
print(a,q,'pyfgcrlaoeuidhtnsqjkxbmwvz',a:reverse())

2

C- 163 135文字

これは104文字を超えるため、要件を満たしていませんが、作成するのは楽しかったです。たぶん誰かがいくつかの提案をするでしょう。

main(i){char a[105];strcpy(&a[26],"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz");for(i=0;i<26;)a[i]=a[103-i]=i+++65;puts(a);}

これはGCC 4.5.1でコンパイルされます(他はテストされていません)。#includes、戻り値の型、変数の宣言を省略したい!ハードコーディングはプログラムの短縮につながりますが、それは面白くありません。

空白バージョン:

main(i) {                                                                                   
    char a[105];                                                                        
    strcpy(&a[26], "qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz");                 
    for(i=0;i<26;)                                                                          
        a[i]=a[103-i]=i+++65;                                                               
    puts(a);                                                                                
}

C - 124 122ラメ

これはハードコーディングされた不完全なバージョンであり、それでもカットされません。

main(){puts("abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba");}

puts()2番目のケースでは、代わりにprintfを使用します— 2文字少ない。
アレクサンダーグラディシュ

そして、置き換えるwhileputs(a);、最初のケースで、ドロップし*p=aます。- 138文字の代わりに、163
アレクサンダーGladysh

素晴らしい提案!私は完全に忘れていましたputs。かわった。
ケーシー

2

PHP 88バイト

<?=$a=join(range(a,z)),~Žˆš‹†Š–žŒ›™˜—•”“…‡œ‰‘’†™˜œ“žšŠ–›—‹‘ŒŽ•”‡’ˆ‰…,strrev($a);

2

J-69文字

'pyfgcrlaoeuidhtnsqjkxbmwvz'(,~|.)&(,\:~)'mnbvcxzlkjhgfdsapoiuytrewq'

説明:

  • (,\:~) y-並べ替えy(降順に\:~)、及びアペンド(,)へのy

  • x (,~|.) y-(|.)を逆にyして、それをx

  • x F&G y-実行(G y) F (G y)、つまり、引数Fに適用Gした結果に対して実行します。

したがって、すべて一緒に、アルファベットをDvorakとreverse-QWERTYの両方の文字列に後方に追加し、QWERTY / alphabetの文字列を逆にして、Dvorak / alphabetの文字列の前に置きます。


2

バッシュ、64

私はパーティーにとても遅れていますが、64文字のソリューションがあります。プログラムを動作させるにはディスクに保存する必要があります

echo {a..z} $(sed 1d $0|base64) {z..a};exit
««·+¢¢–¬uø!ŽIsÅËÛžjr~+•ªº'a¶{*ŽL[›ó

使い方:

{a..z} そして {z..a}、かなり自明ですが、基本的にはそのそれぞれの範囲内のすべての文字を印刷していること。

$(sed 1d $0|base64) プログラムを出力し、最初の行を無視してから、base64エンコーダーに渡します(他のいくつかの例と同様)。

これが他の同様の例よりも短い理由...

...は {a..z}範囲がbase64エンコーディングよりも短いため、文字列の半分だけをbase64エンコードする必要があるためです。また、バイナリデータを文字列に格納するのではなくファイルから読み取るため、コード内の文字をエスケープする必要はありません。

このスクリプトを再作成する方法:

コードがStack Exchangeからテキストエディターに正しくコピー/貼り付けされない場合は、コマンドラインで次のコマンドを実行します(シェル非依存):

echo 'echo {a..z} $(sed 1d $0|base64) {z..a};exit' > alphabetgolf
echo 'qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz' | base64 -d >> alphabetgolf

次に実行するには:

bash alphabetgolf


1

C ++

言語で何かをする最短の方法がそれをハードコードすることであるとき、それはちょっと悲しいです。

#include <iostream>

int main()
{
 std::cout<<"abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba";
}

改行を出力する必要はありません。
ロージャッカー

@Low:ドッ!不要だとわかった改行を削除したときに、それらを削除するのを忘れました。それを指摘してくれてありがとう。
ジョン

これは非常に明白な解決策であり、最大長の要件を超えています。
ピーターオルソン

std::coutはより短く、using namespace stdスキップできますvoid
アレクサンダーグラディシュ

@アレックス:それを指摘してくれてありがとう。
ジョン

1

J(77)

(,|.@(26&{.))(,~/:~@(26&{.))'qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz'

変数を使用して3文字を削ります:

(,|.@a)(,~/:~@(a=.26&{.))'qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz'

値レベルのアプローチを使用して、さらに2文字を削除しました。

(|.a),~t,~a=./:~26{.t=.'qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz'

1

ハスケル(95)

main=putStr$['a'..'z']++"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz"++['z','y'..'a']

Perl(51)

私にはできないというルールはありません。

use LWP::Simple;print get("http://bit.ly/fGkflf");

1
標準の抜け穴のリストを参照してください。
-boboquack

1

Q(68)

.Q.a,"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz",(|:).Q.a

出力:

"abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfg     
crlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba"

中央の2つをハードコーディングする方法の改善を見つけようとしましたが、1つは思いつきませんでした。


1

K-69文字

b,a,|b:a@<26#a:"qwertyuiopasdfghjklzxcvbnmpyfgcrlaeouidhtnsqjkxbmwvz"

説明:

  • 26#a:-2つのキーボードレイアウトをに割り当て、a最初の26文字を取得します。

  • b:a@<-ソートしてaそれを割り当てるb<昇順ソートの順列を提供し、ソートするために@インデックスを作成aします。

  • b,a,|- b次に行に追加しa、その後の逆(|b


1

Pyth、57

G"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz"VG

アルファベット、文字列、逆アルファベット。Gはアルファベットです。印刷は暗黙的です。


1

Dyalog APL、60 バイト

⎕A'QWERTYUIOPASDFGHJKLZXCVBNMPYFGCRLAOEUIDHTNSQJKXBMWVZ',⌽⎕A

プリント:

  ABCDEFGHIJKLMNOPQRSTUVWXYZ  QWERTYUIOPASDFGHJKLZXCVBNMPYFGCRLAOEUIDHTNSQJKXBMWVZ ZYXWVUTSRQPONMLKJIHGFEDCBA

OPごとに許可されているもの:

出力では大文字と小文字が区別されず、必要に応じて改行またはスペースを追加または削除できます。



1

05AB1E60 59バイト

AÂ"qwertyuiopasdfghjklzxcvbnm""pyfgcrlaoeuidhtnsqjkxbmwvz"»

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

-分岐アルファベットをプッシュします。

"qwertyuiopasdfghjklzxcvbnm""pyfgcrlaoeuidhtnsqjkxbmwvz" -qwertyとdrovakをプッシュします。

» -スタックを印刷します。

05AB1E、57バイト(ランダムを気にしない場合\ n)

AÂ"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz"»

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


最初の例で""は、改行で置き換えることでバイトを保存できます。
ニールA.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.