すべての印刷可能な非英数字ASCIIシンボルを使用するプログラムを作成する


17

特に、ソースコードでこれらの各シンボルを少なくとも1回使用します。

! " # $ % & ' () * + , - .  / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

コメント、文字列リテラル、正規表現(または他の種類のリテラルなど)内のシンボルはカウントされません(ただし、/**/or などの区切り文字""はカウントされます)。

プログラムはアクションを実行しないでください。コンパイルするだけで、実行時に何もしません。

何らかの理由で、選択した言語で一部のシンボルを使用できない場合は、そのことを厳密に説明してください(除外する対象と理由)。

更新:いくつかの回答では、正規表現で記号を使用しました。これは少し問題があると思いますが、文字列リテラルやコメントに入れるのと同じことです(そのため、その要件になどを入れました)。これなしで試してください。上記の要件も更新しました。

更新:最短のコードが勝ちます(code-golfとしてタグ付けされます)。提案されているように、タイブレーカーの基準が必要になる可能性が最も高くなります。同点がある場合、勝者はASCIIシンボルが可能な限り順序付けられているようにすることをお勧めします。正式:リストされた各シンボルの最初の出現をプログラムから除外します。これにより、リストされたシンボルの置換が行われます。順列の反転数が少ないプログラムが優先されます。

更新: C / ++、Java、Scala、Haskellなどの標準/メインストリーム言語でのソリューションをいくつか見たいです。


1
特定の言語のキーワード、構文、または演算子に表示されない文字について、リテラルの例外を設定できますか?それは、リテラルの一部を除い@%、cにバックティックを表示することもできません(cの十分に新しいバージョンでは、ダイグラフに表示できます)。(そして、プリプロセッサディレクティブにのみ表示されますが、私たちはそれと共に生きなければなりません)?つまり、私はマットのアプローチが明示的に合法化されることを求めています。%#
-dmckee

2
最短のコードが勝ちますか?タイブレーク基準も必要になると思う
12

1
Javascriptを、文字では#@と`リテラルの任意の並べ替えのない法的外です
ピーター・オルソン

6
これは基本的に「これらの文字すべてを構文として使用できる言語を見つける」という競争です。私の意見ではかなりくだらないコードゴールド
アールズ

1
ええ、私は@Earlzに同意します。コードのリース量で何か有用なことをしなければならないと思います。現状では、それより短くなることはできません。さらに、いくつかの文字がリテラルの外で有効ではない言語は、いくつかの人々によって指摘されているように、即座に失格になります。つまり、受け入れ可能な回答だけでなく、正解期間もわずかしかありません。
ライアン

回答:


18

Brainf * ck、32文字

!"#$%&'()*+.-/:;>=<?@[\]^_`{|}~,

スマイリーフェイスを印刷します(コンソールがASCIIシンボル1を出力できる場合)

Yay、Golfscriptに勝るBranf * ckソリューション!:P

出力がないと主張する場合は、単に+andを交換して.ください:

!"#$%&'()*.+-/:;>=<?@[\]^_`{|}~,

6
フム...私はむしろそれを言うと思います、まあしかし、コメントで非表示文字を。
反時計回りを回すのをやめた

5
@leftaroundabout:有効な手順をコメントアウトするために使用できないため、技術的にコメントではありません。それらは空白として処理されます。ちなみに、これはルールの恥知らずな拡張であることに同意します。
-vsz

3
@vszルールを曲げても何も問題はありません。
ガレス

1
このソリューションの反転数は24であるため、ルールによると勝者です。文字を無視することはコメントに非常に近いため、私はそれについていくつかの疑問を持っていますが、それは私の悪いことだと思いますが、質問を書くときにこの可能性を考えていませんでした。
ペトルプドラク

1
@BodoThiesen確かにそれは非常に古いもので、勝つためのソリューションとして適格かもしれませんが、これはルールを少し引き伸ばしますが、これはより優れています。
ペトルスキー-パドラック

47

Perl、32文字

コメント、文字列リテラル、または正規表現に非表示のシンボルはありません。すべてのシンボルを一度だけ正確に使用します。

$`<@"^[(\{_},)]/+-~%'?&|:!*.=>;#

説明

私はインデントで演算子の優先順位を示しようとしました:右端の式は左の式の前に評価されます

        $`            # scalar variable $ named `
      <               # numeric less-than inequality <
        @"            # array variable @ named "
                      #   (array evaluated in scalar context)
    ^                 # bitwise XOR ^
        [(\{_},)]     # array reference [] 
                      #   containing array () 
                      #     containing reference \
                      #       to anonymous hash reference {}
                      #         with one key "_" 
                      #           and no value (nothing following comma ,)
                      #             (reference evaluated in scalar context)
      /               # numeric division /
        +-~%'         # unary addition +
                      #   and unary negation -
                      #     and bitwise complement ~
                      #       on hash variable % named '
                      #         (hash evaluated in scalar context)
  ?                   # ternary conditional operator ?:
    &|                # code reference variable & named |
  :                   # ternary conditional operator ?:
    ! *.              # logical negation !
                      #   on typeglob variable * named .
                      #     (typeglob evaluated in scalar context)
  =>                  # fat comma => for compound expression
                      #   (evaluates LHS as string, RHS is empty)
;                     # end of expression ;
#                     # start of comment #

私が間違っているなら私を修正してください、しかしあなたは単にスカラーを作りました`<@"^[(\{_},)]/+-~%'?&|:!*.=>か?
ラマ氏

2
@GigaWattいいえ、これはいくつかの異なる式のシーケンスです。評価方法の説明を追加します
-ardnew

@GigaWatt:いいえ。Perlでは、シンボリック識別子はすべて単一の文字です。そういったことの中で、私が考えて、このプログラムにのみ使用が$`@"%'、そして*.、それは確かにものすごく難しいものの、(それぞれスカラー、配列、ハッシュ、および型グロブ、)。。。
-ruakh

23
あなたは天才であるか、任意のランダムなバイトシーケンスが有効なPerlプログラムです。または両方。
ウゴレン

4
私自身のルールによればBrainfuckソリューションを授与しなければなりませんでしたが、これは私のお気に入りです(同じサイズですが、反転番号279)。
ペトルプドラク

9

空白、32

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

すべての非空白文字は無視されるため、これは実際には空のプログラムです


3
そのため、非空白文字はすべてコメントであり、これは無効であると主張することができます:)
NRGdallas

8

Python 65

a=lambda x:0.
@a#
def _():{[`'"$?'`,]};a<a!=a+a%a&a^a-a*a|~a>a/a\

私は文字を使用?して$、文字列リテラルの内部。これらの文字は、文字列リテラルまたはコメント以外では有効ではありません


これには無効な構文が含まれています。特に、{[`'"$?'`,]}値が関連付けられていないキーを持つディクショナリを作成するため、有効ではありません。次のようにさらに2つの文字で有効にすることができます{[`'"$?'`,]:0}
。– Strigoides

1
@Strigoidesいや、それはセットではなく辞書を作ります。しかし、そうであったとしても(値のないdictキー)実行されます。これは有効な構文ではなく、要件でした。(動作させるためには2.7以上のPythonが必要です)
マット、

私はそれをテストしたときにpython 2.6を使用していました。
ストリゴイデス

8

PHP、32文字

おそらくちょっとしたトロール、このPHPプログラムはQUINEでもあり、すべてのシンボルをリストされている正確な順序で使用します。

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

<?phpインタープリターを呼び出す必要がないため、コマンドラインから実行すると、出力はファイルの内容になります。

$ cat > a.php
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

$ php a.php
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

4
私見これはコメント、文字列リテラル、正規表現(またはその他の種類のリテラルなど)内のシンボルに違反します。プログラム全体が単一のリテラルであるため、カウントさません
ペトルプドラク

また、タスクに必要なプログラムは何も出力しないはずで、何も出力しないクインは1つだけです。
パエロエベルマン

PHPによっても解析されないので、これはほとんど無効です
ロブ

@RobQuistはもちろん解析されます。苦い最後までとらえどころのないT_OPEN_TAGトークンを探すのに忙しいです
リー

7

Perl 6(43文字)

かなり珍しい名前で中置演算子を定義しましょう:

sub infix:<!"#$%&'()*+,-./:;=?@[]^_´\|~>{}

REのリテラルまたはリテラル、またはコメントに隠されたものではありません。信じられない?次のプログラムを実行すると、「2」が出力されます。

sub infix:<!"#$%&'()*+,-./:;=?@[]^_´\|~>($a, $b){ $a + $b }
say 1 !"#$%&'()*+,-./:;=?@[]^_´\|~ 1;

しかし、あなたはnitpickersがルールをさらに拡張して、言語自体の再定義を排除し、perl lubbersを不幸にすることを確信しています。:(


これは大丈夫だと思います。識別子にシンボルを使用するのは理にかなっているようです。
ペトルプドラク

7

ハスケル、53

a@""#%&*+/?^b|a'<-a!!0=(\_->a`b`[]);main=do{print$1}

これを少し短くすることができます

45

a'@""#%&*+/?!<|^b=(\_->1`b`[]);main=do{main}

しかし、このプログラムは終了し、(複数の文字を使用していない'!''<''|'新しく定義された中置で)。


5

k(33文字)

kで非常に簡単。残念ながら"ペアにする必要があります。

(@:'!""#$%&*+-\./;<=>?^_{}[`]|,~)

5

GolfScript(33文字)

{!""$%&()*+,-./<=>?@[\]^_`|~};:'#

"ペアにする必要があります。何も出力しないようにするには、少しの試行錯誤が必要でした:'。結果のその他のほとんどの位置は、いくつかの出力でした。


5

J、33文字

''&][?!"$>{}:<;,|^~*/\%+`-@.#(=_)

' 構文エラーを避けるために2倍にする必要があります。

私の最初の答えは、いくつかの記号が欠けていた。


5

C、48文字

不正行為の種類。

#define _ ~''*+,-./:<=>?[]`|\
@%^$&!
main(){"";}

2
それらのほとんどが呼び出されていないマクロに表示されるため、「不正」の限界を確実に押し上げます。どうですか#define Q(_) "##_##"... char*c=Q(~''*+,-./:<=>?[]| \); `。何文字列は、それがただ一つに変換されなかっます...それはもちろん、長くなります。
dmckee

@dmckee、あなたの提案は私のものよりも正直だとは思わない。どちらの場合でも、問題のある文字はコードにはなりません。私はそれらのほとんどをコードに移動できました"";)が$@、バックティックは絶望的に見えます。
ウゴレン

それについては間違いない、私のファウル、人手不足と卑劣な。しかし、それも楽しいです。
dmckee

@dmckee、楽しみがそれの目的です。ところで、あなたが必要#define Q(_) #_です。プリプロセッサは"##_##"文字列リテラルとして扱います。
ウゴレン

5

追記-32文字

{!"#$&'()*+,-./:;=<>?@[\]^_`|~}%

スタック上のオブジェクトになりますが、それ以外は効果がありません。Postscript <>()[]{}/は、特殊な構文形式で%コメントを導入するものを除き、識別子にほとんどすべての文字を使用できます。プログラムは次のようにトークン化されます

{                  % start a procedure object
!"#$&'             % an identifier
()                 % an empty string
*+,-.              % an identifier
/:;=               % a symbol
<>                 % an empty hex string
?@                 % an identifier
[\]                % an array
^_`~|              % an identifier
}                  % close the procedure object
%                  % a comment

3

C#(91文字)

#define a 
class a{static int @Main(){return(char)1.1*""[0]/1%1-1+1!=1?1:~1^1>>1<<1&1+'\0';}}

私の知る限り、$文字は文字列リテラル以外の有効な文字ではないため、回答では使用しませんでした。

編集ピーターテイラーのおかげで、コードを短くしました。


1
#if A... #endifは... より短い#regionです#endregion。そして"x"[0]+、よりも短いです[System.STAThread]
ピーターテイラー

3

PowerShell(52文字)

$_+=(@(1.1,1)[0]-1)*1/1%'1'::ToInt|&{!"">~\1}<#^#>`;

^文字を文字列リテラルとして配置する必要があったのは、私が知る限り、^文字は文字列リテラル以外の正当なPowerShell文字ではないためです。間違っている場合は修正してください。

文字に収まることがわかった唯一の方法は、::演算子を使用して静的メソッドを呼び出すことです。


3

スキーム、41文字

(define !$%&*+,-./:<=>?@[\]^_`{|}~ "#'");

これは、変数名の文字に対するSchemeの信じられないほどの許容度を利用します。このプログラムでは、Schemeが喜んで受け入れる!$%&* +、-。/:<=>?@ [] ^ _ `{|}〜という名前の変数を作成します。



3

C:83 56文字

#undef a
_;main($){$/=-+~!0|0^0%1,1<.0>0?'`':*&"@"[0];}\

アットマークとバックティックは許可されているC構文の一部ではないため、引用符で囲みました。


1
なぜ括弧が(b)?それは奇妙な構文であり、文字の浪費です。
ウゴレン

1
ドットに構造体を使用すると、0.0はるかに短くなります。
ウゴレン

どうしてそれを考えられなかったのでしょうか(0.0)?括弧は、実際に1文字を保存したときの残りの部分ですが、実際には不要です。ありがとう@ugoren!
Fors

main(_,$)キャラクターを救うと思います。
ウゴレン

そして、gccを使用すると、を書くことができますがx?:y、標準Cではありません。
ugoren13年

2

Common Lisp、33文字

#+()'|!"$%&*,-./:;<=>?@[\]^_`{}~|

上記の主要部分は、次の#+()名前のシンボルを評価します(または、その前にない場合は評価します)。

!#$%&()*+,-./:;<=>?@[\]^_`{}~

これ#+()は出力を避けるためです。|foo|シンボルの構文がリテラルとしてカウントされるかどうかはわかりませんが、シンボルはCommon Lispで変数/関数名として使用され、それらに必要な文字を使用するいくつかの答えが既にあります。


2

Smalltalk(Squeak 4.x方言)38文字

Objectでこのメソッドを実装します。アンダースコアの割り当てが設定で許可されている場合(デフォルト設定)、構文は有効です。

%&*+/<=>?@\!~y""^Z_([:z|{#'',$`;-y}]).

対話型の場合、ポップアップメニューでグローバル変数としてZを宣言します

説明:

  • %&* + / <=>?@!〜はバイナリセレクター(演算子)です
  • yはパラメーター(オペランド)です
  • 「」は空のコメントです
  • ^は戻りを意味します
  • Zはグローバル変数です
  • _は割り当てです
  • ()部分式を区切ります
  • [:z |]は、1つのパラメーターzでコードのブロックを区切ります
  • {}は配列を区切ります
  • # ''は、空の文字列(配列の最初の要素)で構成されるシンボルリテラルです
  • 、上記のSymbolに送信されるバイナリメッセージです
  • $ `は、上記のメッセージの引数として使用される文字リテラルです
  • ; 同じシンボルレシーバーに送信された2番目のメッセージをチェーンするためのものです# ''
  • 2番目のメッセージは-
  • yは2番目のメッセージ引数として使用されます
  • 。次の指示を分離するためのものです(ここでは最終期間です)

くそー、Smalltalkが読めると言ったのは誰ですか?

私はチートしなかったことに注意してください、唯一の無効な文字 `はリテラル文字に入れられます。編集以下を参照してください、これは誤ったアサーションでした(少なくともSqueakでは)


しかし、このトリックを使用して34文字まで減らすことができます

%&*+,-/<=>?@\!~|y""^[{#(:_;`$')}].

今回:

  • #()はリテラル配列を区切ります
  • 4つのリテラルシンボルが含まれます。`と1つのリテラル文字$ '

厳密に言えば、これは不正行為と見なすことができます...これはリテラル文字列ではありませんが、それでも空ではないリテラルです...

私はまだ二重引用符 ""
を使用する必要があります(リテラル文字を$で作成しない限り、文字列引用符を二重にする必要があります '')パラメーターに文字を使用する必要があります(_は受け入れられませんセレクタでアンダースコアを許可する設定を行いますをtrueにします)。

良いことは、メソッドを実行することさえできることです。たとえば、引数2でメッセージを1に送信します。

1%&*+,-/<=>?@\!~|2

最後に35で編集不正行為なしで文字で

!%&*+,-/<=>?@`y""^[:x_|#()~$';\{}].

ノート:

  • 環境設定 x_という名前のブロックパラメーターを使用して、セレクターでアンダースコアを有効にできます。
  • `は、私が言ったこととは反対に、バイナリセレクタに有効な文字です。
  • また、二重引用符を避けるために$ 'を使用します

1

R:108文字

a=new(setClass("a",representation(b="list")));a@b=list(c_d=1:2);if(1!='\t'&.1%*%1^1>a@b$c[1]/1|F){`~`<-`?`}#

明らかに最も長い提出物ですが、シンボル@および$Rで使用できるようにするには、スロット(を使用してインデックス付け@)および名前付き要素(を使用してインデックス付け)を持つオブジェクトを作成する必要があります$
私が考えることができる最短の解決策は、オブジェクトの新しいクラス(a=new(setClass("a",representation(b="list"))))を作成することでした。それ以外の場合は、説明を必要としないクラシック(!=#またはなど1:2)のアパート、

`~`<-`?` 

演算子と同じことを行う新しい演算子を作成します?(つまり、先行する要素のヘルプページを呼び出します)。

%*%2つの行列の内積を計算します(ここで1^1.1)。Rでは
Symbol _は何も行いません(AFAIK)が、ここではそうであるように、変数名または関数名で日常的に使用されます。


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