Geobitsian Dili


16

Geobitsian dili , bir kelimenin farklı bir harfle başlaması gereken bölümlere ayrıldığı yeni bir İngilizce sapkınlığıdır. Ardından, bu başlangıç ​​harflerinden biri başka bir dizede her göründüğünde, büyük harf kullanımını koruyarak karşılık gelen tüm segmentiyle değiştirilir.

Bu işleme Geobitsizing adı verilir .

Örneğin, " Geobits " kelimesi parçalanabilir geo bitsve saçmalık şiiri

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

onunla jeobitize olur

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

çünkü her şey golur geo, her G(hiçbiri olmasa da) olur Geo, her şey bolur bitsve her şey Bolur Bits.

Her bir ikame işleminin, herhangi bir ara aşamaya değil, orijinal dizgeye göre gerçekleştirildiğine dikkat edin. eğer örneğin geoolmuştu gboyerine, b'oluşturuldu s ile değiştirildi olmaz bits.

Meydan okuma

Geobitsian dili oluşturabilecek bir program veya işlev yazın.

Küçük harflerden (az) ve boşluklardan oluşan tek satırlık bir dize alın. Bu, boşlukları segmentleri ayıran Geobitsizing argümanı olarak kullanılan kelime olacaktır. Varsayabilirsiniz:

  • Segmentler boş olmayacak. Böylece boşluklar birbirine komşu olmaz veya ipin başında veya sonunda olmaz.
  • Her bölüm farklı bir harfle başlar. Dolayısıyla 26'dan fazla olamaz.

Örneğin, desteklemesi gerekir bazı geçerli segmentli dizeleri geo bits, butt ner, alexve do o r k nob(tek harf kesimleri etkisi yoktur fakat geçerlidir). Ama geo , butt ner, Alexve do o r k n obgeçersizdir.

Programınızın veya işlevinizin, Geobitsizing'i uygulamak ve sonuçta oluşan Geobitsian dilini yazdırmak veya döndürmek için başka bir rastgele dize alması gerekir.

  • Bu dizenin yalnızca yeni satırlar ve yazdırılabilir ASCII içerdiğini varsayabilirsiniz .

  • Harf durumlarının girişten çıkışa korunması gerektiğini unutmayın.

no pro gr am m ingGeobitsizing argümanı olarak kullanılan bazı örnekler :

[empty string][empty string]

iing

IIng

Mmmm, mmm... MmmmMMM: m&m!Mmmm, mmm... MmmmMMM: m&m!(değişiklik yok)

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

Argümanın nasıl düzenlendiğine bakılmaksızın sonuçların özdeş olması gerektiğini, örneğin ing pro m no am gryukarıdakiyle aynı sonuçları vereceğini unutmayın .

Bayt cinsinden en kısa kod kazanır.


"Geobitsizing argümanını" bir dizi olarak alabilir miyiz? ör.["no", "pro", "gr", "am", "m", "ing"]
Downgoat

@ Upgoat Üzgünüm ama hayır.
Calvin'in Hobileri

@ Upgoat \\b${l}(\\S+)Her ne kadar bu 5 bayta mal olsa da deneyin .
Neil

3
Boşlukla ayrılmış bir dizenin rasgele girdi gereksinimi için -1 .
AdmBorkBork

2
Test durumu Önerilen: abra cadabra, !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~... Hepsi sınır durumları kapsamalıdır ve bir çalışır Regexes kullanmak eğer bunlardan bir yeri vardır
Dennis

Yanıtlar:


6

Jöle , 18 bayt

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

Çevrimiçi deneyin!

Alternatif sürüm, 15 bayt (rakip olmayan)

Jelly'in başlık durumu işlevinde bir hata vardı; ilk kelimeyi büyük harfle yazmadı. Bu düzeltildi, bu yüzden şu anda çalışıyor.

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

Bu kod, rakip sürümdeki ile aynıdır, ancak Œt(başlık durumu), tarafından elde edilen koşullu üstyazının yerini alır Œu1¦€.

Nasıl çalışır

ṣ⁶;Œ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

Python 3, 71 bayt

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

Ideone üzerinde test edin .

Nasıl çalışır

Python 3'te , yerleşik str.translatebir dize ve sözlük alır ve dize içindeki kod noktası sözlüğün bir anahtarı olan her karakteri, bir dize, bir tamsayı veya Yok ( boş dize).

W sözcük dizesini başlık büyük / küçük harfine dönüştürmek (yani, her sözcüğün ilk harfini büyük harf yapmak) ve sonucuna eklemek w+' ', küçük ve büyük harfli (ilk harf) bir boşlukla ayrılmış sözcük dizesi oluşturur. İkinci bir argüman olmadan, str.splitboşlukta ayrılır, böylece tüm kelimelerin listesini(w+' '+w.title()).split() oluşturur .

Son olarak, sözlük anlama {ord(t[0]):t for t in...}her t kelimesini anahtar ord(t[0])(ilk harfin kod noktası) ve t değeri ile bir sözlük girişine dönüştürür , böylece str.translateamaçlanan ikameleri gerçekleştirir.


3

Python, 126 99 95 81 bayt

Dennis'e çok teşekkürler:

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

Edit1: geçici bir ek eklemek gerekmez

Edit2: Sbüyük harf içerebilir ...

Edit3: G'yi çoğaltma

Edit4: biraz daha sıkıştırdı ve bir satıra itti

Edit5: isimsiz lambda ve j=join' '



2

Vim, 46 tuş vuruşu

Çirkin ve Hacky.

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

Neden V'de olmasın? D:
Downgoat

@ Upgoat Çünkü bu büyük bir karmaşa.
DJMcMayhem


2

Pyth, 18 16

MsXGhMJcjdrBH3)J

Burada deneyin

gCoğrafi belirlemeyi gerçekleştiren bir işlevi tanımlar . Bir program olarak, ikinci dize tek satırsa bu çok daha kısa olacaktır, ancak çok satırlı giriş buna değmez:

sXwhMJcjdrBz3)J

Buradaki genel fikir, geobitsian dizesini başlıklandırmak ve bunu orijinal dizeye eklemekti. Sonra bunu boşluklara ayırın ve her dize için ilk harfi alın ve temsil ettiği dizeyle eşleyin. Bu şekilde Xher kelimenin ilk harfini tam kelimeye dönüştürür.


Sadece ... Dennis'i mi aştın?
Bojidar Marinov

@BojidarMarinov Eğer denemede bir hata olan başka bir dil kullanarak Dennis'i sayarsanız, o zaman evet;)
FryAmTheEggman

2

Python 2, 83 78 bayt

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

Ideone üzerinde test edin .

Nasıl çalışır

S dizesindeki tüm c karakterlerini yineliyoruz .

W kelimesinin dizesine bir boşluk ekleriz , ardından bir boşlukla birlikte küçük harfli c oluşumunu ararız.

  • Böyle bir olay varsa, finddizede alanı indeksini dönecektir ' '+wdizinini maçları, c içinde w .

    w[...:]böylece ilk harf c ile başlayan sözcükten başlayarak w kuyruğunu döndürür . kuyruğu boşluklara böler, ilk parçayı (kelime) seçer ve ilk harfini kaldırır.split()[0][1:]

    Prepending sonra c önceki sonuca, biz başlar doğru kasalı sözcüğünü elde c .

  • Herhangi bir kelime ile başlıyorsa c , finddöner -1 .

    Bu durumda, w[...:]son karakter verir ağırlık , split()bir dizi içinde sarar [0]sarma kaldırır ve [1:]dize sadece karakteri siler.

    Prepending sonra c , kimin karakter tekil dize elde c tüm operasyon no-op yani.

Son olarak, ''.joinbir Geobitsized sürümünü dönen, bütün çıkan dizeyi birleştirir s .



1

CJam, 19 bayt

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

Burada test edin.

açıklama

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

JavaScript ES6, 67 63 70 bayt

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

Bunu Firefox'ta test edin. böcekler bunu istediğimden daha uzun yapıyor

açıklama

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")döner "1abracadabraDbracadabrababracadabrawbracadabra".
Dennis

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.