矛盾するポリグロット


19

まあ、誰もがポリグロットを愛しています。標準形式の入力(ハードコーディングなし)で2つの整数が与えられます。あなたの仕事は、ある言語の最小値と他の言語の2つの数値の間の最大値を見つけて、次の操作を実行するポリグロットを書くことです。

  • 最大値を見つけるコードは、それらの合計も計算する必要があります。
  • 最小値を見つけるプログラムは、減算の結果も計算する必要があります(max - min
  • ここに「トリッキーな部分」があります:2つの数値が等しい場合、両方のプログラムは何も出力/返してはなりません(STDOUTおよびSTDERR/または他のreturnメソッドの両方 )
  • フォーマットの詳細については、出力仕様のセクションをご覧ください

入力

上記のように、両方の言語に共通の標準メソッドで入力として使用される2つの整数。

出力仕様

  • を見つけるプログラムのmax場合、形式は次のようになります。max_value, addition result
  • を見つけるプログラムのmin場合、形式はmin_value, subtraction result (max - min)
  • 結果は、(任意の明確な区切り文字で、印刷することができ\n,または任意の他、あなたが欲しい)、区切り文字で2つの期待値を含む文字列として、または数字(例:のリストとして関数から返さ[max_value,sum]

例:

Input   || Max Language Output || Min Language Output

100, 40 || 100, 140            || 40, 60
63, 67  || 67, 130             || 63, 4
-45, -5 || -5, -50             || -45, 40
21, 21  ||                     ||
-1, 1   || 1, 0                || -1, 2 

得点:

これはなので、標準の抜け穴が厳密に許可されていないことに注意しながら、目的の結果を得るために最短のコードを書くようにしてください。同じ言語の他のバージョンではなく、2つの異なる言語を使用する必要があります(例:Python 2- Python 3ペアは無効です)


@downvoterなぜそうなったのですか?
ミスターXcoder

6
mainに投稿する前に十分な注意を引くために、少なくとも2日間は質問をサンドボックスに保管することをお勧めします。私は投票しませんでした。
エリックアウトゴルファー

GoddammitがPy2 / Py3の回答を書いて、私が投稿しようとしていたのと同じルールを見ました。30分は母に戻ることはありません。
sagiksp

回答:


6

05AB1E / ゼリー21 20バイト

助けを求めてから-1バイト-エミグナに感謝!(`意志push(uwrapped(pop()))

生バイト(右側のダンプは、Windowsマシンが表示するものを示しています):

60 ca 69 b9 5a 73 4f 29 71 93 18 fa 2c d3 f7 d3    `Êi¹ZsO)q..ú,Ó÷Ó
cd 04 18 2f                                         Í../

両方とも、STDINから入力を受け取り、リスト表現としてSTDOUTに出力します[x, y]

最大言語は05AB1Eです。

`Êi¹ZsO)q“.ú,Ó÷ÓÍ../

どこ.それのコードページ(で印刷できないバイトを表しCP1252)、そしておそらくここにあなたが(0x18の=を使用しているものは何でも中CANと0x04を= EOT)を。

05AB1Eバージョンをお試しください

最小言語はJellyです。

İ__iỤZs0)qƓð«,ạẋạṠ¥ð/

Jellyバージョンをお試しください。

どうやって?

05AB1E:

`Êi¹ZsO)q“.ú,Ó÷ÓÍ../ - parsed left to right, executed as parsed
                     - implicit input taken
  i                  - If:
`                    -     push(unwrapped(pop()))
 Ê                   -     push(pop()!=pop())
                     - ...Then:
   ¹                 -     push(1st item from input history)
    Z                -     push(max(top of stack))
     s               -     push(reverse(pop(),pop()))
      O              -     push(sum(pop()))
       )             -     wrap(pop())
        q            -     quit - implicit print of top of stack
         “.ú,Ó÷ÓÍ../ - unexecuted and unparsed string

ゼリー:

`ȮiỤZs0)qƓð«,ạẋạṠ¥ð/ - parsed left to right, not executed until parsed
`ȮiỤZs0              - a dyadic chain which would error if executed (monad from dyad, index of, grade up, transpose, split into chunks of length 0)
       )q            - currently unassigned code points each currently creates a new link
         Ɠ           - read and evaluate a line of input
          ð       ð  - dyadic chain separations
                   / - reduce by:
           «         -     minimum(left, right)
             ạ       -     absolute difference(left, right)
            ,        -     pair(result)
                 ¥   -     last two links as a dyad:
               ạ     -         absolute difference(left, right)
                Ṡ    -         sign(result) (i.e. {0:0, +x:1, -x:-1} but -x never happens)
              ẋ      -     repeat list left right times
                     - implicit print

18

CおよびC ++(gcc)、117 107バイト

@Steadyboxのおかげで-10バイト!

#include<stdio.h>
int f(int a,int b){auto c=.5;a-b&&printf("%d %d",c?b<a?b:a:a>b?a:b,c?a-b>0?a-b:b-a:a+b);}

説明: Cではauto c=.5、自動ストレージクラス(デフォルト)で整数変数を宣言します。その後、0に初期化されますが、C ++ 11では、0.5に初期化されるdoubleを宣言します。そのため、変数の値はC ++では真実であり、Cでは偽です。

C-最大言語: オンラインでお試しください!

C ++-最小言語: オンラインで試してみてください!


2
非常にスマートなソリューション。コメントが使用されなかったという事実が気に入っています。
Mr Xcoder

5
数バイトを節約するには、変数を宣言してからの代わりにauto c=.5使用します。Cでは、自動ストレージクラス(デフォルト)で整数変数を宣言し、その後0に初期化されますが、C ++ 11では、0.5に初期化されるdoubleを宣言します。変数の値は、CでC ++でtruthyとfalsyされるようにcsizeof'a'-1auto c=.5
Steadybox

9

Python 3 / Jelly、42バイト

Jellyのコードページを使用してファイルをエンコードします。

生バイト:

6c 61 6d 62 64 61 20 78 2c 79 3a 5b 6d 61 78 28    lambda x,y:[max(
78 2c 79 29 2c 78 2b 79 5d 2a 28 78 21 3d 79 29    x,y),x+y]*(x!=y)
0a 23 7f fa 2c d3 f7 d3 cd 04                      .#.ú,Ó÷ÓÍ.

両方とも名前のない二項関数を定義します。

Python(最大言語)の見方:

lambda x,y:[max(x,y),x+y]*(x!=y)
#\x7fú,Ó÷ÓÍ\x04

Pythonとしてテストします。

Jelly(最小言語)の見方:

lambda x,y:[max(x,y),x+y]*(x!=y)½#
«,ạẋạṠ¥

ゼリーとしてテストします。

どうやって?

Jellyは0x0aを½平方根アトムとして解釈しますが、Pythonはそれを改行として解釈します。Jellyでは、0x7fはリンク(関数)の区切りとして解釈され、コードページの改行またはピルクローで表されます。Jellyの場合、最後のリンクがメイン関数です-ここでは、上記のリンクを呼び出しません(インタープリターはまだ正しく解析する必要があります)。Python 0x23では#、それ以降および改行である0x0aの前のすべてがコメントであることを指示します。

実行されるPythonコード:

lambda x,y:[max(x,y),x+y]*(x!=y)
lambda x,y:                      - A function taking two inputs, x and y
           [        ,   ]        - A list with two items
            max(x,y)             - take the maximum of x and y
                     x+y         - x plus y
                           x!=y  - x not equal to y?
                         *(    ) - multiply - True is treated as if it were 1, False as if it were 0

実行されるJellyコード:

«,ạẋạṠ¥ - A dyadic link (function of two variables): x, y
«       - minimum(x, y)
  ạ     - absolute difference(x, y)
 ,      - pair left with right (creating a list)
      ¥ - last two links as a dyad:
     ạ  -     absolute difference(x, y)
    Ṡ   -     sign(result) (i.e. {0:0, +x:1, -x:-1} but -x never happens)
   ẋ    - repeat the list to the left right times (either the same list or an empty list)
        - return the result

興味深い言語の選択
ミスターXcoder

Jellyコードを他のゴルフ言語と組み合わせて、バイトカウントを減らすことはほぼ確実に可能です。
ジョナサンアラン

うーん...あなたのコードスニペットは異なっているようです。
エリックアウトゴルファー

1
@EriktheOutgolferは、これらのコードブロックは、生のバイトの(従って単に表現である\x7f\x04Pythonのいずれかでunprintablesため)。
ジョナサンアラン

1
@JonathanAllanいいえ、私はあなたのスニペットが本当に違うことを意味します。それぞれのPythonコードをご覧ください。
エリックアウトゴルファー

8

Ruby / Python 3、102バイト

Rubyはmax / sumを返し、Pythonはmin / differenceを返します。入力は、STDINから読み取られた配列オブジェクトです。

a=eval((0and gets or input()))
b=a.sort()
x,y=(b or a)
z=0 or 1
x==y or print([[y,x][z],[x+y,y-x][z]])

オンラインで試す:Ruby

オンラインで試す:Python

ここで使用される主な癖は、0Ruby での真実の使用であり、これはPythonでは偽です。言及する価値のあるもう1つのことは、Pythonのsort関数がリストをその場で変更して返すのNoneに対して、Rubyはソートされた配列を返さないのでb or a、最小/最大を取得するために使用する必要があるということです。

Python 3が必要なのは、最後の行のステートメントのprint後に呼び出すとPython 2が文句を言うためですor


それは賢いです!+1
アルジュン

4

ジャワ/ AWK219の 217 212 196バイト

/*#\/* /
{$0=((x=$1)<y=$2)?x" "y-x:y" "x-y}x!=y
#*/interface B{static void main(String[]A){Integer x=Integer.parseInt(A[0]);int y=x.parseInt(A[1]);System.out.print(x==y?"":(x<y?y:x)+" "+(x+y));}}

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

Javaは最大値と合計を出力し、AWKは最小値と差を出力します。入力が同一の場合、どちらにも出力はありません。

これは私の最初のポリグロットであり、最初のTIOです:)


3

JavaScript(ES6)/ QBasic、172 171バイト

'';f=x=>{m=Math.max(...x);s=Math.min(...x);if(x[0]!=x[1])alert([m,m-s])}/*
INPUT c
LET m=c
LET s=c
INPUT n
IF n>c THEN m=n
IF n<c THEN s=n
IF n<>c THEN PRINT m,m+s
END
'*/

同様の質問のこのソリューションに基づいています。

このソリューションもコメントアプローチを使用します!

JavaScriptは最小言語です。入力として数値を含む配列を受け取ります。ingで区切られた2つの数値,(1番目の数値は入力配列の最小値、2番目の数値は入力配列の最大値と最小値の差)を出力しますalert()alert()数値が等しい場合は何もしません。のような関数を呼び出すことができますf([100,40])

QBasicは最大言語です。入力を2回繰り返し要求します。入力数の最大数と、入力の最大数と最小数の合計を出力します。PRINT数値が等しい場合は何もしません。


どのように機能しますか?

QBasic(構造化BASICファミリーの言語。行番号は不要)では'、行末まで続くコメントの開始をマークします。一方、JavaScriptでは、文字列の開始をマークします。したがって、QBasicでは最初の行全体がコメントとしてマークされますが、JavaScriptでは行が実行されます(この行には/*、最後に加えて、最小数と最大数と最小数の差を計算するJavaScript部分が含まれますJavaScriptインタープリターからQBasicコードの残りを隠すためにコメントを開始します。)

2行目から最後から2行目までのコードには、最大数と最大数と最小数の合計を計算するQBasicコードが含まれています(コードは自明です)。

最後の行にはが含まれています'*/'これにより、QBasicインタープリターは次のコードをコメントとして解釈しますが、JavaScriptでは、コメント(最初の行の最後から開始された)の一部であるため、効果はありません。次のコード(*/)により、JavaScriptは最初の行で開始されたコメントを終了させますが、QBasicはコメントの一部であると見なすため、QBasicでは実行されません。


テストケース

JavaScript(最小言語):

'';f=x=>{m=Math.max(...x);s=Math.min(...x);if(x[0]!=x[1])alert([m,m-s])}/*
INPUT c
LET m=c
LET s=c
INPUT n
IF n>c THEN m=n
IF n<c THEN s=n
IF n<>c THEN PRINT m,m+s
END
'*/

f([100,40]);

QBasic(最大言語):

このウェブサイトにアクセスてください。次のコードをコピーして、テキストエディターに貼り付けます。

1 '';f=x=>{m=Math.max(...x);s=Math.min(...x);if(x[0]!=x[1])alert([m,m-s])}/*
2 INPUT c
3 LET m=c
4 LET s=c
5 INPUT n
6 IF n>c THEN m=n
7 IF n<c THEN s=n
8 IF n<>c THEN PRINT m,m+s
9 END
10 '*/

行番号が必要な理由は、私が言及したWebサイトが非構造化BASIC言語のみをサポートしているためです。そして、そのウェブサイトは、私が見つけた唯一のまともなオンラインBASICインタプリタです。ただし、ポストの上部にあるコード(行番号のないコード)を実行すると、構造化BASICをサポートするQBasicインタープリターで正常に'機能し、コメントスターターとして機能します(ほとんど機能しませんが、ほとんど機能しません)

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