Gerçek Hayatta Konjugasyon


14

Gelen ADAM'lar @ Dyalog APL Extended , (altında) operatör araçları çekimi: bir fonksiyon, daha sonra ikinci bir fonksiyonu, birinci sonra ters uygulanır. Gerçek hayattaki eylemleri çekişme açısından düşünmek eğlencelidir:

Bir sorun g ile başka bir alana dönüştürülür ve burada f tarafından daha kolay çözülür ve sonra tekrar orijinal etki alanına dönüştürülür. Gerçek hayattan bir örnek “anestezi altındadır”:

apply anesthetics
    perform surgery
wake up from anesthetics

Meydan okuma

Bir çizginin tersi g"un" ile eklenir gve tersi de geçerlidir. sBu sıra ile tersi arasındaki herhangi bir satırı "altında" olarak tanımlayın s. Girişteki her satır fiçin:

  • Her fikisi de tersi olursa , hiçbir şey yapmayın
  • Başka bir fişlem "altında" değilse, yazdırınf
  • Eğer fbir çizgi "başlığı altında" g, baskı f + " under " + gnerede +birleşimidir.

Giriş

Boşluk ve küçük harflerden oluşan boş olmayan çok satırlı bir dize veya dize listesi vb. (Bunun yerine büyük harf kullanabilirsiniz). Tam olarak bir satır "un" ile başlayacaktır; ve başka bir çizginin tersi olacak. Hiçbir satır boş kalmayacak.

Çıktı

Çıktıyı girdiğiniz formatta veya Standart G / Ç'nin izin verdiği şekilde çıktı.

Test senaryoları:

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]

2
Aşırı
içtiğimde

1
"kitabı al ve saklamak için yürüyüş altındaki kitap için ödeme" olmamalı mı? aksi halde dönüşümün orijinaline eşdeğer olduğu açık değildir ...
Jonah

1
@Jonah Fikir ideal bir dünyada w = "mağazaya yürümek" ve w ^ -1 = "mağazaya yürümek" ters, bu yüzden matematiksel olarak wfw ^ -1wg ^ -1 = wfgw ^ -1.
lirtosiast

Ah yeterince adil, @irtosiast.
Jonah

Yanıtlar:


3

Brachylog , 90 bayt

;Ṡ{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

Bunu, yinelemeli olabileceği ve birden fazla under yığılmış olabileceği izlenimi altındayken yaptım. Muhtemelen optimize edilmemiş. Ayrıca bu bracylog olduğundan, sıhhi tesisat oldukça byte alır.

Çevrimiçi deneyin!


2

Retina , 82 bayt

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

Çevrimiçi deneyin! Bağlantı, test senaryolarını içerir. Açıklama:

m{

Bütün programı satırlı modda çalıştırın (böylece ^ve $başlangıç ve bireysel çizgilerin ucunu eşleşir) hiçbir değişiklik olana kadar ve tekrar.

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

Başlayabilen unve arkasından gelebilecek bir satır olup unolmadığına bakın, ancak satırın geri kalanı aynıyken bir önceki satır başlamazsa ve her iki satırı da silin. (Bu, Retina 0.8.2'deki, eşleşmeye çalışmadan önce çizgileri ayıran bir davranış değişikliğidir ve bu nedenle maçın aynı anda birden fazla satıra yayılması gerekiyorsa asla satırları silemez.)

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

Başlayabilen un, ardından en az bir satır, ardından unyalnızca orijinal satır satırın geri kalanı aynı değilken başlayan bir satır arayın .

$4 under $1$1$5

Orijinal satırı bir satır aşağı taşıyın ve aynı zamanda o sırada undergeçen satıra ekleyin . (Ek satırlar tekrar ile ele alınacaktır.)


2

Python 2 , 106 bayt

s=input()
x=''
l=[]
for i in s:
 if'un'==i[:2]or'un'+i in s:x=(' under '+i)*(not x)
 else:l+=[i+x]
print l

Çevrimiçi deneyin!

Giriş STDIN'den bir liste olabilir ve çıktı yeni satırla ayrılmışsa, bu 94 baytlık çözüme sahibiz:

s=input()
x=''
for i in s:
 if'un'==i[:2]or'un'+i in s:x=(' under '+i)*(not x)
 else:print i+x

1

JavaScript (Babel Düğümü) , 91 bayt

Girişi küçük harfle bir dizi dizisi olarak alır. Başka bir dize dizisi döndürür.

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

Çevrimiçi deneyin!

Yorumlananlar

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 Gerçekten başarısız. Şimdi düzeltildi.
Arnauld

1

Temiz , 147 bayt

import StdEnv,Data.List
a=inits;b=tails
$l=hd[w++[e++[' under ':u]\\e<-z]++y\\i<-a l&t<-b l,w<-a i&u<-i,z<-a t&[x:y]<-b t|u==['un':x]||x==['un':u]]

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.