Menggairahkan String secara antusias


57

Banyak dari Anda mungkin telah berinteraksi dengan orang-orang dari Rusia di internet pada suatu saat, dan sebagian dari Anda mungkin telah memperhatikan metode yang sedikit aneh dalam mengekspresikan diri mereka.

misalnya удали игру нуб)))

di mana )))ditambahkan untuk penekanan pada pernyataan sebelumnya, saya telah bekerja pada teori bahwa rasio )'s ke seluruh string secara langsung sebanding dengan jumlah penekanan tersirat, namun saya seringkali merasa sulit untuk menghitung rasio on the fly, karena saya juga mencoba untuk mengatasi berbagai penyalahgunaan, jadi saya ingin kode sesingkat mungkin untuk membantu saya menghitung apa yang seharusnya dihasilkan string, untuk nilai antusiasme antara 0 dan 500%, mengingat yang asli , string tidak antusias, ini akan sangat membantu penelitian saya karena saya tidak perlu mengetikkan skrip besar setiap kali saya ingin menguji hipotesis saya.

Jadi, tantangannya:

menulis program atau fungsi lengkap, yang, menyediakan dua argumen, string dengan panjang yang tidak diketahui, dan angka, dalam format bilangan bulat (antara 0 dan 500) atau dalam format desimal (antara 0 dan 5, dengan 2 titik akurasi) akan

  • kembali / menampilkan string asli, akhiran dengan sejumlah )'s
  • angka akan dihitung sebagai rasio dari jumlah input dengan panjang string.
  • jadi jika jumlah 200, atau 2,00 diberikan, 200% dari string harus suffixed sebagai )'s
  • jumlah tanda kurung dibulatkan ke dalam situasi desimal tidak masalah.
  • diperlukan skrip untuk mendukung karakter ASCII yang Dapat Dicetak.
  • hanya perlu mendukung satu format nomor input, pilihan Anda.

Contoh:

"codegolf" 125      = codegolf))))))))))
"codegolf" 75       = codegolf))))))
"noob team omg" 0.5 = noob team omg))))))
"hi!" 4.99          = hi!)))))))))))))))

Kode contoh (PowerShell) (dengan input desimal):

Function Get-RussianString ([string]$InputStr,[decimal]$Ratio){
    $StrLen = $InputStr.Length
    $SuffixCount = $StrLen * $Ratio
    $Suffix = [string]::New(")",$SuffixCount)
    return $InputStr + $Suffix
}

Get-RussianString "codegolf" 0.5
codegolf))))

Ini adalah sehingga kode terpendek menang!


2
Saya bingung, apakah Rusia benar-benar menggunakan )untuk penekanan seperti !? Apakah ini masalah pengodean?
Kapten Man

2
@ Kapten Saya percaya ini lebih seperti wajah tersenyum daripada !s, tapi mereka mengetiknya apa adanya, itu tidak super umum, tapi itu cukup ikon.
colsw

30
@CaptainMan No )adalah pengurangan emotikon :). Ini digunakan sangat umum di kalangan anak muda sejauh yang saya tahu.
talex

4
)bukan penekanan, itu hanya smiley. Sejauh yang saya tahu, lebih sulit untuk mengetik :ketika menggunakan tata letak keyboard Rusia, karena itu mereka tersenyum tanpa mata.
Džuris

18
@ Yuris, sama sulitnya menulis :di tata letak Rusia (ЙЦУКЕН) seperti halnya mengetik ^di QWERTY. Tapi memang, itu )adalah versi pengurangan :). Jauh lebih mudah untuk menekan dan menahan Shift-0 daripada berulang kali tombol alternatif.
Ruslan

Jawaban:


16

Jelly , 7 byte

ȮL×Ċ”)x

Cobalah online!

Menggunakan format desimal.

Bagaimana?

ȮL×Ċ”)x - Main link: string, decimal
Ȯ       - print string
 L      - length(string)
  ×     - multiply by the decimal
   Ċ    - ceiling (since rounding method is flexible)
    ”)  - a ')' character
      x - repeated that many times
        - implicit print

@ConnorLSW Saya baru saja memperhatikan bahwa ini akan mencetak string yang diperlukan sebagai program lengkap, tetapi spesifikasi menyatakan "kembali" - apakah ini OK?
Jonathan Allan

1
setiap standar yang diterima format output baik-baik saja
colsw

jangan khawatir - ini adalah tantangan pertama saya jadi ada beberapa hal yang saya lewatkan, saya telah memperbaruinya dalam pertanyaan agar lebih jelas - terima kasih telah bertanya.
colsw


16

Gangguan umum, 59 52 50

Tanda kurung? Saya masuk

(lambda(s n)(format()"~a~v@{)~}"s(*(length s)n)0))

Detail

(lambda(s n)               ; two arguments (string and ratio)
  (format ()               ; format as string
          "~a~v@{)~}"      ; control string (see below)
          s                ; first argument (string)
          (* (length s) n) ; second argument (number of parens)
          0))              ; one more element, the value does not matter

Memformat string kontrol

  • ~a : argumen print cantik (di sini string yang diberikan)
  • ~v@{...~}: blok iterasi, terbatas pada iterasi V, di mana V diambil sebagai argumen, yaitu (* ...)ungkapan. Iterasi seharusnya diulang pada daftar, tetapi ketika Anda menambahkan @pengubah, daftar adalah daftar argumen yang tersisa untuk fungsi format. Harus ada setidaknya satu elemen dalam daftar iterasi (jika tidak kita keluar, mengabaikan V). Itu sebabnya ada argumen tambahan untuk memformat (0).

Karena tidak ada elemen dalam daftar yang dikonsumsi oleh format, loop tidak terbatas tetapi untungnya, itu juga dibatasi oleh V, alias jumlah tanda kurung yang akan dicetak.


Sunting: terima kasih kepada Michael Vehrs untuk menunjukkan bahwa tidak perlu membulatkan argumen numerik (pertanyaannya memungkinkan untuk memotong / membulatkan apa pun yang kita inginkan, sehingga perilaku default berfungsi di sini).


12
(()) / 10 kurung tidak cukup
BgrWorker

Siapa yang mengira bahasa ini adalah ide yang bagus?
downrep_nation

Skema formatmenerima argumen desimal ke v. Mungkin Common Lisp juga melakukannya?
Michael Vehrs

@MichaelVehrs Memang, terima kasih banyak.
coredump

1
@coredump Sebenarnya, saya seharusnya mengatakan "Guile's formataccepts ...", karena Skema standar formattidak mendukung ~r; dan Guile formatmengikuti contoh Common Lisp.
Michael Vehrs

9

JavaScript ES6, 38 31 30 byte

s=>n=>s+')'.repeat(s.length*n)

f=s=>n=>s+')'.repeat(s.length*n)

console.log(f("hi!")(4.99))


1
Bagus, saya pikir itu sesingkat mungkin. Anda dapat menyimpan byte melalui currying: s=>n=>s+')'.repeat(s.length*n)(nanti akan disebut seperti f("hi!")(4.99))
ETHproduksi




7

Pyth, 8 byte

*\)s*lpz

Tes Online! Mengambil rasio kegembiraan terlebih dahulu, kemudian string yang harus diminati.

Penjelasan:

      pz  print out the enthused string
     l    ... and get its length
    *...Q multiply that by the ratio
   s      floor to get an integer, let's call this S
 \)       single-character string ")"
* ")" S   multiply that integer by the string, which gives a string of )s of length S.
          implicitly print that string of S )s.


5

R, 62 46 42 byte

Fungsi anonim yang mengambil string adan desimal n, mencetak output ke stdout.

pryr::f(cat(a,rep(")",n*nchar(a)),sep=""))

4

Pyth, 9 byte

*s*lpzE")

Membawa dua baris input: string dan rasio (desimal).

Cobalah di pyth.herokuapp.com

Penjelasan

Amenunjukkan argumen pertama suatu fungsi, argumen Bkeduanya.

*s*lpzE")
    pz     # print the input string
   lAA     # take the length of the printed string
      E    # read the next line of input (the emphasis ratio)
  *AAAB    # multiply the length by the ratio
 sAAAAA    # floor the result
*AAAAAA")  # repeat ")" n times
           # implicit print

4

TI-Basic, 33 byte

Mengambil input desimal.

Prompt Str1,A
")
For(I,0,9
Ans+Ans
End
Str1+sub(Ans,1,AI


3

CJam , 9 byte

l_,ld*')*

Cobalah online!

Masukkan string pada baris pertama, rasio penekanan pada rentang 0 hingga 5 pada baris kedua.

Penjelasan

l    e# Read input string.
_,   e# Duplicate, get length.
ld   e# Read emphasis ratio.
*    e# Multiply by length.
')*  e# Get that many parentheses.

3

MATL, 11 10 8 byte

yn*:"41h

Solusi ini menggunakan bentuk desimal dari input kedua

Cobalah online!

Penjelasan

        % Implicitly grab first input as a string
        % Implicitly grab the second input as a number
y       % Make a copy of the first input
n       % Compute the length of the string
*       % Multiply the decimal by the length to determine the # of )'s (N)
:       % Create the array [1...N]
"       % For each element in this array
  41    % Push 41 to the stack (ACSII for ")")
  h     % Horizontally concatenate this with the current string
        % Implicit end of for loop and display

3

sB ~, 17 byte

i\,N?\;')'*(N*l(\

Dijelaskan:

i\,N    input a string and a number
?\;     print the string
')'*    also print ) multiplied by...
(N*l(\  the number times the string length.

Kurung ditutup secara otomatis

Inilah output dari kompiler, jika Anda tertarik:

 INPUT  S$ ,N? S$ ;")"*(N* LEN(  S$ ))

Versi kompiler ini ditulis pada 1/27/2017 pukul 11:12 siang, yang mungkin beberapa menit setelah pertanyaan ini diposting. Jadi, inilah versi yang bekerja pada versi kompiler tertua, yang ditulis satu jam sebelumnya: iS$,N?S$;')'*(N*l(S$))(22 byte)


3

PostgreSQL, 102 byte

create function q(text,int)returns text as $$select rpad($1,(100+$2)*length($1)/100,')')$$language sql

Detail

Menggunakan format input integer.

Ini cukup kanan-bantalan string input dengan parens keluar ke panjang target.

create function q(text,int)
returns text as $$
    select rpad($1,             -- Pad the string input
        (100 + $2) *            -- to 100 + int input % ...
        length($1) / 100,       -- ...of the input string
        ')')                    -- with ) characters
$$ language sql

Dipanggil dengan

select q('codegolf', 125), q('codegolf', 75);
select q('noob team omg', 50), q('hi!', 499);


2

Groovy, 27 byte

Solusi mudah

{s,r->s+')'*(s.length()*r)}

Program uji:

def f = {s,r->s+')'*(s.length()*r)}

println f("hi!", 4.99)
println f("noob team omg", 0.5)


2

Clojure, 40 byte

Solusi yang cukup membosankan:

#(reduce str %(repeat(*(count %)%2)")"))

Hanya mengurangi strfungsi pada daftar tanda kurung tutup dengan string sebagai parameter awal.

Lihat online: https://ideone.com/5jEgWS

Solusi yang tidak terlalu membosankan (64 byte):

#(.replace(str(nth(iterate list(symbol %))(*(count %)%2)))"(""")

Mengkonversi string input ke simbol (untuk menyingkirkan tanda kutip) dan berulang kali berlaku fungsi listdi atasnya menghasilkan urutan yang tak terbatas seperti ini: (a (a) ((a)) (((a))) ... ). Mengambil nthelemen mengubahnya menjadi string dan mengganti semua tanda kurung buka dengan apa-apa.

Lihat online: https://ideone.com/C8JmaU


1
#(.replaceAll(str(nth(iterate list %)(*(count %)%2)))"[(\"]""")1 byte lebih sedikit (yay). Saya ingin melakukan comp tetapi tidak bisa mendapatkannya di bawah 70 byte.
Michael M

Anda dapat mengubah ")"ke \)untuk menyimpan byte.
clismique

2

SimpleTemplate, 92 byte

Mengambil string sebagai parameter pertama dan "rasio" sebagai parameter kedua.
Rasio antara 0 dan 5, dengan 2 tempat desimal.

{@echoargv.0}{@callstrlen intoL argv.0}{@set*Y argv.1,L}{@callstr_repeat intoO")",Y}{@echoO}

Seperti yang Anda lihat, ini tidak optimal.
2 di {echo}sana dapat dikurangi menjadi 1.
Karena bug di kompiler, kode ini tidak dapat dikurangi lebih jauh.


Tidak Disatukan:

{@echo argv.0}
{@call strlen into length argv.0}
{@set* ratio argv.1, length}
{@call str_repeat into parenthesis ")", ratio}
{@echo parenthesis}

Jika tidak ada bug, kode akan terlihat seperti ini, 86 byte:

{@callstrlen intoL argv.0}{@set*Y argv.1,L}{@callstr_repeat intoO")",Y}{@echoargv.0,O}

2

C # Interactive, 77 67 byte

string r(string s,int p)=>s+new string(')',(int)(s.Length*p/100d));

Interaktif C # itu manis.


1
Jika Anda menggunakan C # Interactive yang perlu di header jika tidak, di C #, Anda harus menyertakan using System;atau sepenuhnya memenuhi syarat Math. Juga, tidak yakin apakah Anda dapat melakukannya secara interaktif, tetapi Anda dapat mengkompilasi ke a Func<string, Func<int, string>>untuk menyimpan byte yaitus=>p=>s+new...
TheLethalCoder

1
Anda juga mungkin tidak memerlukan panggilan untuk Math.Roundhanya melakukan panggilan ke intseharusnya Floordan OP mengatakan salah Flooratau Ceilingbaik
TheLethalCoder

1

SmileBASIC, 29 byte

INPUT S$,N?S$;")"*(LEN(S$)*N)

karena 3*4.99= 14.97, hanya 14atau 15akan diterima sebagai jawaban, versi 29 byte seharusnya berfungsi dengan baik, maaf!
colsw

1

Gol> <> (Golfish), 17 byte

i:a=?v
R*Il~/Hr)`

Coba di sini .

Baris teratas membaca karakter ( i) hingga menemukan baris baru (ASCII 10, a), lalu turun ( v).

Kemudian kita membuang satu karakter (baris baru) dengan ~, mendorong panjang tumpukan ( l), membaca float ( I), mengalikan keduanya, dan berulang kali ( R) mendorong karakter ")" yang berkali-kali. Akhirnya, balikkan tumpukan ( r), keluarkan dan hentikan ( H).


1

PHP, 50 byte

<?=str_pad($s=$argv[1],strlen($s)*++$argv[2],")");

mengambil string dan angka desimal sebagai argumen baris perintah; memotong padding. Jalankan dengan -r;

kerusakan

<?=                     // print ...
str_pad(                    // pad
    $s=$argv[1],            // string=argument 1
    strlen($s)*++$argv[2],  // to string length*(1+argument 2) 
    ")"                     // using ")" as padding string
);

1

Ruby, 25 byte

->(s,n){s+')'*(s.size*n)}

Saya menggunakan lambdas . Program pengujian akan menjadi seperti:

f=->(s,n){s+')'*(s.size*n)}
f.("codegolf", 1.5)        # => "codegolf))))))))))))"
f.("hi!", 4.99)            # => "hi!))))))))))))))"

1

Clojure, 68 byte

Fungsi anonim yang menerima input desimal.

(fn [s n] (print (str s (reduce str (repeat (* n (count s)) ")")))))

Secara harfiah program Lisp pertama yang pernah saya tulis! Saya sudah bersenang-senang.


Selamat datang di dunia Lisp! : P Dalam Clojure, Anda dapat menggunakan bentuk fungsi anonim yang diringkas #(...), dan Anda dapat menyingkirkannya print(karena pengembalian fungsi harus dapat diterima). Anda dapat mengubah reduceke applyuntuk strfungsi, dan Anda dapat mengubah ")"ke \), yang melakukan hal yang sama. Jadi, kode akhir harus: #(str %(apply str(repeat(*(count %)%2)\))))).
clismique

Selain itu, kondisi saat ini dari kode Anda tidak berfungsi, (#(...) "codegolf" 125)harus menambahkan 125 persen dari panjang "codegolf" bukannya 125 kali panjang "codegolf". Jadi, program tetapnya #(str %(apply str(repeat(*(count %)%2 1/100)\))))adalah:, yaitu 49 byte.
clismique

1

C ++ 14, 43 byte

Sebagai lambda tanpa nama yang memodifikasi inputnya, asumsi sserupa dengan std::string(memiliki .append(int,char)dan dengan asumsi ptipe floating point:

[](auto&s,auto p){s.append(s.size()*p,41);}

Pemakaian:

#include<string>
#include<iostream>

auto f=
[](auto&s,auto p){s.append(s.size()*p,41);}
;


int main() {
 std::string s = "abcdefghijk";
 f(s,0.75);
 std::cout << s << std::endl;
}

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.