deRpiFy tHe sTriNg! [đóng cửa]


8

yOu wiLl bE giVen A sTriNg wHich cOnsiSts oF pRintAble asCii cHarActErs.

yOu iTeraTe tHrougH thE sTrIng tHen chAnge rAndOM (uNifoRm, 50% cHanCe uPPercAse) lEtteRs cho uPPercAse aNd eVerytHing

đó là nó.

(xin lỗi vì dấu câu, đó là khái niệm của câu hỏi)

Phiên bản dễ đọc:

Bạn sẽ được cung cấp một chuỗi bao gồm các ký tự ASCII có thể in được.

Bạn lặp qua chuỗi và thay đổi các chữ cái ngẫu nhiên (thống nhất, 50% cơ hội chữ hoa) thành chữ hoa và mọi thứ khác thành chữ thường.

đó là nó.

exaMplEs

iNpuT => pOssiBle oUtPUt
Programming puzzles and Code Golf => pRogRaMMiNg pUzzlEs aNd coDe goLf
dErpity deRp derP => deRpiTy dErp DerP
CAAAPSLOOOCK => cAAapslOoocK
_#$^&^&* => _#$^&^&*

2
"Ngẫu nhiên" có nghĩa là gì chính xác? Có thể có hai chữ in hoa liên tiếp (trường hợp thử nghiệm của bạn không có cấu hình như vậy)? Tôi muốn nói rằng câu hỏi này chưa được xác định rõ ở trạng thái hiện tại, nhưng tôi sẽ không bỏ phiếu cho nó. Hãy xác định hai điều này.
HyperNeutrino

Thời gian% 2 có được phép cho giả danh?
fnɛtɪk

@ fəˈnɛtɪk Chắc chắn (nếu là đồng phục)
Matthew Roh

2
bạn nói ASCII có thể in được, nhưng các trường hợp thử nghiệm của bạn chỉ bao gồm các ký tự chữ cái. Chương trình có thể xử lý các ký tự không phải là chữ cái hay chúng ta có thể mong đợi đầu vào hoàn toàn là chữ cái không?
MildlyMilquetoast

5
Tôi nghĩ rằng hầu hết các câu trả lời hiện tại cũng cho rằng quyết định này là độc lập cho mỗi chữ cái, nhưng đó không phải là câu hỏi. Hiện tại tôi nghĩ rằng về mặt kỹ thuật nó sẽ tương thích với thông số kỹ thuật để viết một cái gì đó dọc theo dòng (mã giả)s=>rand()%2?s.upper():s.lower()
Peter Taylor

Câu trả lời:


10

C - 65 byte

Khá tốt cho một ngôn ngữ chính!

main(c){while((c=getchar())>0)putchar(isalpha(c)?c^rand()&32:c);}

Sử dụng XOR để lật ngẫu nhiên bit 0x20cho mỗi ký tự chữ cái. Chương trình giả định bộ ký tự ASCII và đó EOF < 0.

Mẫu chạy trên nguồn riêng của nó!

$ main < main.c
MaIN(c){WhILe((C=GETChAr())>0)pUtCHaR(iSALpha(C)?C^rANd()&32:C);}

Rất đê tiện.


1
"Khá tốt cho một ngôn ngữ chính!" - C thường tốt đáng ngạc nhiên cho việc chơi golf.
Steadybox

7

JavaScript, 87 byte

function(s){return s.replace(/./g,c=>Math.random()<.5?c.toLowerCase():c.toUpperCase())}

68 byte trong ES6:

f=
s=>s.replace(/./g,c=>c[`to${Math.random()<.5?`Low`:`Upp`}erCase`]())
<input oninput=o.textContent=f(this.value)><pre id=o>


mã thứ hai không hoạt động nhưng mã thứ nhất: Uncaught SyntaxError:
Unken

@FeloVilches Bạn phải sử dụng nó trong ngữ cảnh biểu thức để nó hoạt động, nếu không thì công cụ cố gắng phân tích nó như một câu lệnh hàm.
Neil

Có thể rút ngắn bằng ES6.
Máy

@CalculatorFeline Đến 68 byte, không còn nghi ngờ gì nữa?
Neil

5

Thạch , 6 byte

,ŒsXµ€

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

Làm sao?

Hạ thấp tất cả các ký tự của đầu vào và sau đó xếp chồng lên nhau với xác suất 50% giống như chọn một trong các char ban đầu và char trường hợp hoán đổi với xác suất bằng nhau ...

,ŒsXµ€ - Main link: string s
    µ  - monadic chain separation
     € - for each char c in s
,      -     pair c with
 Œs    -     swapped case of c
   X   -     choose a random item from the list (of the two chars)
       - implicit print

Ồ Khéo léo diễn giải thử thách.
Matthew Roh

Nhân tiện: đây có phải là đồng phục không?
Matthew Roh

@SIGSEGV Nếu theo "đồng phục", bạn có nghĩa là mỗi char có 50% cơ hội là mỗi trường hợp thì có - Xđược thực hiện bằng Python random.choice, vì vậy khi đưa ra một danh sách 2 ký tự sẽ chọn ra mỗi xác suất 50% - mỗi char trong đầu vào tạo ra một danh sách như vậy (các ký tự không phải là chữ cái sẽ là một danh sách gồm 2 ký tự bằng nhau, nhưng điều đó không quan trọng nếu cách giải thích "thống nhất" ở trên là chính xác).
Jonathan Allan

Dưới đây là một ví dụ về danh sách phân tách nguồn cấp dữ liệu mà từ đó một char của mỗi danh sách sẽ được chọn.
Jonathan Allan

5

PowerShell , 64 60 byte

-join([char[]]"$args".ToLower()|%{"$_".ToUpper(),$_|random})

Hãy thử trực tuyến! (đảm bảo rằng "vô hiệu hóa bộ đệm đầu ra" được chọn nếu bạn muốn kết quả ngẫu nhiên)

Bản dịch chính xác của thử thách. Lấy chuỗi đầu vào, ToLower()s nó, chuyển đổi nó thành một charmảng, lặp qua từng ký tự |%{...}và chọn ngẫu nhiên giữa ký tự hiện có hoặc biến thể chữ hoa. Sau đó, -jointất cả chúng trở lại với nhau thành một chuỗi. Điều này hoạt động bởi vì ToUpperToLowerchỉ ảnh hưởng đến các ký tự chữ cái, để lại dấu chấm câu và tương tự như không thay đổi.

(Dennis đã sửa danh sách bí danh trên TIO để Randomkhông thử Linux randomnhưng chính xác là bí danh Get-Randomnhư một lệnh PowerShell, như vậy. Cảm ơn, Dennis!)


4

MATL , 13 12 byte

"@ktXkhlZr&h

Dùng thử tại MATL Online

Giải trình

        % Implicitly grab input as a string
"       % For each character...
  k     % Convert to lowercase
  tXk   % Make a copy and convert to uppercase
  h     % Horizontally concatenate these two characters
  lZr   % Randomly select one of them
  &h    % Horizontal concatenate the entire stack
        % Implicit end of for loop and implicit display

4

Japt , 10 byte

®m"uv"gMq2

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

Giải trình

Vì vậy, đây là một loại hack cheesy, nhưng nó hoạt động. Trong JavaScript, bạn có thể làm một cái gì đó như

x[`to${Math.random()<.5?"Upp":"Low"}erCase`]()

để chuyển đổi ngẫu nhiên xthành chữ hoa hoặc chữ thường. Trong Japt, các chức năng tương đương là ucho toUpperCasevcho toLowerCase. Nhưng trong Japt, không có cách trực tiếp nào để lấy giá trị x[expression]thuộc tính được tính ( bằng JavaScript).

Một trong những tính năng yêu thích của tôi về Japt là nếu bạn có một hàm bao gồm một lệnh gọi phương thức duy nhất (ví dụ: mX{Xq}hoặc .m(X=>X.q())trong JS), bạn có thể bỏ qua mọi thứ trừ tên của phương thức, vd mq. Trình biên dịch sau đó biến chuỗi này thành một chuỗi được truyền cho lệnh gọi phương thức ban đầu ( .m("q")) và phương thức biến nó trở lại thành một hàm. Vì vậy, không có sự khác biệt giữa mqm"q"; cả hai đều sản xuất cùng một sản lượng.

Bây giờ, nơi tôi đang đi với điều này: trong khi chúng ta không thể gọi trực tiếp một phương thức ngẫu nhiên trên một chuỗi, chúng ta có thể gọi mchuỗi đó bằng một tên phương thức ngẫu nhiên. Vì vậy, để giải thích:

®m"uv"gMq2
®           // Replace each char in the input by this function:
 m          //   Replace each char in this char by this function:
      g     //     the char at index
       Mq2  //       random integer in [0,2)
  "uv"      //     in "uv".
            //   This randomly calls either .u() or .v() on the char.
            // Implicit: output result of last expression

Không Mqmặc định là 2? Hay là gần đây đã được thêm vào?
Oliver

@obarakon Tôi nghĩ rằng gần đây hơn. Một tìm kiếm nhanh trên GitHub cho biết đó là ngày 5 tháng 5
ETHproductions

4

PHP, 53 byte

for(;a&$c=$argn[$i++];)echo(lu[rand()&1].cfirst)($c);

1
Thủ thuật hay w / the strto.*.er. :)
Alex Howansky

1
Lưu một byte w /rand()&1
Alex Howansky

1
Lưu một loạt các byte bằng cách sử dụng foreach(str_split($argv[1]as$c)...thay vì lập chỉ mục mảng.
Alex Howansky




2

Japt , 12 10 byte

£M¬?Xv :Xu

Giải trình:

£M¬?Xv :Xu
£             // Iterate through the input. X becomes the iterative item
 M¬           // Return a random number, 0 or 1
    ?         // If 1:
     Xv       //   X becomes lowercase
        :     // Else:
         Xu   //   X becomes uppercase 

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




1

CJam , 14 byte

qel{2mr{eu}&}%

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

Giải trình

q               e# Read the input
 el             e# Make it lowercase
   {            e# For each character in it
    2mr         e#  Randomly choose 0 or 1
       {eu}&    e#  If 1, make the character uppercase
            }%  e# (end of block)

1

MATL , 12 11 byte

Xóa 1 byte bằng ý tưởng của Jonathan Allan về trường hợp thay đổi trực tiếp.

"@rEk?Yo]&h

Hãy thử tại MATL trực tuyến!

Giải trình

"         % Implicit input. For each
  @       %   Push current char
  r       %   Random number uniformly distributed on (0,1)
  Ek      %   Duplicate, floor: gives 0 or 1 with the same probability
  ?       %   If nonzero
    Yo    %     Change case. Leaves non-letters unaffected
  ]       %   End
  &h      %   Horizontally concatenate evverything so far
          % Implicit end and display

1

Bình thường, 5 byte

srLO2

Bộ kiểm tra

srLO2
srLO2Q    Variable introduction
  L  Q    Map over the input
 r        Set the case of each character to 
   O2     Random number from [0, 1]. 0 means lowercase, 1 means uppercase.
s         Concatenate

1

Befunge , 136 byte

>~:0`!#@_:"@"`!#v_:"Z"`!#v_:"`"`!#v_:"z"`!#v_,
^,<    <        <                 <
 >?<                     <             -*84<
  >84*+^

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

Có rất nhiều khoảng trắng mà tôi nghĩ là có thể thoát khỏi. Befunge không có cách nào để tìm ra bức thư nào và cái gì không, vì vậy đây là những gì tôi đang làm ở hàng đầu tiên.


Đây đoạn là một cách nhanh hơn kiểm tra nếu giá trị hàng đầu của ngăn xếp là một lá thư - đẩy một 0 nếu nó là, và 1 nếu nó không phải là. Nó ngắn hơn rất nhiều so với các điều kiện "và" với nhau bằng cách nhân chúng thay vì sử dụng một loạt các câu lệnh if định tuyến đến cùng một vị trí
MildlyMilquetoast

Tôi không hiểu làm thế nào nó hoạt động. Khi tôi chạy nó, nó luôn cho tôi 0 và nó không chấp nhận bất kỳ đầu vào nào.

Xin lỗi, trong chương trình đó bạn đặt giá trị trong dấu ngoặc kép đầu tiên. Nhìn lại, đây là một cách thực sự ngu ngốc để làm điều đó. Sẽ khá dễ dàng để thay đổi ba ký tự đầu tiên thành một~
MildlyMilquetoast

0

Bash , 64 byte

lần thử đầu tiên

a=$(shuf -e -n 13 {A..Z}|tr -d "\n");b=${a,,};tr $b $a <<<${1,,}

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

xáo trộn chữ in hoa, mất 13 chữ cái đầu tiên, xóa dòng mới và lưu vào $ a. $ b giữ $ a để viết thường. đầu vào được đặt thành chữ thường bằng $ {1 ,,} và được chuyển dưới dạng di truyền sang tr thay thế cho mỗi khoảng thời gian của $ b bằng $ a

Điều này có phần không tính toán vì cùng một chữ cái luôn được viết hoa.


0

JavaScript + HTML, 115 byte

<input oninput="this.value=this.value.toLowerCase().split('').map(v=>Math.random()<.5?v.toUpperCase():v).join('')">


0

Bash, 162 byte

a=$1
b=1
c="echo $a|head -c$b|tail -c1"
while(($b<=${#a}))
do
r=$[RANDOM%2]
if [ $r = 1 ]
then d=$(eval $c);echo -n ${d^}
else echo -n $(eval $c)
fi
b=$[b+1]
done

Khá tự giải thích. Đưa đầu vào từ dòng lệnh arg, ghi vào thiết bị xuất chuẩn.

Chạy như derpifier.sh "Derp this"

Man, một khi tôi bắt đầu áp dụng các mẹo , mã co lại nhanh.


0

Swift - cách quá nhiều byte ( 176 167)

uppercased(), lowercased(), arc4random_uniform()Thực sự giết cân bằng tỷ số, bên cạnh đó đối với tôi cần phải thêm một chức năng kể từ khi Swift không có phương pháp đầu vào tiêu chuẩn!

import Foundation
func g(x:String){var result="";for i in x.characters{let e=String(i);result+=(arc4random_uniform(2)>0 ?e.uppercased():e.lowercased())};print(result)}

Chức năng sử dụng: print(g(x: "Your String Here"))

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.