คำนวณความยากของคำถามของ Golf Code


43

การบรรยายสรุป

ความยากของคำถาม Code Golf สามารถคำนวณได้ดังนี้:

สูตร

vจำนวนการดูคำถามอยู่ที่ไหน

และaจำนวนคำตอบที่คำถามมีอยู่

และ⌈ x ⌉เป็นผู้ประกอบการติดเพดาน

นอกจากนี้:

ที่หนีบ

ปัญหาปัจจุบันของคำถามนี้: ***

งาน

เขียนโปรแกรมที่จะใช้เวลาสองจำนวนเต็มและเอาท์พุทยากลำบากในการ(v and a)asterisks (*)

อินพุตสามารถอยู่ในรูปแบบของอาร์เรย์สตริงแยกหรือเป็นอาร์กิวเมนต์ฟังก์ชันแยกต่างหาก

ทดสอบข้อมูล

Views   Answers Difficulty  Program Output
163     2       2           **
548     22      1           *
1452    24      1           *
1713    37      1           *
4162    32      2           **
3067    15      3           ***
22421   19      10          **********

ตัวอย่างด้วย pseudocode

v: 1713    
a: 37
out = clamp(ceil(((v/a)/700)*10), 0, 10); // evaluates to 1
//program will output '*'

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ! อนุญาตให้ใช้ช่องว่างต่อท้าย / นำหน้า


3
ฉันพบว่า LaTeX ยากที่จะเข้าใจว่าสตริงสูตรง่าย ๆ .. แต่สิ่งที่คนส่วนใหญ่ต้องการฉันเดา ..
Shaun Wild

3
คุณควรจะเพิ่ม [ underhanded ] สำหรับคำถามที่ถูกส่งมอบให้
อดัม

5
นี่เป็นคำถามของ Code Golf ไม่ใช่ระบบจริงที่นำไปใช้กับไซต์ ใครจะสนใจว่ามันไม่ยุติธรรม?
Shaun Wild

13
มันค่อนข้างเร็วดังนั้นฉันอาจจะคิดถึงบางสิ่งบางอย่างที่นี่ แต่ทำไม/700 * 10แทนที่จะเป็น/70?
Kevin L

4
@KevinL Ssshhhh;)
Shaun Wild

คำตอบ:


49

JavaScript (ES6), 40 39 ไบต์

v=>a=>"**********".substring(10-v/a/70)

เนื่องจากsubstringมีการจับยึดที่จำเป็นและพฤติกรรม "เพดาน" แก้ไข: โดยปกติฉันขี้เกียจเกินกว่าจะรำคาญ แต่เพราะมันมี 4 upvotes ฉันได้ทำตามคำแนะนำของ @ MarsUltor เพื่อประหยัด 1 ไบต์โดยการแกง


โอ้นั่นคือการใช้งาน substring :-)
ดี

7
ใช้การแกง:v=>a=>
ASCII เท่านั้น

3
คุณสามารถใช้substrแทนได้หรือไม่? ฉันรู้ว่าพารามิเตอร์ตัวที่สองที่ทำให้แตกต่าง แต่ไม่แน่ใจเกี่ยวกับแรก ...
Dom เฮสติ้งส์

1
@ DomHastings: ใช่แม้ว่าsliceจะสั้นกว่านี้อีก
Yay295

5
@DomHastings ไม่ทั้งสองsubstrและsliceตีความอาร์กิวเมนต์เชิงลบเป็นการนับถอยหลังจากจุดสิ้นสุดของสตริง
Neil

38

ฉันต้องการทำสิ่งนี้มาระยะหนึ่งแล้ว ...

HTML + CSS 491 487 485 ไบต์

-4 ไบต์ขอบคุณ Conor O'Brien
-2 ไบต์ขอบคุณ Helium Nuclei ที่ปล่อยออกมา

อินพุตถูกใช้เป็นความกว้างและความสูงของหน้าต่างหน้า ความกว้างคือจำนวนการดูและความสูงคือจำนวนคำตอบ

<style>p{overflow:hidden;width:1ch}@media(max-aspect-ratio:70/2){p{width:1ch}}@media(max-aspect-ratio:70/3){p{width:2ch}}@media(max-aspect-ratio:70/4){p{width:3ch}}@media(max-aspect-ratio:70/5){p{width:4ch}}@media(max-aspect-ratio:70/6){p{width:5ch}}@media(max-aspect-ratio:70/7){p{width:6ch}}@media(max-aspect-ratio:70/8){p{width:7ch}}@media(max-aspect-ratio:70/9){p{width:8ch}}@media(max-aspect-ratio:7/1){p{width:9ch}}@media(max-aspect-ratio:70/11){p{width:10ch</style><p>**********

คุณสามารถลองในเบราว์เซอร์ของคุณโดยการป้อน

data:text/html,<style>p{overflow:hidden;width:1ch}@media(max-aspect-ratio:70/2){p{width:1ch}}@media(max-aspect-ratio:70/3){p{width:2ch}}@media(max-aspect-ratio:70/4){p{width:3ch}}@media(max-aspect-ratio:70/5){p{width:4ch}}@media(max-aspect-ratio:70/6){p{width:5ch}}@media(max-aspect-ratio:70/7){p{width:6ch}}@media(max-aspect-ratio:70/8){p{width:7ch}}@media(max-aspect-ratio:70/9){p{width:8ch}}@media(max-aspect-ratio:7/1){p{width:9ch}}@media(max-aspect-ratio:70/11){p{width:10ch</style><p>**********

เป็น URL ในแท็บใหม่


11
+1 สำหรับการคิดนอกกรอบ - เอ๊ะ, กำลังคิดถึงกล่อง ...
59

2
คุณต้องการแท็กปิด p หรือไม่?
Conor O'Brien

ฉันชอบที่มันอัปเดตเมื่อฉันเปลี่ยนขนาดของหน้าต่าง
YSC

@ ConorO'Brien: จุดดี!
Yay295

1
คุณไม่ต้องการสองคนสุดท้าย}เหมือนกัน
betseg


12

Javascript (ES6), 37 36 ไบต์

v=>a=>"*".repeat((v/=a*70)<9?v+1:10)

บันทึก 1 ไบต์ด้วยการขอบคุณขอบคุณ TheLethalCoder


3
คุณสามารถใช้v=>a=>แทนได้(v,a)=>หรือไม่?
TheLethalCoder

@TheLethalCoder - อัปเดต ขอบคุณ!
Arnauld

2
ใช้งานv=70, a=1ไม่ได้หรือไม่
Neil

1
@Neil - ถูกต้อง มันจะถูกปิดโดย 1 จุดถ้าจำนวนของคำตอบเป็นตัวหารที่แน่นอนของจำนวนการดู หรือกล่าวอีกอย่างหนึ่งก็คือการคาดการณ์มุมมองต่อไป ;-)
Arnauld

11

Mathematica, 38 35 ไบต์

StringRepeat["*",10,⌈#/#2/70⌉]&

ขอบคุณ @MartinEnder เป็นเวลา 3 ไบต์


1
สวัสดีและยินดีต้อนรับสู่ PPCG! นี่เป็นคำตอบที่ยอดเยี่ยม!
NoOneIsHere

@ NoOneIs ขอขอบคุณ! แต่เดิมฉันคิดว่าClipซึ่งมีไวยากรณ์เดียวกับตัวหนีบของ OP ค่อนข้างมาก แต่จากนั้นฉันเห็นว่าStringRepeatมีอาร์กิวเมนต์ตัวเลือกที่สามสำหรับตัดทอน
u54112

3
มีอักขระ Unicode สำหรับซ้ายและขวายึดเพดานซึ่งร่วมกันทำขึ้นเพียง 6 ไบต์แทน 9 Ceiling[]คุณต้องการสำหรับการเป็น
Martin Ender

9

EXCEL, 29 ไบต์

หากคุณนับ Excel เป็นตัวแทนของ VBA Excel คุณสามารถใช้

=REPT("*",MIN(1+v/(70*a),10))

โดยที่vและaเป็นชื่อของเซลล์อ้างอิง


3
สวัสดีและยินดีต้อนรับสู่ PPCG! นี่เป็นโพสต์แรกที่ดี! และยังใช้ได้
Rɪᴋᴇʀ

สวัสดีเช่นกัน @EasterlyIrk ขอบคุณสำหรับการต้อนรับที่อบอุ่น :)
Anastasiya-Romanova

8

CJam, 18 15 14 ไบต์

บันทึก 1 ไบต์ขอบคุณ Peter Taylor และ 3 ไบต์ขอบคุณ Adnan

'*A*q~d/70/m]<

ลองออนไลน์

'*A*            e# Push "**********"
    q~d/        e# Get the input and divide the two numbers
        70/     e# Divide by 70
           m]   e# Ceil, yielding x
             <  e# Slice the string, taking the first x elements

8

C #, 68 49 48 ไบต์

v=>a=>"**********".Substring((int)(10-v/a/70d));

นี่คือรุ่น C # ของคำตอบที่ยอดเยี่ยมนี้โดย Neil

บันทึกอีก 19 ไบต์ด้วย Neil


ลองหรือเพียงแค่(int)System.Math.Floor(10-v/a/70) (int)(10-v/a/70)
Neil

@Neil ดูเหมือนว่าฉันจะต้องจากไป70dคนเดียว แต่ก็ทำงานได้ดีขึ้นขอบคุณ
TheLethalCoder

1
ขออภัยไม่เห็นที่dนั่น
Neil

ฉันคิดว่าคำตอบอีกข้อหนึ่งที่ช่วยประหยัดหนึ่งไบต์ด้วย:v=>a=>
Brian McCutchon

@BrianMcCutchon ไม่รู้ด้วยซ้ำว่าฉันจะทำอย่างไรใน C # ขอบคุณ
TheLethalCoder

7

Java 8, 57 ไบต์

ใช้แลมบ์ดาเพื่อบันทึกไบต์ทำการคำนวณและสตริงย่อยเพื่อส่งคืนคำตอบ

(v,a)->"**********".substring(Math.max(0,(700*a-v)/70/a))

นี่คือชั้นเรียนของฉันสำหรับการทดสอบ

public class DifficultyCalculator{
    static interface h{ String f(int v, int a);}
    static void g(h H){
        System.out.print(H.f(163,2));System.out.println("\t**");
        System.out.print(H.f(548,22));System.out.println("\t*");
        System.out.print(H.f(1452,24));System.out.println("\t*");
        System.out.print(H.f(1713,37));System.out.println("\t*");
        System.out.print(H.f(4162,32));System.out.println("\t**");
        System.out.print(H.f(3067,15));System.out.println("\t***");
        System.out.print(H.f(22421,19));System.out.println("\t**********");
    }
    public static void main(String[] args) {
        g( // 70
            (v,a)->"**********".substring(java.lang.Math.max(0,(int)(10-v/70d/a)))
        );
    }
}

ปรับปรุง

  • -3 [16-08-19] การใช้จำนวนเต็มหาร
  • -10 [16-08-18] ลบการนำเข้าที่ไม่จำเป็นออกไปขอบคุณ@ OlivierGrégoire !
  • -18 [16-08-17] ส่งคืนสตริงแทนการพิมพ์

2
Nice คำตอบ Java ที่ไม่ใช่รถไฟ!
Ismael Miguel

4
ไม่จำเป็นjava.lang.เพราะมันเป็นแพ็คเกจที่รวมมาด้วย
Olivier Grégoire

คุณกำลังปัดไม่ใช่เพดาน!

1
@Advancid ฉันทดสอบมันและSystem.out.println((int)2.99);พิมพ์2และเนื่องจากฉันใช้ค่า pre-floored จาก 10 และจากนั้นปูพื้นมันก็เหมือนกับการเอาเพดานออกจาก 10
NonlinearFruit

6

MATLขนาด 12 ไบต์

/70/0:9>42*c

ลองออนไลน์!

คำอธิบาย

ปัดเศษขึ้นและหนีบจะทำไปพร้อม ๆ กันดังนี้จำนวนเมื่อเทียบกับองค์ประกอบของอาร์เรย์แต่ละx = v/a/70 [0 1 ... 9]จำนวนของอาร์เรย์นั้นที่เกินโดยxจะกลายเป็นเครื่องหมายดอกจันและส่วนที่เหลือจะเป็นช่องว่าง

/      % Take the two numbers implicitly. Divide. (Example: for inputs 3067, 15
       % we get 204.47)
70/    % Divide by 70 (we get 2.92)
0:9    % Push array [0 1  ... 9]
>      % See which of those are exceeded by the previous number (2.92 exceeds
       % 0, 1 and 2, so we get [1 1 1 0 ... 0]). This does the rounding up
       % and the clamping
42*    % Multiply by 42, which is the ASCII code of '*' (we get [42 42 42 0 ... 0])
       % Char 0 will be displayed as space
c      % Convert to char. Implicitly display

5

Python2, 32 ไบต์

บันทึก 3 + 2 ไบต์และแก้ไขโดยข้อผิดพลาดเดียวเนื่องจาก Leaky Nun

lambda v,a:('*'*10)[:~-v/a/70+1]

คล้ายกับคำตอบของนีล ใช้ความจริงที่ว่า Python2 ทำการหารจำนวนเต็ม


ล้มเหลวเมื่อv=70และa=1
Leun Nun

f=สามารถถอดออกได้
รั่วนูน

v, aสามารถเป็นv,a
Leun Nun

ขอบคุณ! ควรทำงานตอนนี้ อาจผิดสำหรับ v = 0, a = 1 ตอนนี้ แต่กรณีนี้ไม่สามารถมีอยู่ได้หรือไม่
คณิตศาสตร์

นั่นคงไม่ผิดสำหรับ v = 0, a = 1
Leun Nun

5

Haskell, 35 ไบต์

v#a=[1..min(ceiling$v/a/70)10]>>"*"

[1..min(ceiling$v/a/70)10]สร้างช่วงจาก 1 ถึงความยากในการคำนวณ (รายการว่างสำหรับความยากลำบาก 0) a>>bรายการซ้ำb length aบ่อยครั้ง



4

C #, 97 89 87 77 42 41 ไบต์

v=>a=>new string('*',(v/=a*70)<9?v+1:10);

บันทึก 10 ไบต์ขอบคุณAdám

บันทึกไม่กี่ไบต์ด้วย Arnauld


คุณสามารถบันทึกล็อตทั้งหมดโดยแทนที่(int)System.Math.Ceiling(v/a/70d)ด้วย(v+69)/(70*a)... โปรดทราบว่ายิ่งกว่านั้น v / a ไม่สามารถเป็นลบได้ดังนั้นcสามารถทำให้ง่ายขึ้นมากเพราะคุณไม่จำเป็นต้องตรวจสอบสิ่งนั้น
Tom van der Zanden

4

Perl, 35 32 ไบต์

say"*"x(10-($-=10-pop()/70/pop))

ใช้-Eเพื่อเปิดใช้งานsayและกำหนดอาร์กิวเมนต์ในลำดับย้อนกลับ:

perl -E 'say"*"x(10-($-=10-pop()/70/pop))' 2 163

หากอาร์กิวเมนต์บน STDIN ได้รับอนุญาตสิ่งต่อไปนี้คือ 29 ไบต์:

(echo 163; echo 2) | perl -pe '$_="*"x(10-($-=10-$_/70/<>))'

ฉันจำไม่ได้ว่ามันจะเหมือนกันทุกประการ แต่คุณสามารถมี0|แทนได้$-=หรือไม่ (การคิดนำหน้าโอเปอเรเตอร์อาจไม่ถูกต้อง ... )
Dom Hastings

@DomHastings 0|ทำให้จำนวนลบเป็นจำนวนมาก (นำไปสู่ศูนย์*s), $-=คลิปเป็น 0 (นำไปสู่สิบ*s) ซึ่งเป็นสิ่งที่ฉันต้องการที่นี่
Ton Hospel

แน่นอนว่ามันเป็นจำนวนเต็มบวกเท่านั้น! ขอบคุณสำหรับการเตือน ฉันแน่ใจว่าฉันจะลืมว่าเมื่อฉันต้องการมัน ... 😀
Dom Hastings

4

R, 68, 50 52 ไบต์

f=function(v,a)cat(rep("*",1+min(v/a/70,10)),sep="")

rep วางนาทีบนหมายเลข 0 โดยปริยาย

ขอบคุณ @plannapus และ @ Anastasiya-Romanova 秀สำหรับการระบุข้อผิดพลาดของฉัน


คุณสามารถลบได้f=
Cyoce

1
ผลลัพธ์ของรหัสของคุณไม่เท่ากับข้อมูลทดสอบ คุณควรเพิ่ม 2 ไบต์มากขึ้น1+หลังจากที่min(ในการสั่งซื้อที่จะได้รับผลเดียวกัน
Anastasiya-Romanova秀


3

Javascript ES6, 48 ไบต์

a=>b=>"*".repeat(Math.ceil(Math.min(a/b/70,10)))

3

C, 54 , 51 , 50 , 49 ไบต์

สมมติว่าvเป็นบวกหรือเป็นศูนย์และaบวกx < minกรณีหนีบไม่เคยพบเนื่องจากไม่มีวิธีผลการดำเนินงานเพดานสามารถลบ นอกจากนี้เลขจำนวนเต็มเกี่ยวกับค่าที่ไม่เป็นลบจะให้ผลลัพธ์กับพื้นเสมอดังนั้นเราจึงเพิ่ม1เพื่อให้ได้เพดาน

โซลูชันนี้ต้องการwriteฟังก์ชันใช้งานได้บน Linux เป็นอย่างน้อย

F(v,a){write(1,"**********",(v/=a*70)>9?10:v+1);}

ทดสอบหลัก:

int main() {
  F(163, 2);
  putchar('\n');
  F(548, 22);
  putchar('\n');
  F(1452, 24);
  putchar('\n');
  F(1713, 37);
  putchar('\n');
  F(4162, 32);
  putchar('\n');
  F(3067, 15);
  putchar('\n');
  F(22421, 19);
  putchar('\n');
}

1
แทนที่(v=v/a/70)ด้วย(v/=a*70)บันทึก 1 ไบต์
เพดานแมว

ดีจับ @ceilingcat!
Stefano Sanfilippo

2

javascript: 82 73 ไบต์

 (v,a)=>console.log("*".repeat(Math.min(Math.max(0,Math.ceil(v/a/70),10)))
  • บันทึกบางไบต์หลังจากAdámชี้ให้เห็นว่าฉันมองข้าม / 700 * 10 = / 70และการกำจัด parens

@ Adámมีอะไรแก้ไข?
Martin Ender

@ Adámหากผู้คนอ่านคำตอบใด ๆ พวกเขาจะมีสปอยเลอร์อยู่แล้ว ย้อนกลับไปเพราะปัจจุบันประโยคนั้นไม่มีประโยชน์พอสมควรและทำให้ผู้คนคลิกที่ประวัติการแก้ไข
Martin Ender

@ Adámนั่นคือสิ่งที่ฉันมักจะใช้ตัวเอง แต่ฉันไม่เห็นอันตรายใด ๆ ในรุ่นปัจจุบัน
Martin Ender

ไม่จำเป็นต้องใช้console.logมันการกลับมาเป็นเรื่องปกติ นอกจากนี้คุณยังสามารถบันทึกไบต์ด้วยv=>a=>แทน(v,a)=>
Cyoce

2

Dyalog APL ขนาด 15 ไบต์

'*'⍴⍨10⌊⌈⎕÷70×⎕

'*'⍴⍨อักขระซ้ำหลายครั้ง:
10⌊นาที (10, ...
⎕÷อินพุตหารด้วยอินพุต
70×เจ็ดสิบครั้ง

ลองใช้ออนไลน์!


เป็นนักกอล์ฟที่ใช้อัลกอริทึมของ Mendo หรือไม่?
Leun Nun

@LeakyNun ฉันไม่คิดอย่างนั้น:'*'/⍨(⎕÷70×⎕)>⍳10
2559

2

แมงกะพรุนขนาด 18 ไบต์

P
#'*
mM/%i
10 %70

[a v]จะเข้าในรูปแบบ ลองออนไลน์!

คำอธิบาย

  • %คือส่วนกลับซึ่ง%70ก็คือ 1/70
  • i คืออินพุตเป็นอาร์เรย์สององค์ประกอบ
  • /%กับปัจจัยการผลิตiและ%70ลดอาร์เรย์ตามหมวดพลิกกับค่าเริ่มต้นi %70ในคำอื่น ๆ ก็คำนวณv / (A / (1/70))ซึ่งมีค่าเท่ากับv / (70 * ก)
  • Mใช้เวลาเพดานของค่านี้และใช้เวลาสูงสุดนั้นและm10
  • #'*ซ้ำตัวอักษร*ตัวอักษรที่หลายต่อหลายครั้ง
  • P พิมพ์ผลลัพธ์โดยไม่มีเครื่องหมายคำพูด

2

MATLAB, 34 33 ไบต์

เพราะฉันชอบสิ่งที่ท้าทายนี้มากนี่คือหนึ่งใน MATLAB (เอาท์พุทที่ช่องว่างต่อท้าย):

@(v,a)[(ceil(v/a/70)>0:9)*42,'']

แรงบันดาลใจจากคำตอบของ @Luis Mendo ขอบคุณ @pajonk สำหรับการบันทึกหนึ่งไบต์


วิธีการที่ดี! ฉันมีหนึ่ง 40 ไบต์ที่จะโพสต์ ... BTW คุณสามารถบันทึกหนึ่งไบต์ใช้แทน[... ''] char(...)และคุณต้องการceilเวลาเมื่อสิ้นสุดคุณเปรียบเทียบกับจำนวนเต็มหรือไม่
pajonk

2
ขอบคุณ @pajonk - จริงๆหนึ่งสามารถเรียนรู้บางสิ่งบางอย่างในเว็บไซต์นี้จะทำให้รหัสของฉันแม้แต่อ่านได้น้อยลง)
mathause

2

m4, 136 135 ไบต์

define(r,`ifelse($1,0,,eval($1>9),1,*`r(9)',*`r(decr($1))')')define(f,`r(ifelse(eval($1%($2*70)),0,eval($1/$2/70),eval($1/$2/70+1)))')

กำหนดแมโครfที่ใช้vและaและขยายไปยังเอาต์พุตที่ถูกต้อง โปรแกรมส่วนใหญ่เป็นการใช้งานบนเพดาน


2

dc, 110 108 104 98 ไบต์

นี่เป็น doozy ตั้งแต่การหั่นไม่ใช่เรื่อง นอกจากนี้ dc ไม่ได้จัดการสตริง ฉันแค่รอสตริงที่จะเข้ารหัส <5 ชั่วโมง ในด้านบวกในที่สุดฉันก็เริ่มเขียนโครงสร้างทั่วไปเช่นลูป ยังต้องกำหนดการปัดเศษ / เพดานดังนั้นขอบคุณสำหรับสิ่งนั้น

[42P]sd[dsi[li0!=dli1-dsi0!=L]dsLx]sl[Isi[li0!=dli1-dsi0!=L]dsLx]sg[1+]saIk/70*0k1~0!=adI>ldI!>gIP

เรียกใช้ใน bash:

echo 'v a (above)'|dc
# Wholly:
>> echo '163 2 [42P]sd[dsi[li0!=dli1-dsi0!=L]dsLx]sl[Isi[li0!=dli1-dsi0!=L]dsLx]sg[1+]saIk/70*0k1~0!=adI>ldI!>gIP'|dc
# outputs:
**
>> 

การแทนที่ (ด้านบน) ด้วยรหัสvและaกับคู่หูที่เกี่ยวข้องด้านบน เครื่องหมายคำพูดเดี่ยวนั้นมีความสำคัญ (ไม่เช่นนั้นคุณจะได้ข้อมูลประวัติของ bash)


อธิบาย:

[42P]sd   # Here we store a macro in register d to print 1 * without a newline

[dsi[li0!=dli1-dsi0!=L]dsLx]sl # Store the "less than" case, a for loop which
                        # uses the top-of the stack as it's number of iterations.
[Isi[li0!=dli1-dsi0!=L]dsLx]sg # Store the "greater than" case. It's the above,
                        # but it puts 10 on the stack to use instead.

[1+]sa # Store a macro to add 1 to whatever is the top-of-stack.


Ik # Set precision at non-zero to allow decimal division

/70* # Divide the top two of the stack, v/a; multiply by 70 (`/700*10` == `/70`)
             # dc is postfix and stack-based, so operators come after operands.

0k1~0!=a     # This is a ceiling function.
|> 0k  # set precision to 0 to perform integer division
|> 1~  # push the quotient of integer division by 1, and then the remainder. (r is top)
|> 0!=a # If the top-of-stack (decimal part) is not 0, add 1 to the quotient

dI>ldI!>g # Conditional statement
|> dI>l  # (d)uplicate the top, push 10 on. If 10 > the old top, execute the `l`ess-than
          # case, which loops top-of-stack times.
|> dI!>g # Complement of the above, using the `g`reater-than to loop 10 times.

IP # print a newline

นี่อาจเป็นเรื่องที่เล่นกอล์ฟได้มากกว่า แต่ฉันพยายามทำให้เสร็จเพื่อหลีกเลี่ยงการเพิ่มประสิทธิภาพก่อนวัยอันควร

  • บันทึก 2 ไบต์ด้วยการทำซ้ำการบันทึกแทนการบันทึกการโหลด
  • บันทึก 4 ไบต์หารด้วย 70
  • 6 ไบต์จากคำแนะนำของ daniero (ไม่ใช่สตริง, ASCII nums แทน; 10 => I)

[*]n42P=> ทุกกรณีของจะถูกแทนที่ด้วย10 =>I[]pIP
daniero

2

Haskell, 35 ไบต์

การแก้ปัญหานี้แตกต่างจากคำตอบของLaikoni อย่างสิ้นเชิงเมื่อได้รับสิ่งที่ไม่สำคัญนี้ แต่คะแนน (สำหรับตอนนี้) เหมือนกันทุกประการ

v%a=take(ceiling$v/a/70)[0..9]>>"*" 

สิ่งนี้ก่อให้เกิดดาวสิบดวงจากนั้นโกนหนวดบางส่วนออก ง่ายต่อการขยายไปสู่ความยากลำบากโดยพลการด้วยรายการที่ไม่มีที่สิ้นสุด

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

v%a=take(1+div v(a*70))[0..9]>>"*"


1

PowerShell v2 +, 47 ไบต์

-join(('*'*11)[1..($args[0]/$args[1]/70+.499)])

ค่อนข้างพอร์ตของนีล @ คำตอบ JavaScript

จะเข้า$argsและแบ่งพวกเขาแล้วแบ่งว่าด้วยและเพิ่ม70 .499เนื่องจาก PowerShell ทำการปัดเศษของนายธนาคารนี่จึงเป็นceilความแม่นยำทศนิยมสองตำแหน่งอย่างมีประสิทธิภาพ หากต้องการความแม่นยำเพิ่มเติมให้ยึดหมุดเพิ่มเติม9ตามที่ต้องการ

นอกจาก1..นี้ยังมีการจัดทำดัชนีช่วงเป็นสตริง สตริงเป็นเช่น'*'*11 '***********'นั่นส่งผลให้เป็น char-array ดังนั้นเรา-joinจึงกลับมารวมกันเป็นสตริง สตริงนั้นจะถูกทิ้งไว้บนไปป์ไลน์และเอาท์พุทนั้นเป็นนัย เช่นเดียวกับคำตอบของ Neil สิ่งนี้จะ "บีบ" เอาต์พุตให้อยู่ระหว่าง 1 ถึง 10 ดาว

ชุดทดสอบ

PS C:\Tools\Scripts\golfing> @(@(163,2), @(548,22), @(1452,24), @(1713,37), @(4162,32), @(3067,15), @(22421,19))|%{($_-join', ')+" -> " +(.\difficulty-of-a-question $_[0] $_[1])}
163, 2 -> **
548, 22 -> *
1452, 24 -> *
1713, 37 -> *
4162, 32 -> **
3067, 15 -> ***
22421, 19 -> **********

1

Python 3, 69 68 ไบต์

ฉันไม่ต้องการคัดลอกคำตอบ Python 2 ดังนั้นของฉันจึงยาวขึ้นเล็กน้อย

from math import*
x=lambda v,a:print(max(0,min(ceil(v/a/70),10))*'*')

บันทึก 1 ไบต์ต้องขอบคุณ Program man


คุณจำเป็นต้องรวมการนำเข้า แต่from math import *จะบันทึกสองสามไบต์
ไม่เชิงเส้นผลไม้

รวมการนำเข้าไว้ในจำนวนไบต์
Cody

ตามข้อมูลจำเพาะ 0 เป็นดาวขั้นต่ำไม่ใช่ 1 และบันทึกทั้ง 1 ไบต์import*ด้วยไม่มีที่ว่าง
โปรแกรมชาย

อ๊ะฉันอ่านผิดน้อยที่สุด ขอบคุณสำหรับคำแนะนำ
โคดี้

1
@Programman แม้ว่าข้อมูลจำเพาะจะบอกว่า 0 เป็นค่าต่ำสุดการหารและการคูณของจำนวนเต็มไม่เป็นลบไม่เป็นศูนย์รับประกันได้ถึง = 0 และผู้ดำเนินการบนเพดานจะทำทุกอย่างระหว่าง 0-1 และทำให้เป็น 1 แม้ว่าฉันจะคิดว่า เป็นกรณีของ 0 views อย่างไรก็ตาม 0 views หมายถึง 0 คำตอบซึ่งนำไปสู่พฤติกรรมที่ไม่ได้กำหนด (หารด้วย 0) มีแนวโน้มที่พิสูจน์ได้ว่า 0 เป็นไปไม่ได้และไม่ควรพูดถึง
Delioth

1

จริงแล้ว 14 ไบต์

:70a\\u9ukm'**

ลองออนไลน์!

ใช้ประโยชน์จากความจริงที่ว่ามุมมองและ 0 0 ceil(v/a) > 0คำตอบเป็นไปไม่ได้และทำให้

คำอธิบาย:

:70a\\u9ukm'**
:70             push 70 ([70 a v])
   a            invert stack ([v a 70])
    \\          integer division twice ([v//a//70])
      u         add 1 ([v//a//70 + 1])
       9uk      push 10, make stack into list ([[v//a//70+1, 10]])
          m     minimum of list
           '**  push "*", repeat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.