lwap Dia harus belenggu!

27

Diberikan daftar atau string yang dibatasi, mengeluarkan daftar atau string yang dibatasi dengan karakter pertama dari setiap kata satu kata kemudian.

Untuk tantangan ini, "kata" hanya terdiri dari semua karakter ASCII yang dapat dicetak, kecuali karakter spasi, baris baru, dan tab.

Misalnya, ambil senar "Selamat siang, Dunia!" (dibatasi-ruang):

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!"

Ini , jadi kode terpendek menang!

Kasus uji:

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."
Kamerad SparklePony
sumber
Apakah ruang trailing diperbolehkan dalam output?
Business Cat
Bisakah kita berasumsi akan ada paling banyak satu spasi di antara kata-kata?
pecandu matematika
dengan beberapa aturan tentang huruf mana yang dapat saling mengikuti, Anda akan memiliki generator spoonerism en.wikipedia.org/wiki/Spoonerism
Nama tampilan
@BusinessCat Ya.
Kamerad SparklePony
@ mathjunkie Ya.
Kamerad SparklePony

Jawaban:

10

05AB1E , 7 6 byte

€ćÁ2ôJ

Penjelasan:

€ć      Extract head of each
  Á     Rotate to the right
    2ô  Split into pieces of length two
      J Join

Cobalah online!

Okx
sumber
Anda dapat mengambil input dan output sebagai daftar, Anda tahu.
Kamerad SparklePony
8

Japt , 11 10 9 8 byte

Mengambil keuntungan dari pembungkus indeks Japt dan indeks negatif.

ËhUgEÉ g

Cobalah online


Penjelasan

        :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
Shaggy
sumber
Saya pikir Anda dapat mengambil input sebagai daftar juga, menyimpan byte lebih lanjut pada¸
ETHproduksi
Itu mungkin peregangan, @ ETHproduksi, tapi saya akan bertanya. EDIT: Dikonfirmasi di sini
Shaggy
1
Ya, di bagian paling awal tulisan itu tertulis "Diberikan daftar atau string yang dibatasi," Tidak yakin berapa lama itu telah ada (saya kira sejak tantangan pertama kali diposting).
ETHproduksi
Yang bagus! Menggunakan hadalah ide yang bagus. Saya datang dengan £g´Y ¯1 +XÅyang bisa menjadi £ XhUg'Y ¯ 1 menggunakan teknik Anda.
Oliver
5

Haskell , 43 byte

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

Cobalah online! Menggunakan daftar string untuk input dan output.

Mengingat huruf pertama dari kata sebelumnya p, dan secara rekursif menjadikannya huruf pertama dari kata saat ini saat mengirim huruf pertama yang baru ke rantai. Huruf pertama sebelumnya diinisialisasi sebagai huruf pertama dari kata terakhir.

Tidak
sumber
4

Ruby, 85 77 63 byte

Cukup yakin ini bisa menjadi jauh lebih pendek.

Sunting: Terima kasih atas @manatwork untuk kumpulkan -> peta

a=gets.split;$><<a.zip(a.rotate -1).map{|x,y|y[0]+x[1..-1]}*' '
Peter Lenkefi
sumber
Anda bisa mengganti keduanya .collectdan .eachdengan .map.
manatwork
1
-pi=-2;gsub(r=/\b\w/){$_.scan(r)[i+=1]}benderai (+1 byte) dan untuk pegolf terbaik
Value Ink
4

Jelly , 6 byte

Ḣ€ṙ-;"

Cobalah online!

Terima kasih kepada Dennis untuk membaca aturan lebih baik dari saya, ini mengembalikan daftar kata-kata. Itu tidak berfungsi sebagai program lengkap.

Erik the Outgolfer
sumber
4

CJam , 12 10 9 byte

Disimpan 1 byte berkat jimmy23013

q~Sf+:()o

Mengambil input sebagai daftar kata.

Cobalah online!

Penjelasan

     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.
Kucing Bisnis
sumber
Anda dapat mengambil input dan output sebagai daftar, Anda tahu.
Kamerad SparklePony
@ComradeSparklePony Anda mengonfirmasi bahwa setelah saya menjawab: P Golfing now
Business Cat
)ountuk 1m>.
jimmy23013
3

V , 7 byte

Îxjp
{P

Cobalah online!

Penjelasan:

Î       " 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)
DJMcMayhem
sumber
3

JavaScript (ES6), 46 byte

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

Mengambil keuntungan dari fakta yang slice(-1)mengembalikan elemen terakhir array.

Potongan

Rick Hitchcock
sumber
Bisakah Anda menghapus bergabung? Pertanyaan menyatakan bahwa Anda dapat menampilkan daftar. Ini akan menghemat 8 byte
Craig Ayre
1
@CraigAyre, manis, terima kasih!
Rick Hitchcock
3

Vim, 16 , 9 byte

<C-v>GdjPGD{P

7 byte disimpan berkat @Wossname!

Mengambil input satu kata per baris, mis

Hello
world
and
good
day
to
you

Saya percaya ini harus baik-baik saja karena mengambil input sebagai daftar diperbolehkan.

Cobalah online!

DJMcMayhem
sumber
Hal ini dapat dilakukan dalam 12 penekanan tombol jika Anda melakukannya 'dengan tangan'. Tidak yakin bagaimana mengartikulasikan sintaks itu di sini atau apakah itu valid untuk melakukannya dalam puzzle ini. ^vGdjPGd$ggP (di mana ^ v adalah kombo kunci [control + v], pastikan untuk memulai dengan kursor di kiri atas dan berada dalam mode perintah)
Wossname
@Wossname Ah, itu ide bagus! Ada beberapa hal kecil yang saya tambahkan untuk menghemat lebih banyak byte (misalnya dd -> D,, gg -> }) Terima kasih atas tipnya!
DJMcMayhem
Saya tidak tahu dd dan gg keduanya memiliki versi yang lebih pendek! Luar biasa :)
Wossname
Bagaimana dengan menggunakan "tag HTML superskrip" di sekitar huruf v dalam kode alih-alih "<Cv>"? Itu akan membuat kode terlihat panjang yang tepat ketika dilihat di Jawaban. Jadi kode Anda akan terlihat seperti ... <sup> V </sup> GdjPGD {P ... yang terlihat sangat rapi ketika halaman web stackexchange memformatnya dengan benar.
Wossname
1
Saya melihat, kurung kurawal melompat di antara paragraf, itu bekerja di sini karena kita hanya berurusan dengan satu paragraf. Keren. Oh wow itu membuat menggulir dengan cepat melalui file kode besar sangat mudah! Terima kasih atas tipnya. :)
Wossname
3

> <> , 44 45 byte

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

Mengasumsikan kata-kata yang dipisahkan oleh ruang.

Koreksi oleh Aaron menambahkan 1 byte

AGourd
sumber
2

Python 2, 74 byte

Cobalah online

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

-5 byte, terima kasih kepada @Rod

Possum Mati
sumber
@Rod Saran yang bagus, terima kasih!
Dead Possum
4
S[:-1]dapat disingkat menjadi S; zipping daftar dengan panjang berbeda secara otomatis memotong mana yang lebih panjang
Julian Wolf
2

Haskell , 50 byte

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

Input dan output adalah sebagai daftar kata-kata.

faubi
sumber
1
Fungsi dapat dinamai, sehingga Anda dapat menghilangkan f=.
nimi
1
Oh, keren, saya tidak menyadari ada kompiler online untuk Haskell. Saya akan menghapus komentar saya, karena saya salah ^^
Gugatan Dana Monica
2

PHP, 62 byte

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

C #, 78 77 byte

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

Kompilasi ke versi Func<List<string>, IEnumerable<string>>, Lengkap / Diformat:

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();
    }
}
TheLethalCoder
sumber
2

Brachylog , 12 byte

{hᵐ↻|bᵐ}ᶠzcᵐ

Cobalah online!

Penjelasan

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!"]
Fatalisasi
sumber
2

R, 72 70 byte

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

Cobalah online

2 byte disimpan berkat Giuseppe.

Input dan output adalah daftar. Membawa substring yang terdiri dari huruf pertama, siklus yang terakhir ke depan, dan menempelkannya bersama dengan substring dari sisa setiap kata. Langkah bersepeda adalah pembunuh, tapi saya tidak tahu cara untuk memotongnya lebih jauh.

pengguna2390246
sumber
1
Anda bisa menggunakan 2:y-1alih-alih 1:(y-1)karena :diutamakan -yang menghemat 2 byte.
Giuseppe
2

Python 2 + Numpy, 104 byte

from numpy import *
s=fromstring(input(),"b")
m=roll(s==32,1)
m[0]=1
s[m]=roll(s[m],1)
print s.tobytes()
Mikhail V
sumber
1
Anda harus memasukkan pernyataan impor dalam hitungan byte. Jawaban keren!
Kamerad SparklePony
juga, Anda harus memiliki kode input dan output dalam hitungan byte
Felipe Nardi Batista
1
Saya pikir Anda dapat membuang baris terakhir untuk 1 byte.
Ørjan Johansen
@ ØrjanJohansen ya, juga "b" bukannya "u1" bekerja, jadi -2 byte.
Mikhail V
2

APL (Dyalog) , 6 byte

Membawa matriks dengan satu kata per kolom.

¯1∘⌽@1

Cobalah online!

¯1∘⌽ putar satu langkah ke kanan

@ di

1 baris 1

Adám
sumber
ide masukan pintar
Jonah
1

Mathematica, 59 byte

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

Cobalah online!

Mengambil dan mengembalikan daftar kata.

Jika Anda memilih untuk mengambil dan mengembalikan string, ini berfungsi untuk 87 byte:

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

Retina, 46 37 31 byte

(\S)(\S* +)
$2$1
(.* .)(.)
$2$1

Cobalah secara Online

Masih bermain golf ..

pecandu matematika
sumber
1
Bisakah Anda tidak menjatuhkan (.*)dan $3?
Neil
@Neil ya, terima kasih
pecandu matematika
Jika Anda mengubah +baris pertama menjadi *Anda mengubah (.* .)baris ketiga menjadi (.*)-2 byte. Cobalah secara Online!
PunPun1000
1

kdb +, 25 22 byte

Larutan:

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

Contoh:

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."

Penjelasan:

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

Tambahan:

Versi yang menggunakan string biasa (37 byte):

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."
streetster
sumber
1

Perl 5 , 40 byte

39 byte kode +1 untuk -a

$F[-1]=~/./;$a=$&,s/./$a/ for@F;say"@F"

Cobalah online!

Xcali
sumber
0

Retina , 25 20 byte

Hitungan byte mengasumsikan penyandian ISO 8859-1.

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

Cobalah online!

Input dan output dipisahkan oleh linefeed. Test suite melakukan konversi I / O yang diperlukan dari pemisahan ruang.

Martin Ender
sumber
Tidak masalah menggunakan pemisahan linefeed.
Kamerad SparklePony
0

Mathematica, 134 byte

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

Pyth, 12 byte

.b+hNtY.>Q1Q

Mengambil daftar kata dan mengembalikan daftar kata.

Cobalah!

KarlKastor
sumber
0

Java (OpenJDK 8) , 97 byte

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)+" ");

Cobalah online!

Bashful Beluga
sumber
Ini adalah cuplikan, bukan fungsi. Selain itu, Anda harus mengambil seluruh String sebagai satu argumen, dan juga menyimpan tanda koma dan tanda tanya / ujian di output apa adanya.
Kevin Cruijssen
0

C, 106 77 byte

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 byte dari scottinet

Memodifikasi string di tempat.

Tidak Disatukan:

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
}
pizzapants184
sumber
Proposal versi Golfier (kode yang sama persis): -29 byte
scottinet
74 byte
ceilingcat
0

Sekam , 11 byte

Foz:ṙ_1TmΓ,

Input dan output sebagai daftar string, coba online!

(Header hanya mengubah input ke daftar kata dan bergabung dengan daftar output dengan spasi.)

Penjelasan

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 byte

§oz:ṙ_1m←mt

Cobalah online!

ბიმო
sumber
0

AWK , 63 byte

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

Cobalah online!

Sepertinya harus ada cara untuk mengurangi redundansi, tapi aku tidak melihatnya.

Catatan: tautan TIO memiliki 4 byte tambahan untuk memungkinkan input multiline.

Robert Benson
sumber