APL、36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
1
キースの場合は出力、0
それ以外の場合は出力
GolfScriptが再びストライク!!
編集
+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
⊢/
Takeマイナス1 ()の代わりにRight-reduction()を使用して¯1↑
、1文字を直接保存し、Disclose(⊃
)から1を間接的に保存します
説明
⍎¨⍕x←⎕
評価された入力(数値として扱われる)を受け取り、に割り当てx
ます。これを文字配列(他の言語では「文字列」)に変換し、各文字(数字)をループして、数値に変換します。したがって、これは数字の数値配列になります。
{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}
は、メインの「ループ」関数です。配列から
+/⍵↑⍨-⍴⍕x
最後の⍴⍕x
(の桁x
数)の数値を取得し、それらを合計します。
⍵,
配列の末尾に連結します。
(x>⊢/⍵)
配列の最後の数値(+/⍵↑⍨-⍴⍕x
まだ連結されていない)がより小さいかどうかを確認し、新しい配列でこの関数を何度もx
返す1
か0
∇⍣
実行します。したがって、最後の数値がより小さい場合x
、この関数は繰り返します。それ以外の場合は、単に新しい配列を返します
関数の実行後、配列には2つの数値が等しいかそれ以上になるまでの合計が含まれますx
(たとえば、14
generate 1 4 5 9 14 23
、13
willが生成されます1 3 4 7 11 18 29
)
最後に、各数値が等しいかどうかを確認しx
、結果のバイナリの合計を出力しますアレイ。
編集
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
0
入力が1桁の場合に出力するために2文字を追加しました:-(
さらに別の編集
+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕
説明
関数は1↓
、最後の⍴⍕x
(↑⍨-⍴⍕x
)を取る代わりに、配列から最初の番号()をドロップするようになりました。
ただし、このアプローチでは、1=
1桁の数字を処理するには不十分です。そのためx
、等しいことをチェックする前に配列から最後の数字を削除し、1文字を追加します
ご想像のとおり:編集
+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
x
古い最後のアイテムの代わりに新しく追加されたアイテムと比較するため、等しいことを確認する前に最初の(最後ではなく)アイテムをドロップするだけx
で十分で、マイナス記号が保存されます。Power operator(⍣
)の別の形式を使用して、別の3を保存します
25文字のgs回答が表示されます(Orz)
最終編集
x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
私がそれを見逃したとは信じられない。
もうゴルフはできません。