Người mai mối, Người mai mối, làm cho tôi một trận đấu


21

(chúng tôi sẽ không tìm thấy Findhoặc bắt một tryCatch, mặc dù)

Đây là phần hai của loạt bài gồm nhiều phần thực hiện một số chức năng R thú vị. Phần một có thể được tìm thấy ở đây .

Nhiệm vụ:

Bạn phải thực hiện chức năng của Rmatch trong càng ít byte càng tốt.

Đầu vào:

  • x, một danh sách / mảng số nguyên có thể trống
  • table, một danh sách / mảng số nguyên có thể trống
  • nomatch, một giá trị số nguyên duy nhất
  • incomparables, một danh sách / mảng số nguyên có thể trống

Đầu ra:

  • một mảng / danh sách các số nguyên Ocó độ dài bằng nhau x, trong đó mỗi giá trị O[i]đại diện cho một trong hai:
    • Chỉ số jcủa giá trị đầu tiên trong tableđótable[j]==x[i]
    • nomatch, Chỉ ra rằng không có giá trị trong tabletương đương với x[i] OR đó x[i]là trong danh sách incomparables.

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

All in the form x, table, nomatch, incomparables -> output
outputs 

[], [1,2,3], 0, [5] -> []

[1, 2, 3], [], 0, [5] -> [0, 0, 0]

[9, 4, 3, 6, 3], [9, 8, 7, 6, 5, 4, 3, 2, 1], -1, [4] -> [1, -1, 7, 4, 7]

[8, 6, 7, 5, 3, 0, 9], [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6, 2, 6], 1000, [1] -> [12, 8, 14, 5, 1, 1000, 6]

Nhiều trường hợp thử nghiệm có thể được tạo ra khi cần thiết.

Quy tắc bổ sung:

  • R có các chỉ số dựa trên 1, nhưng chỉ số dựa trên thay thế phù hợp được chấp nhận. Vì vậy, bạn có thể sử dụng các chỉ số bắt đầu từ 3 hoặc 17 hoặc bất cứ điều gì, nhưng điều này phải nhất quán và bạn phải chỉ ra điều này trong câu trả lời của mình.
  • Nếu bạn chọn ngôn ngữ có nội dung tích hợp thực hiện việc này, vui lòng thực hiện giải pháp của riêng bạn.
  • Giải thích được đánh giá cao.

Đây là , vì vậy giải pháp ngắn nhất trong byte thắng!


Nó phải hỗ trợ số âm? Tôi sẽ cho rằng nó không cần thiết, vì chỉ có ví dụ giả định nó và tôi khá chắc chắn rằng có một quy tắc chuẩn cho nó.
wizzwizz4

@ wizzwizz4 không, vì 4là trong incomparables, vì vậy nó không thể phù hợp. Nếu ngôn ngữ của bạn không thể hỗ trợ các số âm, thì bạn nên yêu cầu các số không âm, nhưng nêu rõ giả định đó trong bài nộp của bạn.
Giuseppe

1
Ngoài nhận xét tiêu đề: chúng tôi cũng sẽ không thực hiện make.
val nói Phục hồi lại

1
@val nó thực sự là một tài liệu tham khảo khá tệ cho Fiddler trên mái nhà ; tất cả những thử thách này đều có tiêu đề theo chủ đề sau nhiều chương trình khác nhau bởi vì thử thách này hoàn toàn phù hợp đến nỗi tôi nghĩ nó sẽ tạo ra một chủ đề hay.
Giuseppe

Câu trả lời:


8

Thạch ,  10  8 byte

-2 cảm ơn Erik the Outgolfer

,⁷y⁵iⱮ⁶o

Một chương trình đầy đủ chấp nhận bốn đối số dòng lệnh, incomparables nomatch table xin ra biểu diễn Jelly * của danh sách matchkết quả chức năng của R.

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

Làm sao?

ví dụ với incomparables nomatch table x= [1,4], 2, [2,4], [4,3,2,1,0]:

,⁷y⁵iⱮ⁶o - Main Link: list, incomparables; list, nomatch
 ⁷       - newline character                                '\n'
,        - pair (incompararables) with (right)              [[1,4],'\n']
   ⁵     - 5th argument (3rd input = table)                 [2,4]
  y      - translate (right) with lookup (left)             [2,'\n']             
      ⁶  - 6th argument (4th input = x)                     [4,3,2,1,0]
     Ɱ   - map with:
    i    -   first index of (right) in (left)               [0,0,1,0,0]
       o - logical OR                                       [2,2,1,2,2]

* Một danh sách trống được thể hiện là không có gì, một danh sách thứ mười được thể hiện dưới dạng chỉ mục, trong khi các danh sách khác được đính kèm []và phân định bởi,



6

R , 55 byte

Trong trường hợp này, mã không sử dụng matchvới chức năng đầy đủ của nó, nó chỉ được sử dụng như một indexchức năng. Câu trả lời R đầu tiên, vì vậy có lẽ rất kém hiệu quả byte-khôn ngoan!

Lưu ý (cảm ơn Giuseppe về thông tin) : %in%setdiffcả hai đều được triển khai nội bộ bằng cách sử dụng match, do đó, việc loại bỏ hoàn toàn chức năng hữu ích đáng ngạc nhiên này sẽ dẫn đến một mớ hỗn độn . Do đó, có một tiền thưởng 150 đại diện không có thời hạn cho việc này! (lưu ý setdifflà được cho phép, mặc dù)

function(x,t,n,i)ifelse(x%in%setdiff(t,i),match(x,t),n)

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

hoặc là...

R , 5 byte

match

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


Tôi không chắc mình có thể làm tốt hơn mặc dù tôi đã tránh sử dụng %in%match; nếu bạn muốn tìm một câu trả lời tốt cho golf mà không có một trong hai chức năng đó (có thể là khủng khiếp), tôi sẽ trả lại điều này.
Giuseppe

À lol, tôi vừa bình luận trên golfR về điều đó ...
Ông Xcoder

Được ủng hộ chỉ dành cho matchbài nộp
lén lút

Bạn có thể rút ngắn ifelsebằng mẹo này: codegolf.stackexchange.com/a/97826/59530
JAD

2
đồng thời, bài dự thi dài hơn của bạn thực sự sử dụng match: S
JAD






4

Con trăn 3 , 60 byte

lambda x,t,n,i:[v in{*t}-{*i}and-~t.index(v)or n for v in x]

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


Những tính năng này là cụ thể cho 3,8? Có vẻ như tôi có thể làm việc cho bất kỳ sự lật đổ nào của Python 3.
Theo

Vâng, nó không cụ thể đến 3,8. Tôi chỉ sao chép-dán mẫu tự động tạo trên TIO vì vậy tôi không nhận thấy tôi đã sử dụng 3.8. Cảm ơn các head-up, sẽ điều chỉnh.
Ông Xcoder

1
R has 1-based indices, but a consistent alternative-based indices are acceptable.Vì vậy, bạn có thể lấy ra -~và chỉ sử dụng lập chỉ mục 0 cho -1 byte.
Mực giá trị

1
@ValueInk Điều đó không thành công cho trường hợp thử nghiệm thứ 3 (và nói chung khi một phần tử phù hợp nằm ở đầu danh sách), vì 0 là sai trong Python.
Ông Xcoder

1
Ah, chương trình công bằng. Ngẫu nhiên, t.index(v)if v in{*t}-{*i}else ncó chính xác tương tự như v in{*t}-{*i}and-~t.index(v)or ngiải pháp hiện tại của bạn , haha
Value Ink



3

Perl 6 , 45 byte

->\b,\c,\d{*>>.&{$_d&&~b.first($_,:k)||c}}

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

Khối mã ẩn danh nhận đầu vào bị khóa, như f(table, nomatch, incomparables)(x) và trả về kết quả khớp 0 được lập chỉ mục.

Giải trình:

->\b,\c,\d{                               }    # Anonymous code block taking 3 inputs
           *           # Return an anonymous Whatever lambda
            >>.&{                        }  # Mapping input to
                 $_d                       # If the element is not an uncomparable
                     && b.first($_,:k)      # Return the first index in the table
                       ~                    # Stringified so Nils are false
                                      ||c   # Else the nomatch element
~~

+1 Tôi đã làm việc này một thời gian ngắn nhưng đang làm việc $_∉d&&b.antipairs.Map{$_}||cđó sẽ hoạt động tốt nhưng với giá trị falsey bằng 0. Đầu tiên ($ _: k) là một giải pháp tuyệt vời để tránh các phản ứng dài.
dùng0721090601

2

Than , 14 byte

IEθ∨∧¬№ει⊕⌕ηιζ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. 1 chỉ mục. Giải trình:

  θ             First input (x)
 E              Map over elements
       ε        Fourth input (incomparables)
      №         Count occurrences of
        ι       Current element
     ¬          Is zero
    ∧           Logical And
           η    Second input (table)
          ⌕     Find 0-based index of
            ι   Current element
         ⊕      Convert to 1-indexed
   ∨            Logical Or
             ζ  Third input (nomatch)
I               Cast to string
                Implicitly print on separate lines

2

C (gcc) , 125 byte

1 chỉ mục.

Vì tôi không thể sử dụng giá trị sentinel trong các mảng đã qua, tôi cần đưa ra giới hạn mảng cho từng mảng.

f(x,c,t,d,n,i,e,j,f)int*x,*t,*i;{for(;f=0,c-->0;x[c]=--f?n:j){for(j=e;!f&j;x[c]-i[--j]||--f);for(;!f&j<d;x[c]-t[j++]||++f);}}

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


2

Tùy viên , 39 byte

${{[_,y][nil=_or x@_in z]}=>x&Index@_4}

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

Xác minh khá đơn giản. Lưu ý rằng thứ tự đối số khác với thứ tự khớp; cụ thể, xlà đối số cuối cùng chứ không phải là đối số đầu tiên và tương ứng với _4đoạn trích trên.

Giải trình

${{[_,y][nil=_or x@_in z]}=>x&Index@_4}
${                                    }   named lambda, taking parameters x, y, z, and _4
                            x&Index@_4    short for Index[x, _4];
                                              calculates where each element in _4 occurs in x
                                              returns `nil` for no match
  {                      }=>              over each index:
   [_,y][               ]                     choose y (`nomatch`) if
         nil=_                                    the index is nil
              or x@_in z                          or the element is in `incomparables`
    _                                         otherwise, choose the index


2

05AB1E , 7 byte

õ:Ik®I:

Chỉ số 0. Các đầu vào theo thứ tự : incomparables, table, x, nomatch.

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

Giải trình:

õ:       # Replace all values of the (implicit) first incomparables-list in
         # the (implicit) second table-list with an empty string
         #  i.e. incomparables=[4] and table=[9,8,7,6,5,4,3,2,1] → [9,8,7,6,5,"",3,2,1]
  Ik     # Get the index of each value in the third x-list in this list (-1 if not found)
         #  i.e. x=[9,4,3,6,3] → [0,-1,6,3,6]
    ®I:  # Replace all -1 with the fourth input-integer
         #  i.e. nomatch=-99 → [0,-99,6,3,6]
         # (and output the mapped list implicitly as result)
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.