図と地面


32

図と地面
ソース:ウィキペディア

この課題では、上記の画像の図と背景に似た2つのプログラムを作成し、一方が印刷さfigureれ、他方が印刷されるようにする必要がありgroundます。具体的には:

  1. 入力を受け取らず、文字列を出力するプログラムを作成しますfigure。プログラムで許可されている空白文字は、スペース(コードポイント0x20)と改行(キャリッジリターン、0x0D、改行、0x0A、または両方の組み合わせ)のみです。
  2. 改行を無視すると、スペース文字(コードポイント0x20)と非スペース文字の数は同じでなければなりません。たとえば、これは有効なプログラムです(仮想言語):

    ab c 
       d
    e f
    

    最初の行に末尾のスペースがあることに注意してください。

  3. n番目の空白文字をn番目の非空白文字と交換する場合、プログラムはground代わりに印刷する必要があります。上記の例では、プログラムは次のようになります。

      a b
    cde 
     f 
    

    2行目と3行目に末尾のスペースがあることに注意してください。

地上の解法はどちらも、STDOUTに出力される同じ言語の完全なプログラムでなければなりません。どちらの場合でも、単一のオプションの末尾の改行を印刷できます。STDOUTが正しい限り、STDERRに何でも出力できます。

任意のプログラミング言語を使用できますが、これらの抜け穴はデフォルトでは禁止されています。

これはであるため、バイト単位で測定された最短の有効な回答が勝ちます。

ヘルパースクリプト

このCJamスクリプトを使用しフィギュアグラウンドプログラムを変換できます。2つのうちの1つを入力フィールドに貼り付けて、プログラムを実行します。また、スペースと非スペースの数が一致しない場合も通知します。

リーダーボード

回答:


20

ゼリー、20 バイト

“¦ĠȮ“©ụd» Ṃ         

末尾に9つのスペース。オンラインでお試しください!

接地

         “ ¦ĠȮ“©ụd»Ṃ

末尾のスペースはありません。オンラインでお試しください!

使い方

まず、スペースはアトムではないため、文字列リテラルの外側のスペース文字はプログラムに影響を与えないことに注意してください。

文字列リテラルは、Jellyの組み込み辞書ベースの文字列圧縮使用して、目的の単語を生成します。圧縮された文字列リテラルは、で始まる、で終わる»、および使用する文字列の配列を作成するために内部。

では図のプログラム、“¦ĠȮ“©ụd»文字列のペアを生成する(「図」、「アース」) 、および原子は、すなわち、辞書式最小を選択「図」

地上プログラムで“ ¦ĠȮ“©ụd»は、代わりに文字列ペア(「logicallyAbacs」、「ground」)を生成します。辞書編集上の最小値は現在「ground」であり、忠実選択されます。

どちらの場合も、インタープリターは自動的に最後の戻り値(選択した最小値)をSTDOUTに出力します。


14

Python 2、53バイト

·両方の回答でスペースに置き換えます。

····················
print'······figureground'[6:12]#

印刷しfigureます。

print'figureground'[
······6:12]#····················

印刷しgroundます。


14

05AB1E15 14バイト

 'ŠÂ,'í¶      

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

接地

'       ŠÂ,'í¶

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

CP-1252エンコードを使用します。末尾のスペースに注意してください。では図のプログラムは、エラーのない通常のプログラムです。次の単語を解凍します。

'ŠÂ  ->  figure
'í¶  ->  ground

カンマはポップを印刷し、印刷します figureし、改行を含む単語をます。何かが印刷されたため、スタックの一番上はもう印刷されません。

地上プログラム、この場合に便利です多少の誤差があります。次の部分:

'<space>

スタックの一番上にスペース文字をプッシュします。Šアリティ有するスタック、回転3。スタックには要素が1つしかなく、入力がないため、例外が発生し、スタックがクリアされます。Âスタックの先頭に分岐するが、これは回転演算子と同じ物語を持っています。したがって、基本的に,コマンドは何も出力しません。

つまり、プログラムはスタックの最上位であるを出力します'í¶。になりgroundます。


9

網膜、31バイト

図:

|       
図
 |地面
      

接地:

 |図

|       
接地

グラウンド。どちらのプログラムでも、有効な図または地上プログラムであるためには、STDINを空のままにする必要があります。


9

Pyth、30バイト

"figure" "ground              

14個の末尾スペース。

テスト

接地

末尾スペースなし

        "       figure""ground

テスト

使い方

むしろ便利なことに、スペースはPythでの印刷を抑制しますが、文字列リテラルは閉じずに "られは暗黙的に閉じられます。

最初のプログラムは、したがって、二つの文字列で構成され、"figure"そして"ground "。最初の文字列は暗黙的に印刷され、2番目の文字列の印刷は抑制figureされます。つまり、印刷されるだけです。

2番目のプログラムは、二つの文字列で構成され、" figure"そして"ground"。最初の印刷は抑制され、2番目の印刷は暗黙的に印刷groundされます。つまり、印刷されるだけです。


6

MATL、37バイト

最初のプログラム

'figure'         
%x'ground'         

各行には9つの末尾スペースがあります。

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

第二プログラム

    'figure'%
      x'ground'

ここにはトレーリングスペースはありません。

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

説明

何もひどく空想...

  • ステートメント間のスペースと改行はMATLによって無視されます。
  • % はコメント記号で、残りの行を無視します。
  • x スタックの先頭を削除します。
  • スタックは、プログラムの最後に暗黙的に印刷されます。

6

Java、180バイト

.スペースに置き換えます。

「図」を印刷します。

class
A{public
static
void
main(String[]a){System.out.println(
//"ground"
//
.....
........
......
....
...................................
..
........
..........
....
"figure");}}

「グラウンド」を印刷します。

.....
........
......
....
...................................
..........
..
class
A{public
static
void
main(String[]a){System.out.println(
//
"ground"
//"figure"
);}}
............


4

Mathematica、50 34バイト

REPL環境を使用します。(Print[]同じ数のスペースを持つラッパーを追加すると、バイト数が14増えます。)2つのプログラムは

01figure+0 1ground                

(末尾に16個のスペースがある)および

          0       1figure+01ground

ここで重要なのは、Mathematicaはスペースなしの数字の連結を単一の数値として扱うが、介在するスペースは数値と任意の変数名の連結と同様に近傍乗算として解釈されることです。最初の式の評価さそう1*figure+0*1*groundで、figure。2番目の式があると評価0*1*figure+1*groundされています、ground


4

PHP、44 42バイト

図:(16個の末尾スペース、5個の図と;の間のスペース)

echo''?ground:figure     ;                 

グラウンド:(20の先行スペース)

                     echo' '?ground:figure;

本当にシンプル''です' '。次のように使用します:

php -r "echo''?ground:figure     ;                "
php -r "                    echo' '?ground:figure;"

編集:マーティン・エンダーのおかげで保存された2つの遡及的に明らかなバイト


3

ハスケル、96 94 88 82 77バイト

最初のプログラム、印刷"figure"

main              =          putStr$idid"ground"
idid    _          ="figure"

2番目のプログラム、印刷"ground"

    main=putStr$id id"ground"                   
    idid _="figure"         

2つの異なる名前の定数関数のいずれかを呼び出します


3

Haskell、88 65バイト

main=putStr
...........--
.."figure"..........
--"ground"........

そして

...........
main=putStr..
--........"figure"--
.........."ground"

.スペースを示します。いくつかの行コメント(-> --)ジャグリング。


3

Python 2、52バイト

........................
print"figure"
an
d
"ground"

.sはスペースを示します。最後の3行は、SyntaxError、コードが最初から実行されるのを妨げるを。

グラウンドバージョンは and、2番目の文字列を印刷するためにします。


代替(より長い)試行:

.......
print(#"ground")#
"figure")...................


print"figure"""and"ground"
.............
.............

3

JavaScript(ES6)、56バイト

alert('figure'
                //&&'ground'
           )
              
alert('figure'//            
&&'ground') 

図には末尾スペースがありません。


改行がカウントされない限り、プログラムごとに56バイトをカウントします。短くなるとは思わない。
-ETHproductions

@ETHproductionsうーん、それはあなたが手動でバイトを数えるときに起こることです:
ニール

2

レール、56バイト

$'main'
 -[figure]o                
-          [ground]o

2行目には16個の末尾スペースがあります。プログラムはエラーで終了します。

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

接地

       
$ 'main'-[図] o
 -[地面] o         

最初の行には7つのスペースがあり、最後の行には9つの後続スペースがあります。このプログラムもエラーで終了します。

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

説明

Railは\$.*'main'、エントリポイントを見つけるために(正規表現)で始まる行を探します。列車(指示ポインター)は、$移動する南東から始まります。電車で到達できないものは、プログラムでは完全に無視できます。これには、エントリポイントと同じ行にあるすべてのものが含まれます。、以来-の南東には、$すぐに列車の東になり、両方のプログラムは、単純に減らします。

 -[figure]o
 -[ground]o

[...]文字列リテラルを示し、oそれを出力します。通常、#レールを終了する必要がありますが、省略した場合、プログラムはとにかく終了します(しかし、STDERRで列車がクラッシュしたと文句を言います)。


2

> <>、39バイト

を使用して ·スペースを表すためにします。

v·
"·dnuo
e·
r·
u·
g··
i··
f···
"·
>·o·

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

接地

·v
·"····
·d
·n
·u
·oe
·ru
·gif
·"
·>·o

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

両方のプログラムがエラーで終了します。

説明

コードを垂直に記述することgで、r両方のソリューションとその間の引用、引用符、>およびo出力ループのため。

どちらの場合も、実行されるのはv、必要な単語の文字を逆の順序でスタックにプッシュするの列のみです。次に>、命令ポインタを右にリダイレクトします。ここで、ループがループしo、スタックが空になるまで文字を出力します。


私は自分のバージョンで作業を始めたばかりで、その後あなたのバージョンに出会いました。私はあなたが垂直に働くというアイデアが本当に好きです(私のものは非常に「普通」です)。
ティールペリカン

@Tealpelican Fissionの答えが出るまでこれを思いつきませんでした。その前の私の最善の解決策は42バイトでした!__|"druong">o<"figure"_スペースはどこにあり、残りのスペースは単に行の最後になります)。
マーティンエンダー

私の最短の現在のバージョンはこれです; ## "de nr uu og ri GF"> o!〜〜!<##面白いのは42バイトです!以前のバージョンにはエラーチェックがありましたが、53バイトまでしか減らすことができませんでした。
ティールペリカン

2

核分裂、37バイト

·スペースを表すために使用します。

D·
"···
f··
i··
g·
u·
r·
e·ound
"·
;·

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

接地

·D
·"fi
·gu
·re
·o
·u
·n
·d····
·"
·;

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

説明

基本的に私の> <>回答と同じように機能します(実際には最初にこれを見つけました)。唯一の違いは"、Fissionで文字をすぐに印刷することです。そのため、単語が上下逆に書き込まれず、プログラムを;最後で終了するだけで済みます。


1

網状、46バイト

                      "ground""figure"" "?$$o;

オンラインでお試しください!これは印刷されgroundます。

"ground""figure"""?$$o                 ;      

オンラインでお試しください!これは印刷されfigureます。

接地

関連コード:

"ground""figure"" "?$$o;
................          push these two strings
                " "?$     pop " " off (since " " is truthy, `?` executes `$`)
                     $    pop TOS ("figure")
                      o;  output and terminate

関連コード:

"ground""figure"""?$$o;
................         push these two strings
                ""?$     doesn't activate
                    $    pop ""
                     o;  output and terminate

1

ブライアン&チャック55 53バイト

erugif?dnuorg             
}<.<.<.<.<.<.             

各行には13個の末尾スペースがあります。

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

接地

             erugif?dnuorg
             }<.<.<.<.<.<.

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

説明

ああ、前回Brian&Chuckを使ってからしばらく経ちました。簡単に説明すると、BrianとChuckはBrainfuckに似た2つのインスタンスであり、互いのソースコードをテープとして使用します。唯一のチャックは、印刷コマンドを使用することができ.?条件付きで2つのインスタンス間の切り替え、および}並べ替えのようなものです[>]Brainfuckインチ 不明なコマンドは単に無視されます。

プログラムの先頭のスペースは無視されるため、2つのプログラムはほとんど同じです。唯一の違いは、切り替えコマンドの後、次のコマンドを実行?する前に命令ポインターが移動するという事実から来ます。したがって、チャックのテープの最初のコマンドは常にスキップされます。したがって、唯一の本当の違いは、グラウンドプログラムが実行するの}に対して、フィギュアプログラムは実行しないことです。コードの仕組みは次のとおりです。

?   Switch control to Chuck.
}   GROUND PROGRAM ONLY: Move the tape head on Brian to the end of the tape.
<.  Move the tape head left and print the character there.
... Do the same another five times to print the remainder of the string.

0

WinDbg、74バイト

接地

                      ea2000000"      groundfigure";;;da       2000006  L6

ea2000000"groundfigure          ";;;da                  2000006       L6  

図には2つの末尾スペースがあります。少なくとも2バイトまたは4バイトはゴルファーにすべきだと思う...

文字列をメモリに書き込み、そこから6文字を表示することで機能します。文字列内の文字は、表示される文字がプログラム間で変更されるように再配置されます。

* Ground:
ea 2000000 "      groundfigure";     * Write string "      groundfigure" starting at 2000000
;                                    * No-op
;                                    * No-op
da 2000006 L6                        * Print 6 ascii chars, from 2000006, ie- ground

* Figure:
ea 2000000 "groundfigure          "; * Write string "groundfigure          " to memory
;                                    * No-op
;                                    * No-op
da 2000006 L6                        * Print 6 ascii chars, ie- figure

出力:

0:000>                       ea2000000"      groundfigure";;;da       2000006  L6
02000006  "ground"
0:000> ea2000000"groundfigure          ";;;da                  2000006       L6  
02000006  "figure"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.