lwap O kızları tirst!


27

Liste veya sınırlandırılmış bir dize verildiğinde, bir kelimenin ardından her kelimenin ilk karakteriyle bir liste veya sınırlandırılmış dize çıkar.

Bu zorluk için, bir "kelime", boşluk, yeni satır ve sekme karakteri hariç yalnızca yazdırılabilir tüm ASCII karakterlerinden oluşur.

Örneğin, "İyi günler, Dünya!" Dizgesini alın. (Boşlukla sınırlandırılmış):

1. String
"Good afternoon, World!"

2. Get the first characters:
"[G]ood [a]fternoon, [W]orld!"

3. Move the characters over. The character at the end gets moved to the beginning.
"[W]ood [G]fternoon, [a]orld!"

4. Final string
"Wood Gfternoon, aorld!"

Bu , yani en kısa kod kazanır!

Test durumları:

Input -> output (space-delimited)

"Good afternoon, World!" -> "Wood Gfternoon, aorld!"
"This is a long sentence." -> "shis Ts i aong lentence."
"Programming Puzzles and Code Golf" -> Grogramming Puzzles Pnd aode Colf"
"Input -> output" -> "onput I> -utput"
"The quick brown fox jumped over the lazy dog." -> "dhe Tuick qrown box fumped jver ohe tazy log."
"good green grass grows." -> "good green grass grows."

Çıktıda takip eden bir alana izin var mı?
Business Cat,

Kelimeler arasında en fazla bir boşluk olacağını varsayabilir miyiz?
matematik bağımlısı

harflerin birbirlerini izleyebileceği bazı kurallarla, bir kaşıkçık üretecine sahip olacaksınız en.wikipedia.org/wiki/Spoonerism
Görünen ad

@BusinessCat Evet.
Yoldaş SparklePony

@ mathjunkie Evet.
Yoldaş SparklePony

Yanıtlar:



8

Japt , 11 10 9 8 bayt

Japt'in endeks sarma ve negatif indekslemeden faydalanır.

ËhUgEÉ g

Çevrimiçi deneyin


açıklama

        :Implicit input of array U (each element is an individual word).
Ë       :Map over the array.
h       :Replace the first character of the current element (word) ...
Ug      :  with the word in the array at index ...
EÉ      :    current index (E) -1's ...
g       :  first character.
        :Implicit output of array of modified words

Sanırım bir liste olarak da giriş yapabilirsiniz, ayrıca bir başka byte'ı ¸
kaydedebilirsiniz

Bu bir esneme olabilir, @ETProductions, ama soracağım. EDIT: Burada
Shaggy

1
Evet, gönderinin en başında "Liste verildi ya da ayrılmış bir dize" yazıyor, ne kadar süredir orada olduğundan emin değilsiniz (sanırım ilk görüldüğü zamandan beri sanırım).
ETHProductions

Güzel bir! Kullanmak hiyi bir fikirdi. Ben birlikte gelen £g´Y ¯1 +XÅhale hangi 1 £ XhUg'Y sizin tekniği kullanılarak.
Oliver

5

Haskell , 43 bayt

p%((a:b):r)=(p:b):a%r
_%e=e
(%)=<<head.last

Çevrimiçi deneyin! Giriş ve çıkış için dizelerin bir listesini kullanır.

Önceki kelimenin ilk harfini hatırlar pve tekrarlayan bir şekilde yeni ilk harfi zincire gönderirken mevcut kelimenin ilk harfini yapar. Önceki ilk harf, son kelimenin ilk harfi olarak başlatıldı.


4

Ruby, 85 77 63 bayt

Bunun çok daha kısa olacağından eminim.

Düzenleme: toplamak için @ manatwork için teşekkürler -> harita

a=gets.split;$><<a.zip(a.rotate -1).map{|x,y|y[0]+x[1..-1]}*' '

İkisini de .collectve .eachile değiştirebilirsiniz .map.
Manatwork

1
-pbayrak (+1 byte) ve i=-2;gsub(r=/\b\w/){$_.scan(r)[i+=1]}en yüksek golf sahası için
Value Ink


4

CJam , 12 10 9 bayt

Jimmy23013 sayesinde 1 bayt kaydedildi

q~Sf+:()o

Sözcük listesi olarak girdi alır.

Çevrimiçi deneyin!

açıklama

     e# Example input: ["Good" "afternoon," "World!"]
q~   e# Read and eval the input.
     e# STACK: [["Good" "afternoon," "World!"]]
Sf+  e# Append a space to each word.
     e# STACK: [["Good " "afternoon, " "World! "]]
:(   e# Remove the first character from each substring.
     e# STACK: [["ood " 'G "fternoon, " 'a "orld! " 'W]]
)o   e# Remove and print the last element of the array.
     e# STACK: [["ood " 'G "fternoon, " 'a "orld! "]]
     e# Implicitly join the remaining array with no separator and output.

Giriş ve çıkışları liste halinde alabilirsin, biliyorsun.
Yoldaş SparklePony

@ComradeSparklePony Cevapladıktan sonra onayladınız: P Şimdi Golf
Business Cat

)oiçin 1m>.
jimmy23013

3

V , 7 bayt

Îxjp
{P

Çevrimiçi deneyin!

Açıklama:

Î       " On every line:
 x      "   Delete the first character
  j     "   Move down a line
   p    "   And paste a character (into column 2)
{       " Move to the beginning of the input
 P      " And paste the last thing we deleted (into column 1)

3

JavaScript (ES6), 46 bayt

s=>s.map((k,i)=>s.slice(i-1)[0][0]+k.slice(1))

slice(-1)Bir dizinin son elemanını döndüren gerçeğinden faydalanır .

Pasaj


Birleşmeyi kaldırabilir misin? Soru, bir liste çıktısı alabileceğinizi belirtir. 8 byte kazandıracak
Craig Ayre

1
@CraigAyre, tatlı, teşekkürler!
Rick Hitchcock

3

Vim, 16 , 9 bayt

<C-v>GdjPGD{P

@Wossname sayesinde 7 bayt kaydedildi!

Her satırda bir kelime girişi yapar, örneğin

Hello
world
and
good
day
to
you

Girişin bir liste halinde alınmasına izin verildiğinden bunun iyi olması gerektiğine inanıyorum.

Çevrimiçi deneyin!


Olduğu gibi 'elle' yaparsanız, 12 tuş vuruşunda yapılabilir. Bu sözdizimini burada nasıl ifade edeceğinizi veya bu bilmecede bunu yapmak için geçerli olup olmadığından emin değilsiniz. ^vGdjPGd$ggP (burada ^ v [control + v] tuşunun
birleşimidir

@Wossname Ah, bu harika bir fikir! Orada daha da fazla bayt tasarrufu için eklediğim birkaç küçük şey var (örneğin dd -> D, gg -> }) İpucu için teşekkürler!
DJMcMayhem

Gd ve gg’nin her ikisinin de daha kısa sürümleri olduğunu bilmiyordum! Awesome :)
Wossname

Kodun içindeki "<Cv>" yerine v harfinin etrafındaki "superscript HTML etiketlerini" kullanmaya ne dersiniz? Bu, Cevapta göründüğünde kodun doğru uzunlukta görünmesini sağlar. Böylece kodunuz ... <sup> V </sup> GdjPGD {P ..
Woss name

1
Kıvrımlı kaşlı ayraçlar paragraflar arasında atlıyorlar, burada çalışıyor çünkü biz sadece bir paragrafla uğraşıyoruz. Güzel. Oh vay bu büyük kod dosyaları arasında hızlı bir şekilde kaydırma yapar gerçekten kolay! Bahşiş için teşekkürler. :)
Wossname

3

> <> , 44 45 bayt

90.f3+0.>&i&01.>~r&l0=?;o20.
 i:" "=?^:1+ ?!^

Boşlukla ayrılmış kelimeleri varsayar.

Aaron tarafından düzeltme 1 bayt eklendi


2

Python 2,74 bayt

Çevrimiçi deneyin

S=input().split()
print' '.join(b[0]+a[1:]for a,b in zip(S,S[-1:]+S[:-1]))

-5 bayt, @Rod sayesinde


@Rod İyi öneri, teşekkür ederim!
Ölü Olasılık

4
S[:-1]kısaltılabilir S; farklı uzunluktaki listelerin sıkıştırılması hangisi daha uzun olursa olsun otomatik olarak keser
Julian Wolf

2

Haskell , 50 bayt

f=zipWith(:).((:).last<*>init).map head<*>map tail

Giriş ve çıkış kelimelerin listesi gibidir.


1
İşlevler adsız olabilir, bu nedenle ihmal edebilirsiniz f=.
nimi

1
Güzel, Haskell için çevrimiçi bir derleyici olduğunu bilmiyordum. Yanlış yaptığım için yorumlarımı sileceğim ^^
Fund Monica'nın Davası

2

PHP, 62 bayt

$c=end($_GET);foreach($_GET as$g)echo$g|$g[0]=$c^$g^$c=$g,' ';

2

C #, 78 77 bayt

using System.Linq;a=>a.Select((s,i)=>a[i-->0?i:a.Count-1][0]+s.Substring(1));

Bir Func<List<string>, IEnumerable<string>>, Tam / Biçimli sürümüyle derlenir:

using System;
using System.Collections.Generic;
using System.Linq;

class P
{
    static void Main()
    {
        Func<List<string>, IEnumerable<string>> f = a =>
                a.Select((s, i) => a[i-- > 0 ? i : a.Count - 1][0] + s.Substring(1));

        Console.WriteLine(string.Join(" ", f(new List<string>() { "Good", "afternoon,", "World!" })));
        Console.WriteLine(string.Join(" ", f(new List<string>() { "This", "is", "a", "long", "sentence." })));

        Console.ReadLine();
    }
}

2

Brachylog , 12 bayt

{hᵐ↻|bᵐ}ᶠzcᵐ

Çevrimiçi deneyin!

açıklama

Example input: ["Good","afternoon,","World!"]

{      }ᶠ       Find: [["W","G","a"],["ood","fternoon,","orld!"]]
 hᵐ↻              Take the head of each string, cyclically permute them
    |             (and)
     bᵐ           Get the strings without their heads
         z      Zip: [["W","ood"],["G","fternoon,"],["a","orld!"]]
          cᵐ    Map concatenate on each list: ["Wood","Gfternoon,","aorld!"]

2

R, 72 70 bayt

function(x)paste0(substr(x,1,1)[c(y<-length(x),2:y-1)],substring(x,2))

Çevrimiçi deneyin

Giuseppe sayesinde 2 bayt kurtarıldı.

Giriş ve çıkış listelerdir. İlk harflerden oluşan bir alt dizini alır, sonuncuyu öne doğru çevrir ve her kelimenin geri kalanının alt dizesi ile birlikte yapıştırır. Bisiklete binme basamağı bir katil, ancak daha fazla kesmenin bir yolunu bulamıyorum.


1
Kullanabileceğin 2:y-1yerine 1:(y-1)beri :öncelik devraldı -size 2 bayt kaydeder.
Giuseppe


2

Python 2 + Numpy, 104 bayt

from numpy import *
s=fromstring(input(),"b")
m=roll(s==32,1)
m[0]=1
s[m]=roll(s[m],1)
print s.tobytes()

1
Import ifadesini bayt sayısına dahil etmeniz gerekir. Güzel cevap!
Yoldaş SparklePony

ayrıca, giriş ve çıkış kodunuzu bayt sayısında da bulundurmanız gerekir
Felipe Nardi Batista

1
Sanırım son satırı 1 byte'a bırakabilirsin.
Ørjan Johansen

@ ØrjanJohansen evet, ayrıca "u1" yerine "b", yani -2 bayt.
Mikhail V


1

Mathematica, 59 bayt

""<>#&/@Thread@{RotateRight@#~StringTake~1,#~StringDrop~1}&

Çevrimiçi deneyin!

Kelimelerin bir listesini alır ve verir.

Dizeleri alıp döndürmeyi tercih ederseniz, bu 87 bayt için çalışır:

StringRiffle[Thread@{RotateRight@#~StringTake~1,#~StringDrop~1}&@StringSplit@#," ",""]&


1

kdb +, 25 22 bayt

Çözüm:

rotate[-1;1#'a],'1_'a:

Örnek:

q)rotate[-1;1#'a],'1_'a:("The";"quick";"brown";"fox";"jumped";"over";"the";"lazy";"dog.")
"dhe"
"Tuick"
"qrown"
"box"
"fumped"
"jver"
"ohe"
"tazy"
"log."

Açıklama:

1_'a:             // (y) drop first character of each element of a
,'                // join each left with each right
rotate[-1;1#'a]   // (x) take first character of each element of a, rotate backwards 1 char

Ekstra:

Normal bir dize (37 bayt) alan bir sürüm:

q){" "sv rotate[-1;1#'a],'1_'a:" "vs x}"The quick brown fox jumped over the lazy dog."
"dhe Tuick qrown box fumped jver ohe tazy log."


0

Retina , 25 20 bayt

Bayt sayısı, ISO 8859-1 kodlamasını varsayar.

Om$`^.((?=.*¶))?
$#1

Çevrimiçi deneyin!

Giriş ve çıkış satır besleme ile ayrılmıştır. Test paketi, alan ayrılmasından gerekli G / Ç dönüşümünü gerçekleştirir.


Kazık ayırma kullanmak iyidir.
Yoldaş SparklePony

0

Mathematica, 134 bayt

(w=Characters@StringSplit@#;d=Drop[w,0,1];StringRiffle[StringJoin/@Table[PrependTo[d[[i]],RotateRight[First/@w][[i]]],{i,Length@w}]])&

0

Pyth, 12 bayt

.b+hNtY.>Q1Q

Kelimelerin listesini alır ve kelimelerin listesini döndürür.

Dene!


0

Java (OpenJDK 8) , 97 bayt

for(int n=s.length,i=0,j=n-1;i<n;j%=n)System.out.print(s[j++].charAt(0)+s[i++].substring(1)+" ");

Çevrimiçi deneyin!


Bu bir snippet, bir fonksiyon değil. Ayrıca, tüm String'i bir argüman olarak almalı, ayrıca virgül ve soru / inceleme işaretlerini çıktıda olduğu gibi tutmalısınız.
Kevin Cruijssen

0

C, 106 77 bayt

i,a,b;f(char*o){a=*o;for(i=0;o[i++];)if(o[i]==32){b=o[++i];o[i]=a;a=b;}*o=a;}

-29 İskoçyalı bayt

Dize yerinde değiştirir.

Ungolfed:

char *f(char *o){
    char a=*o,b; // start with a as the first character of the first word
    for(int i=0;++i<strlen(o);){
        // iterate through the string with i as the index
        if(o[i]==32){ // if the current character is a space, 
                      // i.e. if a word begins after this character
            b=o[++i]; // store the beginning of the next word in b
            o[i]=a; // set the beginning of the next word to a
            a=b; // set a to what the beginning of the next work used to be
        }
    }
    *o=a; 
    // set the beginning of the first word to the old beginning of the last word
}

Golfçü sürüm teklifi (aynı kod): -29 bayt
scottinet



0

Kabuğu , 11 bayt

Foz:ṙ_1TmΓ,

Dizelerin bir listesi olarak giriş ve çıkış yapın, çevrimiçi deneyin!

(Başlık yalnızca girişi bir sözcük listesine dönüştürür ve çıktı listesine boşluklarla birleştirir.)

açıklama

F(z:ṙ_1)TmΓ,  -- example input: ["Good" "afternoon,","World!"]
         m    -- map the following (example on "Good")
          Γ   -- | pattern match head & tail: 'G' "ood"
           ,  -- | construct tuple: ('G',"ood")
              -- : [('G',"ood"),('a',"fternoon,"),('W',"orld!")]
        T     -- unzip: ("GaW",["ood","fternoon,","orld!"])
F(     )      -- apply the function to the pair
    ṙ_1       -- | rotate first argument by 1 (to right): "WGa"
  z:          -- | zip the two by (example with 'W' and "ood")
              -- | | cons/(re)construct string: "Wood"
              -- :-: ["Wood","Gfternoon,","aorld!"]

Alternatif, 11 bayt

§oz:ṙ_1m←mt

Çevrimiçi deneyin!


0

AWK , 63 bayt

{for(R=substr($NF,1,1);++j<=NF;R=r)sub(r=substr($j,1,1),R,$j)}1

Çevrimiçi deneyin!

Artıklığı azaltmanın bir yolu olmalı, ama göremiyorum.

Not: TIO bağlantısında çoklu satır girişine izin vermek için 4 ekstra bayt vardır.

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.