ソースを2倍、出力を2倍にします。


127

あなたがそれを受け入れたいのなら、あなたの仕事は正の整数(0より大きい)を出力するプログラムを書くことです。扱いにくい部分は、ソースコードを複製する場合、出力は元の整数の2倍でなければならないということです。

ルール

  • 完全なプログラムを作成する必要があります。つまり、出力をSTDOUTに出力する必要があります。

  • 初期ソースは少なくとも1バイトの長さが必要です。

  • 両方の整数は基数10でなければなりません(他の基数または科学表記法で出力することは禁止されています)。

  • プログラムは入力を受け付けてはなりませ(または未使用の空の入力を持たせてはなりませ)。

  • 整数を末尾/先頭のスペースで出力できます。

  • ソースのコピー間で改行を使用することはできません。

  • これはなので、各言語で最も短い(元の)コードが優先されます

  • デフォルトの抜け穴が適用されます。

あなたのソースコードがでABCあり、それに対応する出力がであるとしましょう4ABCABC代わりに記述して実行すると、出力はでなければなりません8

リーダーボード

これは@manatworkのレイアウトを使用します


2
@ Mr.Xcoderその後、自分のソースに1つだけを含める必要があります。
-steenbergh

3
@ Mr.Xcoderあなたはあなた自身のソースコードを読むことを防ぐべきだったと思います。
コイアリンガーアーイング

1
一度倍にしときにのみ動作する必要がありますか?n回の倍増をサポートする必要はありませんか?
コーディグレー

6
@Danielソースが ``(空のプログラム)であり、を生成するとしましょう5。2倍にすると、ソースは ``(空のプログラム)になり、5何をしても関係なく生成されます。つまり、複製された空のプログラムは依然として空のプログラムであり、空のプログラムが他の何かを意味する場合(たとえば、乱数ジェネレーター)を除き、常に同じ出力を生成します。
ミスターXcoder

1
これは、プログラムの終了時にスタックの一番上を自動的にダンプするエソランにとっては難しいことではありません。
MD XF

回答:


152

Python 2、33バイト

print len(open(__file__).read())#

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

2倍にしてみて

Python 3、28バイト

print(len(*open(__file__)))#

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

2倍にしてみて

説明

これは、使用してソースコードを開くopen(__file__)と使用して、その長さを取得防止に読み出されるから任意のコードを追加します。ソースが2倍になると、長さも2倍になります。len#


28
うわー、私はst然としています...それはとても素晴らしいです!
ミスターXcoder

2
32バイト。追加モードを使用して機能し、現在の位置をファイルの最後に設定します。tell()ファイル内の現在の位置を返します
ハルバードフンメル

@HalvardHummelニース。ただし、この回答を更新するつもりはありません。自分で投稿したい場合は、私の意見ではかなり異なります。
スリオチリズムO'Zaic

@WheatWizardそれは理解できる、私は別の答え
ハルバードフンメル

96

ゼリー、1バイト

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

または二重に試してみてください!

私はこれがどのように機能するかわかりませんが、どうやらそれは機能します。


55
あなたが書かれたものは考えているその瞬間...
ミスターXcoder

2
気にせず、この8分間は遅すぎると思った。
ハイパーニュートリノ

17
すべてのリンクには引数が必要です。チェーンの最初の要素がniladである場合、その結果が引数になり、リンクが単項で実行されます。先頭にniladがない場合、代わりに0が使用されます。
デニス

65

Googleスプレッドシート、11 5バイト

数式を保持するセルへの入力と出力を行わない匿名のワークシート数式

=4/(2

単一の式として、これは次のような呼び出しスタックに評価されます

=4/(2
=4/(2)
=4/2
=2
2

ただし、このワークシートの式を2倍にすると、この呼び出しスタックは次のように評価されます。

=4/(2=4/(2
=4/(2=4/(2)
=4/(2=4/(2))
=4/(2=2)
=4/(True)
=4/True
=4/1
=4
4

もちろん、このメソッドを使用する意味は、これが問題の3回目以降の繰り返しで複数回繰り返されると、コールスタックが到達し=4/(2=4)、その結果=4/0#DIV/0!エラーが発生してスローされることです。

=DIVIDE(4,2数式から離れた代数に切り替えることで-6バイト


18
Googleスプレッドシートがコードゴルフで使用されるとは予想していませんでした。賢いソリューション
hucancode

11
@hucancodeこれに関する本当に興味深いビットは、末尾)のを除外するとExcelがエラーをスローするためです。この回答は、Excelの回答に変換されない唯一のGoogleスプレッドシートの回答です
Taylor Scott

45

05AB1E、2バイト

元の

XO

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

倍増

XOXO

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

説明

Xは1をスタックにプッシュします。
Oはスタックを合計します。


48
XOXO、素晴らしいソリューション。
ミスターXcoder

4
あなたは意図的にそれをしましたが、あなたもあなたが使うことができると知っていました1O
エリックアウトゴルファー

12
これらのばかげた言語はどこにありますか?
DavidB

7
@DavidB通常、彼らはそれらを書きます。
フェデリコポロニ

3
@DavidBはい、人々はcodegolfの言語を発明します、そして、はい、彼らは驚くほど低いスコアを得ることができますが、1バイトでそれを解決する挑戦が禁止された後に言語を発明するような愚かなことをすることは通常、これらの言語でのプログラミングは遠いです簡単です。
エソランジングフルーツ

43

C(gcc)、37バイト

i;main(){putchar(i+49);}/*
i=1;//*///

ファイルには末尾の改行が含まれていません。

構文の強調表示用の2倍のバージョン:

i;main(){putchar(i+49);}/*
i=1;//*///i;main(){putchar(i+49);}/*
i=1;//*///

TIOリンク:singledouble


3
これがどのように機能するか説明していただけますか?なぜコメントがコメント解除されるのでしょうか?
phil294

10
ソースコードを2倍にすると、/*はコメントアウトされます//。これは、次のコメントが外されていることを意味しますi=1。これは、シンタックスハイライトのコードの倍増バージョンを置くかどうかを確認する方が簡単です
musicman523

1
おっ、暫定的な定義のトリック。いいね
アシェプラー

39

六角形、7バイト

/)!@.).

1枚を定期的に印刷し、2枚を印刷しました。

オンラインでお試しください!または、 オンラインで倍増してみてください!

拡張バージョン:

レギュラー:

 / )
! @ .
 ) .

倍増:

  / ) !
 @ . ) .
/ ) ! @ .
 ) . . .
  . . .

通常のプログラムは次のパスに従い/)!.@ます。メモリエッジをインクリメントし(すべてゼロに初期化されます)、数値を出力します。二重化されたプログラムは次のとおりです/.)/)!@。代わりに、印刷前にエッジを2回インクリメントします。


6
うわーすてきな仕事。手で見つけたと思いますか?6バイトはブルートフォースの範囲にあるので、試してみようと思ったのですが、実際には4バイトのソリューションがあります[@!)(および570個の5バイトのソリューション)。実際に手作業で解決策を見つけるのに苦労したため、4バイトの解決策を投稿できてうれしいです。
マーティンエンダー

1
興味のある方は、印刷された番号を含む完全なリストを以下に示します。pastebin.com
Martin Ender


36

Braingolf、1バイト

+

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

今、私たちは話しています!

出力20、または40ソースが2倍の場合。

説明

+ もちろん、ブラインゴルフでは「和」、「追加」または「プラス」演算子ですが、ダイアディック、モナド、およびニラディックの機能があります。

スタックに少なくとも2つのアイテムがある場合、それはダイアディックであり、スタックの上位2つのアイテムを合計します。

スタックにアイテムが1つしかない場合、それはモナドであり、アイテムを2倍にします。

スタックにアイテムがない場合、それはniladicであり、20をプッシュします!

なぜ20を押し上げるのですか?空のBraingolfプログラムは単に改行を出力するだけで、改行のASCII値は10であるため、+実際に暗黙の改行でモナドになっているように、20のプッシュを作成すると考えました(実際にはそうではありませんが)すべて)

したがって:

+   No input
+   Niladic sum, Push 20
    Implicit output

そして倍にしたとき:

++  No input
+   Niladic sum, Push 20
 +  Monadic sum, Double top of stack
    Implicit output

28

Haskell26 18バイト

main=print$0
 +1--

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

倍増:

main=print$0
 +1--main=print$0
 +1--

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

トリプルバージョンのチャレンジに答えながらこのバージョンを見つけました。


コメントの乱用のない26バイトバージョン:

main|n<-1,nmain<-2=print n

オンラインでお試しください!印刷し1ます。

パターンに識別子がガードnに設定されている1nmain2、その後print nプリント1

ダブルプログラム:

main|n<-1,nmain<-2=print nmain|n<-1,nmain<-2=print n

オンラインでお試しください!印刷し2ます。

第1のパターンのガードでは再びnに設定されている1nmainする2がprint文になっており、print nmainそう、2印刷されます。パターンガードの識別子宣言はtrueと評価されるため、2番目のパターンガードに到達することはできません。


23

Mathematica、5バイト

(1+1)

出力2および(1 + 1)(1 + 1)出力4

そしてもちろん(あなたの多くが尋ねたように)

Mathematica、3バイト

(2)

1
(2)動作しますか?
-geokavel

9
@geokavel 2と同じようにスペースが、動作します+1が、これらのすべてはMathematicaのノートブック環境を想定ことに留意すべきである
マーティン・エンダー

1
opencloud Mathematica Sandboxで実行すると、単一のスペースがになりx2 出力2と出力2 2 2x2 4になります。これを代替ソリューションとして追加できます。
ミスターXcoder

2
(2)同様に動作します。
ミスターXcoder

6
2 同様に動作します。
-alephalpha

17

Brain-Flak、6バイト

({}())

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

説明

これが何をするかはかなり明確なはずです。 {}スタックから値を取得します。これは、暗黙的にゼロから始まり、 ()それに1を追加し(...)て値をプッシュします。2回目の実行では、スタックに1がすでにあるため、これに1を追加して2にします。実際、コードをコピーするnと、常に出力されますn


17

> <>7 6バイト

ティールペリカンのおかげで-1バイト

\ln;
0

オンラインでお試しください!
倍にしてみてください!

説明

私はAを使用する0が、私はまた、使用している可能性が1- 9a- f彼らはすべてのスタックに単一の値をプッシュしているため。

倍増しない:

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (1) onto stack; STACK: [0, 1]
n pops off the top value (1) and prints it; STACK: [0]
; end of execution

倍増:

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
0 pushes zero onto stack; STACK: [0, 0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (2) onto stack; STACK: [0, 0, 2]
n pops off the top value (2) and prints it; STACK: [0, 0]
; end of execution

5
PPCGへようこそ!これは、非常によく考えられた説明と優れたコードを備えた素晴らしい最初の回答です。あなたは私の賛成票を獲得しました!
ミスターXcoder

1
私はこの答えを見たばかりで、素晴らしいです!カップルの非常に素晴らしい改善> <>回答(私のものを含む!)-こちらのTIOリンクをご覧ください。tio.run/##S8sszvj/PyYnz5rLAEL@/w8A-0をスペースに移動するだけで、1バイト節約できます。:)
ティールペリカン

1
@Tealpelicanありがとう!このような単純な改善を見逃したとは信じられません。(実際には、> <>はあまり使用せず、ゴルフは初めてです!)正直に言うと、他のソリューションを詳細に見ていないので、それらは比較的大きく、競争しやすいので、問題をゴルフしてみてください。
Borka223

1
素敵な答え!これは私のクラインの答えと同じ方法を使用していることを指摘したかっただけです。(似たような2つの答えを指摘している人がいれば、私をコピーしたと非難しないでください。)
スリオチリズムO'Zaic

14

網膜、3バイト


1

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

印刷し2ます。2倍にして印刷し4ます。

は、1ほとんど何でも置き換えることができます。

説明


1

空の入力をに置き換えます1


空の一致の数をカウントします1。2つ(前の11つと後の1つ)になります。

プログラムを2倍にすると、最初の段階のような追加の段階が得られます。今回1は、最初のものの前後にを挿入し、を与え111ます。空の正規表現の一致の数を数えると、そのうちの4つが得られます。


14

Python REPL、2バイト

Pip、Dyalog APL、JavaScript、J、およびRでも動作します

+1

私は今、TIOを作成していますが、Python replをTIOで動作させることができませんでした


1
+1正確に私がやることです:Pしかし、くそ、あなたは私を約1分
忍者でした

1
これはDyalog APLでも機能します。
牛は


1
これこれをREPLに使用できませんか?
完全に人間

1
あなたは私の+1を持っています。
フェデリコポロニ

12

ニーム、1バイト

>

単にスタックのトップをインクリメントします。

スタックは、開始する無限の量のゼロとして想像することができます。したがって、これはゼロを増分して1を取得し、2倍して再び増分して2を取得します。

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

代替ソリューション:

1ではなく2を追加します。


12

JavaScript、38バイト

setTimeout('alert(i)',i=1)/*
i++//*///


setTimeout('alert(i)',i=1)/*
i++//*///setTimeout('alert(i)',i=1)/*
i++//*///


1
良いですね!できますi++か?
アーナルド

@アーナルド:確かに、提案をありがとう!
ブノワエズナード

12

Java8、135の 118 110バイト

シングル、プリント8

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

倍増、印刷16

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

回答のプレビュー、118バイト

シングル、プリント1

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

倍増、印刷2

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

仕組み

java-compilerは、ソースファイルのクラスごとに1つのファイルを作成します。したがって、B.classという名前のリソースが存在するかどうかを簡単に確認できます。


元の回答、135バイト

シングル、プリント1

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///

倍増、印刷2

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///

コメントであなたがしたことは本当にクールです。しかし、あなたは本当に新しいラインが必要ですか?
vikarjramun

ああ、nvm、2行目の1行コメントに気付かなかった
-vikarjramun

11

Python 2、32バイト

print open(__file__,"a").tell()#

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

ダブルソースコード

説明

これにより、追加モードでソースコードファイルが開きます。

open(__file__,"a")

次に、ファイル内の現在の位置を見つけます。これは、追加モードで開くため、ファイルの最後になります。

open(__file__,"a").tell()

この長さを印刷します

print open(__file__,"a").tell()

そして、コメントを追加して、ソースコードを2倍にしても、それ以上のコードが実行されないようにします

print open(__file__,"a").tell()#

9

Excel VBA、12バイト

rangeから入力を受け取り、rangeに出力する匿名VBEイミディエイトウィンドウ関数[A1]。範囲のデフォルト値[A1]""(空の文字列)であり、1回実行すると、次の値がこれに設定11れ、以降のすべての実行で増分されます。

[A1]=[A1+1]:

入出力

シングルバージョン

[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 1

ダブルバージョン

[A1]=[A1+1]:[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 2


8

、3バイト

|1"

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

私が他の答えで見たもののためのオリジナルのアイデア。

説明

|Huskの「or」演算子は、2番目の引数が完全な場合はそれを返し、それ以外の場合は最初の引数を返します。異なる型の引数に適用されると、まずすべての引数を数値に変換します。文字列(および一般的なリスト)の変換は、その長さを計算することによって行われます。

元のプログラムでは|、1と空の文字列に適用し、0に変換されます。結果は1です。

2倍のプログラムでは|、1と文字列「| 1」に適用され、2に変換されます。結果は2です。



7

CJam、3バイト

5],

オンラインで試す

5をアレイにカプセル化します。配列の長さを返します。コードを複製すると、以前に返された長さ1が既にスタック上にあるため、長さ2を返す[1,5]の配列を取得します。



7

Wumpus、4バイト

" O@

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

" O@" O@

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

通常のコードが印刷さ32れ、2倍のコードが印刷されます64

説明

"他の多くのFungeoidの場合と同様に機能します。コマンドを実行する代わりに、個々の文字コードがスタックにプッシュされるストリングモードを切り替えます。ただし、他のほとんどのFungeoidとは対照的に、Wumpusのプレイフィールドはラップアラウンドしません。そのため、IPは代わりに終わりを反映し、コードを前後に跳ね返ります。

そのため、単一のプログラムでは、次のコードが実際に実行されます。

" O@O " O@

文字列がプッシュし32, 79, 64, 79, 32ます。その後、スペースは何もせず、O印刷し32@プログラムを終了します。

二重化されたプログラムの場合、文字列は代わりにIPが跳ね返る前に終了するため、コードは1回だけ走査されます。

" O@" O@

今回は、文字列がをプッシュし32, 79, 64、プログラムをO印刷し64@終了します。

これが唯一の4バイトソリューションのようです。


6

、、、、 2 バイト

1∑

説明

1∑

1   push 1
 ∑  pop everything and push the sum of the stack

ソースコードが2つある場合、何かが足りないのですか、それとも3ではないのでしょうか。
テイラースコット

@TaylorScott申し訳ありませんが、スタックのすべての要素がポップされることに注意してください。
完全に人間

1
それははるかに理にかなっています-明確化のおかげで
テイラースコット

シグマは2バイトですか?
-nishantjr

1
@nishantjrは、ヘッダーでリンクされている独自のコードページを使用します。
完全に人間

6

バッチ、13バイト

@echo %~z0
:

説明:%~z0ソースファイルの長さに拡張されるため、ファイルを2倍にすると長さが2倍になります。2行目は、何もしない空のラベルを定義します。ファイルが2倍になると、@echo %~z0代わりに名前が付けられたラベルになり、3行目は別の空のラベルになります。


6

QBasic、 44  28バイト

最後に改行はありません4シングルの場合、ダブルの場合に出力8します。

4
READ x,y
?x+y
END
DATA 4,0

説明

単一バージョンの場合:

  • 4 行番号です。
  • READ x,y最初の2つの値をとりDATA声明とに格納xしてy。したがって、xgets 4およびygetsを取得し0ます。
  • ?x+y 2つの数字を追加して印刷します。
  • END プログラムを終了します。

倍のバージョンでは、DATA文となるDATA 4,04割り当てる、4両方にx及びy、従って製造x+y等しい8代わり。


6

Befunge-98、5バイト

90g.@

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

gFunge-Spaceの座標(9、0)で文字値を取得します。.整数として出力し@、プログラムを停止します。倍増バージョンでは、(9、0)はプログラムの範囲外であり、プログラム外のFunge-Spaceはスペースのデフォルト値に初期化されるため、32を出力します。倍増バージョンでは、(9、 0)は@文字なので、64を出力します。


これは、Befunge-98の最高の答えが...本当に創造的な答えになるとは思っていませんでした!
MildlyMilquetoast


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