เครดิต
ขอบคุณสำหรับคำถามที่ใช้จดหมายของ Rand Al'Thorสำหรับแรงบันดาลใจสำหรับการแข่งขันกอล์ฟรหัส
พื้นหลัง
ลักษณะของความท้าทายนี้ขึ้นอยู่กับอัลกอริธึมที่แรนด์กล่าวไว้ใน "A Triangle Formed of Three Letters":
- เริ่มต้นด้วยลำดับ 10 ตัวอักษรแต่ละตัวคือ X, Y หรือ Z
- ภายใต้แต่ละแถวสร้างแถวถัดไปดังต่อไปนี้ หากตัวอักษรสองตัวที่อยู่ติดกันเหมือนกันให้เขียนตัวอักษรเดียวกันข้างใต้ หากพวกเขาแตกต่างกันให้เขียนตัวอักษรที่สามที่อยู่ข้างใต้
จากนั้นคุณจะทำซ้ำขั้นตอนก่อนหน้าจนกว่าคุณจะมีตัวอักษรหนึ่งตัวในแถวที่สิบของคุณ
ท้าทาย
เราจะทำการคำนวณทางคณิตศาสตร์กับอัลกอริทึมด้านบน:
- เริ่มจากลำดับ 10 หลักแต่ละอันคั่นด้วยเว้นวรรคและแต่ละอันมี 1, 2 หรือ 3
- ภายใต้แต่ละแถวสร้างแถวถัดไปดังต่อไปนี้ หากตัวเลขสองหลักที่อยู่ติดกันเหมือนกันให้เขียนตัวเลขเดียวกันข้างใต้ หากพวกเขาแตกต่างกันให้เขียนตัวเลขตัวที่สามที่อยู่ด้านล่าง
- ทำซ้ำขั้นตอนก่อนหน้าจนกว่าคุณจะมีหนึ่งหมายเลขสุดท้าย
ดังนั้นตามอัลกอริธึมนี้หากเริ่มต้นด้วยแถว1 2 3 3 1 3 1 3 1 2
เช่นสามเหลี่ยมจะถูกสร้าง
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1 2 3 3 1 3 1 3 1 2
3 1 3 2 2 2 2 2 3
2 2 1 2 2 2 2 1
2 3 3 2 2 2 3
1 3 1 2 2 1
2 2 3 2 3
2 1 1 1
3 1 1
2 1
3
ฉันยังอยากรู้ว่าจะหาผลรวมของตัวเลขทั้งหมดในสามเหลี่ยมเลขดังนั้นเพิ่มหลักเหล่านี้ทั้งหมดและใส่ผลรวมนี้ลงในแถวที่สิบเอ็ดถูกต้องชิดกับตัวเลขสุดท้ายในแถวแรก ดังนั้นสามเหลี่ยมจำนวนของเราจะมีลักษณะดังนี้ (ช่องว่างในตัวอย่างของฉันจะแสดงด้านล่างด้วย.
อักขระเพื่อแสดงการจัดรูปแบบ)
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1.2.3.3.1.3.1.3.1.2
.3.1.3.2.2.2.2.2.3.
..2.2.1.2.2.2.2.1..
...2.3.3.2.2.2.3...
....1.3.1.2.2.1....
.....2.2.3.2.3.....
......2.1.1.1......
.......3.1.1.......
........2.1........
.........3.........
................109
ความท้าทายของคุณคือการเขียนโค้ดที่สามารถเริ่มต้นด้วยสตริง / อาร์เรย์ / etc ที่ป้อนเข้าแล้ว จำนวนสิบหลักตามตัวอย่างของฉันแล้วใช้อัลกอริทึมในการสร้างสิบแถวที่จะสร้างรูปสามเหลี่ยมจำนวนแล้วตามด้วยแถวที่ 11 ที่จะแสดงผลรวมของตัวเลขทั้งหมดด้วยเหตุผลที่ถูกต้อง
การทดสอบ
การทดสอบสตริงนี้สามารถดำเนินการได้ด้วยสตริงที่สร้างแบบสุ่มที่คุณเลือกสิบหลักหรือที่สร้างจากตัวอย่างด้านล่าง ...
c1=()=>('1331123221'+(Math.random()*(1<<24)|0).toString(4)).replace(/0/g, "").slice(-10).split("").join(" ");
$("#btn").click(function(){
$("#str").val(c1());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="str"><button id="btn">Get numbers</button>
<br>
Please use this snippet to generate a starting row for testing your code. Alternatively, you can also use a string of your choice, so long as it's ten digits (ranging from 1 to 3), separated by single spaces.
กฎระเบียบ
- มีการใช้กฎของ Code-golf ดังนั้นจำนวนไบต์ต่ำสุดจึงเป็นสิ่งที่ท้าทาย ในกรณีที่มีสองรายการที่มีคะแนนต่ำเท่ากันผู้ชนะจะได้รับรางวัลตามจำนวนโหวต
- สิ่งที่เราเป็นพื้นหลังจากนั้นคือ 11 แถวยาว 19 ตัวอักษร ... วิธีที่คุณแสดงผลสุดท้ายของคุณขึ้นอยู่กับคุณ: อาร์เรย์, คอนโซล, เอาต์พุตไฟล์, STDOUT ฯลฯ ดังนั้นโปรดใช้วิธีการแสดงผลที่คุณต้องการ ทำงานเพื่อประโยชน์ของคุณ กฎข้อเดียวในผลลัพธ์คือเรามี 11 แถวที่มี 19 ตัวอักษรในแต่ละแถวในรูปแบบที่คล้ายกับด้านบน ...
- หากมันช่วยให้โค้ดของคุณใช้ตัวคั่นใดก็ได้สำหรับตัวเลข ... โปรดจำไว้ว่าการอ่านที่ชัดเจนอาจเป็นปัจจัยสนับสนุน
- ไม่มีช่องโหว่โง่ๆ
- ไม่อนุญาตให้เข้ารหัสอย่างหนักของอินพุต วัตถุประสงค์ของรหัสนี้คือมันสามารถใช้ในการสร้างผลลัพธ์ที่แตกต่างกันในแต่ละครั้งที่มีการป้อนข้อมูลที่แตกต่างกัน
1 1 1 1 1 1 1 1 1 1
ยกตัวอย่างเช่นHard-coding ตัดจุดทั้งหมดของอัลกอริทึมอย่างสมบูรณ์
หวังว่าจะได้เห็นสิ่งที่คุณทุกคนสามารถเกิดขึ้นได้!