지오 비트 언어


16

Geobitsian 언어 는 단어가 각각 다른 문자로 시작해야하는 세그먼트로 나뉘어 진 새로운 영어 변태입니다. 그런 다음 시작 문자 중 하나가 다른 문자열에 나타날 때마다 해당 전체 세그먼트로 바뀌어 대문자를 유지합니다.

이 과정을 지오 비트 크기 라고 합니다 .

예를 들어 단어 " Geobits은 "으로 나눌 수 있었다 geo bits, 그리고 난센스시

Algy met a Bear
A Bear met Algy
The Bear was bulgy
The bulge was Algy

그것과 함께 Geobitsized 것

Algeoy met a Bitsear
A Bitsear met Algeoy
The Bitsear was bitsulgeoy
The bitsulgeoe was Algeoy

왜냐하면 모든 g것이되고 geo, 모든 것이 G(없지만)되고 Geo, 모든 b것이되고 bits, 모든 B것이됩니다 Bits.

각 대체는 중간 단계가 아닌 원래 문자열과 관련하여 수행됩니다. 경우 예를 들어 geo있었다 gbo대신 b'창조들로 대체 않을 것이다 bits.

도전

Geobitsian 언어를 생성 할 수있는 프로그램이나 함수를 작성하십시오.

소문자 (az)와 공백으로 구성된 한 줄짜리 문자열을 사용하십시오. 이것은 공백을 세그먼트로 구분하여 지오 비트 화 인수로 사용되는 단어입니다. 당신은 가정 할 수 있습니다 :

  • 세그먼트는 비어 있지 않습니다. 따라서 공백은 서로 인접하지 않으며 문자열의 시작 또는 끝에 있지 않습니다.
  • 각 세그먼트는 다른 문자로 시작합니다. 따라서 26을 초과 할 수 없습니다.

예를 들어, 지원해야 어떤 유효한 분할 된 문자열은 geo bits, butt ner, alex, 및 do o r k nob(단일 문자 세그먼트는 아무런 영향을 미치지 만 유효). 그러나 geo , butt ner, Alex, 및 do o r k n ob유효하지 않습니다.

또한 프로그램이나 함수는 지오 비트를 적용하기 위해 다른 임의의 문자열을 가져 와서 결과 지오 비트 어 언어를 인쇄하거나 반환해야합니다.

  • 이 문자열에는 줄 바꾸기 및 인쇄 가능한 ASCII 만 포함되어 있다고 가정 할 수 있습니다 .

  • 대소 문자는 입력에서 출력으로 유지되어야합니다.

no pro gr am m ingGeobitsizing 인수로 사용하는 몇 가지 예는 다음과 같습니다 .

[empty string][empty string]

iing

IIng

Mmmm, mmm... MmmmMMM: m&m!Mmmm, mmm... MmmmMMM: m&m!(변경 사항 없음)

People think bananas are great, don't you?Proeoprole thingnok bamnoamnoams amre grreamt, dono't you?

Pet a Puppy
Google Wikipedia

Proet am Prouproproy
Groogrle Wingkingproedingam

인수가 어떻게 배열되는지에 관계없이 결과는 동일해야합니다. 예를 들어 ing pro m no am gr위와 동일한 결과를 얻을 수 있습니다.

바이트 단위의 가장 짧은 코드가 이깁니다.


"Geobitsizing argument"를 배열로 사용할 수 있습니까? 예 :["no", "pro", "gr", "am", "m", "ing"]
Downgoat

@Upgoat 죄송하지만 없습니다.
Calvin 's Hobbies

@Upgoat \\b${l}(\\S+)5 바이트 비용이 들지만 시도하십시오 .
Neil

3
공백으로 구분 된 문자열의 임의 입력 요구 사항 의 경우 -1입니다 .
AdmBorkBork 2016 년

2
제안 된 테스트 사례 : abra cadabra, !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~모든 에지 사례를 다루어야하며 정규 표현식을 사용하려고하면 많은 사례가 있습니다.
Dennis

답변:


6

젤리 , 18 바이트

ṣ⁶;Œu1¦€$;©ZḢiЀị®

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

대체 버전, 15 바이트 (비경쟁)

젤리의 타이틀 케이스 함수에는 버그가있었습니다. 그것은 첫 단어를 대문자로하지 않았습니다. 그것은 수정되었으므로 다음과 같이 작동합니다.

ṣ⁶;Œt$;©ZḢiЀị®

이 코드는 Œt(제목 케이스)가에 의해 달성 된 조건부 대문자를 대체 한다는 점을 제외하고는 경쟁 버전과 동일합니다 Œu1¦€.

작동 원리

ṣ⁶;Œu1¦€$;©ZḢiЀị®  Main link. Left argument: w (words). Right argument: s (string)

ṣ⁶                  Split w at spaces.
        $           Combine the two links to the left into a monadic chain.
       €              Map over the words.
   Œu1¦                 Uppercase the item at index 1.
  ;                   Append the result to the unmodified words.
         ;          Append all characters in s to the list of words.
          ©         Copy the result to the register.
           Z        Zip/transpose, grouping the first chars into the first list.
            Ḣ       Head; extract the list of first characters.
             iЀ    Find the first index of each character in s.
                ị®  Select the characters/strings from the list in the register
                    that are at those indices.

5

파이썬 3, 71 바이트

lambda w,s:s.translate({ord(t[0]):t for t in(w+' '+w.title()).split()})

Ideone에서 테스트하십시오 .

작동 원리

Python 3 에서 내장 str.translate은 문자열과 사전 을 취하고 코드 포인트가 해당 사전의 키인 문자열의 각 문자를 해당 값으로 대체합니다 (문자열, 정수 또는 없음 일 수 있음) . 빈 문자열).

단어의 문자열 w 를 제목 대소 문자로 변환하고 (즉, 각 단어의 첫 글자를 대문자로)이를 결과에 추가하면 w+' '소문자와 대문자 버전 (첫 글자)으로 공백으로 구분 된 단어의 문자열이 생성됩니다. 두 번째 인수가 없으면 str.split공백으로 분할되므로 모든 단어 (w+' '+w.title()).split()목록 이 만들어집니다 .

마지막으로 사전 이해 {ord(t[0]):t for t in...}는 각 단어 t 를 키 ord(t[0])(첫 번째 문자의 코드 포인트)와 값 t 가 포함 된 사전 항목으로 변환 하므로 str.translate의도 된 대체를 수행합니다.


3

파이썬, 126 99 95 81 바이트

Dennis에게 감사드립니다.

lambda G,S,j=''.join:j(s+j(g[1:]for g in G.split()if g[0]==s.lower())for s in S)

편집 1 : 임시에 추가 할 필요가 없습니다

Edit2 : S대문자를 포함 할 수 있습니다 ...

편집 3 : G를 복제하지 마십시오

Edit4 : 조금 더 압축하여 한 줄로 밀어 넣었습니다.

편집 5 : 명명되지 않은 람다 및 j=join' '



2

Vim, 46 번의 키 스트로크

미운, 해키

A <esc>:s/\<\w/:%s\/\0\\c\/\\0/g<cr>:s/ /eg<C-v><Cr>/g<cr>dgg@"

왜 V에서는 안됩니까? D :
Downgoat

@ Upgoat 버그가 많은 원인입니다.
DJMcMayhem


2

피스, 18 16

MsXGhMJcjdrBH3)J

여기 사용해보십시오

g지오 비트를 수행 하는 기능 을 정의합니다 . 프로그램으로 두 번째 문자열이 한 줄이지 만 여러 줄 입력이 그만한 가치가 없다면 조금 더 짧을 것입니다.

sXwhMJcjdrBz3)J

여기서 일반적인 아이디어는 geobitsian 문자열의 제목을 지정하고 원래 문자열에 추가하는 것입니다. 그런 다음 공백과 각 문자열에 대해 첫 번째 문자를 가져 와서 나타내는 문자열에 매핑하십시오. 그렇게하면 X각 단어의 첫 글자가 전체 단어로 바뀝니다.


방금 데니스를 아웃 골프 했습니까?
Bojidar Marinov 2016 년

@BojidarMarinov 버그가있는 다른 언어를 사용하여 Dennis를 outgolfing으로 간주하면 yes;)
FryAmTheEggman

2

파이썬 2, 83 78 바이트

lambda w,s:''.join(c+w[(' '+w).find(' '+c.lower()):].split()[0][1:]for c in s)

Ideone에서 테스트하십시오 .

작동 원리

문자열 s의 모든 문자 c 를 반복 합니다 .

단어 w 의 문자열에 공백을 추가 한 다음 공백이 앞에 오는 소문자 c 를 찾습니다 .

  • 이러한 사건이 존재하는 경우, find문자열에 공간의 인덱스를 반환 ' '+w의 인덱스와 일치, C 에서 w를 .

    w[...:]따라서 첫 글자 c로 시작하는 단어부터 w 의 꼬리를 반환합니다 . 꼬리를 공백으로 나누고 첫 번째 청크 (단어)를 선택하고 첫 번째 문자를 제거합니다.split()[0][1:]

    붙이는 후 C를 이전 결과, 우리는 시작 올바르게 맡았다 단어를 얻을 C를 .

  • 어떤 단어로 시작하지 않는 경우 C , find반환 -1 .

    따라서, w[...:]마지막 문자 산출 w를 , split()배열로 랩핑 [0]포장 실행을 취소하고,[1:] 문자열에서 문자를 단지 제거한다.

    c를 앞에 추가 하면 문자가 c 인 싱글 톤 문자열을 얻으 므로 전체 작업이 작동하지 않습니다.

마지막으로 ''.join모든 결과 문자열을 연결하여 Geobitsized 버전의 s를 반환합니다 .



1

CJam, 19 바이트

lq\S/_32af.^+_:c\er

여기에서 테스트하십시오.

설명

l       e# Read first line of input (list of words).
q\      e# Read remaining input and swap with first line.
S/      e# Split around spaces.
_       e# Duplicate.
32af.^  e# Convert the first letter of each word to upper case by taking
        e# the element-wise XOR with the list [32].
+       e# Append the upper-cased words to the original ones.
_:c     e# Duplicate and convert each word to its first character.
\       e# Swap characters with words.
er      e# Transliteration, replacing each character with the corresponding word.

1

자바 스크립트 ES6, 67 63 70 바이트

g=>s=>s.replace(/\S/g,l=>l+(g.match(`\\b\\${l}(\\S+)`,'i')||[,""])[1])

Firefox에서 이것을 테스트하십시오. 버그가 내가 원하는 것보다 더 길어지고 있습니다.

설명

function(gbarg, str) {
   return str.replace(/\S/g, function(chr) { // Replace non-whitespace w/...
        return chr + (
         gbarg.match(`\\b\\${l}(\\S+)`,'i')  // That word in the gbstr
        ||[,""])[1]                          // if not in gbstr, use blank str
   });
}

f("abracadabra")("1Dbw")을 반환합니다 "1abracadabraDbracadabrababracadabrawbracadabra".
Dennis

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