휴지통 관리


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.