Làm thế nào để số nhiều dấu chấm lửng?


14

Đó rõ ràng là dấu chấm lửng.

Lấy cảm hứng từ một tin nhắn trò chuyện .

Thử thách của bạn

Đưa ra một danh sách hoặc khoảng trắng hoặc chuỗi từ được phân tách bằng dấu phẩy, dấu chấm lửng xác định chúng.

Để ellipsisessieses-ify một từ:

  1. Bắt đầu với từ này.
  2. Thêm chữ cái đầu tiên của từ gốc vào cuối.
  3. Thêm 2 chữ cái cuối cùng của từ gốc vào cuối.
  4. Thêm chữ cái thứ hai đến cuối cùng của từ gốc vào cuối.
  5. Thêm chữ cái đầu tiên của từ gốc vào cuối.
  6. Thêm chữ cái cuối cùng của từ gốc vào cuối.
  7. Lặp lại các bước 5 & 6 một lần.
  8. Bạn đã hoàn tất!

Bạn có thể giả sử:

  • Các từ đầu vào sẽ chỉ là chữ và số
  • Đầu vào và đầu ra có thể là một chuỗi hoặc danh sách được phân tách bằng dấu cách
  • Đầu vào sẽ chỉ chứa các từ
  • Các từ sẽ dài ít nhất 2 chữ cái
  • Đầu vào sẽ khớp với regex /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • Bạn có thể có một định dạng đầu vào và đầu ra khác nhau
  • Hơn nữa sẽ đến ...

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

ellipsis -> ellipsisessieses
goat -> goatgttagtgt
covfefe -> covfefeceefcece
programmer5000 -> programmer5000p000p0p0
up vote down goat -> upuppuupup voteveetveve downdnnwdndn goatgttagtgt
it is golf yo -> itittiitit isissiisis golfgfflgfgf yoyooyyoyo
crossed out 44 is still 44 -> crossedcddecdcd outottuotot 4444444444 isissiisis stillslllslsl 4444444444

Câu trả lời ngắn nhất ininniinin bytebssebsbs wonwssnwsws!


Khá chắc chắn rằng "e" trong "ellipsisessieses" là từ "ellipses" (ngoại trừ "e" đầu tiên)
Leaky Nun

15
Tôi vẫn không biết làm thế nào để số nhiều dấu chấm lửng ... EDIT : rõ ràng, đó là dấu chấm lửng .
hoàn toàn là

1
Đối với bước 2, tôi nghĩ chỉ nên thêm một e, không thêm chữ cái đầu tiên
benzen

@benzene có thể có ý nghĩa hơn, nhưng bây giờ đã quá muộn.
lập trình

2
Đó là hình elip . Các số nhiều khác có cùng cách viết nhưng cách phát âm khác nhau cho một từ kết thúc bằng -is và một từ kết thúc bằng -e là các trụccăn cứ .

Câu trả lời:


16

JavaScript (ES6), 58 57 byte

NB: Điều này hóa ra là sử dụng thủ thuật tương tự như Jonathan Allan trong câu trả lời Jelly này (mặc dù tôi nhận thấy sau khi đăng).

Đã lưu 1 byte nhờ Jonathan Allan

Hoạt động trên mảng của chuỗi.

s=>s.map(s=>s+'01120101'.replace(/./g,n=>s.substr(-n,1)))

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


Ái chà, tuyệt quá! Công việc tốt!
lập trình

Tôi tin rằng bạn có thể lưu một byte bằng cách thay thế 21102121bằng 01120101n-2bằng -n.
Jonathan Allan

@Jonathan ALLan Bắt tốt. Cảm ơn!
Arnauld

11

Thạch ,  13 12  11 byte

⁽×ʠb3’ịṭµ€K

Một chương trình đầy đủ có một danh sách các danh sách các ký tự và in đầu ra được phân tách bằng dấu cách.

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

Làm sao?

⁽×ʠb3’ịṭµ€K - Main link: list of lists of characters e.g. ["this","is","it"]
        µ€  - for each word in the input:            e.g. "this"
⁽×ʠ         -   base 250 literal 5416                     5416
   b3       -   converted to base 3                       [2,1,1,0,2,1,2,1]
     ’      -   decrement                                 [1,0,0,-1,1,0,1,0]
      ị     -   index into the word                       "tssitsts"
       ṭ    -   tack to the word                          ["this",["tssitsts"]]
          K - join the results with spaces                ["this",["tssitsts"]," is",["issiisis"]," it",["ittiitit"]]
            - implicit print                              thistssitsts isissiisis itittiitit

Ngoài ra, một danh sách các từ để liệt kê các từ cũng có thể có trong 11 byte :

⁽×ʠb3’ị;@µ€

⁽×ʠb3’cũng có thể được thay thế bằng 4,⁵Bj-cho cùng một số byte
( [4,10]trong nhị phân được [[1,0,0],[1,0,1,0]]nối bởi -1[1,0,0,-1,1,0,1,0]).


Bạn có cần tham gia kết quả với không gian? Bạn được phép xuất ra một danh sách / một danh sách các danh sách.
lập trình

@ lập trình5000 Vâng, tham gia với không gian là tùy chọn ở đây
ASCII chỉ

@ lập trình viên5000 Có một thay thế 11 thay thế trả về một danh sách mà tôi đã đưa ra bên dưới câu trả lời chính (lưu ý rằng không có cách nào để đưa câu hỏi chính xuống còn 10 bằng cách xóa Kvì vì một liên kết đơn âm, danh sách được trả về sẽ không phải là một danh sách mức độ sâu, mà tôi tưởng tượng là đẩy I / O lỏng lẻo đi quá xa - đó là đầu vào của ["this", "is", "it"]giá trị trả về sẽ là [['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]](trong đó "..." là danh sách các ký tự) và để nó in thành một chương trình đầy đủ sẽ phá vỡ nó tất cả cùng nhau như thistssitstsisissiisisitittiitit)
Jonathan Allan

7

05AB1E , 12 byte

εD•Lz•3вÍèJ«

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

Giải trình

ε              # apply on each word in input
 D             # duplicate the word
  •Lz•         # push the base-255 compressed number 5416
      3в       # convert to a list of base-3 digits (yields [2, 1, 1, 0, 2, 1, 2, 1])
        Í      # subtract 2 from each (yields [0, -1, -1, -2, 0, -1, 0, -1])
         è     # index into the word with these numbers
          J    # join to string
           «   # append to the original word

1
Hehe, những bộ óc vĩ đại ...
Jonathan Allan

@Jonathan ALLan: Vâng, chúng tôi có cùng một ý tưởng. Jellys nén ngắn hơn đã giành chiến thắng trong ngày này :)
Emigna




4

Than , 20 byte

F⪪S «ι↑E”o∨↙8”§ι±Iκ→

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉ tình cờ đọc câu trả lời của @ Arnauld sau khi mã hóa điều này nhưng về cơ bản đây là một cổng của nó. Giải trình:

F   «                   Loop over
  S                     Input string
 ⪪                       Split at spaces
     ι                  Print the word
        ”o∨↙8”          Compressed string 01120101
       E                Map over each character
                 Iκ     Cast character to integer
                ±       Negate
              §ι        Circularly index into word
      ↑                 Print array upwards, prints each element rightwards
                    →    Move right


Chỉ có ASCII Bạn có phải thêm byte cho -rscờ không?
Neil

Không chắc, tôi đoán vậy? -rschỉ có để vô hiệu hóa in lời nhắc đầu vào
ASCII chỉ

Tôi chỉ nên làm cho -rschế độ mặc định thay thế?
ASCII chỉ


3

JavaScript (ES6), 74 60 byte

s=>s.map(s=>s+(a=s[l=s.length-1],b=s[0])+a+a+s[l-1]+b+a+b+a)

Lấy đầu vào dưới dạng một mảng và xuất ra một mảng.

-9 byte nhờ Lập trình5000

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


3

Toán học, 89 byte

((f[a_]:=#~StringTake~a;k=#<>(q=f@1)<>(w=f[-1])<>w<>f@{-2}<>q<>w<>q<>w)&/@StringSplit@#)&

1
Không có tích hợp toán học Ellipsisessieses? :(
lập trình


3

APL Dyalog, 51 49 byte

Đòi hỏi ⎕ML←3

∊{⍺,' ',⍵}/{S←1,L←≢⍵⋄⍵,⍵[∊S(L-0 1)S S]}¨' '(≠⊂⊢)⍞

-9 byte nhờ @ Adám trong trò chuyện!

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


3

Nghịch lý (v0.2.10), 13? byte (CP-1252)

µ96Qó3BÌDX=v+

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

Đưa ra một danh sách các từ và kết quả là một danh sách các từ trên ngăn xếp.

Một biến thể nhỏ trên thủ thuật cơ sở 3. Có lẽ đã đến lúc làm việc với máy nén cơ sở 250 của tôi.

Giải trình:

μ             .. Map the following block over each word (the block is
              .. terminated by }, but that doesn't exist, so until EOF)
              .. (The word is on the stack now.)
 96Qó         .. 96 * 26 (Q in base 26) = 2496, a hack to prevent us from
              .. needing a space to separate this from the following number.
     3B       .. Convert 2496 to base 3 to get [1,0,1,0,2,1,1,0]
       ÌD     .. Negate and reverse to get [0,-1,-1,-2,0,-1,0,-1]
         X    .. Push the loop variable: the word being mapped over
          =v  .. Index, vectorize; map over the indices by indexing them
              .. into the word
            + .. Concatenate with the original word

(Câu hỏi đếm bằng byte: Bây giờ tôi thực sự chứng minh điều này trong TIO, nó sẽ lấy một danh sách các từ trên ngăn xếp và dẫn đến một danh sách các từ trên ngăn xếp, nhưng bạn thực sự không thể làm gì nhiều với danh sách các từ đó trừ khi bạn đóng khối bắt đầu bằng cách. Tôi có nên tính cú đúp đó không?)


1
Tôi có nên đóng cái nẹp đó không? Có, nếu bạn cần nó.
Erik the Outgolfer

3

Ngôn ngữ Wolfram / Mathicala, 66 byte

StringJoin[StringSplit[#,""]/.{a_,___,b_,c_}:>{#,a,c,c,b,a,c,a,c}]&

Chỉ cần đánh nó thật nhanh, có thể có một cải tiến nhỏ ở đây hoặc ở đó.




2

Java 8, 117 byte

a->{int i=0,l;for(String s:a){char c=s.charAt(0),d=s.charAt(l=s.length()-1);a[i++]+=""+c+d+d+s.charAt(l-1)+c+d+c+d;}}

Lấy đầu vào là một mảng Chuỗi và sửa đổi mảng ban đầu này thay vì trả về một mảng mới để lưu byte.

Nhiều khả năng có thể được đánh gôn thêm ..

Giải trình:

Hãy thử nó ở đây.

a->{                          // Method with String-array as parameter and no return-type
  int i=0,                    //  Index-integer (starting at 0)
      l;                      //  Length-integer which we use multiple times
  for(String s:a){            //  Loop over the input array
    char c=s.charAt(0),       //   The first character of the word
         d=s.charAt(          //   The last character of the word
            l=s.length()-1);  //    and set `l` at the same time to `length()-1`
    a[i++]+=                  //   Append to the current value in the array:
      ""                      //    String so the characters aren't appended as integers
      +c                      //    + the first character
      +d+d                    //    + two times the last character
      +s.charAt(l-1)          //    + the single-last character
      +c+d+c+d;               //    + the first + last character two times
  }                           //  End of loop
}                             // End of method

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.