Đầu vào Mã nguồn


70

Giới thiệu

Thách thức là tạo ra một chương trình / hàm in giao điểm của mã nguồn riêng và đầu vào chuỗi đã cho. Đây là mã golf và chính xác hơn:

  • Đặt Ilàm đầu vào
    • {"a","b","c"}
  • Đặt Smã nguồn
    • {"b","f"}
  • Sau đó, giao lộ là những gì họ chia sẻ
    • I ∩ S = {"b"}

Đầu vào

Đầu vào là linh hoạt. Nó sẽ có thể xử lý mã hóa ký tự được sử dụng cho mã nguồn.

Đầu ra

Đầu ra là linh hoạt. Nó phải là tập hợp các ký tự mà đầu vào và mã nguồn chia sẻ. Ngoài ra, các bộ là tập hợp không có thứ tự của các đối tượng riêng biệt. Tóm tắt:

  • Đầu ra linh hoạt:
    • Có thể là bất kỳ cấu trúc dữ liệu nào (chuỗi hoặc cách khác)
    • Không thể sắp xếp
    • Có thể có một dấu \n
    • Nên khác biệt

Sự hạn chế

Tương tự như các thách thức , chương trình / hàm có thể không đọc được mã nguồn của chính nó và các giải pháp 0 byte không được phép.

Ví dụ

  • # 1
functor x(I){ return I ∩ self; }

Inputs                                Outputs
------                                -------
enter preformatted text here      ->  {"e","n","t","r","f","o","x"}

["Albrt"," Einstin"]              ->  {"l","r","t","n","s"}
  • # 2
(_)->_&"(_)->&\"\\"

Inputs                                Outputs
------                                -------
"Security at the expense of       ->  "
usability comes at the expense 
of security."

(0____0)                          ->  (_)
  • # 3
ಠa益длф


Inputs                                Outputs
------                                -------
Far out in the uncharted backwaters ->"a"    
of the unfashionable end of the 
Western Spiral arm of the Galaxy lies 
a small unregarded yellow sun. 
Orbiting this at a distance of roughly 
ninety-eight million miles is an 
utterly insignificant little blue-green 
planet whose ape-descended life forms 
are so amazingly primitive that they 
still think digital watches are a pretty 
neat idea.

(ノಠ益ಠ)ノ彡┻━┻                      ->"ಠ益"

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

Albert Einstein

\__( O__O)_/

!@#$%^&*()_+{}|:"<>?

1234567890-=[]\;',./

(ノಠ益ಠ)ノ彡┻━┻

“¤>%,oỊȤʠ“ØụĊ5D³ṃṠɼQ»j;Ç;“;}¶”

┬──┬ ノ( ゜-゜ノ)

Far out in the uncharted backwaters of the unfashionable end of the Western Spiral arm of the Galaxy lies a small unregarded yellow sun. Orbiting this at a distance of roughly ninety-eight million miles is an utterly insignificant little blue-green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea.

Cập nhật

  • [16-08-10]: bộ là các bộ sưu tập các đối tượng riêng biệt
  • [16-08-10]: dòng mới có thể được chấp nhận

2
Đầu ra có thể chứa các ký tự trùng lặp?
Chấn thương kỹ thuật số

1
@DigitalTrauma Từ các ví dụ # 1, # 2 và # 3 có vẻ như không
Luis Mendo

@DigitalTrauma Xin lỗi vì sự mơ hồ, các bộ (theo nghĩa toán học) bỏ qua thứ tự và không có sự lặp lại.
Phi tuyến

22
Xin chúc mừng vì đã đưa ra một câu hỏi tổng quát trong đó các giải pháp tốt nhất không dựa trên tiêu chuẩn của ngôn ngữ. :)
Martin Ender

1
Nếu một bộ không nên có sự lặp lại, thì bộ đầu vào cũng không chứa sự lặp lại? Hoặc là đầu vào thực sự không phải là một bộ?
dùng81655

Câu trả lời:


24

Thạch , 10 6 byte

“Ṿf”Ṿf

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

Làm thế nào nó hoạt động

“Ṿf”Ṿf  Main link. Argument: s (string)

“Ṿf”    Set the return value to 'Ṿf'.
    Ṿ   Uneval; yield '“Ṿf”'.
     f  Filter; remove the characters from '“Ṿf”' that do not appear in s.

15

Python 3, 44 byte

Cảm ơn Karl vì đã tiết kiệm cho tôi một byte :-) Cảm ơn Dada đã tiết kiệm cho tôi hai byte!

Tôi nghĩ rằng điều này hoạt động, nhưng đó là thử thách đầu tiên của tôi nên tôi không chắc chắn 100%. : \

print(set("printseu()&'"+'+"')&set(input()))

Phiên bản Lambda với 43 byte: lambda a:set(" lambdaset()&'"+':+"')&set(a)


8
'eroticpuns\()&\''ngắn hơn so với việc thêm các chuỗi. (đã thoát 'nhưng sau đó bạn cần thêm một `\`) Tại sao dấu chấm ở đó?
KarlKastor

woops, .là một di tích từ mã ít chơi gôn hơn. Sử dụng dấu gạch chéo ngược không hoạt động vì sau đó đầu ra từ \` is \ `và sao chép ký tự đầu vào không được phép, tôi nghĩ vậy.
Jeremy

1
Lambda của bạn thiếu :.
Dennis

Cảm ơn @Dennis. Mắt tôi bắt đầu lúng túng sau khi cố gắng tìm tất cả các nhân vật trong chương trình;)
Jeremy

1
@Dada: Nếu bạn muốn, nó có thể là inspectour, nicestupor, poeticurns, nopictures, recountspi, hoặc inputscore. Hoặc đối với cái mới mà bạn có thể sử dụng prunesit(một mô tả chính xác về những gì người chơi golf mã!) ipunster, Hoặc nursepittrong số những người khác.
Deusovi

11

APL Dyalog , 8 byte

'∩''⊢'∩⊢

là trả về các ký tự đó từ đối số bên trái có trong đối số bên phải (nếu đối số bên trái không có trùng lặp - như trong trường hợp này - thì kết quả cũng không có trùng lặp

là đối số

Sau đó, chuỗi chỉ có hai ký tự đó cộng với ký tự trích dẫn (nhân đôi, vì nó nằm trong một chuỗi).

Dùng thử trực tuyến!


10

GolfScript, 6 byte

"`&"`&

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

Làm thế nào nó hoạt động

        # (implicit) Push the input on the stack.
"`&"    # Push the string '`&' on the stack.
   `    # Inspect; turn the string into '"`&"'.
     &  # Perform set intersection.

9

Python 2, 56 46 39 byte

-1 Byte nhờ @Jeremy

lambda a:set(':&()smelt\ bad\'')&set(a)

Hàm lambda ẩn danh, lấy một chuỗi, trả về một tập hợp

phiên bản cũ:

lambda x,w=set('newmatrixbuspdl_:-)(=,\ \''):w-(w-set(x))

Tôi thích điều này, nhưng nó trả về hai dấu gạch chéo ngược trên `\` thay vì chỉ một.
Jeremy

Ngoài ra, tôi nghĩ rằng bạn có thể lưu một byte bằng cách thay đổi tên của lambda thànha
Jeremy

1
@Jeremy Cảm ơn vì tiền boa, '\\'chỉ là cách Python biểu thị dấu gạch chéo ngược ở dạng chuỗi, bởi vì một dấu ngoặc đơn sẽ thoát khỏi dấu ngoặc kép, vì vậy bạn phải thoát dấu gạch chéo ngược bằng dấu gạch chéo ngược để làm cho nó hoạt động. Nhập print '\\'và bạn sẽ thấy rằng đó chỉ là đại diện cho một dấu gạch chéo ngược.
KarlKastor

Bạn có thể đến 36 với lambda a:{*''' lambda&':{}*'''}&{*a}.
Morgan Thrapp

1
@MorganThrapp 35lambda a:{*' lambda&\\\':{}*'}&{*a}
xem

9

Perl 6 , 56, 55 byte

" Phiên bản tiếng Pháp " / Unicode (55 byte)

say perl q.say perlq$*IN\\\.comb:..comb$*IN.comb:

Phiên bản " Texas " / ASCII (56 byte)

say (q.sayq(&) $*IN\\\.combperl..comb (&)$*IN.comb).perl
say perl q.sayq(&) $*IN\\\.comb:perl..comb (&)$*IN.comb:

Không chơi gôn:

my \Source = 'my \\Source = \'say ( $*IN.comb.Set ∩ Source.comb.Set ).perl\'';
say ( $*IN.comb.Set  Source.comb.Set ).perl

Ví dụ:

$ echo -n 'say perl q.say perlq∩$*IN\\\.comb:..comb∩$*IN.comb:' > test-unicode.p6

$ echo -n 'say (q.sayq(&) $*IN\\\.combperl..comb (&)$*IN.comb).perl' > test-ascii.p6

$ perl6 test-ascii.p6 <<< 'abcdefghijklmnopqrstuvwxyz'
set("p","a","l","r","c","q","b","s","e","m","y","o")

$ perl6 test-unicode.p6 < test-unicode.p6
set("\\","I","p"," ","a","c","l","r","q","b","∩","*","s","m","e",".","y",":","o","N","\$")

$ perl6 test-ascii.p6 < test-ascii.p6
set("p","\\","I"," ","a","l","r","c","q","b",")","*","s","e","m","\&",".","(","y","o","N","\$")

$ perl6 test-ascii.p6 < test-unicode.p6
set("p","\\","I"," ","a","l","r","c","q","b","*","s","e","m",".","y","o","N","\$")

$ perl6 test-unicode.p6 <<< 'Albert Einstein'
set(" ","l","r","b","s","e")

$ perl6 test-unicode.p6 <<< '\__( O__O)_/'
set("\\"," ")

$ perl6 test-ascii.p6 <<< '!@#$%^&*()_+{}|:"<>?'
set(")","*","\&","(","\$")

$ perl6 test-unicode.p6 <<< "1234567890-=[]\\;',./"
set("\\",".")

$ perl6 test-unicode.p6 <<< '(ノಠ益ಠ)ノ彡┻━┻'
set()

“¤>%,oỊȤʠ“ØụĊ5D³ṃṠɼQ»j;Ç;“;}¶”
set("o")

$ perl6 test-unicode.p6 <<< '┬──┬ ノ( ゜-゜ノ)'
set(" ")


$ perl6 test-ascii.p6 <<< 'Far out in the uncharted backwaters of the unfashionable end of the Western Spiral arm of the Galaxy lies a small unregarded yellow sun. Orbiting this at a distance of roughly ninety-eight million miles is an utterly insignificant little blue-green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea.'
set("p"," ","a","l","r","c","b","s","e","m",".","y","o")

2
Không $*PROGRAMtruy cập mã nguồn của chương trình và do đó vi phạm các quy tắc?
celtschk

@celtschk Tôi nên đọc lại câu hỏi trước khi đăng, sửa. (Về mặt kỹ thuật, trình biên dịch có thể thấy $*PROGRAMđược đọc và lưu trữ toàn bộ nguồn dưới dạng một chuỗi trong chương trình được biên dịch, nó sẽ đặt nó vào một vùng màu xám)
Brad Gilbert b2gills

8

MATL , 8 byte

'X&'''X&

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

Đầu vào là một chuỗi được bao trong các dấu ngoặc đơn. Nếu chuỗi chứa một ký hiệu trích dẫn đơn, nó sẽ được nhân đôi để thoát nó.

Giải trình

'X&'''   % Push string with the three characters used by the program. The single-quote 
         % symbol needs to be escaped by duplicating it
X&       % Take input implicitly. Set intersection. Display implicitly

6

Trên thực tế, 6 byte

`∩è`è∩

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

Giải trình:

`∩è`è∩
`∩è`    push the function `∩è` (which contains every character in the source code except '`')
    è   repr (same as Python repr - leaves "`∩è`", which contains every character in the source code)
      ∩ set intersection with input

5

Haskell (30 byte)

Đây là một giải pháp nhàm chán ... Nhưng tôi không thể làm tốt hơn. :

filter(`elem`"f(term)\"i`l\\")

5

Brachylog , 23 byte

:{e.~e":{}e~\"fd\."}fd.

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

Giải trình

:{                 }f      Find all chars that verify the predicate below
                     d.    Remove duplicates and output

  e.                       Take a char from the input ; this is our output…
    ~e":{}e~\"fd\."        … if that char is in the string :{}e~"fd. (the first \ is here
                               to escape the ")

1
Bạn có thể có một cái nhìn tại phòng chat của chúng tôi?
Rò rỉ Nun

1
+1 cho người đàn ông ria mép :{và người đàn ông ria mép ngạc nhiên:{}
Lemon


4

C, 142 byte

main(i){char*p,a[]="remain([*]){fought?>:01;,\\\"=capsv+-l}";for(;(i=getchar())>=0;p?putchar(i),memmove(p,p+1,a+strlen(a)-p):0)p=strchr(a,i);}

Hãy thử nó trên ideone .


2
Một phiên bản vô văn hóa và / hoặc giải thích sẽ là tuyệt vời!
YSC

Bạn có thể đã sử dụng sizeof athay vì strlen(a)cho một byte được lưu, nhưng thậm chí tốt hơn là cung cấp cho mảng có kích thước đã biết: a[99]="..."và thay thế strlen(a)bằng cách 99tắt 5 byte.
G. Sliepen

3 hoặc 4 byte khác có thể được lưu bằng cách thay thế (i=getchar())>=0bằng read(0,&i,1). Điều này hoạt động trên các máy ít endian. iđược khởi tạo thành 1 nếu bạn không chạy chương trình với bất kỳ đối số nào. Nếu bạn cũng muốn nó hoạt động trên các máy lớn, hãy xóa i khỏi danh sách đối số main()và khai báo bên trong cơ thể dưới dạng char (nhưng sau đó bạn chỉ lưu 3 byte). read()thuận tiện trả về 0 trên EOF.
G. Sliepen

4

CJam, 8 byte

"`q&"`q&

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

Giải trình:

"`q&"    e# Push that string to the stack
     `   e# Stringify, pops the string and pushes "\"`r&\"" to the stack
      q  e# Pushes the input to the stack
       & e# Union, pops two elements and pushes a list of every element that is contained in both.


4

Võng mạc, 21 20 byte

Loại bỏ các ký tự không có trong mã nguồn, sau đó loại bỏ các ký tự trùng lặp.

[^Ds.n\n[-a_-]

Ds`.

Dùng thử trực tuyến


Mã nguồn của bạn chứa một nguồn cấp dữ liệu (đầu ra của bạn không).
Martin Ender

Về cơ bản, tôi đã có cùng một giải pháp nhưng quên đăng nó. Bạn có thể lưu một vài byte với phạm vi [-a(và sau đó bao gồm dấu gạch dưới và dấu gạch nối và thả backtick trên dòng thứ hai). Nhưng để tham khảo trong tương lai, ]sẽ không cần phải trốn thoát nếu bạn đặt nó làm nhân vật đầu tiên. Oh và để độc đáo, bạn có thể trao đổi hai giai đoạn để tránh dòng cấp dữ liệu.
Martin Ender

@MartinEnder Điều này vẫn không lặp lại nguồn cấp dữ liệu, đó có phải là vấn đề không?
mbomb007

Oh bạn nói đúng, tôi đã không nhận thấy điều đó. Bạn sẽ phải thêm svào các tùy chọn Dvà lớp nhân vật sau đó.
Martin Ender

4

Toán học, 35 byte

Characters@"\"#&@C\acehrst⋂"⋂#&

Chức năng ẩn danh. Bỏ qua mọi tin nhắn được tạo. Lấy danh sách các ký tự làm đầu vào và trả về danh sách các ký tự làm đầu ra. Ký tự Unicode là U + 22C2 cho \[Intersection].


4

C #, 36 byte

s=>s.Intersect("s=>.Interc(\"\\);");

Diễn viên dự định là Func<string, IEnumerable<char>>( stringđầu vào, IEnumerable<char>đầu ra).



4

Vim, 78 68 78 79 61 tổ hợp phím

Thay đổi hoàn toàn cách tiếp cận của tôi:

oo/\$kjxd<esc>/o<cr>xj$/\/<cr>xj$/\\<cr>xj$/$<cr>xj$/k<cr>xj$/x<cr>xj$/j<cr>xj$/d<cr>xkdd

Làm thế nào nó hoạt động:

Đầu tiên, nó tạo một dòng có tất cả các ký tự chương trình, sau đó, nó tìm thấy phiên bản đầu tiên của mỗi ký tự chương trình, ở đầu vào, nếu đầu vào và đầu ra giao nhau, hoặc đầu ra nếu chúng không xóa nó, di chuyển đến ký tự cuối cùng của tệp (để nó bao bọc xung quanh) và thực hiện điều đó cho từng ký tự duy nhất trong nguồn, ngoại trừ d, thay vì di chuyển đến cuối tệp, nó kết thúc bằng cách xóa đầu vào


Dấu gạch chéo ngược nằm trong mã của bạn nhưng dường như không có trong chuỗi của bạn.
Tít

Nó không phải là thứ ba sao?
Lemon phá hủy

4

Bash , 45 50 41 39 37 34 29 byte

-9 byte nhờ Geoff Reedy
-4 byte nhờ Dennis
-5 byte nhờ Nahuel Fouilleul

grep -o '[] [|\'\'grepouniq-]

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


Bạn không chỉ cần một lệnh grep?
Geoff Reedy

@GeoffReedy Lệnh grep đầu tiên chia đầu vào thành một ký tự trên mỗi dòng.
Dennis

Phải nhưng không thể - được đưa vào grep thứ hai
Geoff Reedy

Bạn nói đúng, và điều đó tiết kiệm việc phải kiểm tra '.'. Cảm ơn!
Riley

1
@Titus Sau khi BASH làm điều đó, grep được -o[] [|\'grepouniq-]. Vì vậy, nó đang tìm kiếm bất cứ điều gì trong số này : [ ] {space} [ | {slash} ' g r e p o u n i q - ].
Riley

3

PowerShell v4 +, 122 104 byte

([char[]]($args[0]+'acegfhmnoprstu012|][()"?+_,.$-{0}{1}{2}'-f("'","}","{"))|group|?{$_.count-gt1}).name

Ừ Mã quines hoặc mã giống như quine trong PowerShell hút, bởi vì định dạng thay thế chuỗi rất khó hiểu.

Chuỗi ace...{2}ở giữa là mỗi ký tự có trong phần còn lại của mã. Cái {0}{1}{2}này được sử dụng cùng với -ftoán tử ormat để kéo các '{}ký tự vào chuỗi.

Điều đó được kết hợp dưới dạng một mảng char với đầu vào $args, sau đó được đưa vào đường ống. Điểm dừng đầu tiên là Group-Object(về cơ bản) tạo ra một hashtable của các đối tượng đầu vào và số lần chúng xảy ra trong đầu vào. Đó là đường ống để |?{...}các Where-Objectchỉ chọn những mục mà có một .countlớn hơn 1. Chúng tôi gói gọn rằng trong parens và rút ra một .Namephần của hashtable (đó là nơi yêu cầu v4 + phát huy tác dụng, nếu không chúng tôi sẽ cần một |Select Namegiai đoạn bổ sung cho đường ống).

Các phần tử này được để lại trên đường ống (dưới dạng một mảng) và in ấn là ẩn.


3

Python 2, 44 byte

x='c=set;print c(`x`)&c(raw_input())';exec x

Chỉ để cho vui, đây là một chương trình đầy đủ giống như quine. Xuất ra biểu diễn chuỗi của bộ Python 2.


3

JavaScript (ES6), 59 57 byte

f=
t=>[..."\"().=>O[\\]defilnrtx~"].filter(e=>~t.indexOf(e))
;
<input placeholder=Input oninput=o.value=f(this.value).join``><input placeholder=Output id=o>

Trả về một mảng các ký tự có trong cả chuỗi ký tự / mảng ký tự gốc và mã nguồn. Chỉnh sửa: Đã lưu 2 byte nhờ @ user81655.


f=s=>[...new Set(f+'')]...có thể lưu byte.
dùng81655

Hoặc thậm chí ngắn hơn:f=s=>[...s].filter(c=>(new Set(f+'')).has(c))
user81655

@ user81655 Ít nhất là trong Firefox, f+''hoạt động bằng cách đọc fmã nguồn của. (Trong một số trường hợp nhất định, bạn có thể khiến Firefox gặp sự cố bằng cách thay đổi tệp nguồn và sau đó cố gắng xâu chuỗi một chức năng được tải từ nó.)
Neil

@ user81655 Ví dụ thứ hai của bạn không thành công khi scó các phần tử lặp lại và indexOfngắn hơn new Setdù sao.
Neil

Trong trường hợp đó, bạn có thể thử lưu ký tự (như thay đổi ctham số thành ký tự đã có trong danh sách).
dùng81655

3

Matlab, 37 byte

Khá đơn giản:

Sử dụng dựng sẵn intersectđể tìm giao lộ. Mã nguồn được mã hóa cứng. Đầu vào phải được đưa ra bên trong dấu ngoặc kép''

intersect(input(''),'''intersc(pu),')

Bạn nên sử dụng một hàm ẩn danh ... đánh bại bạn 5 byte
Sanchise

Hehe, tôi đoán đó không phải là môn đánh gôn tốt nhất của tôi ...
Stewie Griffin

3

JavaScript (Chrome 58 trên OS X 10), 12.654 12.426 11.992 Bytes

https://paste.ubfox.com/25593218/

https://paste.ubfox.com/25595798/

https://paste.ubfox.com/25595831/

Mã ban đầu:

var t=prompt();"!+()[]".split("").forEach(function(f){if(t.includes(f))alert(f)})

Điều này sau đó đã được chuyển đổi thành một kiểu lập trình gọi là jsfk, chỉ sử dụng sáu ký tự này:

(+)[!] 

sử dụng một trình biên dịch trực tuyến.


Nếu jsfk là ngôn ngữ, bạn nên sử dụng ngôn ngữ đó trong tiêu đề thay vì Javascript.
Phi tuyến

1
@NonlinearFbean jsfk là một phong cách lập trình . Đó là javascript hợp lệ
Tornado547

2

R, 129 byte

f=function(s){b=strsplit("f=unctio(s){arpl;,[1]b\\\"qemh0T}",c())[[1]];cat(b[unique(pmatch(strsplit(s,c())[[1]],b,0,T))],sep="")}

Nếu tôi không biết nó, nó cần phải thay đổi những thứ kỳ lạ như một dòng mới trong chuỗi b. Dù sao, siêu đơn giản của nó - xây dựng một vectơ với tất cả các ký tự trong hàm. Sau đó, nó kéo đầu vào thành một vectơ và kiểm tra tư cách thành viên.


bạn đã không truy cập trang web trong gần một năm, nhưng f=function(s)cat(instersect(strsplit(s,"")[[1]],strsplit("f=unctio(s)aerpl,\\\"[1]","")[[1]]),sep="")là 101 byte và tôi nghĩ định dạng I / O có thể đơn giản hơn mà không cần cat...
Giuseppe

2

Ruby, ncờ 34 + = 35 byte

Không chính xác hoạt động với đầu vào nhiều dòng, vì -nkhiến chương trình xử lý STDIN theo từng dòng. Không có dòng mới trong mã này, nhưng cố gắng nhập một cái gì đó như thế sẽ xuất ra nhiều mảng thay vì một mảng. Nếu điều đó là không tốt theo thông số kỹ thuật, xin vui lòng thông báo cho tôi và tôi sẽ sửa chữa.

p $_.chars&"\\\"p $_.chars&".chars

2

ListSharp , 222 byte

STRG S=READ[<here>+"\\S.txt"]
ROWS T=ROWSPLIT S BY [""]
ROWS R=ROWSPLIT "STRG =EAD[<her>+\".tx]OWPLIBYCFMHVNc#isn()oay\r\n" BY [""]
ROWS R=SELECT FROM T WHERE[EVERY STRG IS ANY STRG IN R]
SHOW=<c#R.Distinct().ToArray()c#>

nực cười nhưng tôi đang giải trí


2

sed, 47 ký tự

:s;st[^])(*\1.s2t:[;^]tt;st\(.\)\(.*\1\)t\2t;ts

Tôi hơi thất vọng về việc nó xuất hiện trong bao lâu, đặc biệt là bit để loại bỏ các ký tự lặp đi lặp lại.


Phiên bản nào của sed này? GNU sed nói sed: -e expression #1, char 47: unterminated `s' command.
Dennis

43 byte bao gồm 1 cho -r: sed -r ':;ss[^][str().*\12;:^]ss;ss(.)(.*\1)s\2s;t' tôi đã viết nó trước khi nhận thấy thông tin của bạn và hóa ra nó rất giống nhau
izabera

@Dennis đã sửa; hóa ra có một: sau khi [khiến nó cố gắng phân tích một lớp nhân vật
Geoff Reedy

@izabera thật tuyệt, tôi khá ngạc nhiên khi lệnh: thực sự không cần nhãn và nó thay đổi ý nghĩa của t mà không có nhãn
Geoff Reedy

vâng, đó là một chủ nghĩa ma quỷ
izabera

2

Java 8 lambda, 152 142 140 ký tự

Khá ngắn:

s->s.chars().mapToObj(i->(char)i).filter(c->"COSTab\"\\cefh(i)j+l-mn.oprstuv>".contains(""+c)).collect(java.util.stream.Collectors.toSet())

Hoặc vô dụng ở đây:

public class Q89400 {

    static Set<Character> inAndQuine(String in) {
        return in.chars()
                .mapToObj(i->(char)i)
                .filter(c->"COSTab\"\\cefh(i)j+l-mn.oprstuv>".contains(""+c))
                .collect(java.util.stream.Collectors.toSet());

    }
}

Tất nhiên, giải pháp vô căn cứ là sai, vì nó không khớp với dấu ngoặc nhọn và một số ký tự khác, đó chỉ là vì mục đích hoàn chỉnh.

Hàm lấy đầu vào là a Stringvà trả về một java.util.Set<Character>chứa các ký tự có trong cả đầu vào và nguồn.

Cập nhật

Hóa ra là giải pháp không hiệu quả. Tôi nghĩ String#containscác bài kiểm tra cho một trận đấu regex nhưng nó chỉ là một trận đấu theo nghĩa đen. Tôi đã thêm một số lối thoát để trích dẫn các nhân vật như thế .nhưng điều này không cần thiết nhưng thay vào đó làm hỏng mọi thứ. Bây giờ không có lối thoát này, chúng tôi lưu một số ký tự và bây giờ nó thực sự hoạt động :)

Cảm ơn @NonlinearFbean đã nhắc nhở tôi về việc sử dụng các biến một ký tự.


Đổi tên inthành một chữ cái giống nhưa
Phi tuyến

3
@NonlinearFnut bạn nói đúng: Làm sao tôi có thể quên điều đó?!
Frozn

2

SQF , 71 69 64 byte

Sử dụng định dạng tệp dưới dạng tệp:

i="-_h ;""=()sSplitrng"splitString"";i-(i-(_this splitString""))

Gọi như "STRING" call NAME_OF_COMPILED_FUNCTION

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.