Nhiệt tình Nga hóa một chuỗi


57

Nhiều người trong số các bạn có thể đã tương tác với những người từ Nga trên internet vào một lúc nào đó, và một tập hợp con của bạn có thể nhận thấy phương pháp hơi kỳ quặc mà họ có thể thể hiện.

ví dụ удали игру нуб)))

trong đó )))được thêm vào để nhấn mạnh vào tuyên bố trước đó, tôi đã nghiên cứu một lý thuyết rằng tỷ lệ của )phần còn lại của chuỗi tỷ lệ thuận với mức độ nhấn mạnh ngụ ý, tuy nhiên tôi thường gặp khó khăn khi tính tỷ lệ một cách nhanh chóng, vì tôi cũng đang cố gắng đối phó với hàng loạt sự lạm dụng, vì vậy tôi muốn mã ngắn nhất có thể giúp tôi tính toán chuỗi kết quả sẽ là gì, với giá trị nhiệt tình từ 0 đến 500%, với giá trị ban đầu , chuỗi không nhiệt tình, điều này sẽ hỗ trợ rất nhiều cho nghiên cứu của tôi vì tôi sẽ không phải gõ các tập lệnh cồng kềnh mỗi khi tôi muốn kiểm tra giả thuyết của mình.

Vì vậy, thách thức:

viết một chương trình hoặc hàm đầy đủ, cung cấp hai đối số, một chuỗi có độ dài không xác định và một số, ở định dạng số nguyên (từ 0 đến 500) hoặc ở định dạng thập phân (từ 0 đến 5, với 2 điểm chính xác) sẽ

  • lợi nhuận / hiển thị chuỗi ban đầu, với hậu tố một số )'s
  • số sẽ được tính theo tỷ lệ của số đầu vào với độ dài chuỗi.
  • vì vậy, nếu số 200 hoặc 2,00 được cung cấp, 200% chuỗi phải được thêm vào dưới dạng )'s
  • số lượng dấu ngoặc được làm tròn đến trong các tình huống thập phân không quan trọng.
  • kịch bản được yêu cầu để hỗ trợ các ký tự ASCII có thể in.
  • chỉ phải hỗ trợ một định dạng số đầu vào, theo lựa chọn của bạn.

Ví dụ:

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

Mã ví dụ (PowerShell) (có đầu vào thập phân):

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

Đây là nên mã ngắn nhất sẽ thắng!


2
Tôi bối rối, người Nga có thực sự sử dụng )để nhấn mạnh như một !? Đây có phải là một số vấn đề mã hóa?
Thuyền trưởng Man

2
@CaptainMan Tôi tin rằng nó giống khuôn mặt cười hơn !s, nhưng họ gõ chúng như vậy, nó không phải là siêu phổ biến, nhưng nó khá mang tính biểu tượng.
colsw

30
@CaptainMan Không có )biểu tượng cảm xúc giảm :). Nó được sử dụng rất phổ biến giữa những người trẻ tuổi theo như tôi biết.
Talex

4
)không phải là một điểm nhấn, nó chỉ đơn giản là mặt cười. Theo tôi biết, khó gõ hơn :khi sử dụng bố cục bàn phím tiếng Nga, do đó họ cười mà không có mắt.
Džuris

18
@Juris thật khó để viết :trên bố cục tiếng Nga (ЙЦУЙЦУЕЕЕ) vì nó phải gõ ^trên QWERTY. Nhưng thực sự, đây )là một phiên bản rút gọn của :). Việc bấm và giữ Shift-0 dễ dàng hơn nhiều so với các phím thay thế liên tục.
Ruslan

Câu trả lời:


16

Thạch , 7 byte

ȮL×Ċ”)x

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

Sử dụng định dạng thập phân.

Làm sao?

Ȯ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 Tôi chỉ nhận thấy rằng điều này sẽ in chuỗi cần thiết dưới dạng một chương trình đầy đủ, nhưng thông số kỹ thuật nói "return" - điều này có ổn không?
Jonathan Allan


đừng lo lắng - đây là thử thách đầu tiên của tôi vì vậy có một vài trong số những điều mà tôi đã bỏ lỡ, tôi đã cập nhật nó trong câu hỏi để rõ ràng hơn - cảm ơn vì đã hỏi.
colsw


16

Lisp thông thường, 59 52 50

Dấu ngoặc đơn? Tôi đang ở

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

Chi tiết

(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

Định dạng chuỗi điều khiển

  • ~a : đối số in đẹp (ở đây là chuỗi đã cho)
  • ~v@{...~}: khối lặp, giới hạn ở lần lặp V, trong đó V được lấy làm đối số, cụ thể là (* ...)biểu thức. Lặp lại được cho là lặp lại qua một danh sách, nhưng khi bạn thêm công cụ @sửa đổi, danh sách đó là danh sách các đối số còn lại cho hàm định dạng. Phải có ít nhất một yếu tố trong danh sách lặp (nếu không chúng ta thoát, bỏ qua V). Đó là lý do tại sao có một đối số bổ sung cho định dạng (0).

Vì không có phần tử nào trong danh sách được sử dụng bởi định dạng, vòng lặp là vô hạn nhưng may mắn thay, nó cũng bị giới hạn bởi V, hay còn gọi là số dấu ngoặc đơn được in.


Chỉnh sửa: cảm ơn Michael Vehrs đã chỉ ra rằng không cần phải làm tròn đối số bằng số (câu hỏi cho phép cắt / làm tròn theo cách chúng tôi muốn, vì vậy hành vi mặc định hoạt động ở đây).


12
(()) / 10 không đủ dấu ngoặc đơn
BgrWorker

Ai nghĩ ngôn ngữ này là một ý tưởng tốt?
hạ cấp

Đề án formatchấp nhận một đối số thập phân đến v. Có lẽ Common Lisp cũng vậy?
Michael Vehrs

@MichaelVehrs Thật vậy, cảm ơn rất nhiều.
coredump

1
@coredump Trên thực tế, tôi nên nói " formatchấp nhận của Guile ...", vì Đề án tiêu chuẩn formatkhông hỗ trợ ~r; và Guile formattheo ví dụ về Common Lisp's.
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
Đẹp, tôi nghĩ đó là ngắn nhất có thể. Bạn có thể lưu một byte thông qua currying: s=>n=>s+')'.repeat(s.length*n)(sau đó nó sẽ được gọi là like f("hi!")(4.99))
ETHproductions


7

05AB1E , 9 8 byte

g*ï')×¹ì

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

g*       # Length, multiplied by emphasis.
  ï')×   # Covnerted to an integer, push that many parenthesis.
      ¹ì # Prepend original string.

Hoạt động cho cả số nguyên và số thập phân, thứ tự đối số: f(String, Double)


-1 trong phiên bản mới của 05AB1E , trong đó việc ïnày được thực hiện hoàn toàn ×với đối số float.
Kevin Cruijssen

Và đây là 7 -terter hoạt động trên cả di sản và hiện đại 05AB1E: sg * F ') « .
Grimmy


7

Bình thường, 8 byte

*\)s*lpz

Bài kiểm tra trực tuyến! Lấy tỷ lệ phấn khích trước, sau đó là chuỗi được mê hoặc.

Giải trình:

      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

Hàm ẩn danh nhận chuỗi avà thập phân n, in đầu ra thành thiết bị xuất chuẩn.

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

4

Bình thường, 9 byte

*s*lpzE")

Có hai dòng đầu vào: chuỗi và tỷ lệ (thập phân).

Dùng thử trên pyth.herokuapp.com

Giải trình

Abiểu thị đối số thứ nhất của hàm, đối số Bthứ hai của hàm.

*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

Mất đầu vào thập phân.

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


3

CJam , 9 byte

l_,ld*')*

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

Chuỗi đầu vào trên dòng đầu tiên, tỷ lệ nhấn mạnh trong phạm vi 0 đến 5 trên giây.

Giải trình

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

Giải pháp này sử dụng dạng thập phân của đầu vào thứ hai

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

Giải trình

        % 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(\

Giải thích:

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

Dấu ngoặc được đóng tự động

Đây là đầu ra của trình biên dịch, nếu bạn quan tâm:

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

Phiên bản trình biên dịch này được viết vào ngày 1/27/2017 lúc 11:12, có thể là vài phút sau khi câu hỏi này được đăng. Vì vậy, đây là phiên bản hoạt động trên phiên bản cũ nhất của trình biên dịch, được viết trước đó một giờ: 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

Chi tiết

Sử dụng định dạng đầu vào số nguyên.

Điều này chỉ đơn giản là đệm đúng chuỗi đầu vào có parens ra theo chiều dài mục tiêu.

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

Được gọi với

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


2

Groovy, 27 byte

Giải pháp đơn giản

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

Chương trình kiểm tra :

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

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


2

Clojure, 40 byte

Giải pháp khá nhàm chán:

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

Chỉ cần giảm strchức năng trong danh sách các dấu ngoặc đơn đóng với một chuỗi làm tham số ban đầu.

Xem trực tuyến: https://ideone.com/5jEgWS

Giải pháp không quá nhàm chán (64 byte):

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

Chuyển đổi chuỗi đầu vào thành một ký hiệu (để loại bỏ dấu ngoặc kép) và liên tục áp dụng hàm listtrên nó tạo ra chuỗi vô hạn như thế này : (a (a) ((a)) (((a))) ... ). nthPhần tử Takes chuyển đổi nó thành chuỗi và thay thế tất cả các dấu ngoặc đơn mở bằng không có gì.

Xem trực tuyến: https://ideone.com/C8JmaU


1
#(.replaceAll(str(nth(iterate list %)(*(count %)%2)))"[(\"]""")Ít hơn 1 byte (yay). Tôi muốn làm comp nhưng không thể lấy nó dưới 70 byte.
Michael M

Bạn có thể thay đổi ")"để \)tiết kiệm một byte.
clismique

2

SimpleTemplate, 92 byte

Lấy chuỗi là tham số đầu tiên và "tỷ lệ" là tham số thứ hai.
Tỷ lệ nằm trong khoảng từ 0 đến 5, với 2 chữ số thập phân.

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

Như bạn có thể thấy, nó là không tối ưu.
Cả 2 {echo}có thể giảm xuống còn 1.
Do lỗi trong trình biên dịch, mã này không thể giảm hơn nữa.


Ung dung:

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

Nếu không có lỗi tồn tại, mã sẽ trông như thế này, 86 byte:

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

2

C # Tương tác, 77 67 byte

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

C # tương tác là ngọt ngào.


1
Nếu bạn đang sử dụng C # Interactive cần có trong tiêu đề nếu không, trong C #, bạn nên bao gồm using System;hoặc đủ điều kiện Math. Ngoài ra, không chắc bạn có thể làm điều đó trong tương tác hay không, nhưng bạn có thể biên dịch thành a Func<string, Func<int, string>>để lưu byte tức làs=>p=>s+new...
TheLethalCoder

1
Ngoài ra, bạn có thể không cần cuộc gọi để Math.Roundchỉ thực hiện một intcuộc gọi nên FloorOP đã nói Floorhoặc Ceilinglà ổn
TheLethalCoder

1

SmileBASIC, 29 byte

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

3*4.99= 14.97, chỉ 14hoặc 15sẽ được chấp nhận làm câu trả lời, phiên bản 29 byte sẽ hoạt động tốt, xin lỗi!
colsw

1

Gol> <> (Golfish), 17 byte

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

Hãy thử nó ở đây .

Dòng trên cùng đọc các ký tự ( i) cho đến khi tìm thấy một dòng mới (ASCII 10, a), sau đó đi xuống ( v).

Sau đó, chúng tôi loại bỏ một ký tự (dòng mới) bằng cách ~đẩy chiều dài của ngăn xếp ( l), đọc float ( I), nhân hai số đó và lặp lại ( R) đẩy ký tự ")" nhiều lần. Cuối cùng, đảo ngược stack ( r), xuất nó và tạm dừng ( H).


1

PHP, 50 byte

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

lấy chuỗi và số thập phân làm đối số dòng lệnh; cắt đệm. Chạy với -r;

phá vỡ

<?=                     // 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)}

Tôi đang sử dụng lambdas . Chương trình thử nghiệm sẽ giống như:

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

1

Clojure, 68 byte

Một chức năng ẩn danh chấp nhận đầu vào thập phân.

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

Nghĩa đen là chương trình Lisp đầu tiên tôi từng viết! Tôi đã có niềm vui.


Chào mừng đến với thế giới của Lisp! : P Trong Clojure, bạn có thể sử dụng dạng cô đọng của các hàm ẩn danh #(...)và bạn có thể thoát khỏi print(vì trả về hàm nên được chấp nhận). Bạn có thể thay đổi reduceđể applycho các strchức năng, và bạn có thể thay đổi ")"để \), mà làm điều tương tự. Vì vậy, mã cuối cùng nên là : #(str %(apply str(repeat(*(count %)%2)\))))).
clismique

Ngoài ra, trạng thái hiện tại của mã của bạn không hoạt động, (#(...) "codegolf" 125)phải thêm 125 phần trăm chiều dài của "codegolf" thay vì 125 lần chiều dài của "codegolf". Vì vậy, chương trình cố định sẽ là : #(str %(apply str(repeat(*(count %)%2 1/100)\)))), là 49 byte.
clismique

1

C ++ 14, 43 byte

Khi lambda chưa được đặt tên sửa đổi đầu vào của nó, giả sử stương tự như std::string(có .append(int,char)và giả sử plà loại dấu phẩy động:

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

Sử dụng:

#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;
}

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.