左手と右手—タイピストの挑戦


32

あなたの仕事は、キーボードの両側を相互に突き合わせ、同じ言語で2つのプログラムを作成することです。1つは標準キーボードの左側のキーのみを使用し、もう1つは標準キーボードの出力Pollinium milk; plump pumpkin; lollipop?を使用しますWeatherheaded sweetheart haberdasheress!

ルール

左側のプログラムに許可される正確なキーは次のとおりです。

123456!@#$%^QWERTYqwertyasdfghASDFGH`zxcvb~ZXCVB

右側のプログラムの場合:

7890-=&*()_+uiop[]UIOP{}jkl;'\JKL:"|nm,./NM<>?

4つの無料のキーEsc\x1b)、Tab\x09)、Space\x20)、およびEnter\x0aおよび/または\x0d)があり、どちらか、両方、または両方のソリューションで使用できます。

スコアは、両方のプログラムの合計バイト数になります。という用語を使用しましたがprogram、提出物は完全なプログラムまたは通常の機能のいずれかであり、両方とも異なるタイプ(たとえば、1つの完全なプログラムと1つの機能)になります。

結果には目的のテキストが含まれている必要があります。その中に正確なテキストが表示されている限り、任意の量の先頭および末尾の空白でかまいません。

標準的な抜け穴は禁止されています。

各言語で最短のソリューションが勝ちます。


6
なぜHは左手ですか?
tsh

1
@tshキーボードを6/6(または可能な限りそれに近い値)に分割して、各「ハンド」のシンボルの数をさらに均等にしたかったのです。
ドムヘイスティングス

8
//空白を学習して後で戻る必要があるかもしれません
...-tsh

@tsh、ホワイトスペースの答えは避けられないと思います!しかし、どれほど競争力があるかはわかりません!おそらく今、遅すぎることに対処すべきだったでしょう!
ドムヘイスティングス

要求されたテキストが含まれている限り、プログラムに他の(空白以外の)出力がある場合でも問題ありませんか?
グジェゴシOledzki

回答:


12

Perl 5、261 = 88 + 173バイト

これは、「言語オプションが考慮されない」問題である例です。右側のソリューションではを使用します-pが、左側では使用しません。それで、それは同じ言語としてカウントされますか?そして、オプションは左/右の文字セットから来るべきですか?

左88

このオプションがコードとしてカウントされ、左側から来る必要がある場合、または「言語バージョンを設定するオプションがカウントしない」に該当する場合は、-M5.10.0(または-Eコマンドラインから)アクティブにするために使用しsayます

say eYYYYZYEYWYYYYYWQYEYQWQEYQYYZYWYYYYYQYQW^q%565504004w4052bw!504!w!04!204bw56550!6!h%

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

右173

-pオプションを使用して実行する(これも正しい文字で構成されます)

}{*_=\(uuuuuuuuuuuuuiuuuuuuuuuuiuuuuuuuuuuuuuui&Uiipjipjiijij0puiipjiipp0jijipjipjipipp7|Ouiujujjuiuuu0kouuujuiju0jijujuikjujukk7&"7oulio7iouloli77ooliou7liiu7o7lu7io7o77i")

これはほぼ確実に改善できますが、今のところは何かを機能させるのに十分でした。アクセスを持っていないprintsay$_sub{}トリッキーな出力になります

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


フラグをまったく気にせず、これが有効であることを嬉しく思います。evalvia を呼び出したとき、いじくり回していたものよりもはるかに短いソリューション&{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}です。
ドムヘイスティングス

12

空白1175 1143 655 645 638 632 639 578(293 + 285)バイト

.p;
スタックを逆方向に埋めて最後にすべての種類のループで印刷することで間違いなくゴルフをすることができますが、これはこれまでで2番目のホワイトスペースプログラムであるため、まだ理解できていません..編集:ゴルフ。

+.7バイト。スペルが間違っpumpkinているためpumkin..(気付いてくれてありがとう、@ fəˈnɛtɪk。)

強調表示としてのみ追加される文字S(スペース)、T(タブ)、およびN(改行)。
[..._some_action]説明としてのみ追加。

左側Pollinium milk; plump pumpkin; lollipop?

[S S T  T   S T T   T   T   N
_Push_-47_?][S S S T    S N
_Push_2_p][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_p][S S T  T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_l][S S T  T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   T   N
_Push_-3_k][S S S T S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S S T  S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S S T    S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S N
_Push_-2_l][S S S T S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S T  T   T   N
_Push_-3_k][S S T   T   S N
_Push_-2_l][S S T   T   S T N
_Push_-5_i][S S T   T   N
_Push_-1_m][S S T   T   S S T   T   T   S N
_Push_-78_space][S S T  T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S T N
_Push_-5_i][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S S T    T   T   T   T   S N
_Push_-30_P][N
S S N
_Create_Label_LOOP][S S S T T   S T T   T   S N
_Push_110][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

オンラインで試してください(未加工のスペース、タブ、改行のみ)。

右側Weatherheaded sweetheart haberdasheress!

[S S T  T   S S S T S S N
_Push_-68_!][S S S T    T   T   S N
_Push_14_s][S N
S _Duplicate_14_s][S S S N
_Push_0_e][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   S N
_Push_14_s][S S T   T   S S N
_Push_-4_a][S S T   T   N
_Push_-1_d][S S S T T   S T N
_Push_13_r][S S S N
_Push_0_e][S S T    T   T   N
_Push_-3_b][S S T   T   S S N
_Push_-4_a][S S S T T   N
_Push_3_h][S S T    T   S S S T S T N
_Push_-69_space][S S S T    T   T   T   N
_Push_15_t][S S S T T   S T N
_Push_13_r][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S S N
_Push_0_e][S N
S _Duplicate_0_e][S S S T   S S T   S N
_Push_18_w][S S S T T   T   S N
_Push_14_s][S S T   T   S S S T S T N
_Push_-69_space][S S T  T   N
_Push_-1_d][S S S N
_Push_0_e][S S T    T   N
_Push_-1_d][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S T    T   T   T   S N
_Push_-14_W][N
S S N
_Create_Label_LOOP][S S S T T   S S T   S T N
_Push_101][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

オンラインで試してください(未加工のスペース、タブ、改行のみ)。


説明:

最初に逆スタックを構築します。番号のプッシュは次のように行われます。

  • S 開始時:スタック操作を有効にする
  • S:数値として続くものをスタックにプッシュします
  • S/ TS正とT負の符号ビット
  • いくつかTS、続いてNスタック(バイナリとして置い番号:T=1S=0)。

次に、逆のスタックをループし、すべてを文字として出力します。これは次のように行われます。

  1. プッシュ0(SSSN
  2. 上記で説明したように、逆の文字を示すすべての数字をプッシュします
  3. Label_0NSSN)を 作成する
    1. スタックの最上部を複製(SNS
    2. 移動:この値が0の場合Label_1NTSTN
    3. その他:スタックの先頭を文字(TNSS)としてポップして印刷します
    4. Label_0NSNN)にジャンプ
  4. 作成Label_1NSSTN

上記は、両方のプログラムのデフォルトのレイアウトです。バイトカウントをさらに削減したこのデフォルトレイアウトの変更ログは次のとおりです。

  1. すべての数値を同じ量だけ下げて(最初のプログラムと2番目のプログラムで)、現在の低い数値に使用される2進数を減らし、ステップ3.2と3.3の間に次の2つのサブステップを追加します。100 110102 101

    • SSSTTSTTTSNプログラム1で110()、またはSSSTTSSTSTNプログラム2で101()を押す
    • スタックの上位2つの値をポップし、互いに追加すると、結果はスタックの新しい上位(TSSS)になります
  2. 私はまた、使用していたSNSゴルフに使用され、スタックの最上位を複製するためにいくつかのケースではlllleess

  3. さらに、手順4(作成Label_1)は完全に削除されました。エラーで終了しますが、すべてを正しく出力します(メタに従って許可されます)。

  4. nスタックの一番上から(STS+ 0-indexedでn)'番目の値をコピーすることができます。これは、場合によっては新しい番号を作成するよりも短くなります。
    私はこれをやった最初のプログラムでは:第二ppopSTSSTN(コピー1)がより短いSSSTTSSN)「P」の番号を作成する()、第二llolSTSSTN(コピー第一は)よりも短くなっているSSSTSSSN(「l」のために番号を作成します))、第二pp pSTSSTN(コピー1)がより短いSSSTTSSN(「P」の番号を作成する))、第二ppumlpSTSSTTN(コピー第三が)よりも短くなっているSSSTTSSN「P」の番号を作成する())、第二ppmupSTSSTSN(コピー2))より短いSSSTTSSN( 'p'の番号を作成))、((コピー1st)の2番目mm m('m'の番号を作成STSSTN)よりも短いSSSTSSTN)、((copy 1st)の2番目iini('i'の番号を作成STSSTN)よりも短いSSSTSTN) )。
    2番目のプログラムでは、これは行われません。いくつかの間の距離は、ereまたはのようにかなり短いですが、ded「e」(SSTTN)または「d」(SSTTSN)の数を作成すると、コピー1st(STSSTN)と同じか短いので、このトリックを適用できませんでしたバイトを保存する2番目のプログラム。注:ゴルフステップ7の後、これらのすべてが適用されるわけではありません。

  5. 両方のプログラムで、ループのステップ1をSSSN(プッシュ0)からSSN(プッシュerror_value)に変更し、ステップ3.1(SNS重複)と3.2(NTSTN0の場合:終了)を削除しました。これでSSN、アクセスを試みるとすぐに不明な値のエラーで終了します。

  6. SSN両方のプログラムで(error_value)を完全に削除しました。スタックに何も残さずにAdd関数を実行しようとすると、エラー「Canfix do Infix Plus」で停止します。

  7. 一定の値に変更100し、102110101それぞれ。ここで、110定数の生成に使用されるJavaプログラム。そして、ここでJavaプログラムを生成するために使用する101定数を。新しい値は多くの場合コピーよりも短いため、再プッシュはより短いため、上記のポイント4で説明したよりも少ないコピーが使用されることに注意してください。


STスタッフは、数値をバイナリとしてプッシュし、スペースを0、タブを1として出力します。出力はTNSSなので、各プログラムの先頭に余分な2つのスペースがあります。また、おそらくバイトを保存して複製し、各文字を加算/減算し、最後に値をループします。
ジョーキング

1
カボチャのつづりを間違えています。
fəˈnɛtɪk

@ fəˈnɛtɪkおっと笑..今修正する必要があります。
ケビンCruijssen

4

言語、これだけのバイト

左側はの65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868回の繰り返しでa、次のBrainfuckプログラムと同等です文字:

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

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

右側はの636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140回の繰り返しでp、次のBrainfuckプログラムと同等です文字:

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

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



3

分裂、958 + 752 = 1710バイト

._。

D
z
^@$$$$$$$$$$$$$$$$$$$@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~@!!@~~~@!@$$$$$@!@~~~~~@!@$$$$$$$$$$$$@!@~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$@!@~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$$$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~@!@~~@!@$$$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$@!@~~~@!!@~~~@!@$$$$$$$@!@~@!@$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!V

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

                                           } \} \    } \      } \    } \   } \   } \    } \   } \       } \    } \   } \ } \       } \   } \                                           } \   } \    } \    } \   } \   } \   } \} \      } \    } \    } \                                           } \ } \ } \   } \    } \   } \   } \    } \   } \   } \   } \    } \      } \ 
O________________________________________I'/O\/O\__u'/O\____i'/O\++p'/O\___/O\_i'/O\__u'/O\___/O\_____i'/O\++p'/O\+++/O\+/O\_______/O\_i'/O\_________________________________________I'/O\_u'/O\++p'/O\____/O\___/O\_i'/O\_u'/O\/O\____i'/O\++u'/O\__u'/O\_________________________________________I'/O\_/O\+/O\+++/O\____/O\___/O\_i'/O\++p'/O\___/O\_i'/O\_u'/O\____/O\____i'/O\+++++++P'L

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

さて、ここで私たちは運が良かったのです。実際は._。
Fissionの最初のクールな機能は、コマンドポインター、AKAアトムを作成する4つのコマンドがあることですRLDU。したがって、左右のグループに2つのコマンドがあります。
2番目のラッキーチャームは、出力用の2つのコマンドで!ありO、異なるグループで発生します。
三度目の魅力。両方の出力コマンドは、原子の質量に相当するASCIIを出力します。だから、どうにかそれを変える必要がある。私は幸運!両方+ (+1 mass)_ (-1 mass)一つのグループとすべての必要な3つである$ (+1 energy)~ (-1 energy)@ (swap mass and energy)他のグループです。

また、両方のグループの原子を制御するミラーがあります!しかし、私は最初のプログラムでそれらを使用しませんでした

だから私を止めることは何もありませんが、コンパクトにすることはできず、段階的に質量を設定します。

最初のプログラム

最初のプログラムは Dz^@$~!V

D   create atom, going down
z   set its mass to ASCII code of 'z'
^   split atom in 2, dividing their mass. One goes left, second - right

開始は簡単(ちょうどR)にできますが、除算を使用すると、最初の文字のバイト数が節約されます。
Atom、左に回り込んで出会うとV、彼は降りて無期限にラップし、何もしません。
2番目のアトムは適切に動作し、@...@!出力する各文字に対して多数の繰り返しパターンに遭遇します。

@   swap atom's mass and energy
... increament or decrement energy until it would match desired ASCII code
@   swap again
!   print character by atoms mass

最終的にはV、最初の原子の運命に遭遇し、共有します。それらを破壊したり、キーボードの左部分で停止したりする方法はありません。

第二プログラム

2つ目は浮き沈みがあります。質量を直接変更するコマンドがありますが、出力コマンドOは原子を破壊するため、何らかの方法でそれらを保存する必要があります。
プログラムはL、原子の左から右から始まります。

繰り返しパターン:

} \
/O\...X'

'次に、原子質量にいくつかのようにコードを文字のASCIIコードをencouteredプットは、X質量が変化したよりも、最初に格納されている_+、正確な値です。とを使用する方が短い場合は、スキップさ
れることX'_あり+ます。

Atomは左から来て、2回ミラーリングし、左からヒット}します。この場合}、クローンのように機能し、2つの同一の原子を上下に送信します。下の原子は鏡で反射し、左に進みます。アップアトムラップは、同じミラーにヒットしますが、下から、正しい反射、遭遇O、および印刷を反映します。
最後に、最後のアトムOが破壊されるファイナルを満たします。

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