Xóa nguyên âm mà không sử dụng quá nhiều ký tự khác nhau


11

Thách thức là loại bỏ các nguyên âm (a, e, i, o, u) khỏi chuỗi từ STDIN (vâng, tôi biết, đơn giản). Bạn có thể mong đợi rằng chương trình của bạn sẽ không được chạy với bất kỳ đối số nào trong argv.

Thí dụ:

This program will remove VOWELS.
So we can now speak without them.

Được đổi thành:

Ths prgrm wll rmv VWLS.
S w cn nw spk wtht thm.

Có một cái bẫy. Mục thắng được quyết định dựa trên số lượng byte khác nhau. Ví dụ a abcó ba byte khác nhau ( a, bvà không gian). Nếu hai hoặc nhiều mục nhập sẽ có cùng số lượng byte khác nhau, thì dự phòng được thực hiện theo số byte cho các mục đó.


9
Một công việc cho ngôn ngữ Whitespace
jfs

Còn đầu vào như thế Renée’s naïveténào? Tước nguyên âm, tất nhiên nên Rn’s nvtlà đầu ra. Có vẻ như những cách tiếp cận này đều rất ngây thơ nếu bạn hỏi tôi. :)
tchrist

Nếu bạn xóa é, bạn cũng có thể muốn xóa y.
người dùng không xác định

4
@tchrist, đọc câu hỏi. Nói để loại bỏ a, e, i, o, u. Bạn đang lạc đề, làm ơn bỏ nó đi.
gian hàng

1
@tchrist: Đặc biệt là thử thách không nói "tất cả các nguyên âm" liệt kê những gì chúng ta nên coi là có thể tháo rời.
người dùng không xác định

Câu trả lời:


2

Không gian nhị phân (2 ký tự riêng biệt, tổng số 324 ký tự)

TTSSSTTSSSSTTTSTTTSSSSSSTTSSSTSSSSSSTSTTSSSTSSSSTSSTSTTSSSTSSSTSSSTSTTSSSTSSSTSTSTSTSTTSSSTSSTSSTSSTSTTSSSTSTSSSSSTSTTSSSTSTSSSTSSTSTTSSSTSTSSTSSSTSTTSSSTSTSSTSTSTSTSTTSSSTSTSTSSTSSTSTTTTSSSTSTTSTTSTTTSSTSTTSSSSTTTSTSTSTSSSTSTTTSSTTTTSTTSTSTTTTSSTTTTTSSSTTTTSTTTTTTSSTSTTSSSSTTTSTSTSSTTSTTTSSSSTTTSTTSSTTSTTSTTTTSSSSTTTTTTTT

trong đó S, T, L lần lượt biểu thị Space, Tab, Linefeed. (Không biết xấu hổ khi chuyển đổi câu trả lời của Whitespace bằng "Breadbox" thành Binary Whitespace - bài đăng này có lẽ nên là một nhận xét cho câu trả lời của anh ấy, nhưng nó quá dài.)

Khoảng trắng nhị phân là khoảng trắng được chuyển đổi thành ngôn ngữ mã tiền tố bởi mọi nơi sử dụng TS thay vì T và sử dụng TT thay vì L; ví dụ: lệnh BWS để đẩy -5 lên ngăn xếp là SSTSTSSTSTT thay vì SSTTSTL, v.v. Liên kết: Trình dịch cả hai chiều cho ngôn ngữ ký hiệu 3 tùy ý và các phiên bản mã tiền tố nhị phân của nó .

Lưu ý: Sẽ rất đơn giản khi thiết kế một trình thông dịch bitwise thực sự cho các chương trình Không gian nhị phân được coi là hệ quả bit , thay vì chuỗi char (ví dụ: sử dụng 0,1 giá trị bit thay vì ký tự S, T, tương ứng). Ở trên sẽ là một chương trình 324 bit cần 41 byte lưu trữ.


13

Brainfuck, 8 khác biệt (tổng cộng 2121)

>,+[-<>>>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>[-]+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>[-]++<[-<+>>>>->>>->>>->>>->>>->>>->>>->>>->>>->>>-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[<<<]+>-[<-<.>>-]<[<<<]<[-]>,+]

Các nhân vật bị phân biệt : <>+-[],.. Làm việc với các thông dịch viên sử dụng -1cho EOF.

$ echo '
Chương trình này sẽ xóa VOWELS.
Vì vậy, bây giờ chúng ta có thể nói mà không có họ.
'| bf nguyên âm-rm.bf

Ths prgrm wll rmv VWLS.
S w cn nw spk wtht thm.


1
Theo các yêu cầu như đã nêu, đây là câu trả lời tốt nhất; nhưng OTOH nó tệ nhất ở chỗ nó sử dụng mọi ký tự có ý nghĩa cú pháp trong ngôn ngữ của nó.
dan04

3
@tchrist: Nó giả sử ASCII. Dù sao, chỉ có {a, e, i, o, u} là trong các yêu cầu.
Jon Purdy

1
Vì vậy, nó ổn để biến Renée’s naïvetéthành Rń’s n̈vt́, sau đó? Điều đó dường như không đúng với tôi, nhưng nếu bạn nói như vậy. Vì bạn không thể giả sử bất kỳ sự chuẩn hóa nào, điều đó Renée’s naïvetéthực sự hợp lý "Rene\N{COMBINING ACUTE ACCENT}e\N{RIGHT SINGLE QUOTATION MARK}s nai\N{COMBINING DIAERESIS}vete\N{COMBINING ACUTE ACCENT}"- hoặc nếu bạn thích số ma thuật , "Rene\x{301}e\x{2019}s nai\x{308}vete\x{301}". Nếu bạn loại bỏ các nguyên âm mà không có dấu phụ của họ, bạn sẽ nhận được cực kỳ hay. Chào mừng đến với thiên niên kỷ mới dũng cảm! :)
tchrist

1
Sử dụng Unary, bạn chỉ có một ký tự riêng biệt! :-P esolangs.org/wiki/Unary
marinus

3
@marinus, tôi đã chuyển đổi nó thành Unary và tôi chỉ cần 1.166921663690E+1824byte để lưu trữ nó (Tôi đã tải số chính xác lên pastebin, nó sẽ không phù hợp với nhận xét này). Tôi tự hỏi sẽ mất bao nhiêu thời gian để gửi nó đến trang web này.
Konrad Borowski

10

Khoảng trắng, 3 điểm (218 ký tự)

Bạn biết nó sẽ đến.

↲___↲____↲⇥↲⇥_____↲___⇥_____⇥↲___⇥___⇥_⇥↲___⇥__⇥__⇥↲___⇥__⇥⇥⇥⇥↲___⇥_⇥_⇥_⇥
↲___⇥⇥____⇥↲___⇥⇥__⇥_⇥↲___⇥⇥_⇥__⇥↲___⇥⇥_⇥⇥⇥⇥↲___⇥⇥⇥_⇥_⇥↲↲___⇥↲_↲_↲⇥_⇥↲___
_↲⇥⇥⇥⇥__⇥↲⇥_↲↲_↲_⇥↲↲__↲↲⇥__↲↲_↲↲↲__⇥↲____↲⇥⇥⇥_↲_↲⇥___↲⇥↲__↲_↲_↲↲____↲↲↲↲

(_ = dấu cách, = tab, ↲ = dòng mới)

Đây là đoạn script được mã hóa trong base64:

CiAgIAogICAgCgkKCSAgICAgCiAgIAkgICAgIAkKICAgCSAgIAkgCQogICAJICAJICAJCiAgIAkg
IAkJCQkKICAgCSAJIAkgCQogICAJCSAgICAJCiAgIAkJICAJIAkKICAgCQkgCSAgCQogICAJCSAJ
CQkJCiAgIAkJCSAJIAkKCiAgIAkKIAogCgkgCQogICAgCgkJCQkgIAkKCSAKCiAKIAkKCiAgCgoJ
ICAKCiAKCgogIAkKICAgIAoJCQkgCiAKCSAgIAoJCiAgCiAKIAoKICAgIAoKCgo=

Và đây là chương trình được viết dưới dạng giống như trình biên dịch chương trình:

ioloop: charin  0
        push    0, 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'
ckloop: dup
        jz      out
        get     0
        sub
        jz      skip
        jump    ckloop
skip:   jz      ioloop
        jump    skip
out:    get     0
        dup
        jz      done
        charout
        jump    ioloop
done:   exit

Mùi như Acme :: Bleach với tôi. :)
tchrist

Khi tôi chuyển đổi chương trình "tượng trưng" của bạn sang Khoảng trắng, nó có lỗi cú pháp nghiêm trọng.
res

Thật ki quặc. Bạn có nhớ xóa các dòng mới thực tế trước khi thực hiện chuyển đổi không? Tôi chỉ nên bao gồm một mã hóa cơ sở64 của tập lệnh thực tế.
hộp bánh mì

1
Vâng, tôi đã làm điều đó - phiên bản cơ sở 64 của bạn giải mã chính xác những gì tôi đang sử dụng. Đây là phiên bản "STL" (tương ứng với không gian mã hóa S, T, L, Tab, Linefeed) : LSSSLSSSLTLTSSSSLSSSTSSSSSTLSSSTSSSTSTLSSSTSSTSSTLSSSTSSTTTTLSSSTSTSTSTLSSSTTSS‌​SSTLSSSTTSSTSTLSSSTTSTSSTLSSSTTSTTTTLSSSTTTSTSTLLSSSTLSLSLTSTLSSSLTTTTSSTLTSLLSLS‌​TLLSSLLTSSLLSLLLSSTLSSSLTTTSLSLTSSSLTLSSLSLSLLSSSSLLLL. Có vẻ như có hai vấn đề (trong số những vấn đề khác) là bạn đang cố gắng đẩy 0 lên ngăn xếp bằng cách sử dụng SSSLthay vì SSSSLvà cũng đang cố gắng xác định nhãn "trống" bằng cách sử dụng LSSLcho skip.
res

1
Xin lỗi vì sự chậm trễ ... Tôi vừa xác nhận rằng Edwin Brady Phiên bản 0.3 (nhị phân Linux) của trình thông dịch Whitespace thực sự chạy chương trình của bạn mà không có khiếu nại. Tôi đã sử dụng triển khai Ruby (có sẵn trên cùng một trang), điều này không cho phép cú pháp bạn đang sử dụng.
res

8

SED (10 byte riêng biệt, tổng cộng 13)

s/[aeIou]//gI

Sử dụng mẫu:

echo The quick brown fox jumps over the lazy dOg. | sed -e s/[aeIou]//gI

đầu ra:

Th qck brwn fx jmps vr th lzy dg.

Chỉ cần tự hỏi, tại sao Ilà chữ hoa? Nó hoạt động tốt khi các Iký tự là chữ thường.
Konrad Borowski

2
@GlitchMr Tôi chỉ làm vậy để nhấn mạnh rằng Inhân vật được sử dụng lại.
Cristian Lupascu

1
@tchrist Tôi không nghĩ OP đã đề cập đến nguyên âm tiếng Pháp trong bài viết của mình. Ngoài ra, tôi thích viết chương trình ngây thơ. :-)
Cristian Lupascu

3
Tôi khá chắc chắn öïbị lạm dụng trong ví dụ của bạn và hai người kia là phụ âm. Tuy nhiên, tôi nghĩ rằng bạn có một điểm. Nhưng bằng cách này, chúng tôi cuối cùng cũng có thể hỗ trợ ò̟̣̱͉̙t̝͔͖͇͙̦̝h̵̩e͎r͓̥ k̞̝̮̕i̴̘̟̬̠n̻͜d̦̰̼̰͔s͈̺̝̭ o̼f̲͘ v̳̙͔̝o͔̭̫͕͢ẃ̜͉̪̩̗e̻͔̺̬̣ĺs͖̭̮; có lẽ thậm chí ,, slǝʍoʌ uʍop pısdn ,, :-)
Cristian Lupascu

1
@ w0lf, những cách sử dụng đó öïđã từng được tìm thấy bằng tiếng Anh, mặc dù chúng gần như đã biến mất.
Joe

7

C, 22 20 19 ký tự riêng biệt.

Chữ cần thiết cho main, putchar, getchar= 12.
Dấu phân cách - (){};= 5.
Các nhà khai thác - &-= 2.

i;ii;
p(c){
    (c&ii-(-ii-ii))-(i-ii-ii-ii-ii-ii-ii)&&
    (c&ii-(-ii-ii))-(i-ii-ii-ii-ii-ii-ii-i-i-i-i)&&
    (c&ii-(-ii-ii))-(i-ii-ii-ii-ii-ii-ii-ii-(-i-i-i))&&
    (c&ii-(-ii-ii))-(-ii-ii-ii-ii-ii-ii-ii-i-i)&&
    (c&ii-(-ii-ii))-(i-ii-ii-ii-ii-ii-ii-ii-ii-(-i-i))&&
    putchar(c);
}
a(c){c-i&&n(p(c));}
n(c){a(getchar());}
main(){
    n(i---ii---ii---ii---ii---ii---ii---ii---ii---ii---ii---ii---i);
}

maingọi hành vi không xác định (quá nhiều --trong một dòng).
Tôi không quan tâm đến giá trị biểu thức và nó giảm iisố lần đúng.
Có thể được sửa chữa dễ dàng bằng cách tách các phần giảm với ;. Nhưng nó đẹp hơn rất nhiều.

Phiên bản cũ, 20 ký tự:
Trên thực tế là 21, vì tôi không nhận thấy rằng một số khoảng trắng có ý nghĩa và phải được tính, nhưng chúng có thể được thay thế bằng dấu ngoặc đơn một cách dễ dàng.

ii;iii;c;a;
main(i){
    i=c;i-=--c;
    ii=-i-i-i-i-i-i-i-i-i-i-i;
    iii=i-ii-ii-ii-ii-ii-ii-ii-ii-ii-ii;
    -(c=a=getchar())-i&&main(
        (c&=ii- -ii- -ii)- -            a&&
        -ii-ii-ii-ii-ii-ii-  i-         c&&
        -ii-ii-ii-ii-ii-ii- -i- -i- -i- c&&
        iii- -ii- -ii- -ii-  i-i-i-i-i- c&&
        iii- -ii- -ii- -ii- -i-         c&&
        iii- -ii- -ii-       i-i-i-i-   c&&
        putchar(a));
}

Có lẽ có thể được cải thiện hơn nữa, bằng cách biên dịch gcc -nostartfilesvà đổi tên mainthành _start. minđược loại bỏ (sau khi đổi tên một số biến), _sđược thêm vào. Nhưng sau đó tôi cần sử dụng exit(), trong đó thêm 3 ký tự.
Thay vì _start, bất kỳ tên nào cũng có thể được sử dụng và nó hoạt động trong Linux. Điều này cho phép đi xuống tới 18 ký tự, nhưng rất không chuẩn.


6

Perl: 8 hoặc 10 ký tự riêng biệt

s/// Giải pháp: 10 khác biệt, tổng cộng 13

Kỹ thuật sed (có mục đích; xem bên dưới) cũng luôn hoạt động theo perl và mang lại số tên của các ký tự riêng biệt (10):

s/[aeiou]//gi

Ví dụ:

$ echo 'This program will remove VOWELS. So we can speak without them.' | 
  perl -ple 's/[aeiou]//gi'
Ths prgrm wll rmv VWLS. S w cn spk wtht thm.

Đó là 10 ký tự riêng biệt, vì điều này chứng tỏ:

$ echo 's/[aeiou]//gi' | perl -nle '@s{split//}=(); print scalar keys %s'
10

Vấn đề với giải pháp sed là nó không phải/i là một phần của POSIX sed và do đó không thể mang theo được:

$ echo 'This program will remove VOWELS. So we can speak without them.' | 
  sed -e 's/[aeiou]//gi'
sed: 1: "s/[aeiou]//gi": bad flag in substitute command: 'i'

Đó là chạy trên hệ thống OpenBSD. Ngược lại, vì /ithực sự luôn là một phần của perl tiêu chuẩn, bạn có thể tin tưởng vào nó luôn ở đó. Không giống như sed.

Nếu bạn muốn bao gồm các món y lòng trong danh sách các nguyên âm, thì tất nhiên sẽ tốt hơn nếu bạn sử dụng cùng một kỹ thuật:

$ echo 'This nifty program remove any VOWELS. So we easily can speak without them.' | 
  perl -ple 's/[aeiouy]//gi'
Ths nft prgrm rmv n VWLS. S w sl cn spk wtht thm.

$ echo 's/[aeiouy]//gi' | perl -nle '@s{split//}=(); print scalar keys %s'
11

Và bây giờ là 14 nhân vật.

tr[][] giải pháp: 8 tổng 10 khác biệt

Bạn cũng có thể sử dụng tr///để loại bỏ bất cứ thứ gì nó phù hợp. Perl thậm chí có thể sử dụng y///bí danh của sed cho tr:

y/aeiou//d

hiện có 8 ký tự riêng biệt, nhưng không hoạt động bằng chữ hoa. Cuối cùng, bạn phải thêm 5 ký tự nữa để đối phó với các casemaps:

$ echo 'y/aeiouAEIOU//d' | perl -nle '@s{split//}=(); print scalar keys %s'
13

và tất nhiên đó là 15 tổng số.

Tuy nhiên, việc thêm vào y lòng vào hỗn hợp dưới dạng nguyên âm không làm tăng số lượng ký tự riêng biệt như đã làm với s///phiên bản:

$ echo 'This nifty program remove any VOWELS. So we easily can speak without them.' | 
  perl -ple 'y/aeiouy//d'
Ths nft prgrm rmv n VOWELS. S w sl cn spk wtht thm.

Vì vậy, đó vẫn chỉ là 8 bản gốc khác biệt trong tổng số 11:

$ echo 'y/aeiouy//d' | perl -nle '@s{split//}=(); print scalar keys %s'
8

EDIT : Kế toán cho Diacritics

Và những gì về đầu vào như thế Renée’s naïveténào? Đầu ra chính xác nên là tất nhiên Rn’s nvt. Đây là cách để làm điều đó, sử dụng /rcờ của v5,14 cho s///:

$ echo 'Renée’s naïveté' |
  perl5.14.0 -CS -MUnicode::Normalize -nle 'print NFD($_)=~s/[aeiou]\pM*//rgi'
Rn’s nvt

Đó là 27 nhân vật riêng biệt:

$ echo 'print NFD($_) =~ s/[aeiou]\pM*//rgi' | 
  perl -nle '@s{split//}=(); print scalar keys %s'
27

Bạn có thể cắt nó thành 26 nếu bạn có thể đảm bảo rằng bạn đang chạy ít nhất v5.10 bằng cách hoán đổi printcho say:

$ echo 'Renée’s naïveté' |
  perl -Mv5.14 -CS -MUnicode::Normalize -nlE 'say NFD($_) =~ s/[aeiou]\pM*//rgi'
Rn’s nvt

$ echo 'say NFD($_) =~ s/[aeiou]\pM*//rgi' | 
  perl -nle '@s{split//}=(); print scalar keys %s'
26

Và bạn có thể giảm xuống còn 22 nếu bạn không ngại di chuyển dấu phụ thay vì xóa chúng:

$ echo 'Renée’s naïveté' |
  perl -Mv5.14 -CS -MUnicode::Normalize -nlE 'say NFD($_) =~ s/[aeiou]//rgi'
Rń’s n̈vt́

Đó là ... thú vị để xem xét, để nói rằng ít nhất. :) Đây là số lượng riêng biệt của nó:

$ echo 'say NFD($_) =~ s/[aeiou]//rgi' | 
  perl -nle '@s{split//}=(); print scalar keys %s'
22

Chúc may mắn nhận được bất kỳ ngôn ngữ khác để đối phó với dấu phụ bằng cách sử dụng ít ký tự hơn thế này!


1

@leftaroundabout Hầu hết điều đó được khắc phục bằng cách cam kết phân tách NFKD. Người Hy Lạp không tính mặc dù họ trông giống nhau, và những chiếc xe đạp nhỏ không bị phân hủy theo quy định. Kết quả là "ɢᴏᴏᴅ ᴘnt αβουτ dcrtcs y gt thr, bvt hw bt stff lk THS", hoặc "\N{LATIN LETTER SMALL CAPITAL G}\N{LATIN LETTER SMALL CAPITAL O}\N{LATIN LETTER SMALL CAPITAL O}\N{LATIN LETTER SMALL CAPITAL D} \N{LATIN LETTER SMALL CAPITAL P}nt \N{GREEK SMALL LETTER ALPHA}\N{GREEK SMALL LETTER BETA}\N{GREEK SMALL LETTER OMICRON}\N{GREEK SMALL LETTER UPSILON}\N{GREEK SMALL LETTER TAU} dcrtcs y gt thr, bvt hw bt stff lk THS".
tchrist

Nhưng có một số nguyên âm Latin không có phân tách tương thích, chẳng hạn như ø.
dan04

5
thách thức không nói để loại bỏ các nguyên âm với dấu phụ - chỉ cần a, e, i, o, u - vì vậy Renée’s naïveténên đưa ra Rné’s nïvté.
gian hàng

2
Tại sao các nguyên âm Hy Lạp sẽ không được tính, nếu äèïóű v.v. (không phải trong [a, e, i, o, u]!) Làm gì? Hoặc Cyrillic, cho vấn đề đó (không giống vẻ ngoài, nhưng chắc chắn đủ nguyên âm).
đã ngừng quay ngược chiều

5

GolfScript (7 byte riêng biệt, tổng cộng 103)

Có rất nhiều cải tiến so với câu trả lời của w0lf mà tôi nghĩ rằng nó đủ điều kiện là một câu trả lời riêng biệt:

[9-99))--9+99))99))))))99)9+))9-9)99--)99-9+9--9+9-))99-9+9)))--9+99-9+-9+9-)99-9+9)))-)99)9-9-)))]''+-

12 byte riêng biệt, tổng cộng 13:

'aeiouAEIOU'-

Tuyệt quá! Tôi ước tôi có thể nâng bạn lên một lần nữa.
Cristian Lupascu

4

Golfscript (8 byte riêng biệt, tổng cộng 837)

[9)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 9)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 9)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 9)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 9)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 9)))))))))))))))))))))))))))))))))))))))))))))))))))))))) 9)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 9)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 9)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 9))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))]''+-

Giải trình:

  1. Chương trình tạo ra các mảng giá trị nguyên sau: [97 101 105 111 117 65 69 73 79 85](tương ứng với mã ASCII của a,e,i,o,u,A,E,I,O,U). Mỗi số được biểu diễn bằng cách đẩy vào ngăn xếp giá trị 9, theo sau là số lượng cần thiết )(toán tử gia tăng). Ví dụ: số 67được lấy bằng cách sử dụng 9và 58 )giây
  2. Sử dụng ''+, mảng được chuyển đổi thành chuỗi "a,e,i,o,u,A,E,I,O,U", đại diện cho tất cả các nguyên âm
  3. Dấu trừ ('-') sau đó được sử dụng để trừ tất cả các nguyên âm khỏi chuỗi nguồn

8 nhân vật độc đáo đã được sử dụng: [, ], 9, ), +, -, '(space)


4

Không thể đọc được (2 khác biệt, tổng cộng 2666)

Vì mọi người đều đăng các tấm bạt Turing, tôi nghĩ tôi sẽ sử dụng cái này. Nó không phải là một cái rất nổi tiếng nhưng nó tồn tại ( http://esolangs.org/wiki/Unreadable ) và nó chỉ có hai ký tự.

'""""'""""'""""'""""""'"""'""'""'""'""'""'""'""'""'""'"""'""""'"""""'"""""""'"""'""""'"""
"'""""'""""""'"""'""""""""'"""""""'"""'""""""'""'"""'""'""'""'""'""'""'"""""""'""'"""'"""
"'""""""'""'""'"""'""'""'""'""'""'""'""'"""""""'""'""'"""'""""""'""'""'""'"""'""'""'""'""
'""'""'""'""'"""""""'""'""'""'"""'""""'""""'""""""'""'""'""'""'"""'""'""'""'""'""'""'""'"
"'""'"""""""'""'""'""'""'"""'""""""'""'""'""'""'""'"""'""'""'""'""'""'""'""'""'""'""'""""
"""'""'""'""'""'""'"""'""""'""""""'""'""'""'""'""'""'"""'""'""'""'""'""'""'""'""'""'""'""
'"""""""'""'""'""'""'""'""'"""'""""""'""'""'""'""'""'""'""'"""'""'""'""'""'""'""'""'""'""
'""'""'""'"""""""'""'""'""'""'""'""'""'"""'""""""'""'""'""'""'""'""'""'""'""'""'"""'"""""
"""'""""""""'"""""""'""'""'""'""'""'""'""'"""'""""'""""""'""'""'""'""'""'""'""'""'""'"""'
""'""'"""""""'""'""'""'""'""'""'"""'""""'""""""'""'""'""'""'""'""'""'""'"""'""""""""'""""
""""'""""""""'""""""""'"""""""'""'""'""'""'""'""'"""'""""""'""'""'""'""'""'""'""'"""'""'"
"'"""""""'""'""'""'""'""'"""'""""'""""'""""""'""'""'""'""'""'""'"""'""""""""'""""""""'"""
""""'""'""'""'""'""'"""'""""'""""""'""'""'""'""'""'"""'""""""""'""""""""'""""""""'"""""""
"'"""""""'""'""'""'""'"""'""""""'""'""'""'""'"""'"""""""'""'""'""'"""'""""'""""'""""""'""
'""'""'"""'""'""'""'""'"""""""'""'""'"""'""""""'""'"""'""'""'""'""'""'""'"""""""'""'"""'"
"""'""""""'"""'""'""""""""""'"""""'"""""""'"""'""""'""""'""""""'""'""'""'""'""'""'""'""'"
"'""'""'"""'""'""'""'""'""'""'""'""'""'""'"""'""""""'""'""'""'""'""'""'""'""'""'""'""'""'
"""'""""""""'"""'""""'"""""""""'""""""""'"""""""'""'""'""'""'""'""'""'""'""'""'""'"""'"""
""'""""""""'"""""""'""'""'""'""'""'""'""'""'""'""'""'"""'""""'""""'""""""'""'""'""'""'""'
""'""'""'""'""'""'""'""'"""'"""""""'"""'""""""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'
"""'"""""""'"""""""'""'""'""'""'""'""'""'""'""'""'""'"""'""""'"""""""""'"""""""'""'""'""'
""'""'""'""'""'""'""'""'""'""'""'"""'"""""'"""""""'""'""'""'""'""'""'""'""'""'""'""'""'""
'""'"""'""""'""""""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'"""'""""""""'"""""""'""'""'
""'""'""'""'""'""'""'""'""'""'""'""'"""'""""""'""'""'""'""'""'""'""'""'""'""'""'""'""'"""
'""""""""'"""""""'""'""'""'""'""'""'""'""'""'""'""'""'""'"""'"""'""""'"""""""""'"""""""'"
"'""'""'""'""'""'""'""'""'""'""'""'""'"""'""""""'""'""'""'""'""'""'""'""'""'""'""'""'"""'
""'"""""""'""'""'""'""'""'""'""'""'""'""'""'""'"""'"""'""""""'""'""'""'""'""'""'""'""'""'
""'""'"""'""""""""'"""""""'""'""'""'""'""'""'""'""'""'""'""'"""'"""'""""'"""""""""'""""""
""'""""""""'""""""""'""""""""'""""""""'""""""""'""""""""'""""""""'""""""""'"""""""'""'""'
""'""'""'""'""'""'""'""'""'""'"""'"'""""""""'"""""""'"""'"""'""""""'"""'""'""""""""""

(+1) Rất vui ... Tôi đã xác minh nó với thông dịch viên của bạn . Nó vẫn được coi là "không được chấp thuận", mặc dù người tạo ra ngôn ngữ này đã chấp thuận nó ? (Có vẻ như một sự xấu hổ rằng ngôn ngữ không được định nghĩa sử dụng hai khoảng trắng ký tự thay vì đơn và hai dấu ngoặc kép; o)))
res

@res Điều đó không khó để thực hiện. Chỉ cần chọn hai khoảng trắng và sửa đổi trình thông dịch để nó thay thế các khoảng trắng bằng dấu ngoặc đơn và dấu ngoặc kép lúc đầu!
ComFalet

2

VBA - 25 22 byte riêng biệt (tổng cộng 120)

Tôi biết điều này sẽ không chiến thắng với rất nhiều byte khác nhau, nhưng đây là VBA.

(space), (newline), ", ,, (, ), =, a, b, c, d, e, E, I, l, n, O, p, R, S, u,1

Sub S(u)
u=Replace(Replace(Replace(Replace(Replace(u,"u","",,,1),"O","",,,1),"I","",,,1),"e","",,,1),"a","",,,1)
End Sub

* ,,,1cho phép bỏ qua trường hợp. ( 1đại diện cho hằng số vbTextCompare)


Bạn đã không đếm Etrong End Sub. Nhưng khá hay, vì nó cơ bản.
đã ngừng quay ngược chiều

@leftaroundabout Cảm ơn! Hoàn toàn đúng về E, và tôi đã sửa. Tôi nghĩ rằng tôi đã quá lo lắng về thịt của Sub. ;-)
Gaffi

Trên thực tế, vì VBA là ngôn ngữ hỗ trợ tự động định dạng, bạn có thể thay đổi câu trả lời của mình thành trường hợp thấp hơn (hoặc trên) và VBA sẽ tự sửa lỗi này và vì có thể chấp nhận rằng các ngôn ngữ tự động định dạng có thể được xem xét trước khi xảy ra tự động định dạng, sẽ có nghĩa là bạn có thể thả ehoặcE
Taylor Scott

bạn có thể định cấu hình chức năng này thành chức năng cửa sổ ngay lập tức như ?Replace(Replace(Replace(Replace(Replace(cells(1,1),"u","",,,1),"O","",,,1),"I","",,,1),"e","",,,1),"a","",,,1)với số lượng 18 byte riêng biệt ?Replace(s1,)"uOIvà tổng số 111 byte
Taylor Scott

1

Python 3.x, 19 ký tự riêng biệt, tổng cộng 62

print(''.join(x for x in input() if x.lower() not in 'aeiou'))

Điều đó không hoạt động đúng trên các đầu vào như Renée’s naïveté, bạn biết.
tchrist


1

K, 29. (18 byte riêng biệt)

{i@&~(i:0:0)in(_i),i:"AEIOU"}

các byte riêng biệt: {@ & ~ (: 0) trong _, "AEIOU}

k){i@&~(i:0:0)in(_i),i:"AEIOU"}`
Hello WoOOrld
"Hll Wrld"

1

ASM - 6 ký tự riêng biệt 520 ký tự nguồn (MsDOS .com)

Lắp ráp bằng A86

db 10110100xb
db 00000110xb
db 10110010xb
db 11111111xb
db 11001101xb
db 00100001xb
db 01110101xb
db 00000001xb
db 11000011xb
db 10001010xb
db 11010000xb
db 10111110xb
db 00011101xb
db 00000001xb
db 10111001xb
db 00001010xb
db 00000000xb
db 01000110xb
db 00101010xb
db 00000100xb
db 01110100xb
db 11101010xb
db 11100010xb
db 11111001xb
db 10110100xb
db 00000110xb
db 11001101xb
db 00100001xb
db 11101011xb
db 11100010xb
db 01000001xb
db 00000100xb
db 00000100xb
db 00000110xb
db 00000110xb
db 00001100xb
db 00000100xb
db 00000100xb
db 00000110xb
db 00000110xb

Chỉ cần viết ngôn ngữ máy, nó sẽ là hai ký tự riêng biệt.
ugoren

1

MATL, 8 byte (tất cả khác biệt)

t13Y2m~)

Dùng thử trên MATL Online

Chỉ là một môn đánh gôn thẳng, thực sự không tìm thấy bất kỳ mẹo nào để tái sử dụng các ký tự để giảm số lượng độc nhất.

13Y2là một nghĩa đen có chứa aeiouAEIOU.

Lấy một bản sao tcủa chuỗi đầu vào, tạo một mảng logic (boolean) cho biết các chữ cái của đầu vào không phải là ( ~) mcủa chữ đó và index ( )) ở những vị trí đó, để trả về một mảng chỉ các ký tự không nguyên âm.


0

PHP - 30 byte riêng biệt

<?=preg_replace('/[aeiou]/i','',fgets(STDIN));

1
Bạn không thể thay đổi /[aeiou|AEIOU]/thành /[aeiou]/i? Ngoài ra, mã của bạn cũng gây ra |biến mất.
Konrad Borowski

0

bash 26 khác biệt, tổng cộng 37

c=$(cat -)
echo "${c//[aeiouAEIOU]/}"

đã sắp xếp

""$$()-///=AEIOU[]aacccceehiootu{}"

scala> code.toList.distinct.length
res51: Int = 26

scala> code.length
res52: Int = 37

"
  ""$$()-///=AEIOU[]aacccceehiootu{}"


scala> code.distinct.sorted 
res56: String = 
"
 "$()-/=AEIOU[]acehiotu{}"

Kết quả (bảo tồn nguồn cấp dữ liệu):

echo "This program will remove VOWELS.
So we can now speak without them." | ./cg-6025-remove-vowels.sh
Ths prgrm wll rmv VWLS.
S w cn nw spk wtht thm.

Đối với tr, không rõ cách tính: '-d aeiouAEIOU' là 10 hoặc 13:

echo "This program will remove VOWELS.
So we can now speak without them." | tr -d aeiouAEIOU

Tôi đã cân nhắc sử dụng tr, nhưng tôi đã kết luận rằng vì nó không phải là ngôn ngữ lập trình nên nó sẽ phải được bọc trong một cái vỏ, vì vậy nó sẽ đếm toàn bộ văn bản tr -d aeiouAEIOUcho 15.
Peter Taylor

16 <! - char-ngưỡng-thể dục dụng cụ ->
người dùng không biết

15 khác biệt, 16 tổng số.
Peter Taylor

0

Con trăn (23)

Một ai đó đã phải làm chuyện đó.

print filter(lambda x:x not in'aeiou',raw_input())

3
Điều đó có "chỉ" 23 ký tự riêng biệt. Nhưng không làm việc trên các nguyên âm chữ hoa.
đã ngừng quay ngược chiều

Bằng cách thêm một ký tự mới và thay đổi biến từ x thành c hoặc s, bạn có thể sử dụng chữ thường () (hoặc chữ hoa) và xử lý cả các nguyên âm chữ hoa.
fabikw

0

F # 105 121 91 ký tự

Console.ReadLine()|>Seq.filter(fun c->not("aeiouAEIOU".Contains(c)))|>Seq.iter(printf"%c")

Hmmm ... Tôi chỉ nhận thấy rằng mã này sẽ hoạt động trong Linqpad nhưng không hoạt động trong Visual Studio. Và vì tôi không cảm thấy muốn bỏ phiếu đóng góp của riêng mình, tôi sẽ để nó ở đây với bình luận này cho đến khi tôi nhận ra điều gì sai với nó.
Smetad Anarkist

0

Công thức Excel - 19 byte riêng biệt (tổng cộng 196)

=, S, B, T, (, ), ,, ", a, e, i, o, u, A, E, I, O, U,1

Cell A1: <Value>
Cell B1: =SUBSTITUTE(SUBSTITUTE(A1,"a",""),"e","")
Cell C1: =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B1,"i",""),"o",""),"u",""),"A",""),"E",""),"I",""),"O",""),"U","")

* Đây thực sự là quá nhiều hàm lồng nhau để hoạt động trong Excel 2003, nhưng khái niệm là có.

Chia công thức thành hai ô đạt được hiệu quả mong muốn. - Kết quả là trong C1.



0

K (oK) , 16 byte, 14 khác biệt

Giải pháp:

^[;v,_v:"AEIOU"]

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

Giải trình:

Sử dụng ngoại trừ ( ^) để lọc các nguyên âm.

^[;v,_v:"AEIOU"] / the solution
^[;            ] / except (^) projection
      v:"AEIOU"  / save vowels as v
     _           / lowercase (_), "AEIOU" => "aeiou"
    ,            / join (,)
   v             / uppercase vowels
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.