クラスターサイズの克服


37

フラッシュストレージの信頼性にうんざりして、すべてのプログラムを古き良き1,440 KiBフロッピーのいずれかに保存することにしました。しかし、3,000個のプログラムさえコピーしなかった後、ディスクはいっぱいになりました。それはどうして可能でしょうか?コードゴルフの技術に精通しているため、プログラムのほとんどは100バイトの長さでさえないため、十分なスペースが残っているはずです...

スーパーユーザーに問い合わせた後、ファイルシステムのクラスターサイズFAT12のデザイナーの邪悪なプロットに悩まされていることがわかります。これは、フロッピーのかなりの部分を未使用のままにして、実際に必要以上に購入を余儀なくさせます。

フロッピーを追加購入しますか?絶対に!複数のプログラムを1つのファイルに保存するだけであれば、クラスターサイズは問題になりません。これは、同じソースコードに対して異なるコンパイラー/インタープリターが異なる動作をするためです。

仕事

単一のクラスター(512バイト以下)に収まり、次のタスクをできるだけ多く解決するポリグロットを作成します。

  1. すべての入力を読み取り、印刷します。

  2. Print Hello、World!

  3. 入力として行/引数(name)を読み取り、ハッピーバースデー[name]を出力します!

  4. すべての入力を読んで、タブが大好きです!1つ以上のタブレータ(0x09)が含まれていて、スペースが嫌いです!そうでない場合。

  5. 2行/引数を読み取り、2番目が最初のサブストリングである場合は真実の値を出力し、そうでない場合は偽の値を出力します。

  6. 行/引数を読み取り、その文字が厳密に昇順である場合は真実の値を出力し、そうでない場合は偽の値を出力します。

  7. 行/引数および文字を読み取り、その文字のすべての出現のインデックスを出力します。

  8. 行/引数を読み取り、出現回数が最も多い文字を印刷します。

  1. 間の2つの整数を読む0255とそれらの合計を印刷します。

  2. 0から255までの単一の整数を読み取り、その除算の商と剰余を7で出力します。

  3. 1から255までの単一の整数を読み取り、それが合成数(1でも素数でもない)である場合は真理値を出力し、そうでない場合は偽値を出力します。

  4. 1から255までの単一の整数を読み取り、それが2のべき乗である場合は真理値を出力し、そうでない場合は偽値を出力します。

  5. 間の2つの整数を読む0255と大きな1つを出力します。

  6. 間進整数読み取る0255を 16進表現を印刷します。

  7. 間の単一の整数を読む0255とのハミング重み(1ビットの数)を印刷します。

  8. 単一の整数を読み取るNとの間の113と印刷FをNN 番目の フィボナッチ数

    たとえば、入力の13場合、print 233

  1. 入力の行/引数を読み取り、フレーム化します。

    たとえば、inputのProgramming Puzzles & Code Golf場合、次を印刷します。

    +---------------------------------+
    | Programming Puzzles & Code Golf |
    +---------------------------------+
    
  2. 文字の長方形ブロックを読み取り、時計回りに4分の1回転させます。

    たとえば、入力用

    tye
    xll
    epb
    tma
     id
     sa
    s e
    i r
    hsn
    Tiu
    

    これを印刷:

    This  text
    is  simply
    unreadable
    
  3. 間の整数を読む1及び40を、その辺の長さのダイヤモンドを印刷します。

    たとえば、inputの3場合、次を印刷します。

      /\
     /  \
    /    \
    \    /
     \  /
      \/
    
  4. これを印刷:

    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    

得点

単一の512バイトクラスターに適合する単一ファイルに最大数のプログラムを組み込むことに成功した答えが勝ちです。タイはバイトカウントによって分割されます(低いほど良い)。

追加のルール

  • スコアに対して要求する各タスクについて、同じファイル(バイトごとのバイト)が、この特定のタスクを解決する完全なプログラム(選択した言語の)を構成する必要があります。

  • 各タスクは異なる言語で解決する必要があります。

    同じ言語の異なるバージョンではない場合、言語は異なるものとしてカウントされます。たとえば、JavaScriptは1つ、Pythonは1つ、TI-BASICは1つだけですが、C、C ++、Octave、およびMATLABは4つの異なる言語です。

  • 各タスクに選択される言語は、プログラミング言語の通常の定義を満たす必要があります

    さらに、言語は2015年9月9日までに公開および実装されている必要があります。

  • コンパイラ/インタープリターは、予期しない動作を生成するために非標準フラグを必要としない場合があります。

    この規則の例外には、特定の言語の指定、(単一の)ファイルからのプログラムの読み取り、またはバナーの抑制に必要なフラグが含まれます。

  • 各タスクの入力は、印刷可能なASCII文字(0x20〜0x7E)と改行(0x0A)で構成され、長さは255バイトを超えません。

  • タスクで特に明記されていない限り、すべての整数は10進数または単項で読み取ることができます。

  • 無効な入力の動作は未定義です。

  • STDIN(またはそれに最も近い代替)から、またはコマンドライン引数として入力を読み取ることができます。

    タスクが2つの入力の読み取りを必要とする場合、任意の1バイト区切り文字で区切られた、任意の順序でそれらを読み取ることができます。

    入力ピースの1つが行の場合、可能な区切り文字は改行のみです。

  • 出力をSTDOUT(または最も近い代替)に出力します。STDERRへのすべての出力は無視されます。

  • 各タスクには、標準の規則が適用されます。

    特に、これには、このチャレンジに対して明示的に許可されているoutputのハードコーディングを除き、デフォルト禁止されている抜け穴が含まれます


1
JavaScriptとCoffeeScriptは、異なる言語と見なされるほど十分に異なるのですか
ダウンゴート

はい、それらは異なるものとしてカウントされます。
デニス

17
チャレンジ#4はナンセンスです> :(
ドアノブ

引用:STDERRへのすべての出力は無視されます。これは、スクリプト/プログラムを呼び出して、2>/dev/null標準出力に正しい出力を取得するときに問題ないということですか?念のために。
Cabbie407

2
@ Cabbie407正確に。パーメタ上のコンセンサス、このルールは、実際にデフォルトで適用されるすべての課題。みんながそれを知っていることを確認したかっただけです。
デニス

回答:


17

12言語、418バイト

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
 \@-[I love tabs!]o#
  \ >qi---@
( @-[ ]e<''';print hex(
input())#-[I hate spaces!]o#"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"))?(!?)
'''=#print(([1 1;1 0]^int(readline()))[1,2])
#=
Tr is here.
>Tr, Hello, World!
>X Tr
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#=#.91<0#'''#";

これは楽しいチャレンジです。より多くの言語に対応するのは難しくなっていますが、このバイト数が残っているので、もう1つはできそうです。

2D言語を無償で使用します。間でのcharことに注意してください[ ]上の@-[ ]e<行はタブです。また、これには\n、TRANSCRIPTが機能するために行末が必要です。

プレリュード(タスク1 /猫)

( 
      )?(!?)

?(!?),[.,]BFの直接翻訳です。プレリュード()ループはBF []ループのように動作するため(、左端の列から)コアプログラムが実行される前までのすべてが実行されます。

Preludeの構文ルールは、括弧を一致させる必要があり(列を左から右に読む)、列ごとに1つの括弧しか存在できないことを意味します。それ以外は、非常に簡単に適合する言語です。

Pythonインタープリターを使用NUMERIC_OUTPUTしているFalse場合はに設定されていることを確認してください。

TRANSCRIPT(タスク2 / Hello world)

Tr is here.
>Tr, Hello, World!
>X Tr

TRANSCRIPTは、インタラクティブフィクションに基づいたテーマ別のエソランです。TRANSCRIPTで認識されない行は無視され、簡単に収まります。

Tr is here.Tr文字列変数を宣言し、2行目で変数の内容をに設定しHello, World!ます。X TrX調べるため)その後、文字列を出力します。

TRANSCRIPTは非常に簡単に適合することができますが、かなり冗長な言語なので、最も簡単な課題を取り上げました。

分裂(タスク3 /誕生日メッセージ)

R"Happy Birthday, "[?S"!"*
                   \!/

最初の部分を出力し、小さな2Dループで入力を処理してから、末尾の感嘆符を出力します。R原子はここから始まることを意味し、このプログラムは、どこにでも周りに移動することができるので便利である、右方向に移動します。

レール(タスク4 /タブ)

$'main'
 \@-[I love tabs!]o#
  \ >qi---@
  @-[ ]e<
         -[I hate spaces!]o#

Fissionと同様に、Railは2D言語であり、どこにでも移動できるという利点があります。実行$main関数のから始まり、南東に向かいます。

まず、頭を下\に左に曲がり、秒-、打撃[<tab>]タブをプッシュします。e<次に、EOFに基づいて分岐します。EOFの場合、"I hate spaces!"停止してから印刷するか、停止します。上に向かっている場合は、次の文字を読み取ってタブと比較し、もう一度分岐します。タブの場合、"I love tabs!"停止する前に上に向かって印刷し、そうでない場合は下に向かって入力ループを続けます。

このプログラムはかなり高価ですが、TRANSCRIPTがHello Worldを採用したため、Railにとって適切なタスクを選択するのは困難でした。

> <>(タスク6 /入力の昇順)

"1\"#      \""" "" "


>0[0>i:0(?v:{)?v0n;
       ;n1< .95<


        .91<

1厳密に昇順の場合は印刷し、0それ以外の場合は印刷します。

> <>は別の2D言語であり、実行は左上から始まります。"..."文字列モードで、内側の文字を1つずつプッシュします。最初の文字列をヒットした後、#IPを左方向に反映し、さらに文字列をプッシュしてラップ(> <>はトロイダル)する前に\、私たちを上に反映するミラーをヒットします。

プログラムの下部にはがあり.91<、これ(9, 1)はコアプログラムがあるにテレポートします。これ0[により、文字列からすべてのジャンクが削除さ0れ、最後に読み込まれた文字を表すゼロがプッシュされます。その後、一度に1文字ずつ読み込まれ、昇順を確認します。

おそらく、テレポートの代わりにコアプログラムを下に移動する方が良いでしょうが、必要に応じて後で対処します。

Befunge(タスク9 /追加)

"1\"# &&+.@

ここにあるインタプリタでテストしまし。これは非常に簡単なプログラムで、無駄な文字列をプッシュ#してスペースを飛び越えます。その後は、コアプログラムになり&&+.@ます。

ラビリンス(タスク10 / Divmod by 7)

"1
 =
 '
 <
""'("']
 ?
 :_7/!\_7%!@

便利な、'"迷路で歩きやすい道のように振る舞う迷宮内のNOPです。乱雑なナビゲーションはスキップしますが、基本的に?は、コアプログラムの開始であるに到達する前に、多くの方向転換とうろつきがあります。

プログラムはプレリュードを考慮して完全にフラッシュされていません(?プレリュードで入力を読み取るなど)。

Python 2(タスク14/16進数)

"1\"# &&+.@\""" "" "
#=
''''
xxx
xxx''';print hex(
input())#xxx
'''
xxx
xxx'''#";

xxxSは、複数行の文字列やコメントではコメントアウト無関係な部分を表します。間にあるのはprint hex(input())、コアプログラムです。これは先行0xで出力されますが、私はそれが大丈夫だと仮定しています(そうでなければ、とにかく簡単な修正です)。

最初の行は、"1\"# &&+.@\""2つ" "のsが続く文字列です。これらの3つの文字列はパーサーによって連結され、未使用のままになります(この最初の行は、RubyとJuliaについても同様に機能します)。

GolfScript(タスク15 /ハミング重量)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}

1行目は3つの文字列をプッシュし、2行目はコメントです。''''さらに2つの文字列をプッシュしてから、<<2つの比較を行います(s無視されます)。最後に、""'("'さらに2つの文字列をプッシュします。

このジャンクはすべて、配列にラップして最初の要素(]0=)を取得することで削除されます。最初の要素は、スタックの最初の入力です。次に、で入力を評価し、で~バイナリに変換し、で2baseビットを合計します{+}*。次}は比類のないものであり、プログラムの残りの部分をスーパーコメントします。

ジュリア(タスク16、フィボナッチ)

"1\"# &&+.@\""" "" "
#=
xxx
xxx=#print(([1 1;1 0]^int(readline()))[1,2])
#=
xxx
xxx=#.91<0#xxx

#=複数行コメントを開始し、複数行コメントを=#終了します。コアプログラムは、行列の累乗法を使用してフィボナッチ数を計算します(Rosettaから取得)。

Ruby(タスク17 / ASCIIフレーム)

"1\"# &&+.@\""" "" "
#=
''''
<<s
xxx
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#xxx

このプログラムは、入力が末尾の改行で終わらないことを前提としています。

役に立たない文字列、コメント、もう1つの役に立たない文字列、そしてプログラムのほとんどをコメントアウトするヒアドキュメントがあります。その後にコアプログラムがあり、その後に1行の#コメントが続きます。

CJam(タスク19 /ダイヤモンド)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("xxx
"
R"xxx"[?S"!"*"
xxx
xxx"ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"xxx
xxx
xxx";

最初の行の最後にある2つのスペース文字列は、#=2つの二項演算子であるため、CJamを満たすためのものです。これについてはあまり詳しく説明しませんが、基本的には混乱であり、コアプログラムは単なる

ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>

間に。

GolfScriptとCJamの主な違いは、CJamでは、単一引用符'は文字列の開始と終了ではなく、次の文字をスタックにプッシュすることです。これは、CJamでは

'("'

を押して(から文字列を開始します"(最初の文字はである')。一方、上記はGolfScriptの単なる単一の文字列です。

オンラインでお試しください。プレリュードを説明する1>代わりに使用さ(れます。


ここだ12言語、373バイト。いくつかのタスクが動き回り、TRANSCRIPTが削除され(Railが高価になりました)、Scheme(チキン)が追加されました。メイン投稿の更新には永遠に時間がかかるので、これは更新予定の私のゴルフ場です。

"1\"09!#.&&+.@"" "" "#|"
#=
''''
<<s
11]0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
(-[Hello, World!]o#''';print(input()in input());'''"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"=#print(([1 1;1 0]^int(readline()))[1,2])#=)?(!?)
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a# =##'''#";e# |#(print(format"~x"(eval(read))))

終了していない複数行のコメントがSTDERRにエラーを発生させるため、Juliaの数バイトを節約できました。


素晴らしいもの。TRANSCRIPTのタスクは何ですか?
Cabbie407

@ Cabbie407私はまだどの言語がどのタスクを取得するかを最適化しようとしていますが、現在TRANSCRIPTはHello Worldを採用しており、Railsはタブタスクに変更されています。
Sp3000

ああ、今、私はそれ;)を見ることができます。長い説明のために、私は答えの何も変えないで先延ばしにしています。
Cabbie407

26

7 8 9 10言語、398 431 447 507バイト

これはおそらく、私が現在のソリューションに適合することができる最大のものです。

#if      + 0+0/*^",v  +- '[.,][[" ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
a=0--0;b=input();print(sorted(set(b))==list(b));[[""""                 ^ <
print("Hello, World!")--[[vv? +<
#endif/*  >.!0 + +1ffr"!"~< */
#include<stdio.h>/*>:1 +?!^>i:1^*/
int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1//**/1==2
){printf("%x",/*>&:7/.7%.@*/i);}else{for(;--i-1>0;a=b,b=c)c=a +b;printf("%d",b);}}/*]]--"""]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J "` + +,*.]]]*/SSSTNSSNSNSTNTTTTTSSSTNSNSTNTTTTTTSSTNTTSNSSNNSSSNTTTTNSTNNNN

最後の行には、SEがそれを食べないようにエンコードされた空白コードが含まれています。コードを実行するには、すべてSをスペース、Tタブ、およびN改行で置き換えます。

C89、タスク16

コンパイラが見るものは次のとおりです。

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1/ 1==2
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

他のすべてはコメントとしてまたはの中で取り除かれます#if 0

C ++、タスク14

ここから盗まれたトリックを使用して、C89とC ++を区別しました。

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

Lua、タスク2

基本的な構造は次のとおりです。

#comment
a=0--comment
print("Hello, World!")--[[
... multiline comment ...
]]--comment

Brainfuck、タスク1

無限ループや迷走.,が見つからないことを確認する必要がありました。Luaの複数行コメントもBFコメントを兼ねています。最初の2文字を除くすべてが大きなNOPループです。

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

Python、タ​​スク6

繰り返しますが、私は言語固有の機能をNOPに使用したり、他のコードをコメントアウトしています。

#comment
a=0--0;b=input();print(sorted(b)==list(b));[["""
... multiline string ...
"""]];#comment

Pyth、タスク17

Pythはこの点に適しています。最初#while True:ループはエラー時に静かに終了します。したがって、コードの大部分を文字列にして(;ループを早期に終了しないようにするため)、ループを終了し、Pythonコメントで作成された別のコードを終了してタスクを実行します。空ではないすべての文字列をに置き換えたものを次に示しますが" string "、機能的には同等です。

#if      + 0+0/*^" string " ,yadhtrib yppaH" string """" string "Hello, World!" string "!"  string "%d"  string "%x" string "%d" string """]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J " string

> <>、タスク3

これは非常に興味深いです。実行はコード内で跳ね返り、必要に応じてジャンプを使用して障害物を回避します。関連部分:

#                  v            " ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
                   i                                                   ^ <
                   !      vv? +<
          >.!0 + +1ffr"!"~<
                   >:1 +?!^>i:1^

星空、タスク9

ここで、「言語を除くすべての文字を破棄する」言語を使用する必要がありました。他のものはすべて削除され、次のようになります。

      + +*,  + '., , + + +. +*                  ,  +*  . + + *.* +*  ,,,,**,*..*, +,* + + +* + ` + +,*.*

コードでは、コードの開始と終了を使用するだけで、困難を回避するために、ジャンプで句読点のほとんどをスキップします。コードは機能的に同等です

      + +*,  + + +,*.*

Befunge-98、タスク10

> <>と同様に機能します。幸いなことに、#> <>のミラーであり、Befungeのスキップなので、異なる動作を実装できます。また、0/0 == 0

#if      + 0+0/*^
                >&:7/.7%.@

空白、タスク13

これが最後に収まったものです。最初の数行は、「通常の」コードからのスペースと改行のみを含むため、スタックにゼロをプッシュしています。コードはエンコードされています。すべてSをスペース、Tタブ、N改行で置き換えます。

SSSSSSSSSSSSSSSN
SSSSSSSSSSSSSSSSSSN
SSN
SSSSSN
SN
SSN
SSSSSSSSSSSTN
SSN
SN
STN
TTTTTSSSTN
SN
STN
TTTTTTSSTN
TTSN
SSN
N
SSSN
TTTTN
STN
N
N

9

17種類のPip、383バイト(無効)

この質問はサンドボックス化されましたが、言語Pipのすべての改訂版を調べて、そのうち17個を使用して多言語を思い付きました。悲しいことに、同じ言語のバージョンは現在、チャレンジルールによって許可されていませんが、デニスの許可と免責事項により、とにかく自分の作品を投稿しています。

生のコード

I!ga:0m@0:0v:uIN[(oTM0,0i)EN1N1Y1RCkw(hR`1.+0``&2o`)@>3@AB0`u`rZ4AB6({a}V7)BN8AZ9@m]Iv<2W##YqlPByc:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}m:'+.'-X#a+2.'+.n."| "Iv=5La{i+:oSio}j:ak:bPv=11?a>1&0INa%(2,a)[((J_M ZRVl)|0)Jnl?lJnlcJnd.n.RVdm.a.RVmih:$+TBa({j@aEQk}FI0,#a).saTB16a>b?abh=1ua//7.s.a%7a+bbINa"Happy Birthday, ".a.'!"Hello, World!"]@v

戦略

Pipでは、小文字は変数です。大文字はより複雑です。最大2文字の文字列に分割され、演算子または変数になります。大文字のトークンが変数または演算子として明確に定義されていない場合、未定義の変数と見なされ、nilと評価されます。

したがって、Pipの2つのバージョンを区別するには、2つの新しいバージョンに追加された変数またはアルファベット演算子を見つける必要があります。古いものでは、代わりにnilになります。コードv:uIN[...]は、テストする各バージョンのこれらのチェックの1つを含む大きなリストをまとめ、そのリストuにnil がいくつあるかを調べ(変数は明示的にnilに初期化されます)、その番号をv(「バージョン」)に格納します。

他のいくつかの計算の後、チャレンジからの17のタスクの結果を計算し、vこれがどのバージョンであるかに基づいて1つを選択するために使用する別の大きなリストがあります。

バージョンとタスク

0.15.09.04

診断:(文字列の両端から0文字をトリムすると、代わりに空の文字列が返されるri 演算子の(oTM0,0i)バグを修正しました;空の文字列へのインデックス付けではnilになります)TM

タスク18:(Iv<2W##YqlPByセットアップ:v2未満の場合、stdinからすべての行を読み取ります)、続いて((J_M ZRVl)|0)Jn(行のリストを逆にし、転置し、文字列に戻します)

0.15.08.06

診断:EN1ENumerateオペレーターを追加)

タスク1:(Iv<2W##YqlPBy上記と同じセットアップコード)、続いてl?lJnl(改行で結合)

0.15.08.03

診断:(オペレーターの短縮バージョンとして1N1追加)NIN

タスク20:(c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0セットアップ:チェス盤の上半分と下半分を含むリストを生成してに保存c)、続いてcJn(改行で結合)

0.15.08.01

診断:Y1Yank演算子を追加)

タスク19:(Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}セットアップ:v3の場合、ダイヤモンドの上半分を構築d)に続いてd.n.RVd(下半分を逆にして改行で結合)

0.15.06.19

診断:RCkRandom Choiceオペレーターを追加)

タスク17:(m:'+.'-X#a+2.'+.n."| "セットアップ:で+----+\n| 文字列を構築m)に続いてm.a.RVm(入力を折り返しm、の逆m

0.15.06.12

診断: k事前に初期化されたk変数", ";以前は定義されていなかったため、nil)

タスク16:Iv=5La{i+:oSio}(ifv 5の、フィボナッチ数を生成i)に続いてi

0.15.06.08 (注:次のコミットまでバージョン番号は変更されませんでした)

診断: w事前に初期化されたw変数から`\s+`

タスク15:(h:$+TBa入力を2進数に変換し、数字を合計し、結果をhタスク12の後でします)

0.15.05.29

診断: (hR`1.+0``&2o`)@>3@AB0

このバージョン&は、正規表現の置換(sedに触発)で一致した文字列全体の置換パターンとして追加されました。上記のコードはh100)を取り、それで置き換えます`&2o`(つまり"1002o"、新しいバージョンでは単純"&2o"に古いバージョンです)。次に、3番目以降のすべての文字をスライスします("2o"新しいバージョンでは、""古いバージョン)をし、その文字列へのインデックス付けを試みます。空の文字列にインデックス付けすると、nilが得られます。

タスク7: j:ak:b(セットアップ:コピーローカルVARS abグローバルVARSにはjk彼らは、関数の内部で利用可能なことでしょうので)が続く({j@aEQk}FI0,#a).s(内のインデックスのためのフィルタaに対応する文字が等しいb、とスペースに参加)

0.15.05.26

診断:(`u`パターンタイプを追加。以前のバージョンでは、バックティックは認識できない文字として無視され、式uはnilに評価されます)

タスク14: aTB16(変換TO B16 ASE)

0.15.05.24

診断:(参照されるたびに0から1の間のランダムな値を返す特殊変数をrZ4作成しましたr。以前は定義されていなかったため、式はnilに評価されました)

タスク13:(a>b?ab三項式)

0.15.05.12

診断:(rZ4追加Z IPオペレーターを)

タスク12:(h=1タスク15のビットの合計は1に等しくなければなりません)

0.15.05.11

診断:(溶質値演算子をAB6追加AB

タスク11:Pv=11?a>1&0INa%(2,a)[...]@vv11の1場合、入力が1より大きい場合に出力し、小さい数値で正確に除算し0ます。それ以外の場合vv、リストのインデックスとして使用して、何を出力するかを決定します)

0.15.05.02

診断:(演算子を({a}V7)追加VV未定義の場合、これは引数nilと7を{a}最初の引数を返す関数に送信しました)

タスク10:a//7.s.a%7(7で分割されたintとmod 7でスペースで区切られた入力)

0.15.04.26

診断:BN8Bitwise Negation演算子を追加)

タスク9: a+b

0.15.04.23

診断:(AZ事前に初期化されたAZ変数を大文字のアルファベットに)

タスク5: bINaIN発生回数を与えます)

0.15.04.20

診断:m@0:0続いて9@m

m変数は、これは、コミットでは1000に初期化済みされ@、オペレータが左辺値を返すように固定しました。以前は、への割り当てm@0は警告を発して何もしませんでした。したがって、バグ修正後、最初のステートメントはに設定m00009ます。これは、の有効なインデックスです。バグ修正前、mstays 1000、これは正当なインデックスではありません。(インデックスはまだ循環的ではありませんでした。)

タスク3: "Happy Birthday, ".a.'!

0.15.04.18

以前のすべての診断では、診断リストにnilが追加されます。

タスク2: "Hello, World!"


他のコードのほとんどは、さまざまなバージョンでエラーを回避するために行わなければならない微調整です。この投稿はすでに長すぎますので、説明していないことを知りたい場合は、難解な言語のチャットルームで議論しましょう。


4

6言語、226バイト(\x1b受け入れ方法によっては229バイト!)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));/*
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

だから、私は言語の最良の選択をしたとは思いませんし、これは特に競争力のあるものではないと思いますが、それにもかかわらず、これは興味深い挑戦であることがわかりました!全体的に、多くの課題は完了していませんが、おそらく私は空白または類似の課題に挑戦することができますが、これは私がこれまでに持っているものです:


1.ブレインファック

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

http://copy.sh/brainfuck/およびhttp://brainfuck.tk/でテスト済み

無視されたすべての文字を取り除いた後、上記のプログラムが残ります。これは、他の言語のシンボルの使用をバイパスするための追加の空のループを備えた単なるcatプログラムの例です。

2.ルビー

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

使用法:

ruby cluster

上記は、すべてのコメントが削除された後のコードです。我々はBefunge-93とbrainfuckコードを含むように、いくつかの正規表現を定義すると、最初の行は、我々は含まれて配列を作成し、Rubyで全く役に立たないHelloWorldして使用してそれを印刷printf追加する(,!)を。

3. Perl

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

使用法:

perl cluster <name>

ルビーと非常によく似た、ことを除いて、我々は配列参照を格納しているので$a、我々がアクセスしようとすると、$a[0]それは我々が挑戦3のテキストに置き換えることができますので、空だ、Happy Birthdaypop(これはショーのコマンドラインプログラムへの最後の引数)。

4. JavaScript

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;
$a=['Hello','World'];
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

使用法:ブラウザーコンソールに貼り付けて実行します。

ルビーやPerl、最初の行本質的に無駄な作成と同じRegExpオブジェクトを、我々はその後に無駄な配列を格納$a2つの無駄な文字列、ルビー/ Perlコードを含むものと改行を含むものとし、インスタンス化#、次いで、我々prompt()の入力とのためにalert()期待される結果ほとんどの人間がチャレンジ4のためにRegExp

9. Befunge-93

/&&#[+.#]@

http://www.quirkster.com/iano/js/befunge.htmlでテスト済み。

私が理解しているように/、スタックを分割NaNし、上記のサイトを押すこと以外の悪影響のない結果をプッシュし、&整数の入力を求めて、チャレンジ9で必要な両方の数値をスタックに読み取り、#スキップすることを保証します[それはbrainfuckのためにそこにあり、+次にスタックの上の2つの数字を追加し、.それらを出力し、#]再びbrainfuckのために@終了します。

13. PHP(Bashで実行)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));

使用法:

php cluster <x> <y>

PHPでは、<?タグに含まれていないものはすべてそのまま出力されるため、Befunge-93とbrainfuckコードがdie()出力されるため、すぐにコードを出力し、最初の2つの引数のうち画面クリア(\x1bc)を出力しますmax()


リテラルESCape文字を文字列リテラルに入れることができthe first character in the first string literal is the byte ASCII 27ます。そこにあるというメモを追加するだけです()。あなたのスコアは226です

@catええ、あなたは正しいと思います、私は今のところそのままにしておきましたが、タイトルに226を入れました。このチャレンジをどれだけ楽しんだか忘れてしまったので、もう少しできるかもしれませんし、ES6を使用して.match'\x09'( 'が `である)持っている可能性があるので、いつか追加できるかどうかを確認します!
ドムヘイスティングス

4

6言語、450 404バイト

bash、brainfuck、C、gawk4、JavaScriptおよびMinimal-2D

/*\t/#[R,+/D
/\t/ # UL.-L<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/#*/
#define func
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#//]++++++++[>+>+>++++++>++++++++<<<<-]>>++>--<<[>>>>>+++[<++++[<<....>....>-]<<<.>>>>-]<<<[>>+<<-]<[[>+<-]<]>>-]

更新:少しゴルフをしました。まだ他に何を追加するのかわからず、競合するメンバーが自分の言語をさまざまなタスクに使用することについて私がどう考えるかはわかりません。Brainfuckアルゴリズムを説明しようとしています。

まあ、これは私の最初のポリグロットの経験でした。awkから始めるのは、比較的寛大なので、私が思うに最も賢い考えではありませんでした。完了したタスクの数は関連しているため、最初に最も簡単なタスクから始めました。それが賢明な動きだったかどうかはわかりません。これらの6つを一緒に動作させるのに十分な苦労があったので、これはあまりゴルフではありませんでしたが、できるだけ短くするためにできることをしました。

以下に言語とその機能をアルファベット順に示します。それらすべてをさらに簡単にテストする方法を示します。この一部はバージョン固有のものである可能性があるため、使用したツールのバージョン番号を提供します。

bash、タスク3

さて、sedを使用したことは明らかです。なんとかしてこれにsedスクリプトを入れようとしましたが、動作させることができなかったので、bashルートに行きました。私がそれをやった方法は、Cコメントの中にあり、awkはそれを評価しますFalseます。

sed --version 与える sed (GNU sed) 4.2.2

bash --version 与える GNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)

sed部分は次のようになります

sed "s/^\(.*\)$/Happy Birthday, &!/;q"

入力をグループ化し、新しい文字列に貼り付けて結果を出力します。かなり一般的なもの。

Brainfuck、タスク20

さて、これは常に隠しやすいと思います。で始まる行#//は、Cおよびawkによって無視されます。または、少なくとも彼らはその背後にあるゴミと一緒に暮らすことができます。

bf 与える bf - a Brainfuck interpreter version 20041219

これは凝縮されたコードです。最初の行は、他の言語からのゴミのみです。

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

私はそれがどのように機能するかを説明しようとします

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

これはテープとこれへのポインタを配置します

0 8 10 46 64 C2 C1
  ^

8を保持しているセルは、次のループのグローバルカウンターです。
同じ行が3行印刷される回数です。

[>>>>>+++

C13、同じ行の数に設定します

    [<++++

C24に設定します....@@@@(行の「」の数(先頭))

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

ゼロの 場合C2、プロセスで完全な行のデクリメントを出力し、改行を出力してデクリメントします。
C2C1

場合C1ISはマジックが起こるゼロ

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

46は64
の10の後ろに移動し、グローバルカウンターは1つ右に移動します

>>-]

その後、グローバルカウンタが減少します
プログラムが終了ゼロになります。

C、タスク2

ここでは、「Hello、World!」と印刷して、Cの最後の小さな能力をすべて使い果たします。まあ、誰かが仕事をしなければなりませんでした...

gcc --version 与える gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2

実際のCコード

#define func
func main(){puts("Hello, World!");}
#

これ#define funcはawkを大丈夫にすることです。これはawk関数だと考えています。funcの略語はgawkの機能です。

gawk4、タスク18

ここではほとんどすべてにawkを使用しているので、この中になければならないと決めました。

awk --version 与える GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)

awkはこれを見る

/*\t/
/\t/
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#

を含む検索パターンはに\t評価されfalseます。入力に含めることはできないと思うので、ここでタブを選択しました。sedに評価されfalseます。"the string"&&0falseと評価されます。機能は大丈夫です。空のパターンが一致した場合にプログラムが実行されます。これは入力用です。

こうする

入力

エライック
パーリ
ucfit
スリグ

出力

すぺい
rcal
イフラ
ギリ
stic

すべての入力行が同じ長さであることを確認する必要があります。スペースを使用してそれらを埋めます。

JavaScript、タスク9

これがあまりにも簡単だったので、これが合法かどうかはわかりません。プログラムファイルにhtmlの末尾を付けて、ブラウザ(Firefox 40.0.3とchrome 45.0.2454.85を使用しました)で開くと、入力を求められます。スペースで区切られた2つの数字を入力する必要があり、それらの合計が警告されます。

<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>

最小2D、タスク1

これはコメント行に簡単に収めることができました。これをテストするために、Pythonで実行されるインタープリターを使用しまし。入力を出力に出力します。プログラムは次のようになります

R,+/D
UL.-L

RUDLは右、上、下、左です。そのため、正常に動作を開始し、stdinからメモリに文字を読み取り、1つ追加します。メモリの値が0の場合、スラッシュは次のコマンドをスキップします。これで終了します。値が-1の文字が読み取られた場合、入力は終了しています。したがって、-1が読み取られると、Dをスキップして終了します。他の何かが読み取られた場合、左に移動し、その1をメモリに追加して、文字をstdoutに出力します。それから左と上に行き、最初からやり直します。

テスト中

免責事項:これによりシステムに生じた損害について、私は一切責任を負いません。

これは、bash&co、gawk(少なくともバージョン4、多次元配列を使用するため)、gcc、python、bfをBrainfuckインタープリターとして使用し、Firefoxがインストールされていることを前提としています。

簡単にするには、プログラムソースをという名前のファイルにコピーしますcluster.html。そのファイルをbashタスク用に実行可能にします。Minimal-2dのインタープリターをコピーminimal2D.pyして、同じディレクトリにあるファイルに貼り付けます。次に、次のスクリプトをコピーしてスクリプトファイルに貼り付け、同じディレクトリに配置し、実行可能にして実行します。これを読んだ場合、おそらくそれほど多くの説明を必要とせず、とにかくそれを実行するつもりです。

#!/bin/bash
# Task  3: bash
echo "Dr. Hfuhruhurr" | ./cluster.html 2>/dev/null;echo
# Task 18: awk 
printf "elaic\nparli\nucfit\nsrigs\n" | awk -f cluster.html 2>/dev/null;echo
# Task  2: C
cp ./cluster.html ./cluster.c;gcc -w -o cluster cluster.c;./cluster;rm cluster cluster.c;echo
# Task  1: Minimal-2D
python minimal2D.py cluster.html <<<"This
has
to be
copied     !!!";echo
# Task 20: brainfuck
bf cluster.html;echo
# Task  9: JavaScript
firefox cluster.html 2>/dev/null
#google-chrome cluster.html 2>/dev/null

そこには、テストを個別に実行するためのコマンドもあります。

楽しむ!


Brainfuckには問題があります。コードには不均衡な括弧があり、正しく実行されません(関連部分だけでなく、ファイル全体を実行する必要があります)。また、チェッカーボードの正方形は、実際にはテキストがより正方形に見えるように、4x4ではなく4x3です。
PurkkaKoodari

ヒントをありがとう。さて、ここでうまく動作します。スクリプトでわかるように、常にファイル全体を実行します。実行する前にインタープリターが括弧を確認する必要があるかどうかはわかりません。私は気にしません。しかし、私はその行数を見落としていました。それを変えようとしました。
Cabbie407

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