ปิรามิดอียิปต์


15

มหาปิรามิดแห่งกิซ่าพีระมิดที่ใหญ่ที่สุดในอียิปต์ไม่เพียง แต่เป็นสิ่งมหัศจรรย์ที่เก่าแก่ที่สุดในเจ็ดสิ่งมหัศจรรย์ของโลกโบราณเท่านั้น แต่ยังเป็นสิ่งเดียวที่ยังคงสภาพสมบูรณ์อยู่ ปิรามิดอียิปต์อาจใช้เวลาถึง 20 ปีในการสร้างและมีขนาดใหญ่เพื่อให้อัลอาซิซอู ธ แมนลูกชายของศอลาฮุดดีที่บดแซ็กซอนมีที่จะให้ขึ้นรื้อปิรามิดแห่งกิซ่าที่ดีเพราะมันก็ถือว่างานมากเกินไป ปิรามิดของอียิปต์ส่วนใหญ่สร้างขึ้นเพื่อเป็นสุสานสำหรับฟาโรห์ของประเทศและที่มาของพวกเขาในช่วงยุคกลางและยุคกลาง (ค. 2686–1690 ก่อนคริสตศักราช) และในปี 2008 มีการค้นพบปิรามิดอียิปต์ 138 แห่ง

ภารกิจคือการสร้างโปรแกรมที่ป้อนลำดับของระยะทางคั่นด้วยช่องว่างและสร้างปิรามิดข้อความ 10 × 10 คั่นด้วยระยะทางเหล่านั้น ระยะทาง 1 เท่ากับอักขระสองตัว

ปิรามิดข้อความจะมีลักษณะเช่นนี้:

         /\
        /--\
       /----\
      /------\
     /--------\
    /----------\
   /------------\
  /--------------\
 /----------------\
/------------------\

ถ้าใส่ประกอบด้วยเพียงแบ่งบรรทัดแล้วหนึ่งพีระมิดจะมีการผลิตเป็นดังกล่าวข้างต้น พีระมิดแต่ละตัวจะแสดงปิรามิดไปทางซ้ายราวกับว่าอยู่ข้างหน้า

ตัวอย่างที่ 1

การป้อนข้อมูล:

4 3 1

เอาท์พุท:

         /\      /\    /\/\
        /--\    /--\  /--\-\
       /----\  /----\/----\-\
      /------\/------\-----\-\
     /--------\-------\-----\-\
    /----------\-------\-----\-\
   /------------\-------\-----\-\
  /--------------\-------\-----\-\
 /----------------\-------\-----\-\
/------------------\-------\-----\-\

ตัวอย่างที่สอง

การป้อนข้อมูล:

0 9

เอาท์พุท:

         /\                /\
        /--\              /--\
       /----\            /----\
      /------\          /------\
     /--------\        /--------\
    /----------\      /----------\
   /------------\    /------------\
  /--------------\  /--------------\
 /----------------\/----------------\
/------------------\-----------------\

ตัวอย่างที่สาม

การป้อนข้อมูล:

11

เอาท์พุท:

         /\                    /\
        /--\                  /--\
       /----\                /----\
      /------\              /------\
     /--------\            /--------\
    /----------\          /----------\
   /------------\        /------------\
  /--------------\      /--------------\
 /----------------\    /----------------\
/------------------\  /------------------\

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

การอ้างอิง: Wikipedia.org


ฉันคิดว่าอนุญาตให้ใช้ช่องว่างเพิ่มเติมที่ส่วนท้ายของบรรทัดได้หรือไม่
Peter Taylor

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

ดังนั้นอาร์กิวเมนต์บรรทัดคำสั่งสำหรับการป้อนข้อมูลที่ได้รับอนุญาต?
Joey

ตราบใดที่มันเป็นไปตามข้อกำหนด ตอนนี้ฉันเห็นแล้วว่าโซลูชันของ Whitledge นั้นไม่สามารถจัดการ linebreaks เป็นอินพุตได้ (ฉันไม่สามารถยกเลิกการอัปโหลดของฉัน) มันทำงานได้โดยการสร้างปิรามิดหากไม่มีอินพุต แต่ถ้าคุณสามารถหาวิธีแก้ปัญหาที่สามารถจัดการอินพุต linebreak (\ r หรือ \ n ไม่เป็นไร) เมื่อบรรทัดคำสั่ง args มันก็โอเคกับฉัน
nharren

คำตอบ:


4

Golfscript, 70 ตัวอักษร

~]0-:|;10,{:§9\-" "*"/""-"§2**+"\\"+:&|{.§>{§-(2*" "*1$}{-2*&>}if}%n}%

ตรงพอร์ตของโซลูชัน Rubyของฉันดังนั้นฉันแน่ใจว่าเป็นไปได้ที่จะย่อให้สั้นลงด้วยตัวอักษรไม่กี่ตัว


5

Windows PowerShell, 122 132 133 139

$d=@(-split$input)-gt0
0..9|%{' '*(9-($x=$_))+($a="/$('--'*$_)\")+-join($d|%{'  '*(($_-$x-1)*($x-lt$_))
$a[(-2*$_)..-1]})}

สคริปต์ทดสอบ

การป้อนข้อมูลแบบสุ่มยังทำให้ภาพที่ดี:

ปิรามิดสุ่ม


มันใช้งานได้ถ้าฉันเพิ่ม$input=Read-Hostที่ด้านบนไม่เช่นนั้นจะไม่ขออินพุต สิ่งนี้จะทำงานได้อย่างไร
nharren

@nharren: echo 0 3 4 1|powershell -noprofile -file pyramids.ps1หรือจาก '0 1 4 3' | .\pyramids.ps1PowerShell ปัญหานี้เป็นปัญหาที่พบบ่อยกับการเล่นกอล์ฟใน PowerShell เศร้าที่สุดเท่าที่คุณสามารถยอมรับได้เฉพาะทั้งประปาในการป้อนข้อมูลหรือการป้อนข้อมูลแบบโต้ตอบ PowerShell ไม่มีความคิดเห็นเกี่ยวกับภาษาอื่น ๆ และสภาพแวดล้อมอื่น ๆ และบางครั้งก็แสดงให้เห็น ฉันมักจะไปสำหรับการป้อนข้อมูลประปาเว้นแต่งานอย่างชัดเจนเรียกร้องให้มีการติดต่อสื่อสารเช่นเดาตัวเลข
Joey

ใช่แล้วตอนนี้ก็ใช้ได้แล้ว ปุ่มบดของฉันไม่ได้ให้ผลลัพธ์ใด ๆ และฉันก็ไม่สามารถหาสาเหตุได้
nharren

4

Haskell, 148 ตัวอักษร

r=replicate
p d=map(\k->foldr(\n i->r(9-k)' '++'/':r(2*k)'-'++"\\"++drop(11+k)(r(2*n)' '++i))""$d++[0])[0..9]
main=interact$unlines.p.map read.words

ฉันค่อนข้างไม่พอใจกับสิ่งนี้! มันรู้สึกนานเกินไป ไอเดีย?


ภายในแลมบ์ดาคุณสามารถเปลี่ยนกองใหญ่ของ++'s ไปยังรายการและการใช้งานเพียงครั้งเดียว concat >>=idaka ฉันไม่รู้ว่ามันจะช่วยได้หรือไม่ อีกจุดหนึ่งจะใช้แทนfoldr1 foldr
FUZxxl

ขอบคุณสำหรับความคิด ไม่ช่วยในกรณีนี้: การแปลง++ลำดับจะช่วยคุณหนึ่งตัวอักษรต่อรายการเท่านั้นและค่าโสหุ้ยของขั้นสุดท้ายconcatสูงเกินไป foldrไม่สามารถใช้foldr1รูปแบบเวลาเป็นผลที่ได้คือStringในขณะที่รายการประเภทคือ[Int](ใน1สายพันธุ์ที่foldต้องการให้พวกเขาเป็นเหมือนกัน.)
MtnViewMark

4

Python 123 ตัว

N=[10]+map(int,raw_input().split())
for y in range(10):print''.join((2*n*' '+'/'+2*y*'-'+'\ ')[-2*n-1:-1]for n in N)[9-y:]

จากความอยากรู้หลามนี้คือ 2.5 หรือไม่ เพื่อให้สิ่งนี้ทำงานได้ใน python 3.2 ฉันหุ้มฟังก์ชั่นแผนที่ในรายการฟังก์ชั่นเปลี่ยน raw_input () เป็น input () และเปลี่ยนพิมพ์เป็นพิมพ์ ()
nharren

@nharren: ทำงานได้ทั้งใน 2.4.4 และ 2.5.2 สำหรับฉัน
Keith Randall

4

Ruby 1.9, 116 ตัวอักษร

d=gets.split-[?0]
10.times{|i|puts [?\s*(9-i),l=?/+?-*2*i+?\\,d.map{|r|i<(r=r.to_i)??\s*2*(r+~i)+l :l[-2*r,99]}]*""}

2

Perl, 130 126 132 ตัวอักษร

$_=<>;$s=" "x9;map{$k.="/\\"."  "x($_-1)if$_}split;$_="$s$k/\\$s\n";for$i(0..9){print;s%\\-%-\\%g;s%\\/%-\\%g;s%\\ %-\\%g;s% /%/-%g}

เวอร์ชันที่สั้นกว่าเล็กน้อยซึ่งรับอินพุตเป็นอาร์กิวเมนต์บรรทัดรับคำสั่งมากกว่าจาก stdin:

$s=" "x9;map{$k.="/\\"."  "x($_-1)if$_}@ARGV;$_="$s$k/\\$s\n";for$i(0..9){print;s%\\-%-\\%g;s%\\/%-\\%g;s%\\ %-\\%g;s% /%/-%g}

ไม่อยากจะเชื่อเลยว่าไม่มีใครทำโซลูชัน regex เลย Perl เป็นทางยาวจากการเป็นภาษาที่ดีที่สุดของฉันดังนั้นนี่อาจจะสูญเสียมากขึ้น ฉันสนใจที่จะเห็นการใช้งานที่ไม่ดีถ้ามีคนท้าทาย

(ขอบคุณ @mbx สำหรับ 4 ตัวอักษร)


foreach == for -> บันทึก 4 ตัวอักษร
mbx

คุณได้ทดสอบเวอร์ชันของคุณด้วยชุดทดสอบที่ให้มาหรือยัง!
mbx

@mbx ใช่เหมาะกับฉัน Perl 5.10.1, Ubuntu คุณเห็นบั๊กอะไร
Peter Taylor

@ Peter Taylor - บน Ubuntu และ win32 ของฉันก็ใช้ได้เช่นกัน ฉันแรกลองบนideoneซึ่งทำงาน perl 5.12.1
mbx

2
»หากอินพุตประกอบด้วยเพียงตัวแบ่งบรรทัด«คำแนะนำที่อินพุตมาตรฐานจริง ๆ แล้ว
Joey

1

JavaScript, 396 ไบต์

function p(a){for(u=0;u<10;u++){t[u+a][9-u]="/";for(k=9-u+1+a;k<10+u+a;k++)t[k][u]="-";
t[10+u+a][u]="\\"}}function _(a){t=[];for(i=0;i<50;i++){t[i]=[];for(j=0;j<10;j++)t[i][j]=" "
}var a=a.split(" "),b=a.reduce(function(a,b){return a-0+(b-0)})*2;for(i=a.length-1;i>=0;
i--)p(b),b-=a[i]*2-0;p(0);a="";for(j=0;j<10;j++){b="";for(i=0;i<50;i++)b+=t[i][j];
a+=b.replace(/\s+$/,"")+(j<9?"\n":"")}return a}

ฉันจะไม่ชนะด้วย JavaScript แต่ตอนนี้มีรายการ JavaScript แล้ว :)

การใช้งาน: _("1 2 3")ฯลฯ


1

ทับทิม (112)

สั้นกว่าสารละลาย Ruby ของ Ventero เล็กน้อยด้วยวิธีที่ต่างกัน ฉันเพิ่งเริ่มเรียนรู้ Ruby ดังนั้นอาจลดลงได้เล็กน้อย

s=' '*9+r='/\\';gets.split.map{|i|s+=' '*2*(i.to_i-1)+r}
10.times{puts s;s.gsub!' /','/-';s.gsub!(/\\.?/,'-\\')}

1

Powershell ขนาด105 98 ไบต์การอ่านข้อมูลจำเพาะที่เข้มงวดที่สุด

-7 ไบต์จาก migimaru ของคำตอบ

($a=' '+-join(,5+$args-gt0|%{'  '*--$_+'/\'}))
1..9|%{($a=$a-replace' /','/-'-replace'\\.?','-\')}

สคริปต์ทดสอบ:

$f = {

($a=' '+-join(,5+$args-gt0|%{'  '*--$_+'/\'}))
1..9|%{($a=$a-replace' /','/-'-replace'\\.?','-\')}

}

@(
,(@"
         /\
        /--\
       /----\
      /------\
     /--------\
    /----------\
   /------------\
  /--------------\
 /----------------\
/------------------\
"@)

,(@"
         /\      /\    /\/\
        /--\    /--\  /--\-\
       /----\  /----\/----\-\
      /------\/------\-----\-\
     /--------\-------\-----\-\
    /----------\-------\-----\-\
   /------------\-------\-----\-\
  /--------------\-------\-----\-\
 /----------------\-------\-----\-\
/------------------\-------\-----\-\
"@, 4,3,1)

,(@"
         /\                /\
        /--\              /--\
       /----\            /----\
      /------\          /------\
     /--------\        /--------\
    /----------\      /----------\
   /------------\    /------------\
  /--------------\  /--------------\
 /----------------\/----------------\
/------------------\-----------------\
"@, 0,9)

,(@"
         /\                    /\
        /--\                  /--\
       /----\                /----\
      /------\              /------\
     /--------\            /--------\
    /----------\          /----------\
   /------------\        /------------\
  /--------------\      /--------------\
 /----------------\    /----------------\
/------------------\  /------------------\
"@, 11)
) | % {
    $expected, $a = $_
    $result = &$f @a
    ($result-join"`n")-eq$expected
    $result 
}

เอาท์พุท:

True
         /\
        /--\
       /----\
      /------\
     /--------\
    /----------\
   /------------\
  /--------------\
 /----------------\
/------------------\
True
         /\      /\    /\/\
        /--\    /--\  /--\-\
       /----\  /----\/----\-\
      /------\/------\-----\-\
     /--------\-------\-----\-\
    /----------\-------\-----\-\
   /------------\-------\-----\-\
  /--------------\-------\-----\-\
 /----------------\-------\-----\-\
/------------------\-------\-----\-\
True
         /\                /\
        /--\              /--\
       /----\            /----\
      /------\          /------\
     /--------\        /--------\
    /----------\      /----------\
   /------------\    /------------\
  /--------------\  /--------------\
 /----------------\/----------------\
/------------------\-----------------\
True
         /\                    /\
        /--\                  /--\
       /----\                /----\
      /------\              /------\
     /--------\            /--------\
    /----------\          /----------\
   /------------\        /------------\
  /--------------\      /--------------\
 /----------------\    /----------------\
/------------------\  /------------------\

Powershell, 101 94, สนุกกับช่องว่างชั้นนำหนึ่งเดียว

($a=-join(,6+$args-gt0|%{'  '*--$_+'/\'}))
1..9|%{($a=$a-replace' /','/-'-replace'\\.?','-\')}

0

ฉันไม่สามารถทำให้ C # 3 สั้นกว่านี้ได้ ฉันไม่ทราบว่าตัวละครมีความสำคัญเพียงใด แต่ฉันคิดว่าฉันแพ้ :-(

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;

namespace PyramidRenderer
{
    /// <summary>
    /// Generates ASCII-art pyramids at user-specified horizontal locations to
    /// the standard output stream.
    /// </summary>
    public class Program
    {
        /// <summary>
        /// Generates one or more ASCII-art pyramids at the locations specified and 
        /// sends them to the standard output stream.
        /// </summary>
        /// <param name="args">The command-line arguments. These should be non-negative 
        /// integers that specify the horizontal distance of each additional pyramid from the 
        /// preceeding pyramid. Whether or not any distances are suppplied, a pyramid
        /// is rendered at the starting location.</param>
        public static void Main(string[] args)
        {
            try
            {
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

                int[] pyramidDistances = ParsePyramidLocationsFromCommandLine(args).ToArray();
                PyramidCollection pyramids = new PyramidCollection(pyramidDistances);
                pyramids.RenderToText(Console.Out);
            }
            catch (ArgumentException ex)
            {
                Console.Error.WriteLine(ex.Message);
            }
        }

        /// <summary>
        /// Handler for the unhandled exception. This just displays the error message to 
        /// the standard error stream.
        /// </summary>
        /// <param name="sender">Required but unnecessary sender object for the event handler.</param>
        /// <param name="e">The object that represents the exception.</param>
        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            Debug.Assert(e.ExceptionObject != null);

            string exceptionText;
            Exception ex = e.ExceptionObject as Exception;
            if (ex == null)
                exceptionText = e.ExceptionObject.ToString();
            else
                exceptionText = ex.Message;
            Console.Error.WriteLine(exceptionText);
        }

        /// <summary>
        /// Takes the command-line arguments and converts them to a sequence of 
        /// non-negative integers.
        /// </summary>
        /// <param name="args">The command-line arguments as supplied to Main.</param>
        /// <returns>A sequence of integers that represent the user’s distance selections.</returns>
        /// <exception cref="ArgumentException">An invalid argument was supplied.</exception>
        private static IEnumerable<int> ParsePyramidLocationsFromCommandLine(string[] args)
        {
            Debug.Assert(args != null);

            foreach (string arg in args)
            {
                int result;
                if (int.TryParse(arg, out result))
                {
                    if (result < 0)
                        throw new ArgumentException(string.Format("Invalid distance specified: {0}", arg));

                    yield return result;
                }
                else
                {
                    throw new ArgumentException(string.Format("Invalid option: {0}", arg));
                }
            }
        }
    }

    /// <summary>
    /// Represents a single pyramid to be rendered.
    /// </summary>
    internal class Pyramid
    {
        /// <summary>
        /// The height of the pyramids in text rows. The width of each pyramid will be
        /// twice the height.
        /// </summary>
        internal const int Height = 10;

        /// <summary>
        /// The length in characters of the horizontal unit distance in which the user 
        /// specifies the pyramid distances.
        /// </summary>
        internal const int PyramidUnits = 2;

        /// <summary>
        /// The character to output as the background of the pyramids.
        /// </summary>
        private const char backgroundChar = ' ';

        /// <summary>
        /// The character to output as the left edge of the pyramids.
        /// </summary>
        private const char leftEdgeChar = '/';

        /// <summary>
        /// The character to output within each pyramid, between the edges.
        /// </summary>
        private const char brickChar = '-';

        /// <summary>
        /// The character to output as the right edge of the pyramids.
        /// </summary>
        private const char rightEdgeChar = '\\';

        /// <summary>
        /// The absolute horizonal location of the pyramid’s bottom left corner as 
        /// specified in PyramidUnits.
        /// </summary>
        private int position;

        /// <summary>
        /// Constructs a new pyramid object at the specified location.
        /// </summary>
        /// <param name="position">The absolute horizonal location of the pyramid’s bottom
        /// left corner in PyramidUnits.</param>
        internal Pyramid(int position)
        {
            Debug.Assert(position >= 0);

            this.position = position;
        }

        /// <summary>
        /// Renders a single row the pyramid to the supplied text stream starting at
        /// the indicated location.
        /// </summary>
        /// <param name="textWriter">The output stream to which the pyramid is to
        /// be rendered.</param>
        /// <param name="row">The row of the pyramid to render. Zero is the top row,
        /// and Height - 1 is the bottom row.</param>
        /// <param name="startingPosition">The text character position—indexed at zero—at 
        /// which the rendering is to begin. If non-zero, this identifies the column one 
        /// past the ending location of the previous pyramid.</param>
        /// <returns>The horizontal location (in characters) at which the next item 
        /// may be rendered.</returns>
        internal int RenderRow(TextWriter textWriter, int row, int startingPosition)
        {
            Debug.Assert(textWriter != null);
            Debug.Assert(row >= 0);
            Debug.Assert(startingPosition >= 0);

            int leftBoundary = Height - 1 - row + position * PyramidUnits;
            int rightBoundary = Height + row + position * PyramidUnits;

            startingPosition = RenderField(textWriter, backgroundChar, startingPosition, leftBoundary);
            startingPosition = RenderField(textWriter, leftEdgeChar, startingPosition, leftBoundary + 1);
            startingPosition = RenderField(textWriter, brickChar, startingPosition, rightBoundary);
            startingPosition = RenderField(textWriter, rightEdgeChar, startingPosition, rightBoundary + 1);
            return startingPosition;
        }

        /// <summary>
        /// Outputs a sequence of repeated characters from the indicated starting position to
        /// just before the ending position, unless the starting position is already equal to
        /// or greater than the ending position.
        /// </summary>
        /// <param name="textWriter">The output stream to which the field is to be rendered.</param>
        /// <param name="character">The character to be repeated in the output.</param>
        /// <param name="startingPosition">The location at which rendering may begin in 
        /// characters indexed at zero.</param>
        /// <param name="endingPosition">The location one past the location at which rendering
        /// is to end.</param>
        /// <returns>The position at which the next field may begin.</returns>
        private static int RenderField(TextWriter textWriter, char character, int startingPosition, int endingPosition)
        {
            Debug.Assert(textWriter != null);
            Debug.Assert(startingPosition >= 0);
            Debug.Assert(endingPosition >= 0);

            int charCount = endingPosition - startingPosition;
            if (charCount <= 0)
                return startingPosition;
            textWriter.Write(new string(character, charCount));
            return endingPosition;
        }
    }

    /// <summary>
    /// A collection of pyramids to be displayed.
    /// </summary>
    internal class PyramidCollection
    {
        /// <summary>
        /// A left-to-right ordered list of the pyramids that the user has 
        /// requested to be rendered.
        /// </summary>
        List<Pyramid> allPyramids = new List<Pyramid>();

        /// <summary>
        /// Constructs a new pyramid collection.
        /// </summary>
        /// <param name="distances">The distances of each non-leftmost pyramid (in PyramidUnits) after
        /// the previous pyramid. The total number of pyramids will be one greater than the length of
        /// the distances array.</param>
        internal PyramidCollection(int[] distances)
        {
            Debug.Assert(distances != null);

            int nextPosition = 0;
            allPyramids.Add(new Pyramid(nextPosition));
            foreach (int nextDistance in distances)
            {
                Debug.Assert(nextDistance >= 0);

                try
                {
                    checked
                    {
                        nextPosition += nextDistance;
                        int endLocation = nextPosition * Pyramid.PyramidUnits + Pyramid.Height * 2;
                    }
                }
                catch (OverflowException)
                {
                    // Ignore any pyramids specified beyond the integer maximum distance.
                    break;
                }
                allPyramids.Add(new Pyramid(nextPosition));
            }
        }

        /// <summary>
        /// Outputs ASCII-art images of the pyramids in this collection to the 
        /// provided output stream.
        /// </summary>
        /// <param name="textWriter">The output stream to which the pyramids
        /// are to be rendered.</param>
        internal void RenderToText(TextWriter textWriter)
        {
            Debug.Assert(textWriter != null);

            for (int row = 0; row < Pyramid.Height; row++)
            {
                int startingPosition = 0;
                foreach (Pyramid pyramid in allPyramids)
                {
                    startingPosition = pyramid.RenderRow(textWriter, row, startingPosition);
                }
                textWriter.WriteLine();
            }
        }
    }

}

3
คุณสับสนกับ Code Bowling และ Code Golf หรือเปล่า?
Joey

1
อย่างน้อยแกล้งทำเป็นลอง คนจะไม่ถือเป็นภาษาที่ละเอียดกับคุณถ้าคุณกอล์ฟมัน
dmckee --- ผู้ดูแลอดีตลูกแมว

ฉันเดาว่านี่เป็นเวอร์ชัน verbose ของคุณเพื่ออธิบายกลอุบายที่ดีของคุณ ดูเหมือนว่าคุณลืมโพสต์เวอร์ชั่นกอล์ฟของมัน
mbx

@Joey, @dmckee - ฉันคิดเกี่ยวกับการทำกอล์ฟรุ่น แต่ไม่ได้ไปรอบ ๆ มัน ฉันกลัวเกมนี้มาก รหัสที่คลุมเครือขัดกับธรรมชาติของฉันอย่างสมบูรณ์ ฉันน่าจะอยู่ห่างจากปริศนากอล์ฟ! - @mbx - น่าเสียดายที่ไม่มีกลอุบายที่ดี
Jeffrey L Whitledge
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.