Büküm Cümleleri


17

kurallar

Program girdi olarak bir dize / kelime dizisi almalıdır. Dize / dizideki her sözcük için, sözcüğün önünden ve arkasından sırayla karakterler alarak sözcüğü yeniden oluşturur.

12345678 9 -> 15243687 9.

Daha sonra kelimeleri, dizedeki en erken ve en son oluşan sözcük arasında dönüşümlü bir şekilde yeniden düzenleyecektir.

15243 687 9 -> 15243 9 687

Son olarak, sonucu çıkarmadan önce boşlukları, sekmeleri ve yeni satırları başlangıçta bulundukları dizinlere yerleştirerek dizeyi yeniden oluşturur.

12345678 9-> 15243687 9 -> 15243 9687 -> 15243 968 7

Çıktı, girdi ile aynı veri türü olmalıdır.

Standart Loopholes yasaktır

Örnekler

Giriş:
Hızlı kahverengi tilki tembel köpeğin üstünden atlar.
Çıktı:
Teh d.ogq kucil yaz bnrwo tehf xoo rvej supm

Giriş:
Hızlı kahverengi tilki
tembel köpeğin üstünden atlar .
Çıktı:
Teh d.ogq kucil yaz bnrwo
tehf xoo rvej supm

Giriş:
Aflack
Çıkış:
Akfcla

Bu bu yüzden en kısa kod kazanır


6
Bu bir kopya gibi geliyor. Yemin ederim bunu daha önce görmüştüm.
Addison Crump

Yani sadece sekme, boşluk ve satırsonu karakterleri bir kelimenin parçası olarak değerlendirilmez
Jonathan Allan


ASCII'yi varsayabilir miyiz? veya Unicode?
MayorMonty

@MayorMonty Karakterlerin, boşlukları düzgün bir şekilde ele aldığı sürece sizin için hangi formu kolaylaştırdığını varsayabilirsiniz.
fəˈnɛtɪk

Yanıtlar:


3

Jöle , 15 14  8 bayt

Bir okkalı 6 bayt tasarrufu Dennis (orada iki, kafasına bölünmüş gerek yoktur ve onlar biri haline böylece düzleştirilmiş zaten orada linke 1 iç flatten ve kalıp hareket ettirerek!)

żṚFṁ
Ç€Ç

(iki satırdan: żṚFœs2Ḣ ve Ç€ÇFṁ⁸)

Çevrimiçi deneyin!

Bir kelime dizisi alır ve bir dizi yeni kelime döndürür. (TIO'daki Altbilgi bunu çağırır ve diziyi boşluklarla birleştirir, böylece güzel bir şekilde yazdırılır.)

Not - tek bir dizgiyi kullanmak, sekme boşluklarını ve satırsonlarını bölmek, ardından yeniden birleştirmek aslında oldukça zorlayıcıydı; bir kelime listesinin bir seçenek olduğunu gördüğümde işler çok daha kolaylaştı!

Nasıl?

Ç€Ç - Main link: list of words
Ç€  - call the last link (1) as a monad for €ach word
  Ç - call the last link (1) as a monad for the result

żṚFṁ - Link 1: Do a twist: list (here, a list of words or characters)
                            e.g. input = [A,B,C,D,E,F,G]
ż    - zip the list with                 [A,    B,    C,    D,    E,    F,    G]
 Ṛ   - the reverse of the list             [G,    F,    E,    D,    C,    B,    A]
                                        [[A,G],[B,F],[C,E],[D,D],[E,C],[F,B],[G,A]]
  F  - flatten into a single list        [A,G,  B,F,  C,E,  D,D,  E,C,  F,B,  G,A]
                                         [A,G,B,F,C,E,D,D,E,C,F,B,G,A]
   ṁ - mould like the input list         [A,G,B,F,C,E,D]

Bu çalışmalı. Çevrimiçi deneyin!
Dennis

Tatlı kaydet; bu manevrayı unutmak çok kolay!
Jonathan Allan

2

JavaScript (ES6), 89 bayt

Bir dizi kelimeyi alır ve çıkarır.

a=>a.map(w=>(F=([a,...b])=>a?a+(b.pop()||'')+F(b):'')(a.map(F)).slice(p,p+=w.length),p=0)

Ölçek

Dize sürümü, 112 bayt

Bir dize alır ve çıktılar.

s=>s.replace(/\S+/g,w=>(F=([a,...b])=>a?a+(b.pop()||'')+F(b):'')(s.split(/\s/).map(F)).slice(p,p+=w.length),p=0)

Ölçek


2

Perl , 77 bayt

74 bayt kod + -0pabayraklar için 3 bayt .

map{s/.\K/chop/ge,s/../chop/reg}@F;s/\S/($r||=$F[$i++].pop@F)=~s%.%%,$&/ge

Çevrimiçi deneyin!

Kaydedilen 8 eski sayesinde bayt @Ton Hospel 'ın yazı ben 'çaldı' s/../chop/reg. (Daha önce vardı $c=y///c/2,s/.{$c}$//)


0

Perl 6 , 84 bayt

{my &t={(|(.shift,.pop)xx*)[^$_]}
map({|t [.comb]},t [$_]).rotor($_».chars)».join}

Bir kelime listesi girer ve çıkar.

Nasıl çalışır

Lambda'nın içinde, " önden ve arkadan dönüşümlü olarak karakter almak " bükümünü yapmak için başka bir lambda tanımladım :

my &t={                        }   # Lambda, assigned to a variable.
          .shift,.pop              # Remove an element from the front an back,
                      xx*          # an infinite number of times,
        |(           )             # and make sure this infinite list is flattened.
                          [^$_]    # Take as many elements as the input had elements.

Bu, xxoperatörün bir işlevden çok bir makroya benzemesi nedeniyle çalışır, çünkü sihirli tembel değerlendirme sağlar.

Sonra ana lambda'da:

                   [$_]                          # Create a fresh array from the input,
                 t                               # and twist it (destructively).
map({          },                                # For each element (i.e. word):
      t [.comb]                                  #   Split it into characters and twist them,
     |                                           #   and slip them into the outer list.
                        .rotor($_».chars)        # Partition this flat list of characters,
                               $_».chars         # using the original word lengths.
                                         ».join  # Turn each sub-list into a word.

Perl 6 , 87 bayt

{my &t={(|(.shift,.pop)xx*)[^$_]}
my @a=map {|t [.comb]},t [.words];S:g/\S/{@a.shift}/}

Bu, farklı boşluk karakterlerini koruyan bir dize girip çıkaran yukarıdakilerin bir varyasyonudur.


0

Haskell , 115 95 93 98 95 bayt

f(a:b)=a:f(reverse b)
f e=e
a!(y:z)|elem y" \t\n"=y:a!z|b:c<-a=b:c!z
a!z=z
(!)=<<(f=<<).f.words

İle arayın (!)=<<(f=<<).f.words $ "some string". Çevrimiçi deneyin!

@Nimi'ye, meydan okumayı daha önce yanlış okuduğumu belirttiği için teşekkürler.

İşlev fbir listede büküm gerçekleştirir, böylece dize (karakter listesi) ve dize listesinde kullanılabilir. a!bdizesinin boşluk ekler bdizeye a.

(!)=<<(f=<<).f.wordsşuna eşittir \s0 -> (concatMap f . f . words $ s0) ! s0:

            s0 = "The quick brown fox jumps\nover the lazy dog."
      words s0 = ["The","quick","brown","fox","jumps","over","the","lazy","dog."] = s1
          f s1 = ["The","dog.","quick","lazy","brown","the","fox","over","jumps"] = s2
concatMap f s2 = "Tehd.ogqkucilyazbnrwotehfxoorvejsupm"                           = s3
       s3 ! s0 = "Teh d.ogq kucil yaz bnrwo\ntehf xoo rvej supm"
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.