Ở đó, tôi đã phá vỡ nó (bằng kéo)


15

Thử thách

Đưa ra một chuỗi mô tả quy tắc cắt và một chuỗi khác, cắt các phần ra khỏi chuỗi thứ hai bằng cách sử dụng quy tắc được mô tả bởi chuỗi đầu tiên.

Cả hai chuỗi sẽ bao gồm các chữ cái a-zhoặc A-Zbất kỳ chuỗi nào bạn chọn (chúng không phải được thể hiện theo cùng một cách). Cách chuỗi thứ hai được sửa đổi được mô tả dưới đây:

Thuật toán

Lấy chuỗi đầu tiên và tưởng tượng điền vào các khoảng trống giữa các chữ cái không liền kề (tăng) với =; ví dụ: abcfg=> abc==fg. Sau đó, xếp hai chuỗi và trả về tất cả các ký tự từ chuỗi đầu tiên không nằm trên một dấu bằng. Ví dụ, được đưa ra abcfgqrstuvwlàm đầu vào:

qrstuvw - Modify
abc==fg - Modifier

qrs--vw -> qrsvw

Nếu công cụ sửa đổi ngắn hơn sau khi điền các dấu bằng, tất cả các ký tự dấu trong chuỗi thứ hai sẽ được đưa vào. Nếu công cụ sửa đổi dài hơn, các ký tự dấu sẽ bị bỏ qua.

Công cụ sửa đổi không được đảm bảo để được sắp xếp.

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

abcfg, qrstuvw -> qrsvw
abqrs, qwertyuiopasdfghjklzxcvbnm -> qwjklzxcvbnm
za, qr -> qr
azazaz, qwertyuioplkjhgfdsazxcvbnmnbvcxzasdfghjklpoiuytrewq -> qmn

Tham chiếu thực hiện (được sử dụng để tạo các trường hợp thử nghiệm) -> TIO

Quy tắc

  • Áp dụng sơ hở tiêu chuẩn
  • Bạn có thể lấy đầu vào là hai chuỗi, hai danh sách ký tự, ma trận ký tự, v.v. (mọi định dạng hợp lý khác đều được chấp nhận)
  • Bạn có thể xuất dưới dạng chuỗi hoặc danh sách các ký tự (hoặc một số định dạng chuẩn khác cho chuỗi)
  • Đây là , vì vậy câu trả lời ngắn nhất tính bằng byte trong mỗi ngôn ngữ được tuyên bố là người chiến thắng cho ngôn ngữ của nó. Không có câu trả lời sẽ được chấp nhận.
  • Chuỗi có thể trống.

Chúc bạn chơi golf vui vẻ!

Lấy cảm hứng từ hai thử thách gần đây của Kevin Cruijssen, "Ở đó, tôi đã sửa nó (bằng băng / dây )"



2
xu hướng rất phổ biến tôi đang thấy ở đây
L_Church

@L_Chọn thử thách đôi khi theo xu hướng. Hai thử thách liên quan đã được đăng lên nên tôi quyết định tiếp tục xu hướng: DI sẽ đăng một thử thách "Tôi đã sửa nó" nhưng a) Tôi thích phá vỡ mọi thứ tốt hơn 2) Tôi không thể nghĩ ra một sáng tạo khác và đủ khác biệt "đã sửa nó "Ý tưởng: P
HyperNeutrino

16
Thử thách tiếp theo:There, I blew it up (with a segfault)
Bạch tuộc ma thuật Urn

Câu trả lời:


5

JavaScript (ES6), 81 80 byte

Đưa đầu vào trong cú pháp currying (modify)(modifier).

s=>g=([c,...a],d=i=0,x=s[k=parseInt(c,36),i+=c?d&&(k-d+26)%26:1])=>x?x+g(a,k):''

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

Đã bình luận

s =>                       // outer function, taking the string s to modify
  g = (                    // recursive inner function g(), taking:
    [c, ...a],             //   c = current modifier character; a[] = remaining characters
    d = i = 0,             //   d = code of previous modifier character; i = pointer in s
    x = s[                 //   x = i-th character of s
      k = parseInt(c, 36), //     k = code of the current modifier character in [10..35]
      i += c ?             //     update i; if c is defined:
        d &&               //       if d = 0, let i unchanged
        (k - d + 26) % 26  //       otherwise, add the difference between k and d (mod 26)
      :                    //     else:
        1                  //       just pick the next character by adding 1
    ]                      //   end of character lookup in s
  ) =>                     //
    x ?                    // if x is defined:
      x + g(a, k)          //   append x and do a recursive call to g()
    :                      // else:
      ''                   //   stop recursion


3

05AB1E , 20 17 byte

ćsv¹Ç¥Nè<yú«}SðÊÏ

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


Tính khoảng cách ASCII giữa mỗi char, trả trước nhiều khoảng trống nếu nó dương. Khoảng cách âm dẫn đến việc nối thêm 0 khoảng trắng, theo thông số kỹ thuật. Sau đó, tôi đẩy tất cả các ký tự ở cùng các chỉ mục trong chuỗi 2 làm khoảng trắng trong chuỗi thao tác đầu tiên.


Input: [azaz,qwertyuiopasdfghjklzxcvbnm]
--------------------------------------------------------------------------------

ćs                # Remove head, swap                           | [a, zaz]
  v               # Iterate...                                  | ............
   ¹Ç¥            # Push deltas between each char of string 1   | [a,[25,-25,25,-25]]
      Nè          # Push delta at index...                      | [a, 25]
        <         # Decrement (for 1-indexed answer)            | [a, 24]
         y        # Push current char in iteration...           | [a, 24, z]
          ú       # Append b spaces to a...                     | [a, '(spaces)z']
           «      # Concat                                      | [a(spaces)z]
            }     # End loop.                                   | [a(spaces)za(spaces)z]
             SðÊ  # Split, push 1 for non-space elements.       | [Long array of 1/0]
                Ï # Push chars from 2 that aren't spaces in 1.  | ['qmn']

Chắc chắn 90% tôi có thể mất thêm 2-3 byte bằng cách không sử dụng khoảng trắng, nhưng đẩy char ở chỉ số N. Hiện tại vẫn hoạt động với biến thể này ... "Ý tưởng tốt hơn" của tôi đã kết thúc như thế nào:

05AB1E , 18 byte

Ç¥ε1‚Z}ηO0¸ìʒ²g‹}è

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

Tôi cảm thấy như mình đang thiếu thứ gì đó, nếu bạn thấy những cải tiến trên ε1‚Z}, ʒ²g‹}hoặc 0¸ìlmk ...

Ç¥ε1‚Z}ηO0¸ìè13 tuổi, nhưng nó kết thúc tốt đẹp khi n > |input_2|đến input_2[n%|input_2|]...


Phiên bản thứ hai của bạn có thể là Ç ¥ 1M}. ¥ ²g Thay} è , nhưng không có phiên bản nào trong ba phiên bản này hoạt động cho các đầu vào này.
Emigna

Phiên bản trên có thể được sửa bằng cách thêm IgÅ1«, nhưng có lẽ có cách nào tốt hơn?
Emigna

2

Stax , 15 byte

Ç«|¢Äα•è@╟╣i`vF

Chạy và gỡ lỗi nó

Đây là đại diện của ascii.

:-Z+{v0|Mt|cB]pFp
  1. Nhận sự khác biệt theo cặp.
  2. Chuẩn bị một số không.
  3. Tìm hiểu sự khác biệt, lặp lại
    1. Trừ đi 1, và lấy tối đa bằng không.
    2. Loại bỏ nhiều ký tự từ đầu chuỗi.
    3. Dừng lại nếu chuỗi trống.
  4. In phần còn lại của chuỗi.

1
Tôi thích cách mã nói╟╣i
Uriel

2

Thạch , 14 byte

OI’R¬⁸żFḣL}aḟ0

Một liên kết dyadic chấp nhận công cụ sửa đổi như một danh sách các ký tự bên trái và danh sách các ký tự để sửa đổi ở bên phải trả về một danh sách các ký tự.

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

Làm sao?

OI’R¬⁸żFḣL}aḟ0 - Link list of characters Modifier, list of characters InStr
               -                       e.g.  ['a','c','g','a'], ['n','m','l','k','j']
O              - ordinals of Modifier        [97,99,103,97]
 I             - incremental differences     [2,4,-6]
  ’            - decrement                   [1,3,-7]
   R           - range                       [[1],[1,2,3],[]]
    ¬          - NOT (vectorises)            [[0],[0,0,0],[]]
     ⁸         - chain's left argument, Modifier
      ż        - zip together                [['a',[0]],['c',[0,0,0]],['g',[]],['a']]
       F       - flatten                     ['a',0,'c',0,0,0,'g','a']
         L}    - length of right (InStr)     5
        ḣ      - head to index               ['a',0,'c',0,0] (if shorter or equal, no effect)
           a   - AND with InStr (vectorises) ['n',0,'l',0,0]
            ḟ0 - filter out zeros            ['n','l']

Sử dụng các ¬mẹo trong câu trả lời của tôi. :) (về mặt kỹ thuật chúng tôi có cùng một thuật toán, nhưng bạn đã làm ngắn hơn, hoàn thành tốt!)
Erik the Outgolfer

Ồ vâng, tôi sẽ bình luận về ¬, nhưng quên mất khi tôi thực hiện một bài viết ngón tay mập trên điện thoại di động về một nỗ lực 13 byte chưa sẵn sàng.
Jonathan Allan

2

JavaScript (ES6), 79 byte

f=([t,...T],s,z=T[0])=>z&&s?s[0]+f(T,s.slice(t>z||(parseInt(t+z,36)-370)%37)):s

Sử dụng cùng một thuật toán để tính khoảng cách giữa các chữ cái là câu trả lời cuối cùng của tôi .

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



2

K (ngn / k) , 27 24 25 byte

{y[+\0,1|1_-':x,!#y]^" "}

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

{y[+\0,1|1_-':x,!#y]^" "}

{                       } function with x and y as arguments
                 #y       the length of y
                !#y       0 1 2 ... (#y)-1
              x,          x concatenated with
           -':            differences between pairs
         1_               rm extra leading item
       1|                 max between 1 and
     0,                   prepend 0
   +\                     partial sums
 y[                ]      index y with that
                    ^" "  rm spaces due to out-of-bounds indexing




1

Than , 29 28 byte

⭆η×ιI§⁺⭆θ⁺×0∧μ⊖⁻℅λ℅§θ⊖μ1⭆η1κ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Dựa trên câu trả lời của tôi ở đó, tôi đã sửa nó bằng băng keo. Giải trình:

       ⭆θ⁺×0∧μ⊖⁻℅λ℅§θ⊖μ1        Fix it with tape, but map to 1s and 0s
      ⁺                 ⭆η1     Append extra 1s just in case
⭆η                              Map over the second string
     §                     κ    Get the character from the fixed string
    I                           Cast to integer
  ×ι                            Repeat the current character that many times
                                Implicitly print

Lưu ý: Điều này nên là 28 byte, nhưng Andbị hỏng tại thời điểm viết.


0

Java 8, 117 byte

a->b->{for(int i=0,j;++i<a.length;b=j>0&b.length()>=i+j?b.substring(0,i)+b.substring(i+j):b)j=a[i]+~a[i-1];return b;}

Giải trình:

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

a->b->{                   // Method with char-array + String parameters and String return
  for(int i=0,j;++i<a.length;
                          //  Loop `i` in range [1; length_of_array)
      b=                  //    After every iteration: change the String-input to:
        j>0               //     If `j` is larger than 0,
        &b.length()>=i+j? //     and the length of `b` is larger or equal to `i+j`:
         b.substring(0,i) //      Take the substring [0; i)
         +b.substring(i+j)//      + the substring [i+j; end_of_string]
        :                 //     Else:
         b)               //      Leave `b` the same
    j=a[i]+~a[i-1];       //   Set `j` to the difference between two adjacent chars - 1
  return b;}              //  Return the modified input-String
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.