Ot wes thi bist uf tomis


36

Tôi chỉ thích cái cypher đơn giản này, thật thú vị khi đọc những từ không hoàn toàn dễ đọc của con người và lấp đầy những khoảng trống ...

Ot wes thi bist uf tomis, ot wes thi wurst uf tomis, 
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss, 
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty, 
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss, 
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor, 
wi hed ivirythong bifuri as, wi hed nuthong bifuri as, 
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey – 
on shurt, thi piroud wes su fer loki thi prisint piroud, 
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid, 
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.

Các quy tắc là siêu đơn giản:

  • Chấp nhận một số văn bản làm đầu vào (ký tự ascii, chữ in hoa / in thường và dấu chấm câu).
  • Đối với mỗi nguyên âm, xoay nó sang nguyên âm tiếp theo hoặc quay lại bắt đầu.
    • a => e
    • e => tôi
    • tôi => o
    • o => u
    • u => a
  • Nguyên âm chữ hoa viết hoa chữ thường, nguyên âm chữ thường viết hoa chữ thường.
  • Xuất văn bản sau khi chuyển đổi.
  • Không cần phải hỗ trợ dấu.
  • Tất cả các nhân vật khác sẽ không thay đổi.
  • Cố gắng làm điều đó với số lượng byte nhỏ nhất.
  • Bất kỳ ngôn ngữ cũ nào bạn thích.

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

It was the best of times, it was the worst of times,
it was the age of wisdom, it was the age of foolishness,
it was the epoch of belief, it was the epoch of incredulity,
it was the season of light, it was the season of darkness,
it was the spring of hope, it was the winter of despair,
we had everything before us, we had nothing before us,
we were all going direct to heaven, we were all going direct the other way –
in short, the period was so far like the present period,
that some of its noisiest authorities insisted on its being received,
for good or for evil, in the superlative degree of comparison only.

Ngoài:

Ot wes thi bist uf tomis, ot wes thi wurst uf tomis, 
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss, 
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty, 
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss, 
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor, 
wi hed ivirythong bifuri as, wi hed nuthong bifuri as, 
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey – 
on shurt, thi piroud wes su fer loki thi prisint piroud, 
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid, 
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.

Trong:

The quick brown fox jumps over the lazy dog.

Ngoài:

Thi qaock bruwn fux jamps uvir thi lezy dug.

Trong:

Home is where the heart is.

Ngoài:

Humi os whiri thi hiert os.

Trong:

Boaty McBoatface

Ngoài:

Buety McBuetfeci

Trong:

AEIOUaeiou

Ngoài:

EIOUAeioua

Trong:

Programming Puzzles And Code Golf

Ngoài:

Prugremmong Pazzlis End Cudi Gulf


4
Hừm. Tiếng Anh cổ?
iammax

10
Vẫn dễ đọc hơn Beowulf.
Smeato

4
Trông giống như một dịch giả kiwi đối với tôi.
Magoo

1
Tôi thích cách mà Evil Evil, khi mật mã đến với iv ivol, được phát âm một cách hiệu quả theo cách tương tự.
Enrico Borba

Câu trả lời:



22

MS-SQL, 51 byte

Hoạt động trên SQL 2017 trở lên:

SELECT TRANSLATE(v,'AEIOUaeiou','EIOUAeioua')FROM t

Chức năng mới TRANSLATEthực hiện thay thế nhân vật riêng lẻ, vì vậy rất phù hợp cho thử thách này.

Đầu vào là thông qua một bảng t có sẵn với cột varar v , theo quy tắc IO của chúng tôi .

Trong trường hợp này, bảng phải được tạo bằng cách sử dụng đối chiếu phân biệt chữ hoa chữ thường , bằng cách chạy trên máy chủ phân biệt chữ hoa chữ thường hoặc bằng cách sử dụng COLLATEtừ khóa (không được tính vào tổng số ký tự):

CREATE TABLE t(v varchar(max) COLLATE Latin1_General_CS_AS)

EDIT : SSMS có thể cắt bỏ đoạn trích dẫn dài ở trên khi trả kết quả trong cửa sổ "kết quả thành văn bản", đây là cài đặt máy khách, không phải là lỗi trong chương trình của tôi .

Để khắc phục, hãy đi tới Tools > Options > Query Results > SQL Server > Results to Textvà tăng "Số lượng ký tự tối đa được hiển thị trong mỗi cột."


1
Tôi thực sự bị sốc khi SQL thậm chí gần như cạnh tranh cho điều này. Ngoài ra, đó là một chức năng tuyệt vời! Cảm ơn đã nói với chúng tôi :)
Nic Hartley

@NicHartley Vâng, họ dường như thêm một vài chức năng hữu ích cho mỗi phiên bản. Bạn cũng có thể lồng nó với REPLACEmột số thủ thuật: REPLACE(TRANSLATE(v,'1234567890','xxxxxxxxxx'),'x','')ví dụ như loại bỏ tất cả các chữ số khỏi một chuỗi. Vẫn dài, nhưng ngắn hơn nhiều so với 10 lồng nhau REPLACE.
BradC


14

Haskell , 52 byte

(a:b)!c|a/=c=b!c|1>0=b!!0
a!b=b
map("aeiouaAEIOUA"!)

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

Lynn đã tiết kiệm cho tôi hai byte bằng cách chỉ ra nó !!0ngắn hơn head.

Giải trình

Nếu bạn chưa bao giờ được mã hóa trong Haskell, điều này có thể sẽ trông giống như một đống jibberish. Vì vậy, trước tiên hãy để ungolf nó và sau đó phá vỡ nó:

(a:b)!c
 |   a/=c   = b!c
 |otherwise = b!!0
a!b=b
map("aeiouaAEIOUA"!)

Đầu tiên chúng ta có một hàm !, trong đó có một chuỗi svà một ký tự c. Khớp mẫu đầu tiên của chúng tôi bắt được chấp nhận đầu vào nếu chuỗi không trống. Nếu chuỗi không trống, chúng ta so sánh ký tự đầu tiên của nó với c. Nếu ký tự đầu tiên không bằng cchúng ta ném nó và gọi !lại với phần còn lại của chuỗi và c. Nếu nó bằng nhau, chúng ta trả về ký tự thứ hai trong chuỗi.

Kết hợp mẫu tiếp theo của chúng tôi sẽ bắt được chuỗi trong tất cả các trường hợp khác, đó là nếu chuỗi trống. Trong trường hợp này, chúng tôi chỉ cần trở lại c.

Tất cả trong tất cả các chức năng này có một ký tự cvà một chuỗi svà trả về ký tự sau lần xuất hiện đầu tiên của cin s. Nếu chúng ta vượt qua điều này với aeiouaAEIOUAnó sẽ thực hiện mật mã của chúng ta trên một ký tự duy nhất. Để làm cho toàn bộ chức năng của chúng ta, chúng ta phải ánh xạ chuỗi này qua chuỗi.


12

Võng mạc ,10 9 8 byte

T`uo`vVA

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

Đã lưu 1 byte nhờ Neil! Và một byte khác nhờ Martin!

Phiên bản mới của võng mạc có các lớp nguyên âm, làm cho kết quả ngắn hơn một chút. Việc phiên âm cũng sử dụng lớp "khác". Vì vậy, tolớp học trông giống như "aeiouAEIOUA" trong khi fromlớp học trông giống như "uaeiouAEIOUA"

Điều này không gây ra bất kỳ vấn đề nào vì uánh xạ thứ hai Asẽ không bao giờ được thực hiện vì uđã được ánh xạ tới a.


9 byte : T`_o`uvUV.
Neil

Đây là một câu trả lời ngắn đáng chú ý!
AJFaraday

@Neil thông minh, cảm ơn! Tôi nghĩ rằng đặt một bộ _trong từ sẽ xử lý nó theo nghĩa đen, nhưng có vẻ như nó không làm điều đó.
FryAmTheEggman

3
Bạn có thể tắt thêm một lần nữa, nhưng tôi dường như không thể buộc Stax, thật không may: tio.run/##HYnBDoIwEAXv/ Lỗi
Martin Ender

@MartinEnder Cảm ơn! Đó là một thiết lập thông minh, pha trộn giữa hai. Tôi chưa thử sử dụng Ynhiều nên tôi sẽ tiêm vào ngày mai.
FryAmTheEggman

9

Perl 5 + -p, 24 23 byte

y;AEIOUaeiou;EIOUAeioua

Dùng thử trực tuyến

-1 byte nhờ @DomHastings


1
Chúng tôi không được tính -plà +1 nữa, thay vào đó chúng tôi cho rằng câu trả lời này nằm trong "Perl 5 + -p".
Erik the Outgolfer

1
Điều này cũng hoạt động trong sed
Kritixi Lithos

1
Nếu bạn sử dụng ;làm dấu phân cách, bạn có thể lưu một byte!
Dom Hastings

đã cập nhật, @Cowsquack không còn nữa
Nahuel Fouilleul

6

Python 3, 62 byte

lambda x:x.translate(str.maketrans('aeiouAEIOU','eiouaEIOUA'))

Tạo một bảng dịch (từ điển) với phương thức strtĩnh str.maketrans. Dịch các nhân vật có liên quan đến nhân vật đích của họ.


Trường hợp này thực hiện I / O?
Revierpost

@reinierpost Đó là một chức năng. Đầu vào là thông qua xtham số. Trong python, các hàm lambda không cần câu lệnh return.
mypetlion

6

C, 85 76 67 65 64 byte

f(char*c){for(;*c;)putchar(1[index("AEIOUAaeioua",*c++)?:c-2]);}

Câu trả lời Java của Kevin Cruijssen . Hãy thử trực tuyến tại đây .

Cảm ơn Kevin Cruijssen vì đã chơi golf 9 byte, đến Christoph để chơi golf 11 byte và chơi bóng trần để chơi golf 1 byte.

Phiên bản bị đánh cắp:

f(char* c) { // function taking a char array as parameter and implicitly returning an unused int
    for(; *c ;) // loop over the input
        putchar(1 [index("AEIOUAaeioua", * c++) ?: c-2]); // find the first pointer to the current char in the vowels string, NULL if not present; if it's not NULL, print the next vowel, otherwise just print the char
}

1
Có vẻ là một phần mở rộng không có tiêu chuẩn từ gcc. Tôi biết nó từ php và chỉ đơn giản là thử nó.
Christoph

1
@Christoph Tôi thích cách sử dụng đệ quy của bạn, nhưng tôi không chắc chúng ta có thể tạo ra một dấu vết \0. Ngoài ra, điều này không hoạt động khi được biên dịch với clang
OOBalance

1
@Christoph: Tôi tò mò không biết hành vi không xác định được ở đâu, vì vậy tôi đã gỡ lỗi phiên bản tiếng kêu, sau khi gỡ rối thêm một số lần nữa. const char *res = strchr("AEIOU...", 0)trả về một con trỏ tới terminator trong chuỗi ký tự. putchar(res[1])đọc qua cuối chuỗi bằng chữ. Với gcc, rõ ràng là tình cờ tìm thấy một byte 0 khác và nó hoạt động, nhưng với tiếng kêu, nó nhận được một 73 'I'(có lẽ từ mainchuỗi ký tự, "Đó là ...", nhưng tôi đã không kiểm tra mã asm). Vì vậy, putcharkhông trả về 0 và cuối cùng chúng tôi segfault khi *c++đọc một trang chưa được ánh xạ.
Peter Cordes

2
@PeterCordes yeah tôi đã tìm hiểu về nó ở đây sau khi có một sự nghi ngờ. Dù sao ở đây thêm 2 byte được lưu f(char*c){for(;*c;)putchar(1[strchr("AEIOUAaeioua",*c++)?:c-2]);}. Đó là tất cả cho đến bây giờ tôi đoán.
Christoph

1
@Rogem Vì tính chất giao hoán của phép cộng , a[b]==*(a+b)==*(b+a)==b[a]. Do đó1[...]==(...)[1]
trần mèo



5

Python 2 , 79 68 67 byte

-1 byte nhờ @ArnoldPalmer

V='uaeiouAEIOUA'
print''.join((V[1:]+c)[V.find(c)]for c in input())

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


67 byte . Ngoài ra, xin lỗi nếu bạn bị ngập trong thông báo, tôi đã không đăng bình luận trong một thời gian và quên cách thực hiện.
Arnold Palmer

@ArnoldPalmer Cảm ơn! Không sao, tôi đi vắng và tất cả đều nhớ tôi: D
Dead Possum



4

Bình thường, 17 byte

em=.rQdrB"aeiou"1

Hãy thử nó ở đây

em=.rQdrB"aeiou"1
 m                  For each string...
       rB"aeiou"1   ... in ['aeiou', 'AEIOU']...
  =.rQd             ... cyclically rotate the characters in the input.
e                   Take the last.


4

Java 10, 97 87 byte

s->{for(var c:s){var t="AEIOUAaeioua"+c+c;System.out.print(t.charAt(t.indexOf(c)+1));}}

-10 byte sau khi được truyền cảm hứng từ câu trả lời JavaScript của @Arnauld (phiên bản 60 byte của anh ấy) .

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

Giải trình:

s->{                         // Method with character-array parameter and no return-type
  for(var c:s){              //  Loop over the input characters
    var t="AEIOUAaeioua"     //  Temp-String containing the order of vowels 
                             //  (including additional 'A' and 'a'),
          +c+c;              //  appended with two times the current character
    System.out.print(        //  Print:
      t.charAt(              //   The character in String `t` at index:
         t.indexOf(c)+1));}} //    The (first) index of the current character in `t` + 1

4

05AB1E , 14 13 11 byte

žMDÀ‡žMuDÀ‡

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


1
Bạn có thể lưu hai byte chỉ bằng cách lấy đầu vào là một chuỗi nhiều dòng, do đó không cần cho |»: Thử trực tuyến: 11 byte .
Kevin Cruijssen

@KevinCruijssen Cảm ơn! Có phải đó là thứ đã được sửa trong bản phát hành 05AB1E gần đây không?
Kaldo

Không có ý kiến ​​tbh. Chỉ bắt đầu 05AB1E kể từ khoảng đầu năm nay. Bạn có thể hỏi @Adnan trong trò chuyện 05AB1E khi tính năng được thêm vào nếu bạn muốn biết.
Kevin Cruijssen


3

APL + THẮNG, 55 byte

Lời nhắc cho chuỗi đầu vào:

i←(10≥n←'AEIOUaeiou'⍳s)/⍳⍴s←⎕⋄s[i]←'EIOUAeioua'[n~11]⋄s

3

Quai bị, 38 byte

R T W $TR(T,"AEIOUaeiou","EIOUAeioua")

Quai bị thường không thêm lợi nhuận vận chuyển, vì tôi không thấy yêu cầu tách đầu vào khỏi đầu ra, nó trông hơi lạ khi chạy lần đầu. Ví dụ: đầu ra cho trường hợp thử nghiệm cuối cùng trông như thế này:

Programming Puzzles And Code GolfPrugremmong Pazzlis End Cudi Gulf

Nếu bạn muốn thêm lợi nhuận vận chuyển, hãy thêm hai byte:

R T W !,$TR(T,"AEIOUaeiou","EIOUAeioua")

3

Vim + tpope / vim-bãi bỏ , 30 byte

:%S/{a,e,i,o,u}/{e,i,o,u,a}/g<cr>

Giải pháp thay thế, cũng 30 byte:

Oe,i,o,u<esc>|D:%s/{a,<C-r>"}/{<C-r>",a}/g

Theo meta , câu trả lời vim có thể sử dụng các plugin không có hình phạt byte. Đây không phải là một câu trả lời vim, mà là một câu trả lời vim + bãi bỏ .


Abolish là một plugin cực kỳ hữu ích. Phần này của README mô tả độc đáo cách hoạt động của lệnh này ( Subvertlệnh).


3

CJam , 29 19 byte

q"aeioua"_eu+_1m<er

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

-10 byte nhờ @Peter Taylor

Giải trình:

q                       # take all input
 "aeioua"               # push vowel pairs
         _eu            # duplicate, uppercase
            +_          # concatenate, duplicate again
              1m<       # rotate left by 1
                 er     # transliterate

Mặc dù câu hỏi không cụ thể về đầu vào, tôi nghĩ có lẽ bạn nên sử dụng qhơn là llấy đầu vào. Trường hợp thử nghiệm đầu tiên dường như là đa dòng. Ngoài ra, bạn có thể rút ngắn "eioua"để _1m<. Trên thực tế, bạn có thể đi xa hơn và chơi gôn nàyq"aeioua"_eu+_1m<er
Peter Taylor

3

AutoHotkey , 24 byte

AuotHotkey tự động thay thế các chữ cái theo cách phân biệt chữ hoa chữ thường.

a::e
e::i
i::o
o::u
u::a

2

PHP, 90 byte

Dùng thử trực tuyến

function f($s){echo strtr($s,array_combine(str_split(UuAaEeIiOo),str_split(AaEeIiOoUu)));}

Giải trình

function f($s){
 echo strtr(
       $s,                          #The string to operate
       array_combine(               #combining arrays
            str_split(UuAaEeIiOo),  #splitting this strings
            str_split(AaEeIiOoUu))
              # With array combine php creates an array like
              # ["U"=>"A", "a"=>"e"....and so on]
              # strtr can replace strings in a string, using an array with 
              # the values to replace and with what replace each value.
 );
}

75 byte nếu chạy bằng php -rcách sử dụng$argv

<?=strtr($argv,array_combine(str_split(UuAaEeIiOo),str_split(AaEeIiOoUu)));


2

str , 18 byte

[aeiouaAEIOUA]#D#U

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

Giải trình

                       implicit: over each character of the input:
[aeiouaAEIOUA]#D#U
[            ]         push this string
              #D       set this to the operation domain
                #U     set the charcter to the next character in the domain

2

PHP, 38 byte

Khá đơn giản, không sáng tạo lắm, sử dụng strtrđể thay thế các nguyên âm:

<?=strtr($argn,aeiouAEIOU,eiouaEIOUA);

Chạy với echo '<input>' | php -nF <filename>hoặc thử trực tuyến .


Điều này không cho rằng đầu vào được gán cho biến được xác định trước argn? Nếu vậy thì điều đó không hợp lệ; thay vào đó, bạn cần truyền chuỗi như một đối số và sử dụng $argv1].
Shaggy

2
@Shaggy Không, nếu bạn chạy nó với -Fcờ, thì nó hoạt động với đầu vào trên dòng lệnh. Từ các tài liệu PHP về các tùy chọn : -F --process-file PHP file to execute for every input line. Added in PHP 5.Việc xác định biến trực tuyến Dùng thử chỉ vì một số người không cài đặt PHP cục bộ và tôi không thể làm cho -Fcờ hoạt động trong TIO.
Davіd

1
Cảm ơn, @David - đó là "cái gì đó mới" của tôi cho PHP ngày hôm nay :)
Shaggy

2

q / kdb +, 36 33 byte

Dung dịch:

{(v,2#x)1+(v:"aeiouaAEIOUA")?x}@'

Ví dụ:

q){(v,2#x)1+(v:"aeiouaAEIOUA")?x}@'"AEIOUaeiou"
"EIOUAeioua
q){(v,2#x)1+(v:"aeiouaAEIOUA")?x}@'"Programming Puzzles And Code Golf"
"Prugremmong Pazzlis End Cudi Gulf"

Giải trình:

Chỉ ra chỉ số nguyên âm, thêm một để đẩy tiếp theo và lập chỉ mục. Vẫn nghĩ cách tiếp cận này có thể được cải thiện đáng kể ...

{(v,2#x)1+(v:"aeiouaAEIOUA")?x}@' / the solution
{                             }@' / apply lambda to each character of input
                            ?x    / look up x in...
          (                )      / do together
             "aeiouaAEIOUA"       / lookup list
           v:                     / save as v
        1+                        / add one
 (     )                          / do together
    2#x                           / take 2 copies of x
  v,                              / prepend v

Tiền thưởng:

Giải pháp ** 36 byte (()) cũ của tôi mà tôi nghĩ là khá tuyệt, nhưng cần phải đánh xuống các danh sách để làm cho nó cạnh tranh:

ssr/[;"uoiea%UOIEA%";"%uoiea%UOIEA"]

2

Than , 35 byte

UT≔AUOIEAauoieaσF¹¹⊞υ➙§σ⊕ι§σι▷SR⟦Sυ

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

Phương pháp ngây thơ.

Giải trình:

UT                                         Set trim option to on, so output won't be a rectangle
    ≔AUOIEAauoieaσ                          Assign "AUIOEAauioea" to s
                   F¹¹                      For i (ι) from 0 to 10
                       ⊞υ                   Push to u (initially empty list)
                          ➙                 Rule of:
                            §σ⊕ι            S[i + 1]
                                 §σι         to S[i]. This is so a->A gets overwriteen by a->e
                                    ▷SR⟦Sυ  Replace input as string using u (now a list of rules)

2

PHP , 76 byte.

$s=strtr($s,array_combine(str_split("aeiouAEIOU"),str_split("eiouaEIOUA")));

Kiểm tra nó ra!

Đây là lần ngắn nhất tôi có thể làm điều này trong PHP.

$s = //overwrite $s variable ($s should be a defined string or input)
    strtr(  //strtr replaces key => value pairs from arrays in a string
        $s, //the string we are converting
        array_combine( //create an array with key value pairs, key should be original vowel letter and value should be it's replacement
            str_split("aeiouAEIOU") //turn vowels (lower and upper) into an array
            ,str_split("eiouaEIOUA") //turn vowel replacements into an array
        )
    );
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.