deRpiFy sTriNg! [Tutup]

8

ANDA AKAN MELAKUKAN BEGITU YANG MENCAPAI ORANG YANG HARUS MENDAPATKAN PERILAKU?

BAGAIMANA ANDA MELAKUKAN KEMISKINAN INI DENGAN MENGHASILKAN PERUBAHAN (BISNIS, 50% MENGHASILKAN PENDAFTARAN) TINGKAT KEPADA PEMERINTAHAN DAN PERLUASAN LAINNYA.

itu dia.

(maaf untuk tanda baca, itu untuk konsep pertanyaannya)

Versi yang dapat dibaca:

Anda akan diberi string yang terdiri dari karakter ASCII yang dapat dicetak.

Anda beralih melalui string dan mengubah huruf acak (seragam, 50% kesempatan besar) menjadi huruf besar, dan yang lainnya menjadi huruf kecil.

itu dia.

exaMplEs

iNpuT => pOssiBle oUtPUt
Programming puzzles and Code Golf => pRogRaMMiNg pUzzlEs aNd coDe goLf
dErpity deRp derP => deRpiTy dErp DerP
CAAAPSLOOOCK => cAAapslOoocK
_#$^&^&* => _#$^&^&*
Matthew Roh
sumber
2
Apa arti "acak" sebenarnya? Mungkinkah ada dua huruf kapital berurutan (case uji Anda tidak memiliki konfigurasi seperti itu)? Saya akan mengatakan pertanyaan ini tidak ditentukan dalam kondisi saat ini, tetapi saya belum akan memberikan suaranya. Silakan tentukan dua hal ini.
HyperNeutrino
Apakah waktu% 2 diperbolehkan untuk pseudorandomness?
fəˈnɛtɪk
@ fəˈnɛtɪk Tentu (jika seragam)
Matthew Roh
2
Anda mengatakan ASCII yang dapat dicetak, tetapi kotak uji Anda hanya menyertakan karakter alfabet. Haruskah program dapat menangani karakter non-alfabet, atau dapatkah kita mengharapkan input menjadi alfabet murni?
MildlyMilquetoast
5
Saya pikir sebagian besar jawaban yang ada juga berasumsi bahwa keputusan itu independen untuk setiap huruf, tetapi tidak ada dalam pertanyaan itu. Saat ini saya pikir secara teknis akan kompatibel dengan spesifikasi untuk menulis sesuatu di sepanjang baris (pseudocode)s=>rand()%2?s.upper():s.lower()
Peter Taylor

Jawaban:

10

C - 65 byte

Cukup bagus untuk bahasa umum!

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

Menggunakan XOR untuk membalik bit secara acak pada 0x20setiap karakter alfabet. Program mengasumsikan set karakter ASCII dan itu EOF < 0.

Sampel dijalankan dengan sumbernya sendiri!

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

Sangat derpy.


sumber
1
"Cukup bagus untuk bahasa umum!" - C sering mengejutkan baik untuk bermain golf.
Steadybox
7

JavaScript, 87 byte

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

68 byte dalam 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>

Neil
sumber
kode kedua tidak berfungsi tetapi yang pertama: Sintaks Tanpa PerintahError: Token yang tidak terduga (
Felo Vilches
@FeloVilches Anda harus menggunakannya dalam konteks ekspresi agar dapat berfungsi, jika tidak mesin akan menguraikannya sebagai pernyataan fungsi.
Neil
Dapat disingkat menggunakan ES6.
CalculatorFeline
@CalculatorFeline Ke 68 byte, tidak diragukan lagi?
Neil
5

Jelly , 6 byte

,ŒsXµ€

Cobalah online!

Bagaimana?

Casing yang lebih rendah semua karakter input dan kemudian masing-masing huruf besar dengan probabilitas 50% sama dengan memilih salah satu karakter asli dan karakter casing bertukar ...

,Œ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
Jonathan Allan
sumber
Ohh Interpretasi yang cerdik tentang tantangan.
Matius Roh
Ngomong-ngomong: apakah seragam ini?
Matius Roh
@SIGSEGV Jika dengan "seragam" yang Anda maksud masing-masing karakter memiliki peluang 50% untuk setiap kasus maka ya - Xdiimplementasikan menggunakan Python random.choice, jadi ketika disajikan dengan daftar 2 karakter akan memilih masing-masing dengan probabilitas 50% - setiap karakter dalam input menghasilkan daftar seperti itu (karakter non-alfabet akan menjadi daftar 2 karakter yang sama, tetapi itu tidak masalah jika interpretasi "seragam" di atas benar).
Jonathan Allan
Berikut adalah contoh daftar terpisah feed baris dari mana masing-masing karakter akan dipilih.
Jonathan Allan
5

PowerShell , 64 60 byte

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

Cobalah online! (pastikan "nonaktifkan cache keluaran" dicentang jika Anda ingin hasil acak)

Terjemahan tantangan yang tepat. Mengambil string input, ToLower()s itu, mengubahnya menjadi chararray, loop melalui masing-masing karakter |%{...}, dan secara acak memilih antara karakter yang ada atau varian huruf besar. Kemudian -joins mereka kembali menjadi satu string. Ini berfungsi karena ToUpperdan ToLowerhanya memengaruhi karakter alfabet, meninggalkan tanda baca dan sejenisnya tidak berubah.

(Dennis memperbaiki daftar alias di TIO sehingga Randomtidak mencoba Linux randomtetapi dengan benar alias Get-Randomsebagai perintah PowerShell, sebagaimana mestinya. Terima kasih, Dennis!)

AdmBorkBork
sumber
4

MATL , 13 12 byte

"@ktXkhlZr&h

Cobalah di MATL Online

Penjelasan

        % 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
Suever
sumber
4

Japt , 10 byte

®m"uv"gMq2

Cobalah online!

Penjelasan

Jadi ini semacam hack murahan, tetapi berhasil. Dalam JavaScript Anda dapat melakukan sesuatu seperti

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

untuk secara acak dikonversi xke huruf besar atau kecil. Di Japt, fungsi yang setara adalah uuntuk toUpperCasedan vuntuk toLowerCase. Tetapi di Japt tidak ada cara langsung untuk mendapatkan nilai properti yang dihitung ( x[expression]dalam JavaScript).

Salah satu fitur favorit saya dari Japt adalah bahwa jika Anda memiliki fungsi yang terdiri dari pemanggilan metode tunggal (misalnya mX{Xq}, atau .m(X=>X.q())dalam JS), Anda dapat mengabaikan semuanya kecuali nama metode, misalnya mq. Compiler kemudian mengubah ini menjadi string yang diteruskan ke pemanggilan metode asli ( .m("q")), dan metode mengubahnya kembali menjadi fungsi. Jadi tidak ada perbedaan antara mqdan m"q"; keduanya menghasilkan output yang sama.

Sekarang, di mana saya akan pergi dengan ini: sementara kita tidak bisa langsung memanggil metode acak pada sebuah string, kita dapat memanggil mstring itu dengan nama metode acak. Jadi, untuk penjelasannya:

®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
Produksi ETH
sumber
Tidak Mqdefault ke 2? Atau apakah itu baru saja ditambahkan?
Oliver
@obarakon Saya pikir itu lebih baru. Pencarian cepat di GitHub mengatakan itu 5 Mei
ETHproduk
4

PHP, 53 Bytes

for(;a&$c=$argn[$i++];)echo(lu[rand()&1].cfirst)($c);
Jörg Hülsermann
sumber
1
Trik yang bagus dengan itu strto.*.er. :)
Alex Howansky
1
Simpan satu byte dengan /rand()&1
Alex Howansky
1
Simpan banyak byte dengan menggunakan foreach(str_split($argv[1]as$c)...alih-alih pengindeksan array.
Alex Howansky
2

Perl 5 , 26 byte

25 byte + -pflag.

s/./rand 2&1?uc$&:lc$&/ge

Cobalah online!

Dada
sumber
2

Perl 6 ,  32  29 byte

{[~] .comb.map:{(.lc,.uc).pick}}

Cobalah

{S:g/./{($/.uc,$/.lc).pick}/}

Cobalah

Brad Gilbert b2gills
sumber
2

Python 2 , 77 74 byte

lambda s:"".join(map(choice,zip(s.upper(),s.lower())))
from random import*

Cobalah online!

ovs
sumber
2

Japt , 12 10 byte

£M¬?Xv :Xu

Penjelasan:

£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 

Cobalah online!

Oliver
sumber
1

05AB1E , 8 byte

vyDš‚.RJ

Cobalah online!

Penjelasan

v          # for each char y in input
 yDš‚      # pair lower-case y with upper-case y
     .R    # pick one at random
       J   # join to string
Emigna
sumber
1

JavaScript, 77 byte

x=>x.toLowerCase().split``.map(y=>Math.random()*2|0?y:y.toUpperCase()).join``

Cobalah online!

fəˈnɛtɪk
sumber
1

CJam , 14 byte

qel{2mr{eu}&}%

Cobalah online!

Penjelasan

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)
Kucing Bisnis
sumber
1

MATL , 12 11 byte

1 byte dihapus menggunakan ide Jonathan Allan untuk mengubah kasus secara langsung.

"@rEk?Yo]&h

Coba di MATL online!

Penjelasan

"         % 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
Luis Mendo
sumber
1

Pyth, 5 byte

srLO2

Suite uji

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
isaacg
sumber
1

Befunge , 136 byte

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

Cobalah online!

Ada banyak ruang kosong yang saya pikir mungkin untuk dihilangkan. Befunge tidak memiliki cara untuk mencari tahu apa surat dan apa yang tidak, jadi ini yang saya lakukan di baris pertama.


sumber
Cuplikan ini adalah cara yang lebih cepat untuk memeriksa apakah nilai teratas tumpukan adalah huruf - mendorong 0 jika ya, dan 1 jika tidak. Ini jauh lebih pendek untuk kondisi "dan" bersama-sama dengan mengalikannya alih-alih menggunakan banyak pernyataan if yang merutekan ke tempat yang sama
MildlyMilquetoast
Saya tidak mengerti cara kerjanya. Ketika saya menjalankannya, selalu memberi saya 0, dan tidak menerima input apa pun.
Maaf, dalam program itu Anda memberi nilai pada tanda kutip pertama. Dalam retrospeksi, ini adalah cara yang sangat bodoh untuk melakukan itu. Seharusnya cukup mudah untuk mengubah tiga karakter pertama menjadi~
MildlyMilquetoast
0

Pesta , 64 byte

percobaan pertama

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

Cobalah online!

mengocok huruf besar, mengambil 13 angka pertama, menghapus baris baru dan menghemat $ a. $ b menampung $ a untuk huruf kecil. input diatur ke huruf kecil dengan $ {1 ,,} dan diteruskan sebagai heredoc ke tr yang menggantikan setiap arus dari $ b dengan $ a

Ini agak tidak menarik karena huruf yang sama selalu ditulis dengan huruf kapital.

marcosm
sumber
0

JavaScript + HTML, 115 byte

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

cnorthfield
sumber
0

Bash, 162 Bytes

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

Cukup jelas. Mengambil input dari baris perintah arg, menulis ke stdout.

Jalankan seperti derpifier.sh "Derp this"

Man, begitu saya mulai menerapkan tips kode menyusut dengan cepat.

Feldspar15523
sumber
0

Swift - byte terlalu banyak ( 176 167)

uppercased(), lowercased(), arc4random_uniform()Benar-benar membunuh skor, selain bagi saya harus menambahkan fungsi karena Swift tidak memiliki metode input standar!

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)}

Fungsi dengan penggunaan: print(g(x: "Your String Here"))

Tuan Xcoder
sumber