Russianify สตริงที่กระตือรือร้น


57

พวกคุณหลายคนอาจมีปฏิสัมพันธ์กับผู้คนจากรัสเซียบนอินเทอร์เน็ตในบางจุดและบางส่วนของคุณอาจสังเกตเห็นวิธีแปลก ๆ เล็กน้อยที่พวกเขาแสดงออก

เช่น удали игру нуб)))

ที่)))มีการเพิ่มเพื่อเน้นข้อความก่อนหน้านี้ฉันได้ทำงานในทฤษฎีที่อัตราส่วนของ)ต่อส่วนที่เหลือของสตริงเป็นสัดส่วนโดยตรงกับจำนวนการเน้นนัย แต่ฉันมักจะคิดว่ามันยากที่จะคำนวณอัตราส่วน ในขณะที่ฉันพยายามจัดการกับการใช้งานที่ไม่เหมาะสมดังนั้นฉันต้องการรหัสสั้นที่สุดที่เป็นไปได้เพื่อช่วยฉันคำนวณสิ่งที่สตริงผลลัพธ์ควรเป็นเพราะค่าความกระตือรือร้นระหว่าง 0 ถึง 500% ตามต้นฉบับ สตริง unenthusiastic นี้จะช่วยการวิจัยของฉันอย่างมากเพราะฉันจะไม่ต้องพิมพ์สคริปต์ขนาดใหญ่ทุกครั้งที่ฉันต้องการทดสอบสมมติฐานของฉัน

ดังนั้นความท้าทาย:

เขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบซึ่งให้สองข้อโต้แย้งสตริงที่ไม่รู้จักความยาวและตัวเลขในรูปแบบจำนวนเต็ม (ระหว่าง 0 และ 500) หรือในรูปแบบทศนิยม (ระหว่าง 0 และ 5 ด้วยความแม่นยำ 2 คะแนน)

  • ผลตอบแทน / แสดงสายเดิม, suffixed กับจำนวนของ)'s
  • จำนวนจะถูกคำนวณเป็นอัตราส่วนของจำนวนอินพุตต่อความยาวสตริง
  • ดังนั้นถ้าจำนวน 200 หรือ 2.00 ถูกจัดให้ 200% ของสตริงจะต้องเป็น suffixed )'s
  • จำนวนของวงเล็บเหลี่ยมจะอยู่ในสถานการณ์ทศนิยมไม่สำคัญ
  • ต้องใช้สคริปต์เพื่อสนับสนุนอักขระ ASCII ที่พิมพ์ได้
  • มีเพียงเพื่อรองรับรูปแบบหมายเลขอินพุตหนึ่งเดียวที่คุณเลือก

ตัวอย่าง:

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

รหัสตัวอย่าง (PowerShell) (ที่มีการป้อนทศนิยม):

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

นี่คือเพื่อให้ได้รหัสที่สั้นที่สุดชนะ!


2
ฉันสับสนแล้วรัสเซียใช้)เพื่อการเน้นเหมือนจริง!หรือไม่? มันเป็นปัญหาการเข้ารหัสหรือไม่?
Captain Man

2
@ กัปตันแมนฉันเชื่อว่ามันเป็นหน้าตายิ้มมากกว่า!s แต่พวกเขาพิมพ์มันตามที่เป็นอยู่มันไม่ใช่เรื่องธรรมดา แต่มันเป็นสัญลักษณ์
colsw

30
@CaptainMan ไม่มีจะลดลงอีโมติคอน) :)มันใช้กันทั่วไประหว่างคนหนุ่มสาวเท่าที่ฉันรู้
talex

4
)ไม่ได้เน้นเพียงรอยยิ้มเท่านั้น เท่าที่ฉันรู้มันเป็นเรื่องยากที่จะพิมพ์:เมื่อใช้รูปแบบแป้นพิมพ์ภาษารัสเซียดังนั้นพวกเขาจึงยิ้มได้โดยไม่ใช้สายตา
Džuris

18
@Juris มันยากที่จะเขียน:ในเค้าโครงรัสเซีย (ЙЦУКЕН) ตามที่พิมพ์^บน QWERTY แต่แท้จริงเป็นรุ่นที่ลดลงของ) :)การกด Shift-0 นั้นง่ายกว่าการกดปุ่มซ้ำหลายครั้ง
Ruslan

คำตอบ:


16

เยลลี่ขนาด 7 ไบต์

ȮL×Ċ”)x

ลองออนไลน์!

ใช้รูปแบบทศนิยม

อย่างไร?

Ȯ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 ฉันเพิ่งสังเกตเห็นว่าสิ่งนี้จะพิมพ์สตริงที่ต้องการเป็นโปรแกรมเต็มรูปแบบ แต่สเปคระบุว่า "กลับ" - นี้ตกลง?
Jonathan Allan


ไม่ต้องกังวล - นี่เป็นความท้าทายครั้งแรกของฉันดังนั้นจึงมีบางสิ่งที่ฉันพลาดฉันได้อัปเดตในคำถามเพื่อให้ชัดเจนยิ่งขึ้น - ขอบคุณที่ถาม
colsw


16

เสียงกระเพื่อมสามัญ 59 52 50

วงเล็บ? ฉันอยู่

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

รายละเอียด

(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

รูปแบบสตริงควบคุม

  • ~a : อาร์กิวเมนต์พิมพ์สวย (นี่คือสตริงที่กำหนด)
  • ~v@{...~}: บล็อกการวนซ้ำ จำกัด การทำซ้ำ V โดยที่ V ถูกนำมาเป็นอาร์กิวเมนต์คือ(* ...)นิพจน์ การวนซ้ำนั้นควรทำซ้ำในรายการ แต่เมื่อคุณเพิ่ม@ตัวแก้ไขรายการคือรายการอาร์กิวเมนต์ที่เหลืออยู่ในฟังก์ชันการจัดรูปแบบ จะต้องมีองค์ประกอบอย่างน้อยหนึ่งรายการในรายการที่วนซ้ำ (มิฉะนั้นเราจะออกโดยไม่สนใจ V) นั่นคือเหตุผลที่มีข้อโต้แย้งเพิ่มเติมในการจัดรูปแบบ (0)

เนื่องจากไม่มีอิลิเมนต์ในรายการที่ถูกใช้โดยรูปแบบลูปจึงไม่มีที่สิ้นสุด แต่โชคดีที่มันถูกล้อมรอบด้วย V ซึ่งก็คือจำนวนของวงเล็บที่จะพิมพ์


แก้ไข: ขอบคุณ Michael Vehrs ที่ชี้ให้เห็นว่าไม่จำเป็นต้องปัดเศษอาร์กิวเมนต์ตัวเลข (คำถามนี้อนุญาตให้ตัดปลาย / ปัดได้อย่างไรก็ตามเราต้องการดังนั้นพฤติกรรมเริ่มต้นทำงานที่นี่)


12
(()) / 10 วงเล็บไม่เพียงพอ
BgrWorker

ใครคิดว่าภาษานี้เป็นความคิดที่ดี?
downrep_nation

ของโครงการรับอาร์กิวเมนต์ทศนิยมformat vบางที Common Lisp ก็ทำเช่นกัน?
Michael Vehrs

@MichaelVehrs แน่นอนขอบคุณมาก
coredump

1
@coredump จริงผมควรได้กล่าวว่า "Guile ของformatยอมรับ ..." เนื่องจากโครงการมาตรฐานformatไม่สนับสนุน~r; และ Guile formatติดตามตัวอย่างของ Common LISP
Michael Vehrs

9

JavaScript ES6, 38 31 30 ไบต์

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

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

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


1
ดีฉันคิดว่ามันสั้นที่สุด คุณสามารถบันทึก byte ผ่าน currying: s=>n=>s+')'.repeat(s.length*n)(มันจะถูกเรียกว่าเหมือนf("hi!")(4.99))
ETHproductions


7

05AB1E , 9 8 ไบต์

g*ï')×¹ì

ลองออนไลน์!

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

ใช้งานได้ทั้งจำนวนเต็มและทศนิยมตามลำดับอาร์กิวเมนต์: f(String, Double)


-1 ในเวอร์ชันใหม่ของ 05AB1Eซึ่งïจะดำเนินการโดยปริยาย×ด้วยอาร์กิวเมนต์ float
Kevin Cruijssen

และนี่คือ 7 byter ที่ทำงานได้ทั้งแบบเดิมและ 05AB1E สมัยใหม่: SG F * ') «
Grimmy


7

Pyth, 8 ไบต์

*\)s*lpz

ทดสอบออนไลน์! ใช้อัตราส่วนความตื่นเต้นก่อนจากนั้นสตริงที่จะถูกล่อลวง

คำอธิบาย:

      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 ไบต์

ฟังก์ชันไม่ระบุชื่อที่รับสตริงaและทศนิยมnพิมพ์เอาต์พุตไปที่ stdout

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

4

Pyth, 9 ไบต์

*s*lpzE")

รับอินพุตสองบรรทัด: สตริงและอัตราส่วน (ทศนิยม)

ลองใช้กับ pyth.herokuapp.com

คำอธิบาย

Aหมายถึงอาร์กิวเมนต์แรกของฟังก์ชันคืออาร์กิวเมนต์Bที่สอง

*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



3

CJam 9 ไบต์

l_,ld*')*

ลองออนไลน์!

สตริงอินพุตในบรรทัดแรกอัตราส่วนการเน้นในช่วง 0 ถึง 5 บนวินาที

คำอธิบาย

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 ไบต์

yn*:"41h

วิธีนี้ใช้รูปแบบทศนิยมของอินพุตที่สอง

ลองออนไลน์!

คำอธิบาย

        % 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 ไบต์

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

อธิบาย:

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

วงเล็บถูกปิดโดยอัตโนมัติ

นี่คือผลลัพธ์ของคอมไพเลอร์หากคุณสนใจ:

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

คอมไพเลอร์รุ่นนี้เขียนเมื่อ 1/27/2017 เวลา 23:12 น. ซึ่งอาจใช้เวลาสักครู่หลังจากโพสต์คำถามนี้ ดังนั้นนี่คือเวอร์ชันที่ใช้งานได้กับคอมไพเลอร์เวอร์ชันเก่าที่สุดเขียนหนึ่งชั่วโมงก่อนหน้านี้: iS$,N?S$;')'*(N*l(S$))(22 ไบต์)


3

PostgreSQL, 102 ไบต์

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

รายละเอียด

ใช้รูปแบบอินพุตจำนวนเต็ม

สิ่งนี้จะทำให้สตริงอินพุตมีความเหมาะสมกับความยาวเป้าหมาย

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

เรียกได้ว่ามี

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


2

Groovy ขนาด 27 ไบต์

ทางออกที่ตรงไปตรงมา

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

โปรแกรมทดสอบ:

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

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


2

Clojure 40 ไบต์

วิธีการแก้ปัญหาที่น่าเบื่อค่อนข้าง:

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

เพียงแค่ลดstrฟังก์ชั่นในรายการวงเล็บปิดด้วยสตริงเป็นพารามิเตอร์เริ่มต้น

ดูออนไลน์ได้ที่: https://ideone.com/5jEgWS

โซลูชันที่ไม่น่าเบื่อ (64 ไบต์):

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

แปลงสตริงเข้ากับสัญลักษณ์ (การกำจัดของคำพูด) และซ้ำ ๆ ใช้ฟังก์ชั่นที่มันสร้างลำดับอนันต์เช่นนี้list (a (a) ((a)) (((a))) ... )ใช้nthองค์ประกอบแปลงเป็นสตริงและแทนที่วงเล็บเปิดทั้งหมดโดยไม่มีอะไร

ดูออนไลน์: https://ideone.com/C8JmaU


1
#(.replaceAll(str(nth(iterate list %)(*(count %)%2)))"[(\"]""")น้อยกว่า 1 ไบต์ (yay) ฉันต้องการคอมพ์ แต่ไม่สามารถรับได้ต่ำกว่า 70 ไบต์
Michael M

คุณสามารถเปลี่ยน")"ไป\)เพื่อประหยัดไบต์
clismique

2

SimpleTemplate ขนาด 92 ไบต์

รับสตริงเป็นพารามิเตอร์แรกและ "อัตราส่วน" เป็นพารามิเตอร์ที่สอง
อัตราส่วนอยู่ระหว่าง 0 ถึง 5 โดยมีทศนิยม 2 ตำแหน่ง

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

อย่างที่คุณเห็นมันไม่เหมาะสม
2 {echo}สามารถลดได้ถึง 1
เนื่องจากข้อผิดพลาดในคอมไพเลอร์รหัสนี้ไม่สามารถลดลงได้อีกมาก


Ungolfed:

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

หากไม่มีข้อผิดพลาดรหัสจะมีลักษณะเช่นนี้ 86 ไบต์:

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

2

C # Interactive, 77 67 ไบต์

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

การโต้ตอบกับ C # นั้นหวาน


1
หากคุณกำลังใช้ C # แบบโต้ตอบที่จะต้องอยู่ในส่วนหัวเป็นอย่างอื่นใน C # คุณควรรวมหรือมีคุณสมบัติอย่างเต็มที่using System; Mathนอกจากนี้ไม่แน่ใจว่าคุณสามารถทำได้ในแบบโต้ตอบ แต่คุณสามารถรวบรวมFunc<string, Func<int, string>>เพื่อบันทึกไบต์เช่นs=>p=>s+new...
TheLethalCoder

1
นอกจากนี้คุณอาจไม่จำเป็นต้องโทรไปMath.Roundที่แคสต์intควรจะโทรFloorและ OP กล่าวว่าอย่างใดอย่างหนึ่งFloorหรือCeilingดี
TheLethalCoder

1

SmileBASIC ขนาด 29 ไบต์

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

ตั้งแต่3*4.99= 14.97เพียง14หรือ15จะยอมรับได้เป็นคำตอบรุ่น 29 ไบต์ควรทำงานได้ดีขอโทษ!
colsw

1

Gol> <> (Golfish) 17 ไบต์

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

ลองได้ที่นี่

บรรทัดบนสุดจะอ่านอักขระ ( i) จนกระทั่งพบบรรทัดใหม่ (ASCII 10, a) จากนั้นกดลง ( v)

จากนั้นเราจะละทิ้งอักขระหนึ่งตัว (ขึ้นบรรทัดใหม่) ด้วย~กดความยาวของสแต็ก ( l) อ่าน float ( I) คูณสองและซ้ำ ๆ ( R) ดันอักขระ ")" หลายครั้ง ขั้นสุดท้ายให้สลับสแต็ก ( r) ออกและหยุด ( H)


1

PHP, 50 ไบต์

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

รับค่าสตริงและจำนวนทศนิยมเป็นอาร์กิวเมนต์บรรทัดคำสั่ง ลดการขยาย ทำงานด้วย-r;

ชำรุด

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

ทับทิมขนาด 25 ไบต์

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

ฉันใช้แลมบ์ดา โปรแกรมทดสอบน่าจะเป็น:

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

1

Clojure, 68 ไบต์

ฟังก์ชันที่ไม่ระบุชื่อที่รับอินพุตทศนิยม

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

แท้จริง Lisp โปรแกรมแรกที่ฉันเคยเขียน! ฉันสนุกแล้ว


ยินดีต้อนรับสู่โลกแห่งเสียงกระเพื่อม! : P ใน Clojure คุณสามารถใช้รูปแบบย่อของฟังก์ชันที่ไม่ระบุชื่อ#(...)และคุณสามารถกำจัดprint(เนื่องจากฟังก์ชันส่งคืนควรยอมรับได้) คุณสามารถเปลี่ยนreduceเป็นapplyสำหรับstrฟังก์ชั่นและคุณสามารถเปลี่ยน")"เป็น\)ซึ่งทำสิ่งเดียวกัน #(str %(apply str(repeat(*(count %)%2)\)))))ดังนั้นรหัสสุดท้ายควรจะ:
clismique

นอกจากนี้สถานะปัจจุบันของรหัสของคุณใช้งานไม่ได้(#(...) "codegolf" 125)จะต้องเพิ่ม 125 เปอร์เซ็นต์ของความยาวของ "codegolf" แทนความยาว125 เท่าของ "codegolf" ดังนั้นโปรแกรมที่คงที่คือ: #(str %(apply str(repeat(*(count %)%2 1/100)\))))ซึ่งก็คือ 49 ไบต์
clismique

1

C ++ 14, 43 ไบต์

แลมบ์ดาขณะที่ไม่มีชื่อแก้ไขการป้อนข้อมูลสมมติว่าsมีความคล้ายคลึงกับstd::string(มี.append(int,char)และสมมติว่าpเป็นประเภทจุดลอย:

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

การใช้งาน:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.