คุณได้รับหิมะมากแค่ไหน?


12

ฉันขอโทษสำหรับ wordiness เราสนุกกับมันในที่ทำงานที่สนามกอล์ฟภายในของเรา แต่มันต้องการอีเมลสองสามฉบับเพื่อขอความกระจ่างดังนั้นฉันหวังว่าฉันจะบันทึกส่วนใหญ่เป็นครั้งแรก

ปัญหา

รับสแนปชอตของหิมะ“ จำลอง” (เป็นสตริง, stdin หรือพารามิเตอร์ในฟังก์ชัน / วิธีการของคุณ) รายงานค่า 4 ค่า: ความลึกต่ำสุดความลึกสูงสุดความลึกเฉลี่ยและระยะเวลา

นี่คือตัวอย่างที่จัดรูปแบบเพื่อแสดงอินพุต:

* * **     
** * ***    
** *  *    
*          
--------

'*' เป็นเกล็ดหิมะและ '-' คือพื้น ลองนึกภาพ "เกล็ดหิมะ" ทั้งหมดที่ตกลงสู่พื้นดิน นี่คือ“ ภาพรวม” สุดท้าย:

*      
*          
** * **    
********    
--------

คุณต้องรายงานเกี่ยวกับ:

  1. ความลึกต่ำสุด - นับ“ กอง” ที่สั้นที่สุด (1 ในตัวอย่างด้านบน)
  2. ความลึกสูงสุด - นับ“ กอง” ที่สูงที่สุด (4 ในตัวอย่างด้านบน)
  3. ความลึกเฉลี่ย - จำนวนเฉลี่ยของ "เสาเข็ม" ทั้งหมด (1.9 ในตัวอย่างด้านบน - การปัดเศษเป็นสิบ)
  4. ระยะเวลา - (แต่ละ“ ตก” = 1 วินาที) - เวลาจากภาพแรกไปจนถึงภาพสุดท้าย (3 วินาทีในตัวอย่างด้านบน)

อีกตัวอย่างสำหรับการอ้างอิง:

     * 
   *   *
      *
*      
--------

ภาพรวมสุดท้าย:

*  * ***
--------

INPUT

“ สแนปชอต” เริ่มต้นจะมี 8“ แถว”, 8“ คอลัมน์” และคั่นด้วยไปป์ (ไปป์แยกแถว) ตัวอย่างเช่น (ไม่รวมเครื่องหมายคำพูด):

“        |        |        |        |     *  |   *   *|      * |*       |--------” 

เอาท์พุท

4 ค่าที่คั่นด้วยท่อในบรรทัดเดียว: 0 | 1 | .6 | 3หรือ0 | 5 | 1 | 1


พื้นดินมีความสูงต่างกันได้หรือไม่?
Nemo157

@ Nemo157 - นั่นไม่ได้อยู่ในปัญหาดั้งเดิมของเราดังนั้นเพื่อจุดประสงค์ที่นี่ไม่มี นั่นเป็นรูปแบบที่น่าสนใจสำหรับปัญหา
Steve

คุณต้องการปัดเศษค่าเฉลี่ยหรือไม่
ติตัส

คำตอบ:


1

Perl, 128 ตัวอักษร

map{$d++;s/\*/$d{$-[0]}++;$t&&$t<$d or$t=$d/ge}split'\|',<>;map{$A+=$_/8}@m=sort values%d;printf"$m[0]|$m[-1]|%.1f|%d\n",$A,8-$t

6

Python, 153 ตัวอักษร

s=raw_input()
R=range(8)
C=[s[i::9].count('*')for i in R]
print"%d|%d|%.1f|%d"%(min(C),max(C),sum(C)/8.,max(8-s[i::9].find('*')-C[i]for i in R if C[i]))

1

Windows PowerShell, 180 189

$a=(0..7|%{$x=$_;-join(0..7|%{$s[$_*9+$x]})})
$b=$a-replace' '|%{$_.length}|sort
"{0}|{1}|{2:.0}|{3}"-f($b[-1..0]+(($b-join'+'|iex)/8),($a|%{($_-replace'^ +|\*').length}|sort)[-1])

$sขาเข้ามาในฐานะ

ประวัติความเป็นมา:

  • 2011-02-10 01:53 (189) - ความพยายามครั้งแรก
  • 2011-02-10 02:03 (180) - จัดรูปแบบสตริงเพื่อช่วยเหลือ ข้อเสียเท่านั้น: มันส่งออกตัวเลขในรูปแบบภูมิภาคไม่สอดคล้องกับข้อกำหนดงานอย่างเคร่งครัด ยังคงเป็นปัญหาที่แชร์โดยโซลูชัน C # เช่นกันดังนั้นฉันเดาว่าไม่เป็นไร

0

ภาษาอื่นสองสามผลลัพธ์จากการเล่นกอล์ฟภายในของเรา:

C #, 188 ตัวอักษร (อ่านง่าย)

int a = 0, b = 8, c = 0, d = 0, f, i, j, x;    
for (i = 0; i < 8; i++)    
{    
      f = x = 0;    
      for (j = 0; j < 8; )
            if (s[i + j++ * 9] == '*')    
            {    
                  x = x > 0 ? x : 9 - j;    
                  f++;    
            }         

      d += f;    
      a = f > a ? f : a;    
      b = f < b ? f : b;    
      c = x - f > c ? x - f : c;    
}

Console.Write("{0}|{1}|{2:.0}|{3}", b, a, d / 8f, c);

Ruby, 173 ตัวอักษร

s=gets;n=8;a=o=l=0;8.times{|i|f=x=0;8.times{|j|if(s[i+j*9].chr=='*'):x=8-j if x==0;f+=1;end}
o+=f;a=f if f>a;n=f if f<n;l=x-f if x-f>l}
printf "%d|%d|%.1f|%d",n,a,o.to_f/8,l

0

PHP, 139 ไบต์

<?for(;$y<8;$y++)for($x=0;++$n[$x],$x<8;$x++)'!'>$argv[1][$y*9+$x]&&--$n[$x]?$b[$x]++:0;print_r([min($n),max($n),array_sum($n)/8,max($b)]);

สำหรับแต่ละคอลัมน์ให้นับเลข ของเกล็ดหิมะและหมายเลข ของช่องว่างด้านล่างเกล็ดหิมะแรกจากนั้นคำนวณ
ใช้สตริงเป็นอาร์กิวเมนต์จากบรรทัดคำสั่ง

ขั้นตอนการพังและการเล่นกอล์ฟ

$i=$argv[1];
for(;$y<8;$y++)         # $y=row
{
    for($x=0;$x<8;$x++) # $x=column
    {
        // loop body: 32+26=58 bytes
        if('*'==$i[$p=$y*9+$x])$n[$x]++;# if snowflake: increase snowflakes count
        elseif($n[$x]+=0)$b[$x]++;      # elseif has snowflakes: increase blanks count
                                        # +=0: min needs a value in every column

        // -> golf if/elseif to ternaries, 16+9+25+1 = 51 (-7)
#       '*'==$i[$y*9+$x]
#           ? $n[$x]++
#           : (($n[$x]+=0)?$b[$x]++:0)
#       ;

        // golfing on the ternary, 15+23+9+1 = 48 (-3)
#       '!'>$i[$y*9+$x]                 # -1: char<'!' <=> char==' '
#           ? ($n[$x]+=0)?$b[$x]++:0    # -2: inverted condition -> eliminated parens
#           : $n[$x]++
#       ; # 15+23+9+1-2=46

        // increase snowflakes count in any case (initialization)
        // (needs curlies; elminate them by moving increase to the for condition)
        // decrease snowflakes count for blank
#       ++$n[$x];if('!'>$i[$y*9+$x]&&--$n[$x])$b[$x]++; # if: 47
#       ++$n[$x];'!'>$i[$y*9+$x]&&--$n[$x]?$b[$x]++:0;  # ternary: 46
    }
}
print_r([min($n),max($n),array_sum($n)/8,max($b)]); # calculate and print results

เพิ่มround(...,1)รอบarray_sum($n)/8สำหรับการปัดเศษ (+9)


0

Mathematica ~ 115

"        \n        \n* * **  \n        \n** * ***\n** *  * \n*       \n--------"

Most/@ToCharacterCode@%~Partition~9/10-16/5
Min@#|Max@#|Mean@#~Round~.1|Position[#,1][[{-1,1},1]].{1,-1}-1&@Total@%
1 | 4 | 1.9 | 4

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

ป้อนคำอธิบายรูปภาพที่นี่


0

JavaScript, 328 ไบต์

ไม่สั้นโดยเฉพาะ แต่เป็นสิ่งที่ฉันมี

var input = "        |        |        |* * **  |        |** * ***|** *  * |*       |--------";

(s=>{var l=s.split("|"),a=[0,0,0,0,0,0,0,0],o=[8,0,0,0],b;for(i=0;i<l.length;i++){if(!b&&l[i]!="        ")o[3]=7-i,b=1;for(j=0;j<l[i].length;j++){a[j]+=l[i][j]=="*"?1:0}}for(i=0;i<a.length;i++){if(a[i]<o[0])o[0]=a[i];if(a[i]>o[1])o[1]=a[i];o[2]+=a[i];}console.log(o[0]+"|"+o[1]+"|"+(o[2]/a.length).toFixed(1)+"|"+o[3]);})(input)

De-แข็งแรงเล่นกอล์ฟ:

var input = "        |        |        |        |     *  |   *   *|      * |*       |--------";

(s=>{
  var splits = s.split("|");
  var arr = [0,0,0,0,0,0,0,0];
  var b;
  var o=[8,0,0,0];
  for (var i = 0; i < splits.length; i++) {
    if (!b&&splits[i]!="        ") {
      o[3] = 7-i;b=1;
    }
    for (var j = 0; j < splits[i].length; j++) {
      arr[j]+=splits[i][j]=="*"?1:0;
    }
  }
  for (var i = 0; i < arr.length; i++) {
    if (arr[i]<o[0]) {
      o[0]=arr[i];
    }
    if (arr[i]>o[1]) {
      o[1]=arr[i];
    }
    o[2]+=arr[i];
  }
  console.log(o[0]+"|"+o[1]+"|"+(o[2]/arr.length).toFixed(1)+"|"+o[3]);
})(input)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.