古き良きサフィックスベクトル


17

古いマニュアルに触発された...

チャレンジ

私は定義番目のサフィックスベクトルBの長さのブールリストとして、ABの後続truthy値。

与えられ、そのプログラムまたは機能を記述し、ABは任意の手段によって、戻り番目のサフィックスベクトルBを任意の手段によって。

さて、これは些細なことのように思えるかもしれませんが、キャッチは次のとおりです。あなたのスコアは、バイトカウントとソリューションが機能する最初の年です。

ルール

すべての標準ルールが適用されますが、このチャレンジの後にリリースされた言語と言語バージョンも使用できます。

言語が使用するブール値の表現、たとえば1/ 0True/ FalseTRUE/ FALSE"True"/ "False"などを使用して出力します。

リストのどんな表現言語の使用していること、例えば使用して出力0 0 1[False,False,True](FALSE;FALSE;TRUE){"False","False","True"}、など

あなたは、と仮定してよい≥ bが常に真であると彼らは適切なデータ型であること。

テストケース

与えられた= 7、B = 3、リターン0 0 0 0 1 1 1

与えられた= 4、B = 4、リターン[True,True,True,True]

与えられた= 2、B = 0、リターン(FALSE;FALSE)

与えられた= 0と、B = 0、リターン{}

ソリューション例とスコアリング

{⌽⍺↑⍵⍴1}Dyalog APLを使用してソリューションを提出したい場合があります。これは8のバイトカウントになります。これは動的関数で、1998年にリリースされたDyalog APLのバージョン8.1から機能するため、合計スコアは2006です。提出された回答は次のようになります。

# Dyalog APL 8.1, 1998 + 8 = 2006
    {⌽⍺↑⍵⍴1}

Optional explanation...
Recommended: Link to documentation showing when the features you used were released.

最低スコアが勝ちます!


14
答えの検証可能性について深く懸念しています。
デニス

1
@Dennisあなたの懸念を理解しています。ただし、1)答えはほとんど非常に単純であり、実際に実行中のシステムを必要とせずに手作業で検証できます。2)一部のユーザーは自分の主張のドキュメントにリンクしています。
アダム

8
私は「手作業で検証」がいくつかの答えのために必ず機能するかどうかはよく
わかりませ

1
@ Sp3000たぶん、しかし、これはとにかくすべての楽しみであり、1.5時間で8つの答えと9つの賛成票で、この挑戦​​は誰かがだますかもしれないので十分に楽しいと思います。たぶん最終的な勝者に関するいくつかの追加研究
...-

1
@CatsAreFluffyアイデアは、これらの形式のいずれかが有効であることを示すことでした。コピー&ペーストの容易さは問題にならないほど、ケースは少数でシンプルだと思います。
アダム

回答:


7

APL \ 360、1968 + 3バイト= 1971

⎕⍵⎕

リンクされた@NBZ チュートリアルの組み込み。APL \ 360は1968年まで実装されておらず、APL \ 1130のような初期のAPLにはサフィックスベクトル関数がなかったため、@ NBZが1970年のスコアを出すと言った理由はわかりません(ここの 208ページを参照)。


8

1970年+ 38 = 2008年

:s tuck +do 0 . loop 0 +do -1 . loop ;

使用法: 7 3 s「0 0 0 0 -1 -1 -1」を出力します


今話しています!
アダム

なぜ-1ですか?フィラー+
電卓

2
これは最近見た、より興味深い「真の」価値の1つです。
user3490


これが命名されsvていてs、1バイトではないという理由はありますか?

8

APL、1968 + 5 = 1973

5文字まで:

⌽⎕≥⍳⎕

古いバージョン:

⌽⎕↑⎕⍴1

さて、あなたは実際にすでに答えを出しました、私は動的関数定義を削除し、この定義が1968年に機能することを確認しました。参照はマニュアルです:

http://www.softwarepreservation.org/projects/apl/Books/APL360ReferenceManual


キッズ、これは勝者と呼ばれます。それをメモに書き留めてください。
電卓

@CatsAreFluffyまだです。@ Moris Zucca:最後になりましたが、実際にはそれらのバイトの半分を離れてゴルフできます。方法を理解できますか?また、こちらはマニュアルのはるかに最新で読みやすいバージョンです。
アダム

7

SAS、1966 + 45 = 2011

data;a=;b=;do i=1to a;c=a-i<b;put c@;end;run; 

SASが輝く時!

SASは1972年まで最初に公開されませんでしたが、このデータステップは、1966年以降の最も古いプレリリースバージョンでも使用できると確信している非常に基本的な機能のみを使用しているため、その時点で機能していました。入力はとの後に続きa=b=出力はログに出力されます。

実際にこれを検証するための適切なバージョンのSASを備えたIBM System / 360をまだ持っている人がいたら、私は驚くでしょう!



今、唯一の私は現金を持っていた場合は、メインフレームSASライセンス ...
user3490

5

マウス-1979、1979 + 19 = 1998

??&TUCK (0.a)0(1-.)

翻訳:Forth

仕様は本当に私にはわかりにくいですが、これは正しいことだと思います。


リンク切れ....
CalculatorFeline

@CatsAreFluffy修正; メモリから入力しました。

面白い。しかし&Tuck、2002年のバージョンまで利用可能だったとは思わない。そして、ループは無限に見える。
AShelly

4

TI-Basic、1990 + 21 = 2011

このプログラムが動作する最初のTI計算機は、1990年に導入されたTI-81です。

Prompt A,B:"{}
seq(I>A-B,I,1,A

編集:空のリストをサポートする必要があることに気づいた...コードを4バイト増やした

テストケース

A=?7
B=?3
{0 0 0 0 1 1 1}

A=?4
B=?4
{1 1 1 1}

A=?2
B=?0
{0 0}

A=?0
B=?0
{}   * throws an error but still returns successfully

ソースのどの部分がTI-Basicのシングルバイトであるかについてのコメントを追加できますか?プロンプトとseq(が含まれていると思いますが、残りについては
わかり

Ans印刷されない限り、許容可能な出力メソッドを介して戻ることは考えません。
リルトシアスト

@Sparr確かに、Promptおよびseq(1バイトトークンであり、他の文字はそれぞれ1バイトです。
ティムテック

@lirtosiast Ansは、TI-83シリーズBasicで値を返すデフォルトの方法です。さらに、プログラムが実行されると、最後の行が自動的に印刷されます。あなたは両方の長所を持っています。
ティムテック

2
それは分析エンジンですか?誰かがそれを行う必要があります
CalculatorFeline

4

Mathematica 1.0、1988 + 22 bytes = 2010

Array[#>m&/.m->#-#2,#]&

これが機能するかどうかはわかりませんが、10.3のドキュメントを調べて、1988年に導入された(1.0)ということを探しました。


ちょうど現在の勝者について。SMPコードのみを短くできる場合
CalculatorFeline

しかし別のノートでは、いくつかのドキュメント:純粋な機能/.そして->Array
SP3000

4

68k TI-Basic、1995 + 25 = 2020

このプログラムが動作する最初のTI計算機は、1995年に導入されたTI-92です。

define f(a,b)=seq(x>a-b,x,1,a)

TI-83シリーズとは異なり、68k TI-Basicは空のリストをサポートします。


サイズはどのようにカウントされますか?トークン化は68kシリーズで大きく異なります。
リルトシアスト

プロンプトとシーケンスは両方とも2バイトであり、複数の引数に対して1バイトのフラグが追加されます。(21バイト)
ティムテック

これは、68k電卓のコンテキストではプログラムでも関数でもないことに注意してください。関数でPromptは無効であり、プログラムは値を返すことができません。したがって、これはホーム画面で入力する必要があります。一方、define f(a,b)=seq(x>a-b,x,1,a)引数としてaおよびbを指定できる有効な関数を定義します。(1995-09-13から私のTI-92で検証)
フォックス

私はいくつかのTI計算機を所有しています(唯一のz80バージョンは81です)が、通常はTI-92 Plusを使用します。これdefineを実行して呼び出しf(2,1)またはトークン化と同様の処理を行った後、OSによって報告されるサイズは25バイトです。
フォックス

3

Python 1.0、1994 + 26 = 2020

DSMのおかげで2バイト節約されました。

Lambdaは最初のメジャーリリース1.0で導入されました

lambda a,b:[0]*(a-b)+[1]*b

1
1.0で導入されたラムダを確認し、0.9.2でリスト(シーケンス)を繰り返します。これをテストできる最も古いバージョン(0.9.1を除く)は1.5.2で、そこでは正常に動作します。
Sp3000

@ Sp3000ああ、すごい。私は、シーケンスの繰り返しがその言語の初期のものであることを確認するために、いくつかの変更ログを見つけようとしました。
モーガンスラップ16年

3

MATL、2015 + 1 + 4 = 2020

:P<~

これは、2015年12月31日付のリリース6.0.0の言語(このリリースで導入された暗黙的な入力を使用)から機能します。

1おそらく異なるロケールでの@drolexコメントに従ってスコアに追加しました。

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

説明

:    % take first input implicitly. Generate inclusive range from 1 to that
P    % flip that array
<~   % take second input implicitly. True for elements of flipped array that
     % exceed second number. Display implicitly

4
1日後、そして
...-アダム

2
異議!githubサーバーとリリース送信者のロケールが必要です。一方がトンガにあり、もう一方がハワイにある場合、このカウントを増やす必要があります。
ドロレックス

@drolex OPは、彼が「年」で何を意味するかを正確に定義する必要があります。その間、スコアに1を追加しています
ルイスメンドー

@DonMuesli私はそれを意味しませんでしたが、このタイプの得点の潜在的な制限を示すだけ
です-drolex

@drolexああ、私はあなたが本気だと思った。とにかく、私はOPに尋ねました。Githubの日付はおそらく公式としてカウントされるはずです
ルイスメンドー

3

J、1990 + 8 = 1998

|.a{.b#1

ああ この答えを研究していて、言語を理解したいと思う前に誰かがAPLに到達しました。代わりに私のJソリューションがあります。


2

プロローグ、1972 + 57 = 2029

a(0,_,[]).
a(A,B,[H|L]):-Z is A-1,a(Z,B,L),(Z<B,H=1;H=0).

使用法: a(7,3,L).と統合L[0,0,0,0,1,1,1]ます。

いつis言語に実装されたかはよくわかりません。実際に正確な日付を見つけることができるとは思いません。それはかなり基本的なビルトインですが、1972年に最初に言語が登場したときにすでに存在していたと思います。

それは本当に重要なことではありませんが、私はこの答えで勝つにはほど遠いです。


これは勝者ではないかもしれませんが、探求の利点を明確に示しています-えーと-成熟した言語
...-アダム

2

SMP、1983 + 28バイト= 2011

Map[S[$1>x,x->$1-$2],Ar[$1]]

私は...私はこの権利を得たと思う S:2.10、48ページ Ar:7.1、ページ102 Map:7.2、ページ106 $1:7.1、ページ104

そして、もしMathematicaに精通していれば、いや、そのArようには動作しません。+のようなもの。RangeSelect


(#>x&/.x->#)/@Range[#+#2]&in Mathematica
電卓

私が意味する(#>x&/.x->#-#2)/@Range[#]&
CalculatorFeline

2

Vim、1991 + 21 = 2012

"adwj<c-x>"bdw@ai0<esc>v@bhr1

入力は次のようになります。

7
3

出力は次のようになります。

0000111

説明:

"adw                            'Delete a word into register a
    j<c-x>                      'Go down a line, and decrement the next number to occur
          "bdw                  'Delete a word into register b
              @ai0<esc>         'Insert a '0' "a" times
                       v        'Enter visual mode
                        @bh     'Move "b" characters left
                           r1   'Replace the whole selection with the character '1'

残念ながら、viは1976年にリリースされたため、レジスタをサポートしていません!
DJMcMayhem

説明してください?
電卓



2

> <>、2009 + 14 + 3 -v = 2026の場合

bそして、逆の順序でaスタックに直接提供する必要があります-v

出力は例のようにスペースで区切られていませんが、規定されたルールに反するようには見えません。言語で使用されているように、0と1を使用してfalseとtrueを表します。

:?!;{:0(n1-}1-

?スタックからテスト値をポップするようになったため、現在のバージョンでは機能しません。

すべての機能が1日目から実装されたとは確信がありません。-vたとえば、後で商品として提供された可能性があります。週末に私の答えが正しいことを確認しようとします。


1
?クワインの挑戦に述べたように(昔)ポップませんでした
CalculatorFeline

おかげで、素晴らしいニュースだこと、私は今、それを編集します:) 1つのバイトを保存しますが、私はesolang.orgにリンクされたリソースをチェックする必要があります、少なくとも2011年にはいくつかの日付のバック
アーロン・


あなたの助けをありがとう、私はwikiの改訂をチェックするつもりはなかったでしょう!現在仕事中ですので、まだすべてをチェックすることはできないでしょうが、今晩か明日には確認するつもりです。
アーロン

スコア= 2026になりました。
電卓



1

Mathcad、1998 + 42 = 2040

「バイト」は、個別のキーボード文字の数として解釈されます(たとえば、「for」演算子(1つのプログラミング行を含む)は、1文字のctl-shft-#、またはプログラミングツールバーのクリック)。

上記のバイトカウントは、aおよびbの定義が合計にカウントされないと想定しています。この仮定が無効な場合、定義に4バイトを追加します。

以下に示す関数バージョンは、定義に5バイトを追加し、使用するたびにさらに3バイトを追加します(aとbの値が直接入力されると仮定)。

私のMathcadソリューションは明らかに競争相手ではなく赤ティーでプレーするはずなので、ソリューションの表を追加しました。Mathcadには空の配列がないため、代わりに空の文字列( "")を使用していることに注意してください。0を使用して、b> aペアを計算していない場所を示しました。

enter image description here


とても興味深い!
ティムテック

1

PHP、1995 + 56バイト= 2051

function s($a,$b){while($i++<$a)$v[]=$i>$a-$b;return$v;}
分解図
function s($a,$b) {
  while ($i++ < $a) $v[] = $i > $a - $b;
  return $v;
}

ええと、カスタムスコアリングがあります。これは、1年目の言語の中核であり、バイト数をカウントします
電卓

おっと、あなたはそうです!修正中
...-ricdesi

これがPHP 1で機能するという、おそらく間違った仮定を立てます。すぐにバージョンを確認します。
-ricdesi

1

Javascript ES6、2015 + 46 = 2061

0と1の配列を返します

(a,b)=>Array(a-b).fill(0).concat(Array(b).fill(1))

Javascript ES6、2015 + 50 = 2065

文字列01文字列を返します

(a,b)=>Array(a-b+1).join(0)+Array(b+1).join(1)

Javascript、1995 + 61 = 2056

文字列01文字列を返します

function(a,b){return Array(a-b+1).join(0)+Array(b+1).join(1)}



0

SmileBASIC 3、2014 + 25 = 2039

SmileBASIC 3の最初の一般公開バージョンは、2014年11月にニンテンドー3DS用のSmileBASICアプリで日本で発売されました。

0がfalseで1がtrueである文字列を出力します(言語自体にあるため)。

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