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

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:



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

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.


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]}*' '

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

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.

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)

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


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!


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


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


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


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

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

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

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.


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()

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


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@#," ",""]&


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


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.


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}]])&


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!


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
}

Proposal versi Golfier (kode yang sama persis): -29 byte
scottinet



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!


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.