ตรวจสอบว่าสายอักขระเป็น anagrams


85

ท้าทาย

รับสองสายงานถ้าพวกเขาทั้งสองมีตัวอักษรเหมือนกันในพวกเขา

ตัวอย่าง

อินพุต

คำ, wrdo

ผลตอบแทนนี้trueเพราะพวกเขาเหมือนกัน แต่มีสัญญาณรบกวนเพียงอย่างเดียว

อินพุต

คำ wwro

ผลตอบแทนfalseนี้

อินพุต

เรือยาสูบ

ผลตอบแทนนี้ true

กฎระเบียบ

นี่คือกฎ!

  • สมมติว่าอินพุตจะมีความยาวอย่างน้อย 1 อักขระและไม่เกิน 8 ตัวอักษร
  • ไม่มีตัวอักษรพิเศษเท่านั้นa-z
  • อินพุตทั้งหมดสามารถสันนิษฐานได้ว่าเป็นตัวพิมพ์เล็ก

กรณีทดสอบ

boat, boat = true
toab, boat = true
oabt, toab = true
a, aa = false
zzz, zzzzzzzz = false
zyyyzzzz, yyzzzzzy = true
sleepy, pyels = false
p,p = true

10
9 คำตอบใน 13 views ... ว้าว!
Tom Gullen

@ Tom เพราะทุกคนต้องการพิสูจน์ว่าความคิดเห็นของคุณเกี่ยวกับการใช้จำนวนเต็ม 64- บิตชี้ไปในทิศทางที่ผิด: P
Peter Taylor

5
คำขอชื่อเรื่อง: Cod Elf, Go!

5
"Falcon Rage โกรธไปแล้ว!"
Geobits

7
ข้อเสนอแนะชื่อของฉัน: "พวกเขา anagrams" → "จัดการอาร์เรย์"
ผลไม้ที่แยกจากกัน

คำตอบ:


39

Python ขนาด 32 ไบต์

f=lambda a,b,S=sorted:S(a)==S(b)

3
@Debanjan, นี่เป็นเช่นเดียวกับdef f(a,b):return sorted(a)==sorted(b)การแลกเปลี่ยนคือคุณได้รับการแทนที่ def + return ด้วย lambda เพื่อแลกกับการไม่ใช้คำสั่งใด ๆ
gnibbler

1
@Debanjan ฉันคิดว่ามันช่วยคุณได้แค่ตัวเดียวเท่านั้น ฉันใช้รูปแบบที่นี่ แต่ใช้ความยาวเท่ากันกับของคุณเพราะฉันสลับบรรทัดใหม่สำหรับเครื่องหมายจุลภาค
gnibbler

4
@ โทมัสไร้สาระ คำถามไม่ได้ระบุโปรแกรมที่สมบูรณ์ดังนั้นจึงสามารถยอมรับฟังก์ชั่นหรือโปรแกรมที่สมบูรณ์ได้
gnibbler

2
@Tomas คำตอบส่วนใหญ่ที่นี่ไม่ผ่านเกณฑ์ของคุณ ทำไมไม่ให้รางวัลสำหรับผู้ที่ทำเช่นนั้น?
gnibbler

4
@Tomas มันไม่ใช่กฎที่เป็นการละเมิด มีคำถามบางคำถามที่เปิดกว้างโดยเจตนาดูเหมือนจะเป็นเช่นนี้ เปรียบเทียบกับคำถามที่ระบุดีเช่นนี้ ถ้าคุณไม่ชอบคำตอบเหล่านี้บ่นกับคำถามที่ถาม
gnibbler

27

Golfscript, 3 ตัวอักษร?

$$=

การใช้งาน:

'boat'$'baot'$=
1

'toab'$'boat'$=
1

'oabt'$'toab'$=
1

'a'$'aa'$=
0

'zzz'$'zzzzzzzz'$=
0

'zyyyzzzz'$'yyzzzzzy'$=
1

'sleepy'$'pyels'$=
0

'p'$'p'$=
1

23
นี่คือความหมายที่น่าสนใจของวิธีการในการจัดหาการป้อนข้อมูล :)
gnibbler

4
คำอธิบายโปรด :(
st0le

10
@ st0le อย่างจริงจัง? ฉันไม่รู้ golfscript แต่เห็นได้ชัดว่า $ (เรียงลำดับ), $ (เรียงลำดับ), = (เปรียบเทียบ)
Peter Taylor

11
นี่ไม่ใช่การโกงเล็กน้อยใช่ไหม ฉันหมายความว่ามันไม่ใช่ตัวแปรอินพุต จะต้องมีการกำหนดค่าตายตัว ไม่ว่าในกรณีใดฉันจะเพิ่ม 4 จำนวนตัวอักษรสำหรับเครื่องหมายคำพูด ( ')
Thomas Eding

6
สิ่งนี้ไม่ถูกต้องตามกฎปัจจุบันของเรา คุณสามารถ แต่เปลี่ยนเป็นฟังก์ชั่น @ 4 ไบต์ JanDvorak ซึ่งจะยอมรับการป้อนข้อมูลผ่านทางรูปแบบการป้อนข้อมูลที่ถูกต้อง
Doorknob

20

J, 8

-:&(/:~)

เรียงตามตัวอักษรจับคู่ ( -:) บน ( &) เรียงลำดับ ( /:~)

ตัวอย่างการใช้งาน:

   'boat' -:&(/:~) 'boat'
1
   'toab' -:&(/:~) 'boat'
1
   'oabt' -:&(/:~) 'toab'
1
   'a' -:&(/:~) 'aa'
0
   'zzz' -:&(/:~) 'zzzzzzzz'
0
   'zyyyzzzz' -:&(/:~) 'yyzzzzzy'
1
   'sleepy' -:&(/:~) 'pyels'
0
   'p' -:&(/:~) 'p'
1

เลขจำนวนเต็ม 64 บิตมาเล่นที่ใด


เป็นไปไม่ได้ที่จะเขียนฟังก์ชั่น / รูทีนย่อยใน J หรือไม่?

2
@Tim Nordenfur: พวกเขาเรียกว่า "คำกริยา" และรับอาร์กิวเมนต์หนึ่งตัวทางด้านขวาเหมือนกับในv arg(monads) หรือสองข้างทั้งสองข้างเหมือนในarg1 v arg2(dyads) เห็นได้ชัดว่าฉันเป็นคนหนึ่ง ฉันไม่ได้รำคาญที่จะตั้งชื่อเพราะมันไม่ได้ร้องขอและสั้นกว่าด้วยวิธีนี้ หากคุณจริงๆต้องการให้มันชื่อคุณต้องการทำเช่นนั้นเช่นนี้และจากนั้นใช้เป็นis_anagram_of =: -:&(/:~) 'a' is_anagram_of 'aa'
JB

รู้สึกว่าราคาถูกนิดหน่อยเมื่อเทียบกับการโต้เถียงในโค้ด แต่ตอนนี้ฉันเห็นแล้วว่ามันเป็นสิ่งมีชีวิต ไม่เป็นไร.

29
เจมักจะดูเหมือนซากระเบิดโรงงานอิโมติคอน
st0le

19

Javascript, 192 157 152 147 125 ไบต์

โอเคภาษาเหล่านี้มีความยืดหยุ่นมากกว่าที่ฉันคิดไว้มาก! อย่างไรก็ตามนี่เป็นวิธีที่ยาวกว่าที่ฉันคาดเดา แต่เป็นเทคนิคที่แตกต่างกันอย่างน้อยที่สุด

การบีบอัด

ขอบคุณปีเตอร์และดาวิดที่บีบตัวละครออกไป!

for(a=[j=p=2];j<123;)a[j]?p%a[++j]<1&&p++&&(j=0):(a[j]=p,j=0);function b(c,i){return c[i=i||0]?a[c.charCodeAt(i)]*b(c,++i):1}

จากนั้นทำ:

alert(b("hello")==b("elloh"));

รหัสขยาย

การบีบอัดมีการเปลี่ยนแปลงมากมาย แต่นี่เป็นทฤษฎีพื้นฐาน:

// Define dictionary of primes
a = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101];

// Returns the unique ID of the word (order irrelevant)
function b(c) {
    r = 1;
    for (i = 0; i < c.length; i++)
        r *= a[c[i].charCodeAt(0) - 97];
    return r
}

alert(b("hello") == b("hlleo"));

ความคิดที่ยอดเยี่ยมโดยใช้เฉพาะช่วงเวลา

@ ขอบคุณมาก! รับลงไปที่ 157 ตอนนี้
Tom Gullen

2
คุณสามารถโกนอักขระสองสามตัวออกจากการเริ่มต้นพจนานุกรมโดยใช้ตะแกรง a=[2];for(p=3,j=0;j<26;)if(a[j]){if(p%a[j++]==0){p++;j=0}}else{a[j]=p;j=0}
Peter Taylor

1
@Tom ขึ้นอยู่กับว่าขั้นตอนการเรียงลำดับที่เหมาะสมดีเพียงใดเนื่องจากคุณได้ จำกัด อินพุต 8 ตัวอักษร: P
Peter Taylor

1
125 ตัวอักษร Recursion และ ternaries FTW:for(a=[j=p=2];j<123;)a[j]?p%a[++j]<1&&p++&&(j=0):(a[j]=p,j=0);function b(c,i){return c[i=i||0]?a[c.charCodeAt(i)]*b(c,++i):1}
David Murdoch

15

Golfscript ขนาด 8 ไบต์

ฟังก์ชันนี้กำหนดฟังก์ชันที่เรียกว่า A

{$\$=}:A

กรณีทดสอบ

;
'boat' 'boat' A
'toab' 'boat' A
'oabt' 'toab' A
'a' 'aa' A
'zzz' 'zzzzzzzz' A
'zyyyzzzz' 'yyzzzzzy' A
'sleepy' 'pyels' A
'p' 'p' A

11

Haskell, 31 ไบต์

ฟังก์ชั่น - 31

import List
f=(.sort).(==).sort

โปรแกรม - 81 58 55

import List
g=sort`fmap`getLine
main=(`fmap`g).(==)=<<g

การใช้งาน:

$ runghc anagram.hs
boat
boat
True
$ runghc anagram.hs
toab
boat
True
$ runghc anagram.hs
a
aa
False

รุ่งโรจน์เพื่อlambdabotและrefactoring pointfree


รหัส Haskell สามารถทำในสิ่งที่ต้องการภายใต้ runghc เท่านั้น แต่ไม่ได้รวบรวมเมื่อยังคงถูกเรียกว่า "โปรแกรม"?
JB

3
@JB: รหัส Perl สามารถทำสิ่งที่ต้องการภายใต้perlยังคงเรียกว่า "โปรแกรม" เท่านั้น? :-)
Joey Adams

JB: ภาษาที่ใช้งานได้ในปัจจุบันบิดเบือนความหมายของโปรแกรมทำให้เป็นนามธรรมที่สูงขึ้น แทนที่จะเป็นรายการคำสั่งที่ต้องดำเนินการเนื่องจากโปรแกรม Haskell สามารถมองเห็นได้ว่าเป็นชุดของฟังก์ชั่นแม้ว่าจะไม่ได้เรียกใช้ก็ตาม
Callum Rogers

@ Callum Rogers: จุดของฉันคือ: รหัสของเขาทำงานแตกต่างกันไม่ว่าจะทำงานภายใต้ runghc หรือเรียบเรียงในพื้นที่ที่มีปัญหา "ฟังก์ชั่น" ไม่เป็นไร "โปรแกรม" ไม่สามารถแก้ปัญหาภายใต้สิ่งอื่นใดนอกจาก runghc และ runghc ไม่ใช่วิธีที่ถูกต้องตามกฎหมายในการเรียกใช้โปรแกรม Haskell ในบริบทนั้นทำให้ตัวอย่างเป็น "runghc script" ไม่ใช่ "Haskell program" - ไม่ว่าฉันจะพิจารณาประเด็นที่สำคัญอย่างที่บอกไปแล้วว่าฟังก์ชั่นใช้ได้ดีและมันก็สั้นกว่า
JB

2
x#y=sort x==sort yสั้นลง 1 ตัวอักษร
Rotsor

10

C #, 129 ตัวอักษร

namespace System.Linq{class X{static void Main(string[]a){Console.Write(a[0].OrderBy(_=>_).SequenceEqual(a[1].OrderBy(_=>_)));}}}

อ่านได้:

namespace System.Linq
{
    class X
    {
        static void Main(string[] a)
        {
            Console.Write(a[0].OrderBy(_ => _)
                  .SequenceEqual(a[1].OrderBy(_ => _)));
        }
    }
}

ฉันคิดว่าคุณสามารถเล่นกอล์ฟสองสามไบต์using System.Linq;แทนที่จะใช้การตั้งชื่อมันได้หรือไม่
Stackstuck

10

Ruby, 34 ไบต์

การใช้รูปแบบ IO ของโซลูชั่น Peter Taylors Perl:

p gets.chars.sort==gets.chars.sort

เกิดข้อผิดพลาด:-e:1:in '<main>': undefined method 'chars' for nil:NilClass (NoMethodError)
โทมัส

9

โปรแกรม C, 118

t[52],i;main(c){for(;i<52;)(c=getchar())<11?i+=26:t[i+c-97]++;
for(i=27;--i&&t[i-1]==t[i+25];);puts(i?"false":"true");}

1
เคยพิจารณาการสมัครใช้งานIOCCCหรือไม่?
Mateen Ulhaq

9
@muntoo: คุณเคยเห็นอะไรใน IOCCC บ้างไหม? นี่เป็นวิธีที่อ่านได้เกินไป
R. Martinho Fernandes

@Martinho ใช่ซอร์สโค้ด IOCCC นั้นสวยงามมาก ซิมโฟนี่ แต่อย่างน้อยเขาก็ควรลองแต่งชิ้นเล็ก ๆ :)
Mateen Ulhaq

@muntoo: ฉันไม่รู้ด้วยซ้ำว่าพวกเขายังทำงานอยู่
Joey Adams

1
เพิ่งเห็นอันนี้ ... ดีมาก แต่สามารถสั้นกว่าได้: t[256],i;main(c){for(;c+3;)(i=getchar())>10?t[i]+=c:(c-=2);for(i=257;--i&&!t[i-1];);puts(i?"false":"true");}- นั่นคือ 108 ตัวอักษร สำคัญมากcเคล็ดลับการเริ่มต้นของคุณยังคงใช้อยู่
ugoren

7

Perl, 58 ไบต์

(โปรแกรมที่สมบูรณ์ซึ่งแตกต่างจากคำตอบ Perl อื่น ๆ ซึ่งเป็นเพียงฟังก์ชั่น)

($c,$d)=map{[sort split//]}<>;print"@$c"eq"@$d"?true:false

49 เป็นฟังก์ชั่น

sub f{($c,$d)=map{[sort split//]}<>;"@$c"eq"@$d"}

แน่นอนคุณสามารถบันทึก 4 ตัวอักษรในโปรแกรมโดยการลบ"รอบจริงและเท็จเนื่องจากไม่ใช้เข้มงวด / คำเตือน bareword เป็นสตริง
Joel Berger


ฉันชอบสิ่งนี้เป็น($c,$d)=map{[sort split//]}@ARGV;exit("@$c"ne"@$d")(51 ตัวอักษร) เพื่อให้สามารถใช้อาร์กิวเมนต์บรรทัดคำสั่งและใช้รหัสออกบรรทัดคำสั่ง มันจะเป็น 48 ตัวอักษรที่<>มีการป้อนข้อมูลแบบหลายบรรทัด
Adam Katz

6

Clojure - 23 ตัวอักษร

ในฐานะที่เป็นฟังก์ชั่นที่ไม่ระบุชื่อ:

#(apply = (map sort %))

ตัวอย่างกรณีทดสอบ:

(#(apply = (map sort %)) ["boat" "boat"])
=> true

ฉันชอบมันมาก
Chiron

1
คำตอบที่ดี ฉันชอบสตริงการทดสอบที่คุณเลือก ;-)
coredump

6

JavaScript

อิงตามโซลูชันของ @ zzzzBov

การเปรียบเทียบ 65 ตัวอักษร (40 โดยไม่มีฟังก์ชั่น)

function f(a,b){return a.split('').sort()==b.split('').sort()+""}

ตัวเปรียบเทียบ 43 ตัวอักษร

function f(a){return a.split('').sort()+""}

ฉลาดโดยใช้+""เพื่อบังคับให้สตริง
Casey Chu

6

C ++ (104 ตัวอักษรที่ไม่ใช่ WS)


ขึ้นอยู่กับการเรียงลำดับการนับ หมายเหตุ: สมมติว่าสตริงที่มีความยาวเท่ากันซึ่งดูเหมือนว่าจะเป็นนัย (แม้ว่าจะไม่ได้ระบุ) โดยคำถาม

int u[123], i;

int a(char **c) {
    for(; c[0][i]; ) {
        u[c[0][i]]++;
        u[c[1][i++]]--;
    }

    i=123;
    while(i && !u[--i]);
    return !i;
}

ใน C ถ้าคุณประกาศตัวแปรในขอบเขตส่วนกลางมันจะเริ่มต้นเป็นศูนย์ ฉันเดาว่านี่เป็นจริงสำหรับ C ++ เช่นกัน
Joey Adams

ในทางกลับกันตัวแปรท้องถิ่นจะไม่เริ่มต้นเป็นศูนย์โดยอัตโนมัติ
Joey Adams

ตกลงฉันลบคำเตือนของฉันตั้งแต่ฉันพบวิธีที่จะทำโดยไม่ต้องมัน
Matthew อ่าน

1
Bzzzt คุณผ่านกรณีทดสอบ แต่ "helle" และ "hollo" นั้นเหมือนกัน แก้ไขง่าย ๆ : เปลี่ยนหนึ่งใน ++ เป็น - ถ้าหาก (u [i ++]) ส่งคืนค่า 0;
Dave Gamble

1
ฉันยังไม่ได้ทดสอบสิ่งนี้ แต่สามารถเขียนสามบรรทัดสุดท้ายเป็นi=123;while(i&&u[--i]);return!i;
st0le

4

PHP (บรรทัดคำสั่ง 87 ตัวอักษร)

function d($s){
    return array_count_values(str_split($s));
}

echo d($argv[1]) == d($argv[2]);

4

จาวาสคริ

โซลูชันของ @ zzzzBov ที่สั้นกว่าเล็กน้อยซึ่งใช้.join()แทน String Boxing:

function a(b,c){return b.split('').sort().join()==c.split('').sort().join()}
alert(a('abc','bca')); //true

ในทำนองเดียวกัน:

function a(b){return b.split('').sort().join()}
alert(a('abc')==a('bca')); //true

3
นี่คือคำตอบ ID 1337 congratz
TheDoctor

4

Clojure REPL 41 ตัวอักษร

(= (sort (read-line)) (sort (read-line)))

ยินดีต้อนรับสู่เครือข่าย Stack Exchange การจัดรูปแบบความช่วยเหลือที่นี่
dmckee

4

ชวา

(เห็นได้ชัดว่าภาษาที่ชื่นชอบของทุกคน!)

173 ตัวอักษร:

import java.util.*;class g{public static void main(String[]p){String[]a=p[0].split(""),b=p[1].split("");Arrays.sort(a);Arrays.sort(b);System.out.print(Arrays.equals(a,b));}}

(ไม่พิมพ์อักขระขึ้นบรรทัดใหม่เพื่อบันทึก 2 ตัวอักษรจาก println)

รวบรวมและเรียกใช้:

javac g.java
java -cp . g abcdef fedcba
true

ชอบที่จะเห็นหนึ่งที่สั้นกว่า ...


ฉันรู้ว่ามันใช้เวลานานกว่า 6.5 ปี (ฮ่า ๆ ) แต่คุณสามารถตีกอล์ฟได้ 10 ไบต์โดยการเพิ่มjava.util.Arrays x=null;และใช้x.แทนArrays.: class g{public static void main(String[]p){java.util.Arrays x=null;String[]a=p[0].split(""),b=p[1].split("");x.sort(a);x.sort(b);System.out.print(x.equals(a,b));}}( 163 bytes )และโดยการแปลงเป็น Java 8 class g{public static void mainอาจทำได้interface g{static void mainเช่นกัน แต่ฉันเดาว่า Java 8 ไม่ได้ ยังไม่ถึงปี 2554 ดังนั้นการรักษาclassก็ดี ; p
Kevin Cruijssen

4

sed, 45 ตัวอักษร

มันเป็นไปได้แม้ในที่ชื่นชอบ - sed! เพียงหนึ่งนิพจน์ปกติเพื่อแก้ปัญหาแอนนาแกรม ! เพียงลบตัวอักษรที่เกี่ยวข้องออก:

:
s/(.)(.*,.*)\1/\2/
t
/\w/{i\false
d}
i\true

(จะถูกเรียกด้วย-nE)

Perl, 48

1while s/(.)(.*,.*)\1/\2/;$_=/\w/?"false":"true"

-pที่จะถูกเรียกด้วย

ฟังก์ชัน Perl, 39

sub f{$,while s/(.)(.*,.*)\1/\2/;!/\w/}

4

APL, 2 ตัวอักษร

≡⍦

นี่คือฟังก์ชั่นการจับคู่ชุดข้อมูลจากNars2000ซึ่งเป็นหนึ่งในการใช้งาน APL ระดับแนวหน้า เมื่อนำไปใช้กับสตริงมันจะคำนวณฟังก์ชันที่ต้องการทั้งหมด:

      'elvis' ≡⍦ 'lives'
1
      'alec guinness' ≡⍦ 'genuine class'
1

แค่อยากรู้อยากเห็นนี่คือกี่ไบต์? 4? 6?
Maltysen

มันขึ้นอยู่กับการเข้ารหัส 6 ไบต์ใน UTF-8, 4 ไบต์ใน UCS-2, 2 ไบต์ถ้าชุดอักขระ APL เดี่ยวไบต์แบบดั้งเดิมมีสัญลักษณ์ซึ่งฉันสงสัย
เบีย

4

05AB1E , 6 4 ไบต์ (ไม่แข่งขัน)

{I{Q

ลองออนไลน์!

การดำเนินการนี้ใช้เวลาสักครู่เนื่องจากมีปัญหาในการป้อนข้อมูล กอล์ฟลงเนื่องจากป๊อป

คำอธิบาย:

{I{Q    Original code

{       Takes first input e.g. word and sorts -> 'dorw'
 I      Takes second input e.g. 'wrdo'
  {     Sorts second input -> 'dorw'
   Q    Compare if sorted 1 = sorted 2, then print result. 'dorw' = 'dorw', so prints 1.

1
ตั้งแต่ 05AB1E ใหม่กว่าความท้าทายนี้คำตอบนี้ไม่ใช่การแข่งขัน
Loovjo

ขออภัย - ไม่เข้าใจ
Geno Racklin Asher

4

Perl, 77 75 ตัวอักษร

I / O ของปัญหาไม่ได้ระบุไว้อย่างดี สิ่งนี้อ่านสองบรรทัดจาก stdin และเอาต์พุตจริงหรือเท็จถึง stdout

sub p{join'',sort split'',$a}$a=<>;$x=p;$a=<>;print$x eq p()?"true":"false"

(ขอบคุณสำหรับ Tim สำหรับ 77 -> 75)


บางสิ่งบางอย่างที่ไม่ถูกต้อง. $a=;? นอกจากนี้คุณยังสามารถข้าม parens ของและพื้นที่หลังsort print

@Tim อัจฉริยะที่พัฒนาแพลตฟอร์มนี้เพื่อใช้รหัสร่วมกันบนอินเทอร์เน็ตตัดสินใจว่าในบล็อกรหัสผู้คนควรหลีกเลี่ยงอักขระที่น้อยกว่า แต่เดี๋ยวก่อนไม่ใช่เรื่องใหญ่: ไม่ใช่ว่าใครใช้ในรหัสใช่มั้ย ช่วยไล่ฉันออก
Peter Taylor

2
ตกลงฉันลบคะแนนโหวต คุณอาจต้องการใช้การจัดรูปแบบรหัสในอนาคตเช่นรหัสเยื้องที่มีช่องว่างสี่ช่อง

1
ตกลงดังนั้นจึงมีสามวิธีในการจัดรูปแบบโค้ด (หนึ่งอินไลน์และสองบล็อก) และทั้งสองบล็อกไม่สะดวกในวิธีที่ต่างกัน ถอนหายใจ
Peter Taylor

4

Perl, 62 ไบต์

ฟังก์ชันนี้รับค่าสตริงเป็นอาร์กิวเมนต์และส่งคืนค่าจริงหรือเท็จ

sub f{my@a;for$.(1,-1){$a[ord]+=$.for split//,pop}!grep{$_}@a}

เก็บค่า ASCII ในอาร์เรย์และตรวจสอบว่ามันออกมา เพิ่มขึ้นสำหรับคำแรกและลดลงสำหรับคำที่สอง


4

Python 3, 107 97 76 64

s=sorted;a,b=input().split(', ')
print(str(s(a)==s(b)).lower())

เห็นได้ชัดว่านี่จะสั้นลงถ้าเราไม่ใช้ถ้อยคำของ OP อย่างแท้จริงและตัวพิมพ์เล็ก "true" และ "false" ...


คุณสามารถโกนอักขระบางตัวได้ถ้าคุณต่อท้าย;s=sortedบรรทัดแรกแล้วแทนที่ทั้งสองอินสแตนซ์ของsortedด้วยsในบรรทัดที่สอง ควรบันทึก ... 3 ตัวอักษร?
Alex Van Liew

1
จริง Python 3 ช่วยประหยัดพื้นที่อีกเล็กน้อยและน่าจะเหมาะสมในตอนนี้ 5 ปีหลังจากคำตอบนี้ถูกโพสต์ นอกจากนี้. strip () เป็นข้อมูลซ้ำซ้อนที่กำหนดอินพุตที่ระบุ
Wooble

ใช่ขอโทษ ฉันไม่ได้สังเกตว่าคำถามนี้อายุเท่าไหร่เมื่อฉันแสดงความคิดเห็นเฉพาะที่อยู่ใน frontpage ^^;
Alex Van Liew

4

Python ขนาด 32 ไบต์

p=sorted
f=lambda a,b:p(a)==p(b)

ไม่ทำอะไรเลยในหลาม คุณแน่ใจหรือว่าเป็นโปรแกรมที่สมบูรณ์ที่รับอินพุตและสร้างเอาต์พุตตามที่ร้องขอ?
โทมัส

1
@Tomas มันเป็นฟังก์ชั่น
TuxCrafting


4

R , 54 ไบต์

function(x,y,`~`=sort,`+`=utf8ToInt)identical(~+x,~+y)

ลองออนไลน์!


ฉันสนใจอย่างมากกับการใช้ utf8ToInt ของคุณไม่เพียง แต่ในคำตอบนี้ แต่ในหลาย ๆ สิ่งที่ฉันได้เห็น
Sumner18

1
คุณเคยเห็นเคล็ดลับสำหรับการเล่นกอล์ฟใน Rหรือไม่? utf8ToIntและมันกลับมีแนวโน้มที่จะทำให้การแยกสตริงสั้นกว่าฟังก์ชั่นทั่วไป
J.Doe

3

สกาล่าใน REPL (32)

readLine.sorted==readLine.sorted

ฟังก์ชั่นสกาล่า (43)

def f(a:String,b:String)=a.sorted==b.sorted

โปรแกรมสกาล่า (61)

object A extends App{println(args(0).sorted==args(1).sorted)}

การใช้ประโยชน์จากคุณลักษณะเหล่านี้อย่างเป็นระเบียบของ Scala โดยที่ String สามารถถือว่าเป็นลำดับของอักขระ ( Seq) พร้อมกับการดำเนินการทั้งหมดที่Seqมีอยู่


3

APL - 13 ตัวอักษร

{(⍺[⍋⍺])≡⍵[⍋⍵]}

โทรแบบนี้:

      'boat' {(⍺[⍋⍺])≡⍵[⍋⍵]} 'baot'
1
      'baot' {(⍺[⍋⍺])≡⍵[⍋⍵]} 'boat'
1
      (,'a') {(⍺[⍋⍺])≡⍵[⍋⍵]} 'aa'
0

ในตัวอย่างสุดท้าย'a'แสดงให้เห็นถึงตัวละครเดียวและคำนำหน้า,จะแปลงมันเป็นสตริง


3

Java (134 ไบต์)

int[][]c=new int[2][26];
for(int i=0;i<2;i++)for(byte a:args[i].getBytes())c[i][a-97]++;
System.out.print(Arrays.equals(c[0],c[1]));`

สิ่งนี้ทำให้อาร์เรย์นับจำนวนครั้งที่ตัวอักษรแต่ละตัวปรากฏขึ้นแล้วเปรียบเทียบอาร์เรย์เพื่อตรวจสอบว่าพวกเขาเท่ากันหรือไม่


1
ยินดีต้อนรับสู่ PPCG! โพสต์แรกที่ดี! มี 2 คันคุณสามารถเอาอยู่และ(c[0], c[1]) for (int i=0;
Rɪᴋᴇʀ

3

JavaScript, 41

ฟังก์ชั่นเปรียบเทียบ(41) :

a=b=>''+[...b].sort()
b=(c,d)=>a(c)==a(d)
alert(b('abc', 'cba')) // true

ฟังก์ชั่นเปรียบเทียบ(21) :

a=b=>''+[...b].sort()
alert(a('abc') == a('bca')); //true

ฟังก์ชั่นเปรียบเทียบ (48):

function a(b){return String(b.split('').sort())}
alert(a('abc')==a('bca')); //true

ฟังก์ชั่นเปรียบเทียบ (78):

function a(b,c){return String(b.split('').sort())==String(c.split('').sort())}
alert(a('abc','bca')); //true

ถือว่าStringมีsplitและมีArraysort


38 ไบต์:c=>d=>(a=b=>''+[...b].sort())(c)==a(d)
Shieru Asakoto
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.