実生活での活用


14

@アダムの Dyalog APLは拡張オペレータ手段(下)コンジュゲーションを:次につの機能は、第二の機能、最初の逆を適用します。共役の観点から実際のアクションを考えるのは楽しいです:

問題はgによって別のドメインに変換され、そこでfによってより簡単に解決された後、元のドメインに変換されます。実生活の例は「麻酔下」です。

apply anesthetics
    perform surgery
wake up from anesthetics

チャレンジ

行の逆gはに「un」が付加されg、その逆も同様です。s"under"として、その順序でその間の逆行を定義しますsf入力の各行ごとに:

  • もし f、両方の発生およびその逆の、何もしません
  • f他のアクションの「下」にない場合、印刷f
  • fがlineの「下」にある場合gf + " under " + gwhere +is concatenationを出力します。

入力

スペースと小文字で構成される空でない複数行の文字列、または文字列のリストなど(代わりに大文字を使用できます)。正確に1行は「un」で始まります。他の行の逆になります。空の行はありません。

出力

入力と同じ形式、または標準I / Oで許可されている形式で出力します。

テストケース:

Input:
apply anesthetics
perform surgery
unapply anesthetics

Output:
perform surgery under apply anesthetics


Input:
unite asia
establish the silk road
ite asia

Output:
establish the silk road under unite asia


Input:
desire a book
walk to store
take the book
pay for the book
unwalk to store
read the book

Output:
desire a book
take the book under walk to store
pay for the book under walk to store
read the book


Input:
drink excessively
undrink excessively

Output:
[empty string]

1
私は過度に飲むとき、私は、あまりにも、何も出力を持っていない
スタン・ストラム

1
「本を取り、散歩中の本にお金を払って保管する」べきではないでしょうか?それ以外の場合は、変換が...オリジナルと同等であることは明らかではありません
ヨナ

1
@Jonahアイデアは理想的な世界にありますw = "ストアまで歩く"とw ^ -1 = "ストアまで歩く"は逆なので、数学的にはwfw ^ -1wg ^ -1 = wfgw ^ -1です。
リルトシアスト

まあ、@ lirtosiast。
ジョナ

回答:


3

Brachylog、90バイト

;Ṡ{hhH↰₂gB&hb~c[A,B,C]&tT;C↔↰U∧" under ",H,T;A↔↰,U|tT&hh,TgJ&hb;T↰Q∧J,Q|h}
~↰₃|↰₃
∧"un";?c

これは再帰的で、複数のアンダーがスタックされる可能性があるという印象を受けながら作成しました。おそらく最適化されていません。また、これはbracylogなので、配管にはかなりのバイトが必要です。

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


2

網膜、82バイト

m{A`^(un)?(.+)¶(?(1)|un)\2$
^((un)?(.+)¶)(.+)¶((.+¶)*(?(2)|un)\3)$
$4 under $1$1$5

オンラインでお試しください!リンクにはテストケースが含まれます。説明:

m{

複数行モード(そのことで全体のプログラムを実行^し、$変更がないまで、個々の行の先頭と末尾にマッチ)を繰り返し。

A`^(un)?(.+)¶(?(1)|un)\2$

で始まる可能性のある行があり、前の行がそうでない場合にのみun続く行が続く行を探しun、残りの行が同じである場合、両方の行を削除します。(これはRetina 0.8.2からの動作の変更であり、一致を試みる前に行を分割するため、一致が一度に複数行にわたる必要がある場合、行を削除できません。)

^((un)?(.+)¶)(.+)¶((.+¶)*(?(2)|un)\3)$

で始まる可能性のある行を探します unに続いて、少なくとも1行が続き、その後にun元の行がそうでない場合にのみ始まる、残りの行は同じです。

$4 under $1$1$5

元の行を1行下に移動し、移動したunderばかりの行に追加します。(追加の行は繰り返しによって処理されます。)



1

JavaScript(Babelノード)、91バイト

入力を小文字の文字列の配列として受け取ります。文字列の別の配列を返します。

a=>a.flatMap(s=>s==r|'un'+s==r?(u=u?'':' under '+s,[]):s+u,u='',r=a.find(s=>/^un/.test(s)))

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

コメント済み

a =>                     // a[] = input array
  a.flatMap(s =>         // for each string s in a[]:
    s == r |             //   if s matches the reference string
    'un' + s == r ? (    //   or its opposite:
      u =                //     update u:
        u ?              //       if u is not an empty string:
          ''             //         turn it to an empty string
        :                //       else:
          ' under ' + s, //         set it to s with the ' under ' prefix
      []                 //     yield an empty array so that this entry is removed
    ) :                  //   else:
      s + u,             //     yield s followed by u
    u = '',              //   initialize u to an empty string
    r = a.find(s =>      //   initialize r ...
      /^un/.test(s)      //     ... to the string beginning with 'un'
    )                    //
  )                      // end of flatMap()


@ l4m2実際に失敗します。修正されました。
アーナルド

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