7

数週間前、 CodeGolf.SEベータ版が一般公開されたのとほぼ同時にJをピックアップしました。

そこにあるJを使用するときに(私の)再発する問題は、問題の仕様に合うように入力と出力を再フォーマットすることです。だから私はこのようなコードを使う傾向があります:

( ] ` ('_'"0) ) @. (= & '-')

これはさまざまな理由でテストされていません(間違っている場合は編集してください)。意図された意味は「に変換-する_」です。また、頻繁に出てきます。改行をスペースに変換(およびその逆)し、数値をとマージしj、角かっこを変更します。

これはかなりの数の文字を必要とし、プログラムの残りの部分に統合するのにそれほど便利ではありません。

これを進める他の方法はありますか?できればもっと短いですが、他の利点があれば、他のことを学ぶことができてうれしいです。また、暗黙の機能面を備えたソリューションは、多くのことを軽減します。

4

4 に答える 4

6

ライブラリメソッドを使用することはコードゴルフの性質に反することがありますが、文字列ライブラリでは、charsubメソッドは非常に便利です。

   '_-' charsub '_123'
 -123
   ('_-', LF, ' ') charsub '_123', LF, '_stuff'
 -123 -stuff
于 2011-03-05T06:51:37.647 に答える
4

rplc通常、単純な交換の略です。

  'Test123' rplc 'e';'3'
  T3st123

特別な場合の修正m}は非常に短いです:

 '*' 0} 'aaaa'
 *aaa
 '*' 0 2} 'aaaa'
 *a*a
 '*&' 0 2} 'aaaa'
 *a&a

ただし、リストを動詞にする必要がある場合は、乱雑になります。

b =: 'abcbdebf'
'L' (]g) } b
aLcLdeLf

ここで、gはのようなものでなければなりません g =: ('b' E. ]) # ('b' E. ]) * [: i. #

ケースバイケースで機能する他の多くの「トリック」があります。マニュアルの例:

'a'から'f'のみを含む文字列で、小文字の'a'から'f'を大文字の'A'から'F' ('abcdef' i. y) { 'ABCDEF' に置き換えるには:前の例を拡張します:小文字の'a'から'f'を大文字に置き換えます'A'から'F'は、他の文字を変更せずに残します。 (('abcdef' , a.) i. y) { 'ABCDEF' , a.

于 2011-03-06T20:08:37.930 に答える
1

あなたは8!:2外国人の使用を検討したいかもしれません:

   8!:2]_1
-1
于 2011-03-25T13:32:22.947 に答える
1

一般的な置換の場合ではなく、改行とCSVのみを扱いましたが、これらをどのように処理したかを次に示します。Unixの行末(またはtoJで固定された行末)が最終的な改行であると仮定します。

  • 1行の入力:(".{:('1 2 3',LF)これはまだ使用していません)
  • 長方形入力:(".;._2) ('1 2 3',LF,'4 5 6',LF)
  • 不規則な入力:おそらく(,;._2)または(<;._2)(これもまだ使用していません。)
  • 1行、カンマ区切り:".;._1}:',',('1,2,3',LF)

これはまったく置き換えtrられませんが、行末やその他のゴミには役立ちます。

于 2011-03-23T16:09:00.417 に答える