휴지통 관리


35

PPCG의 일부 전통은 일부 사용자가 아나그램 (이전 문자를 재정렬하여 형성된 새로운 이름)으로 일시적으로 이름을 변경하는 것이되었습니다.

때때로 누가 누구인지 찾기가 어려워집니다. 프로그램이나 함수를 사용하여 두 구가 서로의 표현인지 알 수 있습니다.

도전

프로그램 또는 함수는 두 개의 문자열을 가져 와서 서로의 아나그램 인 경우 진실한 결과를 만들어 내고 그렇지 않으면 거짓입니다.

규칙

  • 입력은 문자 (ASCII 65-90 및 97-122), 숫자 (ASCII 48-57) 또는 공백 (ASCII 32) 만 포함합니다.
  • 아나그램 관계는 경우와 관계가 없습니다. "Arm"과 "RAM"은 아나그램입니다.
  • 공백도 계산하지 않습니다. "keyboard"와 "Barked Yo"는 아나그램입니다.
  • 모든 내장 허용
  • 입력 형식은 유연합니다 (두 개의 문자열, 두 개의 문자열 배열, 적합한 구분 기호가있는 두 구를 모두 포함하는 문자열).

코드 골프. 가장 적은 바이트가 이깁니다.

테스트 사례

Truthy :

Lynn, Nyl N
Digital Trauma, Tau Digital Arm
Sp3000, P S 3000
Manage Trash So, Those anagrams

거짓

Calvins Hobbies, Helka Homba
Android, rains odd
In between days, bayed entwine
Code golf, cod elf got

8
관련이 있지만 다릅니다 (문자, 대소 문자, 공백 없음)
— Luis Mendo

4
이 질문의 제목은 커피가 충분하지 않은 사람에게는 매우 당황합니다. +1 : D
— cat

1
@DonMuesli 나는 이것이 여전히 속임수라고 주장 할 것입니다. 약간의 변화는 매우 사소합니다.
— Mego

15
Manage Trash So, Those anagrams. 좋은.
— mbomb007

3
So, the anagrams...
— Leaky Nun

답변:



15

망막, 25

i+`(\w)(.*,.*)\1
$2
^\W*$

온라인으로 사용해보십시오! 또한 수정 된 여러 줄 버전을 실행할 수 있습니다 .

쉼표 앞의 문자와 쉼표 뒤의 일치 문자를 삭제하십시오. 남은 글자가 없다면 그것은 아나그램입니다.


Retina의 경우 양수를 실패로 간주하고 0을 성공으로 간주 \w하면 마지막 단계로 사용하여 3 바이트가 더 짧을 수 있습니다 .
— FryAmTheEggman


@ DEV 널 "입력은 문자 (ASCII 90 65 122 행 2000), 숫자 (ASCII 48 내지 57) 또는 공간 (ASCII 32)를 포함한다"
— FryAmTheEggman

11

Pyth, 11 10 바이트

나에게 힘을 가르쳐 준 @FryAmTheEggman에게 감사합니다 ;!

qFmSr-d;0Q

여기 사용해보십시오!

두 개의 문자열 목록을 입력으로 사용합니다.

설명

qFmSr-d; 0Q # Q = 입력

  람다 변수로서 d를 갖는 m Q # 맵 Q
     -디; # 문자열에서 필터 공간
    r 0 # 소문자로 변환
   S # 문자열의 모든 문자 정렬
qF # 결과 목록을 펼치고 동등성을 점검하십시오

10

파이썬 2, 63 61 바이트

lambda*l:len({`sorted(s.lower())`[2::5].strip()for s in l})<2

사실, n 개의 인수를 취하고 모든 n 개가 상호 회문 인지를 결정 하는 익명 함수 ! f("Lynn", "Nyl N")을 반환합니다 True.

이 세트 이해 트릭은 xnor입니다. 두 바이트를 절약했지만 이전 접근법은 매우 깔끔했습니다.

exec"a=`sorted(input().lower())`[2::5].strip();a"*2;print a==aa

`sorted(input().lower())`.strip(" [',")같은 길이입니다 : /
— Sp3000

exec것은 똑똑하지만 너무 복잡한 것 같다. 당신은 더 잘 할 수 있습니다 lambda*l:len({`sorted(s.lower())`[2::5].strip()for s in l})<2.
— xnor

2
감사! 나는 약간 실망했다 – 그것은 매우 시원해 보였다. 어쨌든 게시물에 보관하십시오.
— Lynn

7

젤리, 12 바이트

ḟ€⁶O&95Ṣ€QLḂ

온라인으로 사용해보십시오!

작동 원리

ḟ€⁶O&95Ṣ€QLḂ  Main link. Input: A (list of strings)

  ⁶           Yield ' '.
ḟ€            Filter it from each string.
   O          Apply ordinal to all characters.
    &95       Take bitwise AND with 95 to make the ordinals case-insensitive.
       Ṣ€     Sort each list of ordinals.
         Q    Deduplicate the list.
          L   Get the length.
           Ḃ  Compute the length's parity (1 -> 1, 2 -> 0).

대체 버전, 비경쟁 (9 바이트)

젤리의 대문자 원자에는 버그가 있었으며, 젤리는 여전히 목록의 평등을 테스트하기 위해 내장 기능이 없었습니다 ...

ḟ⁶ŒuṢµ€⁼/

온라인으로 사용해보십시오!

작동 원리

ḟ⁶ŒuṢµ€⁼/     Main link. Input: A (list of strings)

     µ€       Map the chain to the left over A.
 ⁶            Yield ' '.
ḟ             Filter it from the string.
  Œu          Cast to uppercase.
    Ṣ         Sort.
       ⁼/     Reduce by equality.

6

CJam, 11 12 14 바이트

@FryAmTheEggman 덕분에 3 2 바이트가 제거되었습니다.

{lelS-$}2*=

온라인으로 사용해보십시오!

{      }2*       e# do this twice
 l               e# read line as a string
  el             e# make lowercase
    S-           e# remove spaces from string
      $          e# sort
          =      e# compare strings

@FryAmTheEggman 감사합니다!
— Luis Mendo

@FryAmTheEggman 다시 감사합니다! 나는 아직도 :-) CJam에 대해 많이 배워야
— 루이스 Mendo

3
당신의 코드는 비밀리에 웃고 있습니다. lel.
— Cyoce

아니면 하나입니까? lel==> 1e1아무도 모른다. 미스터리입니다.
— user48538

6

자바 스크립트, 69 61 60 59 바이트

@ ӍѲꝆΛҐӍΛПҒЦꝆ 감사 합니다. 태닝와 오프 1 바이트 ( 지적 에 의해 @apsillers )

n=>m=>(G=s=>[]+s.toLowerCase().split(/ */).sort())(n)==G(m)


2
공간을 걸러 내고 동시에 배열로 변환하는 것이 좋습니다!
— Neil

2
아주 좋아요 n=>m=>...
— 커리를

시도하십시오 n=>m=>(G=s=>[]+s.toLowerCase().split(/\S/).sort())(n)==G(m). match 대신 split을 사용하면 바이트가 절약됩니다.
— Mama Fun Roll

@ ӍѲꝆΛҐӍΛПҒЦꝆ. 아니요, 다음과 같이 가정합니다 s='db cz'. 이제 결과는 ...이며 결과는s.match(/\S/g).sort()['b','c','d','z']s.split(/\s/).sort()['cz','db']
— 제거됨

@ ӍѲꝆΛҐӍΛПҒЦꝆ. 그러나 ... 당신의 아이디어를 살펴보면 조금 변경하고 1 바이트를 절약했습니다 ... 감사합니다!
— 제거됨

6

MATL , 11 바이트

2:"jkXvS]X=

편집 (2016 년 5 월 20 일) 링크의 코드는 최근 언어 변경으로 인해 Xz대신 대신 사용 Xv합니다.

온라인으로 사용해보십시오!

2:"     ]       % do this twice
   j            % read input line as a string
    k           % convert to lowercase
     Xv         % remove spaces
       S        % sort
         X=     % are they equal?

3
그 도전의 이름을 방금 변경 했습니까?
— Denker

3
@ DenkerAffe 나는 그것에 대해 한동안 생각하고 있었다. 난 그냥 :-)는 도전과 일치했다
— 루이스 Mendo에게

1
돈 뮤 즐리 롤. 당신은 Muesli Luis의 주입니다!? 이것이 건강한 안색을 유지하는 방법입니까?
— rayryeng-복원 모니카

트윗 담아 가기 반가워요, 레이! 골프로 돌아와!
— Luis Mendo 2019

이 과정이 끝나면 ...) 약속합니다. 이제 CJam도 배우고 있습니다. 아주 좋아요!
— rayryeng-복원 모니카

4

진심으로, 11 9 바이트

2`,ùSô`n=

온라인으로 사용해보십시오!

모두 같은 알고리즘을 사용하는 것 같습니다. 여기 또 다시 있습니다.

2`    `n          Do it twice
  ,               Read a string
   ù              Make it lowercase
    S             Sort
     ô            Strip spaces.
        =         Check equality.

편집 : 실현 된 정렬은 문자열에서 올바르게 작동하고 공백을 앞면으로 정렬하므로 strip ()이 작동합니다.


4

C, 165 바이트

#define d(x) int x(char*a,char*b){
d(q)return*a&224-*b&224;}
#define n(x) for(qsort(x,strlen(x),1,(__compar_fn_t)q);*x<33;x++);
d(s)n(a)n(b)return strcasecmp(a,b);}

읽기 쉽고 작업 환경에서

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

// start of comparison
int q(char *a, char *b){
     return ((*a)&0xdf)-((*b)&0xdf); // case-insensitive
}
int s(char *a, char *b){
    for(qsort(a,strlen(a),1,(__compar_fn_t)q); *a<33; a++) /**/;
    for(qsort(b,strlen(b),1,(__compar_fn_t)q); *b<33; b++) /**/;
    return strcasecmp(a,b);
}
// end of comparison

int main(int i, char **v){
    printf("'%s' '%s'", v[1], v[2]);
    printf("=> %d\n", s(v[1], v[2])); // 0 if equalish
    return 0;
}

3

zsh, 85 바이트

[ $(for x in $@;{tr -d \ <<<$x|tr A-Z a-z|fold -1|sort|paste -sd x}|uniq|wc -l) = 1 ]

명령 행 인수로 입력하고 리턴 코드로 출력하십시오.

for구문이 강타 - 호환한다.

[               # test...
$(for x in $@;  # map over arguments
{tr -d \ <<<$x  # remove spaces
|tr A-Z a-z     # lowercase
|fold -1        # put each character on its own line
|sort           # sort lines
|paste -sd x    # remove all newlines except last
}|uniq          # take only unique lines
|wc -l          # how many lines remain?
) = 1 ]         # if only 1 line left, it must have been an anagram

3

apt, 12 바이트

N®v ¬n ¬xÃä¥

온라인으로 테스트하십시오!

작동 원리

        // Implicit: N = array of input strings
N®    Ã // Take N, and map each item Z to:
v ¬n    //  Take Z.toLowerCase(), split into chars, and sort.
¬x      //  Join and trim off whitespace.
ä¥      // Reduce each pair of items (that's exactly one pair) X and Y to X == Y.


3

펄, 34 33 + 1 = 34 바이트

s/(.)(.*,.*)\1/$2/i?redo:say!/\w/

-n깃발과 무료가 필요합니다 -M5.010| -E:

$ perl -M5.010 -ne's/(.)(.*,.*)\1/$2/i?redo:say!/\w/' <<< 'hello, lloeh'
1

작동 방식 :

                                   # '-n' make a implicit while loop around the code
 s/(.)(.*,.*)\1/$2/i               # Remove a letter that occurs on both sides of the comma.
                    ?
                     redo:         # Redo is a glorified goto statement that goes to the top of the while loop
                          say!/\w/ # Check to see if any letter is left

삼항 연산자를 사용하여 1 바이트를 절약 할 것을 제안하는 msh210 덕분에


3

Baloch Gyr , 9 바이트

{ṇ₁cḷ}ᵐpᵈ

온라인으로 사용해보십시오!

진실 / 거짓 출력은 술어 성공 / 실패를 통해 달성되며, 이는 Brachylog입니다.

이전 에는 두 입력 문자열의 길이에서 공백을 뺀 길이가 같다는 가정 하에서 cṇ₁cḷḍ대신 바이트를 저장 {ṇ₁cḷ}ᵐ했지만 실패했을 때 성공한다는 것을 깨달았습니다 Ah Hass, haha.

{    }ᵐ      For both strings in the input,
 ṇ₁          split on spaces,
   c         concatenate,
    ḷ        and lowercase.
       pᵈ    The strings are permutations of each other.

2

PHP, 109 94 바이트

function f($x){return str_split((trim($x));}function g($x,$y){return array_diff(f($x),f($y));}

블리치, 두 사람 function/return이 나를 죽이고있어

두 string입력 의 차이 array를 문자 단위 로 반환합니다 . PHP는 []허위로 간주 하여 return요구 사항을 충족 시킵니다.


3
function($x,$y){$S=str_split;return array_diff($S(trim($x)),$S(trim($y)));}-> 75 바이트 결과를 반환하는 익명 함수를 만듭니다. 그 긴 기능을 제거하고 호출을 str_split할당 된 변수 로 대체하여 단축했습니다.
— Ismael Miguel

좋은. 나는 그것을 하나의 기능으로 줄이기 위해 그것을 조정하고 있었고, 이것은 두 단계 앞선 것입니다.
— ricdesi

2

배쉬 + GNU 유틸리티, 51

f()(fold -1<<<${@^^}|sort)
f $1|diff -qBw - <(f $2)
  • 다음과 같은 기능 f()을 정의하십시오 .
    • ${@^^} 모든 매개 변수를 대문자로 변환
    • fold -1 문자를 분할합니다-한 줄에 하나씩
    • sorts 라인
  • 전화 diff로 -q억제 풀은 diff 출력 및 -Bw공백 변경 사항을 무시하기

2

파이크 (커밋 30, 비경쟁), 9 바이트

Fl1dk:S)q

설명:

F      )  -  for _ in eval_or_not(input())
 l1       -     ^.lower()
   dk:    -    ^.replace(" ", "")
      S   -   sorted(^)
        q - ^==^

2

Mathematica, 77 76 바이트

StringMatchQ[##,IgnoreCase->1>0]&@@(""<>Sort[Characters@#/." "->""]&/@{##})&

첫 번째 부분은 실제로 다른 질문에 대한 나의 대답 중 하나입니다!


2

파이크 54 112 109 109 96 바이트

#define a(x) sort((array)replace(lower_case(x)," ",""))
int s(mixed i){return a(i[0])==a(i[1]);}

mixed보다 짧습니다 array(string).

s1인수가 아나그램 인 경우를 반환 합니다.


2

Q, 25 바이트

f:{~/{x@<x:x@&~^x:_x}'x}

NOTE.- 카운팅 기능 이름 (F)을 포함한다 : 테스트를 용이하게하기 위해 (람다로 우리는 2 바이트를 감소시킬 수 있음)

읽을 수있는 버전

각각의 x마다 {오름차순이 아닌 null x 이상} 이상 일치

{.. x ..} is an anonymous function with arg x
_x        lowers string x
&~^x      where not null x (space is considered null)
x@..      selects elements of x according to indexes .. 
<x        ascending indexes of x (not values). Ex <"cab" is 1 2 0
x@<x      ascending values of x (x at ascending indexes of x)
~         match (diad function). Ex "one"~"one" is true
f'..      applies function f for each argument ..
f/..      applies function f over elements of sequence (fold)

테스트

f("Lynn";"Nyl N")                       
f("Digital Trauma";"Tau Digital Arm")   
f("Sp3000";"P S 3000")                  
f("Manage Trash So";"Those anagrams")   
f("Calvins Hobbies";"Helka Homba")      
f("Android";"rains odd")                
f("In between days";"bayed entwine")    
f("Code golf";"cod elf got")    

생성 (1b = true, 0b = false)

1b
1b
1b
1b
0b
0b
0b
0b

Q에 대하여

kx.com에서 개발 한 범용 언어 (APL 파생, 데이터 처리 전문) Windows / Linux / MacOS 용 무료 전체 기능 평가 버전.


다른 언어가 심각하지 않다는 것은 무엇을 의미합니까? :-P
— Luis Mendo

f코드가 올바르게 평가되는 데 필요한 경우 계산해야합니다. 그렇지 않으면 제출 코드에서 제외하고 함수 할당 방법을 보여주기 위해 예제에서만 사용하십시오.
— Mego

물론 다른 언어도 Q만큼 진지합니다. 영어를 구걸합니다. 그러나 일부 언어는 가독성을 희생하거나 이러한 유형의 경연 대회를 위해 임시로 라이브러리를 갖추고 있습니다. Q는 코드를 읽을 수 없어도 '일반용 언어'입니다.
— J. Sendra

나중에 k)~/{x@<x:_x@&~^x}'17 바이트에 대해 나중에 낮추면 x를 한 번만 할당하면됩니다 . 그러나 k)이것은 K코드가 아니라 코드 이므로 대괄호 가 필요하므로 19입니다 Q.
— streetster

2

APL, 31 자

{≡/{x[⍋x←('.'⎕R'\u0')⍵~' ']}¨⍵}

그렇게 사용하려면 :

    {≡/{x[⍋x←('.'⎕R'\u0')⍵~' ']}¨⍵}'Sp3000' 'P S 3000' 
1

영어로:

  • { ... }¨⍵: 인수의 두 요소 각각에 대해
  • x←('.'⎕R'\u0')⍵~' ': 공백없이 문자열을 대문자로 변환하고 (정규 표현식을 사용하여 ...) 임시 결과를 x
  • x[⍋x]: x 정렬
  • ≡/: 정렬의 두 결과를 비교하십시오. 일치하는 경우 1을 리턴하십시오.

온라인으로 사용해 볼 수 있습니까? 나는과 노력 이 하지만 난 정말 그것을 사용하는 방법을 모른다
— 루이스 Mendo에게

확실한. 여기에 다음과 같이 정의 하면됩니다.f 'first avatar' 'second avatar'
— lstefano

감사! 아마도 대답에 추가 하시겠습니까? 사람들이 시도 할 수 있도록
— Luis Mendo

–9 :≡/{x[⍋x←0~⍨32|⎕UCS⍵]}¨
— Adám

@ Adám : ≡/{x[⍋x←0~⍨32|⎕UCS⍵]}¨'pp' '00'1을 제공 하기 때문에 작동하지 않습니다 .
— lstefano

2

자바, 218 바이트

처음 Java를 작성했을 때 ...

골프 :

import java.util.Arrays;boolean M(String a,String b){char[]A=a.toUpperCase().replace(" ","").toCharArray();char[]B=b.toUpperCase().replace(" ","").toCharArray();Arrays.sort(A);Arrays.sort(B);return Arrays.equals(A,B);}

언 골프 드 :

import java.util.Arrays;
public class ManageTrashSo {
    public boolean M(String a, String b) {
    char[] A = a.toUpperCase().replace(" ", "").toCharArray();
    char[] B = b.toUpperCase().replace(" ", "").toCharArray();
    Arrays.sort(A);
    Arrays.sort(B);
    return Arrays.equals(A, B);
   }
}

테스트 :

    ManageTrashSo manageTrashSo = new ManageTrashSo();

    //True
    System.out.println(manageTrashSo.M("Lynn", "Nyl N"));
    System.out.println(manageTrashSo.M("Digital Trauma", "Tau Digital Arm"));

    //False
    System.out.println(manageTrashSo.M("Android", "rains odd"));
    System.out.println(manageTrashSo.M("In between days", "bayed entwine"));

나는 거의 1 년이 지났음을 알고 있지만 다음과 같이 32 바이트로 골프를 칠 수 있습니다 : boolean f(String...a){java.util.Arrays x=null;String[]A=g(a[0]),B=g(a[1]);x.sort(A);x.sort(B);return x.equals(A,B);}String[]g(String a){return a.replace(" ","").toUpperCase().split("");}( 186 bytes ) 또는 Java 8 람다로 변환하면 a->b->{java.util.Arrays x=null;String[]A=g(a),B=g(b);x.sort(A);x.sort(B);return x.equals(A,B);};String[]g(String a){return a.replace(" ","").toUpperCase().split("");}( 167 bytes ) 가 될 수 있습니다 . 다음은 테스트 코드가 포함 된 TIO입니다.
— Kevin Cruijssen


1

루비, 50 바이트

def f;gets.upcase.chars.sort.join.strip;end
p f==f

작문 f=->{...}하고 f[]==f[]길다. :(


1

PowerShell, 81 바이트

param([char[]]$a,[char[]]$b)-join($a-replace' '|sort)-eq-join($b-replace' '|sort)

연결된 Anagram 챌린지에 대한 나의 답변 을 약간 다시 작성 했습니다.

입력을 문자 배열 로 가져오고 -replace공백을 제거 하는 작업을 수행하고 공백 sort(ASCII 값이 아닌 알파벳순으로 정렬)을 수행 한 다음 -join문자열로 다시 되돌립니다. -eqPowerShell의은 기본적 대소 문자를 구별하여, 그러나 여기가 스트링에서 수행해야 [char]'a'같지 않은 [char]'A'들면 따라서 이유 -join.


1

펄, 35 바이트

에 +1 포함 -p

명령 행에 제공되는 프로그램에 따라 달라지기 때문에 다소 모욕적입니다.

perl -pe'<>=~s%\S%*_=s/$&//i?_:0%reg;$_=!//'

그런 다음 STDIN에서 문자열을 두 개의 연속 행으로 제공하십시오.

매우 욕설은 30 바이트입니다.

perl -ne'<>=~s%\w%1/!s/$&//i%reg;1/!//'

문자열이 아나그램이 아니므로 쉘의 관점에서 잘못된 종료 코드를 제공하면 충돌이 발생합니다. 또한이 경우 STDERR에 가비지를 제공합니다. 문자열이 아나그램 인 경우 프로그램은 자동이며 "true"종료 코드를 제공합니다.



1

Excel VBA, 122 바이트

익명 VBE 즉시 창 범위에서 입력 [A1:B1]을 받고 VBE 즉시 창으로 출력하는 기능

a=Replace([A1]," ",""):b=Replace([B1]," ",""):For i=1To Len(a):b=Replace(b,Mid(a,i,1),"|",,1,1):Next:?b=String(len(a),"|")

0

C #, 378 바이트

핸디캡이 필요합니다 !!

https://dotnetfiddle.net/FNDt0E

using System;
using System.Linq;
using System.Text;

public class Program
{

    public static void Main()
    {
        var l = "Hello World";

        var r = "Red Who Loll";

        var y = new Func<string,string>(s => new String(s.ToLower().Replace(" ","").OrderBy(v => v).ToArray()));
        var z = new Func<string,string,Func<string,string>,bool>((w,x,f) => f(w) == f(x));
        var o = z(l, r, y);


        Console.WriteLine("{0} & {1} are anagram: {2}",l, r, o);


                Console.WriteLine("C#, {0} bytes", Encoding.Unicode.GetByteCount(@"var y = new Func<string,string>(s => new String(s.ToLower().Replace("" "","""").OrderBy(v => v).ToArray()));
    var z = new Func<string,string,Func<string,string>,bool>((w,x,f) => f(w) == f(x));"));

    }

}

4
프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다! 일반적인 규칙은 게시물의 헤드 라인에 언어와 바이트 수를 조합하는 것입니다. #첫 줄에 행을 추가하면 됩니다. 또한 코드 골프 문제의 경우 프로그램을 골프화해야합니다. 처음에는 불필요한 공백을 제거하고 단일 문자 변수 이름을 사용해야합니다. 또한 명시 적으로 금지되지 않은 한 전체 프로그램 대신 항상 함수를 사용하여 더 많은 바이트를 저장할 수 있습니다.
— Denker

@ DenkerAffe 당신은 날 닌자 :)
— 고양이

1
왜 모든 공백이 ??
— CalculatorFeline
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.