Cô ấy khát nước!


27

Đưa ra một danh sách hoặc chuỗi được phân tách, xuất ra một danh sách hoặc chuỗi được phân tách bằng ký tự đầu tiên của mỗi từ một từ sau đó.

Đối với thử thách này, một "từ" chỉ bao gồm tất cả các ký tự ASCII có thể in được, ngoại trừ ký tự khoảng trắng, dòng mới và ký tự tab.

Ví dụ: lấy chuỗi "Chào buổi chiều, Thế giới!" (giới hạn không gian):

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

Đây là , vì vậy mã ngắn nhất sẽ thắng!

Các trường hợp thử nghiệm:

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

Là một không gian dấu cho phép trong đầu ra?
Mèo kinh doanh

Chúng ta có thể cho rằng sẽ có nhiều nhất một khoảng trống giữa các từ không?
nghiện toán học

với một số quy tắc về các chữ cái có thể theo nhau, bạn sẽ có một trình tạo thìa trên en.wikipedia.org/wiki/Spoonerism
Tên hiển thị

@BusinessCat Có.
Đồng chí SparklePony

@mathjunkie Vâng.
Đồng chí SparklePony

Câu trả lời:



8

Japt , 11 10 9 8 byte

Tận dụng lợi thế của gói chỉ mục của Japt và lập chỉ mục tiêu cực.

ËhUgEÉ g

Dùng thử trực tuyến


Giải trình

        :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

Tôi nghĩ bạn cũng có thể lấy đầu vào làm danh sách, lưu thêm một byte vào¸
ETHproductions

Đó có thể là một sự kéo dài, @ETHproductions, nhưng tôi sẽ hỏi. EDIT: Đã được xác nhận tại đây
Shaggy

1
Có, ở phần đầu của bài đăng có ghi "Đưa ra một danh sách hoặc chuỗi phân tách", Không chắc là đã ở đó bao lâu (tôi đoán kể từ khi thử thách được đăng lần đầu).
Sản phẩm ETH

Đẹp quá Sử dụng hlà một ý tưởng tốt. Tôi đã nghĩ ra £g´Y ¯1 +XÅrằng nó có thể trở thành £ XhUg hèY using1 bằng cách sử dụng kỹ thuật của bạn.
Oliver

5

Haskell , 43 byte

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

Hãy thử trực tuyến! Sử dụng một danh sách các chuỗi cho đầu vào và đầu ra.

Ghi nhớ chữ cái đầu tiên của từ trước đó pvà đệ quy biến nó thành chữ cái đầu tiên của từ hiện tại trong khi gửi chữ cái đầu tiên mới xuống chuỗi. Chữ cái đầu tiên trước đó được khởi tạo là chữ cái đầu tiên của từ cuối cùng.


4

Ruby, 85 77 63 byte

Khá chắc chắn rằng điều này có thể ngắn hơn nhiều.

Chỉnh sửa: Cảm ơn @manatwork đã thu thập -> bản đồ

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

Bạn có thể thay thế cả .collect.eachvới .map.
thao tác

1
-pcờ (+1 byte) và i=-2;gsub(r=/\b\w/){$_.scan(r)[i+=1]}cho môn đánh gôn cuối cùng
Giá trị mực


4

CJam , 12 10 9 byte

Đã lưu 1 byte nhờ vào jimmy23013

q~Sf+:()o

Đưa đầu vào như một danh sách các từ.

Hãy thử trực tuyến!

Giải trình

     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.

Bạn có thể lấy đầu vào và đầu ra làm danh sách, bạn biết đấy.
Đồng chí SparklePony

@ComradeSparklePony Bạn đã xác nhận rằng sau khi tôi trả lời: P Chơi gôn ngay bây giờ
Business Cat

)ocho 1m>.
jimmy23013

3

V , 7 byte

Îxjp
{P

Hãy thử trực tuyến!

Giải trình:

Î       " 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))

Tận dụng lợi thế của thực tế slice(-1)trả về phần tử cuối cùng của một mảng.

Đoạn trích


Bạn có thể loại bỏ tham gia? Câu hỏi cho biết bạn có thể xuất ra một danh sách. Nó sẽ tiết kiệm 8 byte
Craig Ayre

1
@CraigAyre, ngọt ngào, cảm ơn!
Rick Hitchcock

3

Vim, 16 , 9 byte

<C-v>GdjPGD{P

7 byte được lưu nhờ @Wossname!

Mất một từ trên mỗi dòng, vd

Hello
world
and
good
day
to
you

Tôi tin rằng điều này sẽ ổn vì lấy đầu vào làm danh sách được cho phép.

Hãy thử trực tuyến!


Nó có thể được thực hiện trong 12 lần nhấn phím nếu bạn thực hiện 'bằng tay' như đã từng. Không chắc chắn làm thế nào để nói rõ cú pháp đó ở đây hoặc nếu nó thậm chí hợp lệ để làm điều đó trong câu đố này. ^vGdjPGd$ggP (trong đó ^ v là tổ hợp phím [control + v], chỉ cần đảm bảo bắt đầu với con trỏ ở trên cùng bên trái và ở chế độ lệnh)
Wossname

@Wossname Ah, đó là một ý tưởng tuyệt vời! Có một vài điều nhỏ tôi đã thêm để tiết kiệm nhiều byte hơn (ví dụ dd -> D, gg -> }) Cảm ơn vì tiền boa!
DJMcMayhem

Tôi không biết dd và gg đều có phiên bản ngắn hơn! Tuyệt vời :)
Wossname

Làm thế nào về việc sử dụng "thẻ HTML siêu ký tự" xung quanh chữ v trong mã thay vì "<Cv>"? Điều đó sẽ làm cho mã trông có độ dài phù hợp khi nhìn thấy trong Câu trả lời. Vì vậy, mã của bạn sẽ trông giống như ... <sup> V </ sup> GdjPGD {P ... trông khá gọn gàng khi trang web stackexchange định dạng đúng.
Wossname

1
Tôi thấy, các dấu ngoặc nhọn nhảy xung quanh giữa các đoạn, nó hoạt động ở đây vì chúng ta chỉ xử lý một đoạn. Mát mẻ. Oh wow làm cho việc cuộn nhanh chóng thông qua các tệp mã lớn thực sự dễ dàng! Cảm ơn vì lời khuyên đó. :)
Wossname

3

> <> , 44 45 byte

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

Giả sử các từ được phân tách bằng dấu cách.

Sửa bởi Aaron thêm 1 byte


2

Python 2, 74 byte

Dùng thử trực tuyến

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

-5 byte, nhờ @Rod


@Rod Đề nghị tốt, cảm ơn bạn!
Xác chết

4
S[:-1]có thể rút ngắn lại S; danh sách nén có độ dài khác nhau sẽ tự động cắt bớt tùy theo thời gian dài hơn
Julian Wolf

2

Haskell , 50 byte

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

Đầu vào và đầu ra là danh sách các từ.


1
Các chức năng có thể không được đặt tên, vì vậy bạn có thể bỏ qua f=.
nimi

1
Ồ, tuyệt, tôi đã không nhận ra có một trình biên dịch trực tuyến cho Haskell. Tôi sẽ xóa nhận xét của mình, vì tôi sai ^^
Vụ kiện của Quỹ 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));

Biên dịch thành Func<List<string>, IEnumerable<string>>phiên bản đầy đủ / được định dạng:

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ᵐ

Hãy thử trực tuyến!

Giải trình

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

Dùng thử trực tuyến

2 byte được lưu nhờ Giuseppe.

Đầu vào và đầu ra là danh sách. Lấy một chuỗi con bao gồm các chữ cái đầu tiên, chuyển cái cuối cùng ra phía trước và dán nó cùng với một chuỗi con của phần còn lại của mỗi từ. Bước đi xe đạp là một kẻ giết người, nhưng tôi không thể tìm ra cách nào để cắt giảm thêm nữa.


1
bạn có thể sử dụng 2:y-1thay vì 1:(y-1)kể từ đó :được ưu tiên -giúp bạn tiết kiệm 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
Bạn cần bao gồm câu lệnh nhập trong số byte. Câu trả lời tuyệt vời!
Đồng chí SparklePony

Ngoài ra, bạn cần phải có mã đầu vào và đầu ra của mình trong số byte
Felipe Nardi Batista

1
Tôi nghĩ bạn có thể thả dòng mới cuối cùng cho 1 byte.
Ørjan Johansen

@ RjanJohansen có, cũng "b" thay vì "u1" hoạt động, vì vậy -2 byte.
Mikhail V


1

Toán học, 59 byte

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

Hãy thử trực tuyến!

Đưa và trả về một danh sách các từ.

Nếu bạn muốn lấy và trả về chuỗi, điều này hoạt động với 87 byte:

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


1

kdb +, 25 22 byte

Dung dịch:

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

Thí dụ:

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

Giải trình:

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

Thêm:

Một phiên bản có một chuỗi thông thường (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

Toán học, 134 byte

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

0

Bình thường, 12 byte

.b+hNtY.>Q1Q

Đưa ra một danh sách các từ và trả về một danh sách các từ.

Thử nó!


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

Hãy thử trực tuyến!


Đây là một đoạn, không phải là một chức năng. Ngoài ra, bạn nên lấy toàn bộ Chuỗi làm một đối số, đồng thời giữ dấu phẩy và dấu hỏi / kiểm tra trong đầu ra.
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 từ scottinet

Sửa đổi chuỗi tại chỗ.

Ung dung:

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
}

Đề xuất phiên bản Golfier (mã chính xác): -29 byte
scottinet



0

Husk , 11 byte

Foz:ṙ_1TmΓ,

Nhập và xuất dưới dạng danh sách các chuỗi, hãy thử trực tuyến!

(Tiêu đề chỉ chuyển đổi đầu vào thành một danh sách các từ và nối danh sách đầu ra với khoảng trắng.)

Giải trình

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

Thay thế, 11 byte

§oz:ṙ_1m←mt

Hãy thử trực tuyến!


0

AWK , 63 byte

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

Hãy thử trực tuyến!

Có vẻ như nên có một cách để giảm sự dư thừa, nhưng tôi không thấy điều đó.

Lưu ý: liên kết TIO có thêm 4 byte để cho phép nhập nhiều dòng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.