실생활에서의 활용


14

에서는 아담 @ Dyalog APL이 확장(아래) 조작 수단의 결합은 : 하나 개의 기능하고 제 기능 제의 다음 역을 적용한다. 활용 측면에서 실제 행동을 생각하는 것은 재미있다 :

문제는 g에 의해 다른 도메인으로 변환되어 다른 도메인으로 쉽게 변환되어 f로 쉽게 해결되고 원래 도메인으로 다시 변환됩니다. 실생활의 예는 "마취 상태"입니다.

apply anesthetics
    perform surgery
wake up from anesthetics

도전

행의 역은 g앞에 붙은 "un" g이고 그 반대도 마찬가지입니다. s"under"로 그 순서와 그 사이의 모든 선을 정의하십시오 s. f입력 된 각 라인 에 대해 순서대로 :

  • 경우 f모두 발생과 역, 아무것도하지 않고
  • 경우 f다른 조치 인쇄 '에서'아니다f
  • f행 아래에 있으면 연결 위치를 g인쇄하십시오 .f + " under " + g+

입력

공백과 소문자로 구성된 비어 있지 않은 여러 줄 문자열 또는 문자열 목록 등입니다 (대신 대문자를 사용할 수 있음). 정확히 한 줄은 "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
과도하게 마실 때 나에게도 결과가 없습니다
Stan Strum

1
"책을 챙겨 걸어서 걸어가는 책에 대한 비용을 지불"해서는 안됩니까? 그렇지 않으면 변환이 원본과 동일하다는 것이 확실하지 않습니다.
Jonah

1
@Jonah 아이디어는 이상적인 세계에 있습니다. w = "walk to store"및 w ^ -1 = "unwalk to store"는 역수이므로 수학적으로 wfw ^ -1wg ^ -1 = wfgw ^ -1입니다.
lirtosiast

아 공정 해, @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있는 줄을 찾은 다음 하나 이상의 줄을 찾은 다음 un나머지 줄이 같을 때 원래 줄이 아닌 경우에만 시작하는 줄을 찾습니다 .

$4 under $1$1$5

원래 줄을 한 줄 아래로 이동하고 under방금 통과 한 줄에 추가합니다 . (추가 라인은 반복에 의해 처리됩니다.)


2

파이썬 2 , 106 바이트

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

온라인으로 사용해보십시오!

입력이 STDIN의 목록 일 수 있고 출력이 개행으로 분리 된 경우 다음 94 바이트 솔루션이 있습니다.

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 (바벨 노드) , 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는 실제로 실패합니다. 이제 수정되었습니다.
Arnauld

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.