ますます少なくなります


72

誰もが文字を追加することでプログラムの出力を大きくすることができますので、正反対を行いましょう。

次の基準を満たす任意の言語で、REPL環境の完全なプログラム、内部関数、またはスニペットを記述します。

  1. コードは少なくとも1文字の長さが必要です。

  2. 元のコードを実行すると、STDOUT(または最も近い代替)への出力のx文字が生成されます。ここで、0≤x <+∞です。

  3. 元のコードから任意の1文字を削除すると、有効なコードが再び生成され、少なくともx + 1文字のSTDOUTへの出力が生成されます。

  4. 元のコードも修正も、STDOUT、STDERR、syslog、または他の場所へのエラー出力を生成しない可能性があります。この規則の唯一の例外は、コンパイラの警告です。

    プログラムでは、エラー出力を抑制するためにフラグや設定を必要としない場合があります。

    プログラムが出力を生成しない場合でも、プログラムに致命的なエラーが含まれていない可能性があります。

  5. 元のコードと変更の両方が確定的であり、最終的に終了する必要があります(無限ループなし)。

  6. 元のコードも修正も、いかなる種類の入力も必要としないかもしれません。

  7. 関数またはスニペットは、実行間で状態を維持できません。

このタスクは些細なことであり、他の言語ではまったく不可能であると考えると、これはです。

投票するときは、コードの「相対的な短さ」を考慮に入れてください。つまり、同じ言語で長い回答よりも短い回答の方が創造的であると考えるべきです


2
1バイトのソリューションは印象的ですが、1つの文字が削除されたときの出力の平均長と比較して、通常の出力の長さの最大比率x:x + nieを誰が思い付くかを見ると、より印象的です。私の意見では、この質問にさらに挑戦を追加します。
トレント

@FizzBu​​zz Easy:(111111111111111111^111111111111111111最低の比率を意味する場合)。
jimmy23013

2
ああ、「無限ループがない」ことに気付いた。一定の命令の後、各プログラムの出力が厳密に元の出力よりも大きくなるように、1つの文字が削除された場合に出力をより速く作成する> <>プログラムの作成に取り組んでいましたk(他のプログラムはより速くループするか、各ループにより多く出力します)。かなり面白そうでした。とにかく終了できるかどうかを確認し、別の課題を作成します。
mbomb007

この課題の興味深いスコアメトリックは、「最もユニークなキャラクター、タイは最短の長さになります」です。ただし、文字列リテラル内のすべての文字を取得しようとします。
リトシアスト

内部関数とはどういう意味ですか?
dfeuer

回答:


94

キャレットXOR操作を使用したREPL、5バイト

11^11

11^11唯一の他の可能性があり、もちろん0である1^11、または11^110である、または1111それ自体を生成します。


7
よくやった、フェールサム。よくやった。
アレックスA.

13
マイナスもトリックを行います。
マーティンエンダー

11
同様に、99|99
Sp3000

@ Challenger5 -10はより長いです0
マーティンエンダー

@MartinEnderああ、なるほど。なんらかの理由で、もっと大きい数字にしなければならないと思いました。
エソランジングフルーツ

55

TI-BASIC、3 1

"

プログラムの最後の行が式の場合、計算機はその式を表示します。それ以外の場合、Doneプログラムが終了すると計算機が表示されます。ここの式は空の文字列ですが、1桁の数字でも機能します。

2バイト:

isClockOn

上記と同じですが、2バイトのトークンを使用します。

3バイト:

ππ⁻¹

1暗黙の乗算による印刷。のペアを追加することにより、無期限に拡張できます⁻¹。以下も機能します。

√(25
e^(πi
⁻ii
ii³
2ππ   
cos(2π

より長いソリューション:

11/77►Frac
ᴇ⁻⁻44
cos(208341   //numerator of a convergent to pi; prints "-1"

おそらく複数行のソリューションもありますが、見つかりません。


私はTI BASICに慣れていません。sqrtと括弧を単一の文字として数えていますか?
レベルリバーセント

6
はい、sqrtと括弧は一緒に1つのトークンであり、電卓のメモリに1バイトとして保存され、1回のキー入力で入力されます。
リルトシアスト

8
最後に、その迷惑な完了メッセージを停止する方法!
ファラズマスロア

1
Doneトークンはありません。Done最後の行に式のないプログラム(空のプログラムを含む)の実行が終了すると、計算機が表示されます。
リルトシアスト

48

CJam、JavaScript、Pythonなど、18バイト

8.8888888888888888

CJamの出力は次のとおりです。

8.8888888888888888 -> 8.88888888888889
8.888888888888888  -> 8.888888888888888
88888888888888888  -> 88888888888888888
.8888888888888888  -> 0.8888888888888888

JavaScriptとPythonは同様に機能します。JavaScriptとPythonで競争力はありませんが、CJamで短いものを見つけるのは簡単ではありません


16
素晴らしい浮動小数点の乱用!
nderscore

31

オクターブ、5バイト

10:10

(x:y)は、xからyまでの数値の配列を1ずつ増やします。したがって、10から10の間では、要素は10のみです。

> 10:10
ans = 10

2番目の引数が最初の引数より小さい場合、octaveは空の行列とその次元を出力します。

> 10:1
ans = [](1x0)

> 10:0
ans = [](1x0)

最初の数字から文字が削除されると、配列にはさらに要素があります。

> 1:10
ans = 1 2 3 4 5 6 7 8 9 10

> 0:10
ans = 0 1 2 3 4 5 6 7 8 9 10

コロンが削除されると、数値はそれ自体を返します。

> 1010
ans = 1010

1
Rでも有効
-mnel

30

マイクロスクリプト、1バイト

h

h言語の暗黙的な印刷が抑制されるため、出力は生成されません。唯一の文字を削除すると、出力がのプログラムが生成されます0\n

後でもっと良い答えを考えてみます。

11月17日に編集:

これはMicroscript IIでも機能しますが、例外として0\n、空のプログラムがを生成する代わりにが生成されますnull


22

Pyth、3バイト

cGG

Gアルファベットの小文字で事前初期化されます。c分割関数です。

cGG['', ''](8バイト)で終わるアルファベットの出現によってアルファベットを分割します。

2番目のパラメーターが欠落している場合、c空白、タブ、または改行で文字列を分割します。に表示されないためG、の出力cG['abcdefghijklmnopqrstuvwxyz'](30バイト)です。

そしてGG、2つの別々の行にアルファベットを2回印刷するだけです:abcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz(53バイト)。

オンラインで試す:デモンストレーション


16

Python REPL、6バイト

最短ではありませんが、浮動小数点の不正使用に関する別の回答を次に示します。

>>> 1e308
1e+308
>>> 11308
11308
>>> 11e08
1100000000.0
>>> 11e38
1.1e+39
>>> 11e30
1.1e+31

しかし...

>>> 11e308
inf

14

JavaScript(など)、5バイト

44/44 または

44/44 -> 1
44/4  -> 11
4444  -> 4444
4/44  -> 0.09090909090909091


11

言語、5バイト

00000

プログラムの長さは5です。これは,、入力文字の終わりを読み取り、出力せずに終了するbrainf ***プログラムに対応します。

charを削除0000すると、brainf ***プログラムに対応する長さ4の.コードが1文字(codepoint 0)を出力して終了します。

単項等価であろう0000000000000あなたがつながる前に付加する必要があるため(13ゼロ)1コードはそれほどのバイナリ長さに101なります1101


9

PHP、6バイト

私はこのグループを数週間見ていて、あなたのプログラミング技術に驚いています。今、サインインする必要がありました。できることはありますが、申し訳ありません。

<?php 

(2番目以降のスペースに注意してくださいp

これは空の文字列を出力します。文字を削除すると、文字のないテキストが出力されます。HTMLエラーが発生する可能性があることに注意してください(たとえば、ブラウザで表示されないコンテンツ<?ph

私もechoタグを試してみました。すなわち。例えば。:

<?= __LINE__;;

これは出力します1=が省略された場合<? __LINE__;;、出力になります。ただし、マジック定数文字を削除するとE_NOTICEが発生します。注意:未定義の定数LNEの使用-で ' LNE 'を想定...

場合通知が考慮されていないエラー(ルールの点4)、これはまた、:-)を適用します


ああ、それは賢い。改行も機能すると思います。タスクがHTMLを生成する場合、これは無効です。ただし、PHPはコマンドラインから実行できます。他のプログラミング言語と同様に、出力は単に画面に出力されます。
デニス

@Dennis PHPは、出力は何も。ブラウザでCTRL-Uをいつでも使用して、出力を表示できます。HTMLは無効かもしれませんが、実際にはプログラムはそうではありません(<HTML>タグなどはありません)
-Voitcus

1
私のポイントは、ブラウザを使用する必要はまったくないということです。実行するだけphp test.phpです。ちなみに、2番目のコードは無効です。質問はエラーを禁止するのではなく、エラー、警告、通知などのエラー出力を意味
デニス

2
#!スクリプトファイルでも機能します。
jimmy23013

9

Python、10 8バイト

256**.25

Pythonおよび友人で動作します。2バイト小さくする方法を示してくれたJakubeに感謝します。

IDLEから:

>>> 256**.25
4.0
>>> 26**.25
2.2581008643532257
>>> 56**.25
2.7355647997347607
>>> 25**.25
2.23606797749979
>>> 256*.25
64.0
>>> 256*.25
64.0
>>> 256**25
1606938044258990275541962092341162602522202993782792835301376L
>>> 256**.5
16.0
>>> 256**.2
3.0314331330207964

もともと私はこれを持っていました(10バイト):

14641**.25

IDLEから:

>>> 14641**.25
11.0
>>> 4641**.25
8.253780062553423
>>> 1641**.25
6.364688382085818
>>> 1441**.25
6.161209766937384
>>> 1461**.25
6.18247763499657
>>> 1464**.25
6.185648950548194
>>> 14641*.25
3660.25
>>> 14641*.25
3660.25
>>> 14641**25
137806123398222701841183371720896367762643312000384664331464775521549852095523076769401159497458526446001L
>>> 14641**.5
121.0
>>> 14641**.2
6.809483127522302

と同じメモに:

121**.25*121**.25

Pythonによる適切な丸めにより、17バイトで同様に機能します。

>>> 121**.25*121**.25
11.0
>>> 21**.25*121**.25
7.099882579628641
>>> 11**.25*121**.25
6.0401053545372365
>>> 12**.25*121**.25
6.172934291446435
>>> 121*.25*121**.25
100.32789990825084
>>> 121*.25*121**.25
100.32789990825084
>>> 121**25*121**.25
3.8934141282176105e+52
>>> 121**.5*121**.25
36.4828726939094
>>> 121**.2*121**.25
8.654727864164496
>>> 121**.25121**.25
29.821567222277217
>>> 121**.25*21**.25
7.099882579628641
>>> 121**.25*11**.25
6.0401053545372365
>>> 121**.25*12**.25
6.172934291446435
>>> 121**.25*121*.25
100.32789990825084
>>> 121**.25*121*.25
100.32789990825084
>>> 121**.25*121**25
3.8934141282176105e+52
>>> 121**.25*121**.5
36.4828726939094
>>> 121**.25*121**.2
8.654727864164496

@Akiinoあなたが行った編集がわかりません。削除した行は、必要な可能性の1つであり、その下の行と同じです。削除した理由を説明してもらえますか?私はそれをロールバックしましたが、適切な推論でアクションを取り消すことを認めることができます。
rp.beltran

私の内なる完璧主義者は、理由は何もありませんが、ライン(私が削除したもの)が重複していることを知って、よく眠れませんでした。行があり56...26...その後、56...再び、しかし、そこに56を取得する唯一の方法があるので、それは一度だけ含まれるべき、そうではありませんか?
秋井野

ああ、私はそれが二度そこにあったことを知りませんでした。私の悪い、良いキャッチ。
rp.beltran

ロールバックをロールバックしました。
rp.beltran

7

SWI-Prologインタープリター

__A=__A.

注:finalを削除することはできません.。プロローグインタープリターはクエリを実行するために常に最終期間を探すため、このコンテストのルールを厳守し、実行しない期間を削除できるようにすると、行がジャンプして1つになるまで追加のコマンドを待機しますピリオドで終了します。

元のクエリの__A=__A.出力true.

クエリは_A=__A.出力します_A = '$VAR'('__A')。同様の変更(つまり、1つ_または2つのうちの1つを削除A)は、同様の出力になります。

最後に、クエリ__A__A.はSWI-Prologに出力します。

% ... 1,000,000 ............ 10,000,000 years later
% 
%       >> 42 << (last release gives the question)

12
@Jakube必須の最終期間を設定することは、別の言語でスニペットを実行するためにEnterキーを入力する必要があることとは大きく異なります。改行を削除すると、改行も実行されません。
15年

一部の言語ではセミコロンに相当し、文字としてカウントされます。
-tomsmeding

5

Sed、1バイト

d

sed入力ストリームを必要とし、私は、プログラム自体は、入力として供給されなければならない規則を提案します。

$ sed -e 'd' <<<'d' | wc -c
0
$ sed -e '' <<<'d' | wc -c
2

代替プログラムですxが、それは唯一の変わり12削除されたときの出力のバイト。


2
実際に質問に入力なしのルールを追加するのを忘れたので、提出時にルールに違反していませんでした。議論を作成しましたsedのような言語は「入力なし」ルールを免除されますか?メタ。
デニス

5

K、3バイト

2!2

0REPLでの出力。最初の2つの出力0 1を削除し、感嘆符22を削除すると、最後の2つを削除すると、K実装間で異なる文字列になりますが、常に少なくとも2文字です(oKでは、(2!)@ Dennisによると、Konaの出力2!)。


@ Sp3000 *ジャストプリントの削除2. (*!)oKの2プリント(不完全な機能)を削除します。他の通訳(Kona、k2など)については知りませんが、Konaは印刷する*[!;]か、それに類似したものになると思います。最も安全だと思われたので、星を削除しました。
kirbyfan64sos

選択することはできません、任意の文字を削除する必要があります
-edc65

@ edc65 1バイトではないという犠牲を払って修正されました。
kirbyfan64sos

1
@Dennisが更新されました。
kirbyfan64sos

5

MATLAB、9 7バイト

他のMATLAB / Octaveの回答よりも2バイト長いですが、やや複雑なので、それでも気に入っています。

Matlabの'演算子は複素共役転置です。これをスカラーの虚数で使用すると、が得られi' = -iます。虚数は単純に記述できるため、次のようになり2iます。

2i--2i'
ans =
     0    

いずれかの文字を削除すると、次のいずれかが発生します。

ans =
   0.0000 - 1.0000i
   2.0000 - 2.0000i
   0.0000 + 4.0000i
   0.0000 + 4.0000i
   0.0000 + 1.0000i
   2.0000 + 2.0000i
   0.0000 + 4.0000i

4

GolfScript、2バイト

この答えは競合するものではありませんが、この課題に影響を与えたコードの一部であるため、とにかく共有したいと思いました。

:n

デフォルトでは、すべてのGolfScriptプログラムはスタック全体を実行putsし、スタック全体を印刷してから改行を出力します。関数puts自体は{print n print}インタープリターのように実装されます。ここprintで、は実際の組み込みであり、デフォルトでn文字列を保持する変数"\n"です。

現在、GolfScriptプログラムは常にスタック上のSTDINからの入力をプッシュします。この場合、入力がないため、空の文字列がプッシュされます。変数の割り当て:nにより、その空の文字列がに保存nされ、暗黙的な改行が抑制され、出力が完全に空になります。

を削除するnと、変数の割り当てが不完全になります:(これは構文エラーだと思われますが、そうではありません)。したがって、暗黙的な改行は通常どおり出力されます。

を削除する:n、スタックに改行がプッシュされるため、プログラムは2つの改行を出力します。


4

APL、J、および場合によっては他のバリアント、3バイト

--1

1APL で出力します。-1出力¯1、および--出力は、以下のTryAPL

┌┴┐
- -

3

J、5バイト

|5j12

5 + 12iREPL の複素数の大きさ。

   |5j12 NB. original, magnitude of the complex number `5 + 12i`
13
   5j12  NB. the complex number `5 + 12i`
5j12
   |j12  NB. magnitude of the undefined function j12
| j12
   |512  NB. magnitude of 512
512
   |5j2  NB. magnitude of 5 + 2i
5.38516
   |5j1  NB. magnitude of 5 + 1i
5.09902

J、9バイト

%0.333333

浮動小数点の精度、逆数、逆行列に基づいています。

   %0.333333 NB. original, reciprocal of 0.333333
3
   0.333333  NB. 0.333333
0.333333
   %.333333  NB. matrix inverse of 333333
3e_6
   %0333333  NB. reciprocal of 333333
3e_6
   %0.33333  NB. reciprocal of 0.33333
3.00003

こちらからオンラインでお試しください。


3

Mathematica、3バイト

4!0

4!0  ->  0    the factorial of 4, times 0
4!   ->  24   the factorial of 4
40   ->  40
!0   ->  !0   the logical not of 0, but 0 is not a boolean value

3

Dyalog APL、2バイト

⍴0 空の文字列(長さ0)を返します

戻り値(長さ1)

0戻り値0(長さ1)


2

Swift(およびその他)、8バイト

93^99<84

出力(4文字):

true

n番目の文字を削除すると、出力は次のようになります。

n -> out
----------
0 -> false
1 -> false
2 -> false
3 -> false
4 -> false
5 -> 10077
6 -> false
7 -> false

の形式でこのような78の可能な解決策がありますa^b<c

このチャレンジの目標は、できるだけ多くのバイトにする必要があると思います。なぜなら、バイト数が多いほど、削除できるバイトが多くなり、そのためより困難になるからです。


私はそれについて考えましたが、スタックベースの言語にとっては簡単だったでしょう。これがコードボウリングの課題である場合、aditsuには無限のスコアがあります。彼のコードは何度も繰り返すことができます。各コピーはまったく同じことを行います。
デニス

@デニスああ、そうですね、理にかなっていますが、バイトはこのタスクにはあまり良い指標ではないのではないかと思います
-Kametrixom

同意する。それが人気コンテストです。最も賛成の答えが勝ちます。
デニス

2

MathGolf、2バイト

♂(

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

説明

♂   Push 10
 (  Decrement TOS by 1

なぜこれが機能するのですか?

通常の出力は9です。場合(削除され、出力が10である場合に除去される、プログラムが暗黙的に供給するためにスタックから0をポップ(出力オペレータを、-1


1

Clojure、11バイト

(defn x[]1)

最初は、他の言語と同様に、REPLに1文字の回答を投稿することを考えました。たとえば、

user=> 1
1

しかし、問題は、その文字を削除すると、Enterキーを押してもREPLが何もしないことです。そのため、質問のルールで許可されている関数でラップする必要がありました。この関数を呼び出すと、1が返されます。関数内の唯一の文字を削除すると、

(defn x[])

関数はnil、さらに2バイトを出力するものを返します。

user=> (defn x[]1)
#'user/x
user=> (x)
1
user=> (defn y[])
#'user/y
user=> (y)
nil

1
明確にする:コンテストが必要と内側の関数となり、1この場合、(1バイト)です。
デニス

1

05AB1E(レガシー)、1 バイト

[(無限ループ)を除き、05AB1E(レガシー)の任意の1バイトが機能します。

すべての可能なシングルバイト05AB1Eプログラムのすべての可能な出力を参照してください。

空のプログラムが残るようにその単一バイトを削除すると、info.txtのコンテンツがデフォルトで代わりにSTDOUTに出力されます。

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


05AB1E、1 バイト

?

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

残念ながら、05AB1Eの新しいバージョンの空のプログラムは、デフォルトで1バイトの改行のみを出力します(オンラインで試してみてください)。したがって、1バイト文字は何も出力する必要がないため、ほとんど使用できません。何も出力しない(暗黙の改行もしない)唯一可能なプログラムは?、私が知る限りです。



0

Runic Enchantments、6(変更可能)バイト

11-{{B\
/B~~@/
\00<
R"Error"@

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

RunicにはREPL環境がなく、制約を満たすために完全なプログラムを作成することは容易に実行できません(無効なプログラムまたは出力なしにつながる)。したがって、コードの一部は内部関数11-{{Bとして機能し、この部分のみを変更できます。B命令は、(それが後続することによってアクセスすることができるスタックへの戻り位置を押すだけでなく、コード内の位置にIPをジャンプするようにこの分類は許容されるべきであることを関数ポインタとreturnステートメントに十分に近いB、または廃棄します) 。

  • 標準出力: 0
  • どちらかを削除する105
  • の削除-11
  • いずれかの削除{Error051
  • の削除B120

最終\最初の行の末尾には、IPがすべてどこでもウィリーnillyの上に蛇行行く(と何も出力を印刷していない)しないようにリターン命令が削除される場合には、内部機能の周りに外部の境界を提供します。

これError051は任意の文字列であり、コードのその部分に必要なものを入れることができ、「エラー」は戻り座標とIPテレポートを任意の場所に偽装するコードを作成するための面白い結果でした。

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