การเขียนโปรแกรมปริศนา & รหัสกอล์ฟ

คำถาม & คำตอบสำหรับผู้ชื่นชอบการเขียนโปรแกรมปริศนา

8
ลูคัสเทียบกับ ประตูโรงรถระยะไกล
คำปฏิเสธ ในขณะที่ฉันรู้ว่ามีคำถามที่เกี่ยวข้องโดยเฉพาะคำถามของฉันใช้ประตูโรงรถสองบานส่วนประกอบแบบสุ่มและฉันยังอ้างอิงเหตุการณ์นี้ในชีวิตจริงโดยเห็นลูกชายของฉันลดประตูโรงรถหนึ่งประตูขณะที่ฉันเดินออกจากประตู โรงจอดรถเมื่อสัปดาห์ที่แล้ว ... ไม่มีอะไรที่เหมือนกับการจ้องไปที่ศีรษะเพื่อให้น้ำไหลออกมาอย่างสร้างสรรค์! ;) พื้นหลัง ลูคัส (ลูกชายวัย 15 เดือนของฉัน) ชอบเล่นกับรีโมทโรงรถ รีโมตนี้มีสองปุ่มหนึ่งปุ่มสำหรับประตูโรงรถด้านซ้ายและปุ่มหนึ่งสำหรับประตูโรงรถด้านขวา ปุ่มทั้งสองทำงานในลักษณะเดียวกัน กดหนึ่งครั้งเพื่อให้ประตูเริ่มเปิดกดอีกครั้งเพื่อหยุดกดอีกครั้งเพื่อเริ่มปิดกดอีกครั้งเพื่อหยุดอีกครั้งและต่อไป ลูคัสชอบรีโมทนี้เขาจะสุ่มกดปุ่มใดปุ่มหนึ่งหรือทั้งสองอย่างหรือไม่มีเลย หากกดทั้งคู่จะไม่มีการส่งสัญญาณ แต่การกดปุ่มเพียงปุ่มเดียวจะเป็นการส่งสัญญาณ ดังนั้นความท้าทายของโค้ดกอล์ฟแบ่งออกเป็นสองส่วน: ส่วนที่หนึ่ง สร้างสตริงที่มีความยาว 60 ตัวอักษรแทนปุ่มสุ่มของลูคัสในเวลาหนึ่งนาที "สุ่ม" ในกรณีนี้หมายถึง "มีโอกาสเท่ากันของอินพุตแต่ละตัวที่แต่ละขีด" ตัวละครมีดังนี้: 0: Lucas กดปุ่มไม่ทั้งหรือกดทั้งสองปุ่ม ไม่ว่าจะด้วยวิธีใดไม่มีการส่งสัญญาณ 1: Lucas ปุ่มสำหรับประตูโรงรถด้านซ้ายถูกกด 2: Lucas ปุ่มสำหรับประตูโรงรถด้านขวาถูกกด ส่วนที่สอง ใช้สตริงที่สร้างขึ้นในส่วนที่หนึ่งจำลองการเปิดและปิดโรงจอดรถสองคันโดยใช้ตัวเลขเป็นตัวกระตุ้นการเปิดหยุดและปิดประตูเหล่านี้ ประตูโรงรถของฉันค่อนข้างเร็ว (ดูข้อความปฏิเสธความรับผิดชอบข้างต้นว่าเป็นเพราะอะไร) เมื่อคุณกดปุ่มจะใช้เวลาสี่วินาทีในการเปิดหรือปิดทั้งหมด ดังนั้นหากปิด: 0 วินาที: เปิด 0% (ปิด); เมื่อกดปุ่มประตูจะเริ่มเปิดขึ้น 1 …
15 code-golf 

10
อาคารที่มองเห็นได้
ปริศนานี้มาจากปริศนา "Heart of the City" ของ CodinGame SamSi ลักษณะ คุณตัดสินใจที่จะเดินเล่นในเมืองไทล์n* nและไปที่ไทล์กึ่งกลาง อาคารทุกหลังมีขนาดเล็ก แต่คุณมีวิสัยทัศน์ที่ยอดเยี่ยมและสามารถมองเห็นทุกสิ่งในระยะใกล้และไกล ข้อ จำกัด n แปลกเสมอ คุณสามารถเห็นสิ่งปลูกสร้างใด ๆ ที่ไม่ได้ถูกกีดขวางโดยตรงโดยอาคารอื่น งาน *ทำเครื่องหมายการสร้างแต่ละมองเห็นได้ด้วย สิ่งปลูกสร้างนั้นสามารถมองเห็นได้ถ้ามันไม่ถูกบล็อกโดยสิ่งปลูกสร้างอื่นในมุมมองเดียวกัน กล่าวอีกนัยหนึ่งถ้า@เป็นจุดเริ่มต้นสิ่งปลูกสร้างจะมองเห็นได้ถ้าหากพิกัด x และพิกัด y นั้นเป็นจุดร่วมกัน ตัวอย่างอินพุตและเอาต์พุต การป้อนข้อมูล: 7 เอาท์พุท: ** ** * * * * ******* *@* ******* * * * * ** ** *เป็นอาคารที่มองเห็นได้เป็นอาคาร ที่มองไม่เห็นและ @เป็นที่ที่คุณอยู่ …

2
ทื่อรูปภาพ
บทนำ ขอบที่คมชัดตรงไปตรงมาก็แค่อันตรายธรรมดา ๆ ซึ่งกำหนดให้ PNG เป็นอินพุททำให้ภาพเบลอโดยใช้วิธีการที่อธิบายไว้ด้านล่างและทื่อขอบคมที่สาปแช่งเหล่านั้น วิธี ในการรับค่า RGB ของแต่ละพิกเซลให้ใช้สมการสามข้อต่อไปนี้: R = 1.5 × ∑na = 1R2an------------√R=1.5×Σa=1nRa2nR = \sqrt{\frac{1.5\times\sum^n_{a=1}R^2_a}{n}} G = 1.5 × ∑na = 1G2an------------√G=1.5×Σa=1nGa2nG = \sqrt{\frac{1.5\times\sum^n_{a=1}G^2_a}{n}} B = 1.5 × ∑na = 1B2an------------√B=1.5×Σa=1nBa2nB = \sqrt{\frac{1.5\times\sum^n_{a=1}B^2_a}{n}} โดยที่Σna = 1R2aΣa=1nRa2\sum^n_{a=1}R^2_aคือผลรวมของค่าสีแดงของแต่ละพิกเซลที่อยู่ติดกันยกกำลังสอง ค่าของnnnคือจำนวนของพิกเซลที่อยู่ติดกัน (เช่นพิกเซลมุมจะมีค่าnnnเป็น3 ในขณะที่พิกเซลรอบจุดศูนย์กลางของภาพจะมีค่าnnn 8) พิกเซลที่อยู่ติดกันคือพิกเซลซึ่งอยู่ห่างจากพิกเซลดั้งเดิม 1 พิกเซลในทุกทิศทาง (ซ้าย, ขวา, ขึ้น, …

5
ตัวอักษรสามเหลี่ยม
ได้รับหมายเลขการป้อนข้อมูลnจาก1ไป26(หรือ0จะ25) a=1, b=2, c=3, ...เอาท์พุทอ่านตัวอักษรจากซ้ายไปขวาและรวมถึงตัวอักษรที่สอดคล้องกันด้วย เกลียวเป็นตัวอักษรที่ต้องทำซ้ำในแนวตั้งที่สอดคล้องกับตำแหน่งของพวกเขาในตัวอักษร ตัวเลขคี่ (เมื่อ - ทำ1ดัชนี) ควรมีความสมดุลข้ามเส้นแนวนอนในขณะที่ตัวเลขคู่ควรสลับระหว่างความนิยมด้านบนหรือด้านล่าง (คุณสามารถเลือกทิศทางที่จะไปก่อน) หากคุณเป็นดัชนี 0 ให้สลับคี่ / คู่ในประโยคก่อนหน้า คำพูดอีกทางหนึ่ง - ถ้าค่าตัวอักษรของตัวอักษร?เป็น#แล้วควรจะมี#สำเนาของตัวอักษรในการส่งออกที่ทั้งหมดของพวกเขาใน#คอลัมน์ TH aตัวอักษรเหล่านี้ควรมีความสมดุลอย่างสม่ำเสมอบนและด้านล่างเส้นแนวนอนที่มี หากตัวอักษรไม่สามารถสมดุลได้อย่างเท่าเทียมกันให้สลับเป็นตัวอักษร "พิเศษ" ด้านบนและด้านล่างบรรทัดนั้น ต่อไปนี้เป็นผลลัพธ์หกรายการแรก ( n = 1,2,3,4,5,6ซึ่งมีการจัดทำดัชนี 1 รายการเลือกเพื่อสลับไปที่ด้านล่างก่อน) คั่นด้วยบรรทัดใหม่เพื่อให้คุณเห็นรูปแบบ #ความคิดเห็นอธิบายรูปแบบเริ่มต้นด้วย a # On a line by itself ab b # The "extra" letter is below the …

30
ค้นหาจำนวนเต็มต่ำสุดและสูงสุดในอาร์เรย์โดยไม่ต้องใช้บิวอิน
ท้าทาย รับอาร์เรย์ของจำนวนเต็มที่ได้รับจาก stdin ฟังก์ชันอาร์กิวเมนต์อาร์กิวเมนต์โปรแกรมหรือวิธีอื่น: เอาต์พุตเฉพาะจำนวนต่ำสุดและสูงสุดในอาเรย์ผ่านค่าส่งคืน stdout หรือวิธีการปรับแต่งอื่น ๆ ตัวอย่างเซสชัน > minmax( {0, 15, 2, 3, 7, 18, -2, 9, 6, -5, 3, 8, 9, -14} ) -14 18 การดำเนินการอ้างอิง // C++14 void minmax(std::vector<int> v) { int min = v[0]; int max = v[0]; for(auto it : v) { if (*it …

2
มีวิธีลดฟังก์ชั่นลูกศรไขมันหรือไม่?
จากสิ่งที่ฉันเห็นตลอดเวลาที่นี่ใน PPCG รายการ JavaScript ส่วนใหญ่ที่เกี่ยวข้องกับฟังก์ชั่นลูกศรไขมันมักจะเป็นหนึ่งในสองค่าย: คนธรรมดาที่มีความสามารถในการทำงานเป็นคำสั่งเดียวและกลับคำตอบตรงออกค้างคาวเช่น x=(a,b)=>a*a+b คนที่มีความซับซ้อนมากขึ้นซึ่งมักจะมีเครื่องหมายปีกกาเนื่องจากการใช้ลูปและเป็นผลให้ต้องใช้returnคำสั่ง ..p=b=>{m=b;for(a=1;~-m;)--m,a*=m*m;return a%b} การยกตัวอย่างข้างต้นจากหมวดที่ 2 ด้วยแนวคิดการจัดฟันแบบหยิกเป็นข้อพิสูจน์ของแนวคิด ... จะมีวิธีในการตีรหัสนี้อีกครั้ง (หรือคล้ายกัน) แบบนี้เพื่อกำจัดการจัดฟันแบบหยิกreturnหรือไม่? ฉันแค่ถามสิ่งนี้เนื่องจากอาจเป็นไปได้ (ไม่ได้บอกว่าจะเกิดขึ้นตลอดเวลา) กำจัด 8 ไบต์จากรหัสของนักกอล์ฟ JS มีเทคนิคใดบ้างที่สามารถใช้ในกรณีนี้ได้หรือไม่? ฉันพยายามเรียกซ้ำ แต่m=bคำแถลงนั้นพิสูจน์แล้วว่าเป็นแมลงชนิดหนึ่งเพราะฉันดูเหมือนจะสั่นคลอนไม่ได้ สำหรับรหัสข้างต้นจะมีวิธีการหนึ่งที่กอล์ฟต่อไปเพื่อที่จะกำจัดreturnคำสั่งโดยไม่คำนึงว่ามันจะเล่นกอล์ฟสั้นลงหรือไม่?

20
จำนวนบวกที่น้อยที่สุดซึ่งกำลัง y คือ th หารด้วย x
งาน ได้รับจำนวนเต็มxและyซึ่งมีทั้งที่อย่างน้อย2หาจำนวนบวกที่เล็กที่สุดที่มีyอำนาจ -th xหารด้วย ตัวอย่าง ได้รับx=96และy=2การส่งออกที่ควรจะเป็น24ตั้งแต่24เป็นบวกที่เล็กที่สุดที่น่าพอใจnn^2 is divisible by 96 Testcases x y output 26 2 26 96 2 24 32 3 4 64 9 2 27 3 3 เกณฑ์การให้คะแนน นี่คือรหัสกอล์ฟ โซลูชันที่มีจำนวนไบต์ต่ำสุดที่ชนะ อ้างอิง y=2: OEIS A019554 y=3: OEIS A019555 y=4: OEIS A053166 y=5: OEIS A015052 y=6: OEIS A015054

11
แปลงเอาต์พุต xxd เป็น shellcode
การเอาท์พุทบางส่วนจาก xxd และเปลี่ยนมันให้เป็น shellcode ที่ใช้งานได้ด้วยมือนั้นไม่สนุกดังนั้นงานของคุณคือทำให้กระบวนการเป็นไปโดยอัตโนมัติ กฎระเบียบ การส่งของคุณอาจเป็นฟังก์ชั่นแลมบ์ดาสคริปต์หรือสิ่งอื่นใดที่เทียบเท่าตามสมควร คุณสามารถพิมพ์ผลหรือถ้าการส่งของคุณเป็นฟังก์ชั่น / แลมบ์ดาคุณอาจส่งคืนได้ คุณโปรแกรมต้องใช้เวลาสามอาร์กิวเมนต์แรกเป็นสตริงที่มีการส่งออกของ xxd วิ่งที่มีการขัดแย้งไม่มีอื่น ๆ xxd some_fileกว่าชื่อไฟล์เช่นนี้ นี่คือตัวอย่างของสิ่งที่อาร์กิวเมนต์แรกจะมีลักษณะ: 00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1.. 00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S. 00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX 00000030: 5858 5859 …

5
เห็นภาพปิรามิดที่แตกต่าง
พีระมิดที่แตกต่างคือปิรามิดที่แต่ละเส้นทแยงมุมใหม่มีค่าสัมบูรณ์ของความแตกต่างระหว่างองค์ประกอบของเส้นทแยงมุมสุดท้าย ตัวอย่างเช่นถ้าเราเริ่มต้นด้วยอาร์เรย์ 2 5 4 9 3 4 ตอนนี้เราจัดเรียงสิ่งเหล่านี้ในคอลัมน์แนวทแยง: 2 5 4 9 3 4 ตอนนี้เราเติมในแนวทแยงถัดไป ความแตกต่างที่แน่นอนระหว่างองค์ประกอบต่อเนื่องของอาร์เรย์นี้คือ: 3 1 5 6 1 นั่นคือเส้นทแยงมุมถัดไปของเรา 2 3 5 1 4 5 9 6 3 1 4 ทำซ้ำจนกว่าจะเติมพีระมิดใน: 2 3 5 2 1 4 2 4 5 9 1 3 1 6 3 …

5
เดินเขาวงกต
หรืออาจจะไม่ใช่เขาวงกตจริงๆ แต่ก็ยังอยู่ กฎ: การป้อนข้อมูลเป็นสตริงสองบรรทัดประกอบด้วย*, 1, และx Xสายนั้นเป็นเขาวงกตที่จะเดินผ่าน เส้นมีความยาวเท่ากัน คุณสามารถรับอินพุตเป็นสตริงที่มี,(เครื่องหมายจุลภาค) หรือตัวคั่นใด ๆ ที่สะดวกระหว่างสองบรรทัดนี้ หรือคุณอาจใช้ทั้งสองบรรทัดเป็นอาร์กิวเมนต์แยกกันในการทำงานของคุณ เอาต์พุตคือจำนวนขั้นตอนที่คุณต้องดำเนินการเพื่อออกจากสายอักขระ (ขั้นตอนสุดท้ายคือขั้นตอนที่จะย้ายคุณออกจากสายอักขระ) คุณเริ่มต้นที่มุมซ้ายบน (บรรทัดที่สูงกว่า) หน้าสัญลักษณ์แรก สำหรับแต่ละขั้นตอนคุณก้าวไปข้างหน้าโดยหนึ่งในสัญลักษณ์ (จากที่ n จะ (n + 1) TH ตำแหน่ง ) จากนั้นขึ้นอยู่กับตัวละครที่คุณก้าวเข้ามาผลลัพธ์จะแตกต่างกัน นี่คือสิ่งที่แต่ละถ่านทำ: *- ไม่มีอะไร คุณเพียงแค่เหยียบมันตามปกติ x- เมื่อคุณเหยียบมันแล้วให้สลับสาย แต่ยังคงอยู่ในระยะทางแนวนอนเดียวกันจากจุดเริ่มต้น ตัวอย่างเช่นคุณก้าวไปสู่ตำแหน่งที่สามของบรรทัดที่สูงกว่าและพบตัวพิมพ์เล็กxที่นี่ จากนั้นคุณย้ายไปที่บรรทัดล่างทันที แต่อีกครั้งที่ตำแหน่งที่สาม X- สลับสายและไปที่ตำแหน่งถัดไป ตัวอย่างมีเหมือนกัน แต่คุณย้ายจากตำแหน่งที่สามไปยังตำแหน่งที่สี่ (ดังนั้นคุณจึงอยู่ในบรรทัดที่สองที่ตำแหน่งที่สี่) 1 - เพียงแค่เดินหน้าต่อไปโดยตำแหน่งอื่น เมื่อตัวละครแต่ละตัวทำงานแล้วมันจะถูกแทนที่ด้วยช่องว่างและไม่สามารถใช้งานได้อีกต่อไป ตัวอย่างดังต่อไปนี้ อินพุต …

3
จำลอง 'การต่อสู้' ในเกมไพ่ 'Oorlog'
ลองสร้างแบบจำลองสำหรับแง่มุมในเกมไพ่ซึ่งโดยส่วนตัวแล้วฉันรู้จักชื่อชาวดัตช์ 'Oorlog' (แปลเป็น 'สงคราม') 'Oorlog' ทำงานอย่างไร ไพ่สองสำรับ (รวมถึง Jokers สองอัน) แบ่งเท่า ๆ กันระหว่างจำนวนผู้เล่นที่เล่น ผู้เล่นแต่ละคนจะสับไพ่ของตนเองวางคว่ำหน้าพวกเขาและผู้เล่นทุกคนเปิดไพ่ใบแรกของหุ้นในเวลาเดียวกัน ผู้ชนะของ 'การต่อสู้' นั้นถูกกำหนดโดยค่าของไพ่ตามกฎเหล่านี้: Joker / Ace เอาชนะ King; กษัตริย์เอาชนะราชินี ราชินีเอาชนะแจ็ค; แจ็คเอาชนะ 10; 10 เอาชนะ 9; .... นอกจากนี้ทั้ง 2 และ 3 ยังสามารถเอาชนะ Ace / Joker กฎสุดท้ายอาจนำไปสู่รอบที่ 2 หรือ 3 ชนะ Ace หรือ Joker, Ace หรือ Joker ชนะการ์ดอื่น …

14
เล่นกอล์ฟลำดับที่มีฟังก์ชันสร้างชี้แจงแทนเจนต์
เกือบทุกฟังก์ชั่นสามารถแสดงเป็นพหุนามที่มีเงื่อนไขไม่สิ้นสุด ตัวอย่างเช่น, e^x = 1 + x + x^2/2! + x^3/3! + x^4/4! + ... ตัวอย่างเช่น, sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ... สัมประสิทธิ์ของnคำศัพท์ -th สร้างลำดับและฟังก์ชันที่เกี่ยวข้องเรียกว่าฟังก์ชันการสร้างของลำดับ ค่าสัมประสิทธิ์ของnคำศัพท์ -th สร้างลำดับ บ่อยครั้งที่nคำที่ -th จะมีตัวn!ส่วน ดังนั้นเราจึงคูณค่าสัมประสิทธิ์โดยn!การหาลำดับอื่นซึ่งฟังก์ชันการสร้างเลขชี้กำลังจะเป็นฟังก์ชันดั้งเดิม ยกตัวอย่างเช่นลำดับที่มีฟังก์ชั่นเอกฝ่ายคือจะเป็นe^x1,1,1,1,... ยกตัวอย่างเช่นลำดับที่มีฟังก์ชั่นเอกฝ่ายคือจะเป็นsin(x)0,1,0,-1,0,1,0,-1,... งาน งานของคุณคือการหาnระยะ -th ของลำดับที่มีการชี้แจงสร้างฟังก์ชั่นtan(x)คือ Testcases n result 0 0 1 1 …

12
Oneliner เพื่อรวมบรรทัดที่มีเขตข้อมูลแรกเหมือนกัน
นี่คือคำถาม codegolf แรกของฉันดังนั้นฉันจึงขออภัยล่วงหน้าหากไม่เหมาะสมและฉันยินดีรับข้อเสนอแนะ ฉันมีไฟล์ที่มีรูปแบบนี้: a | rest of first line b | rest of second line b | rest of third line c | rest of fourth line d | rest of fifth line d | rest of sixth line เนื้อหาจริงแตกต่างกันไปตามตัวคั่น เนื้อหาเป็นเพียงข้อความ ตัวคั่นจะปรากฏเพียงหนึ่งครั้งต่อบรรทัด สำหรับปริศนานี้คุณสามารถเปลี่ยนตัวคั่นได้เช่นใช้ "%" เป็นตัวคั่น ผลลัพธ์ที่ต้องการ: a | rest …

30
Hofstadter H-sequence
คำนิยาม a(0) = 0 a(n) = n-a(a(a(n-1))) สำหรับจำนวนเต็ม n > 0 งาน ได้รับจำนวนเต็มไม่เป็นลบออกna(n) Testcases n a(n) 0 0 1 1 2 1 3 2 4 3 5 4 6 4 7 5 8 5 9 6 10 7 11 7 12 8 13 9 14 10 15 10 16 11 …

4
เส้นทางที่สั้นที่สุดในกราฟตัวหาร
บทนำ ในความท้าทายนี้เราจะจัดการกับบางกราฟไม่มีทิศทางที่ไม่มีที่สิ้นสุดซึ่งผมเรียกว่ากราฟหารสูง ต่อมน้ำมันเป็นจำนวนเต็มเริ่มตั้งแต่วันที่ 2 มีขอบอยู่ระหว่างสองโหนด<bถ้าแบ่งขและ2 ≥ข กราฟย่อยที่เกิดขึ้นจากช่วง 2 ถึง 18 มีลักษณะดังนี้: 16-8 12 18 \|/ |/| 4 6 9 10 15 14 | |/ |/ | 2 3 5 7 11 13 17 สามารถแสดงให้เห็นว่ากราฟตัวหารสูงที่ไม่มีที่สิ้นสุดเชื่อมต่อกันดังนั้นเราสามารถถามเกี่ยวกับเส้นทางที่สั้นที่สุดระหว่างสองโหนด อินพุตและเอาต์พุต ปัจจัยการผลิตของคุณเป็นจำนวนเต็มสองจำนวนและข คุณสามารถสรุปได้ว่า2 ≤≤ข <1000 เอาต์พุตของคุณคือความยาวของเส้นทางที่สั้นที่สุดระหว่างaและbในกราฟตัวหารสูงที่ไม่มีที่สิ้นสุด นี่หมายถึงจำนวนขอบในเส้นทาง คุณอาจจะพบความจริงต่อไปนี้มีประโยชน์: มีอยู่เสมอเส้นทางที่ดีที่สุดจากเพื่อขที่แรกที่เพิ่มขึ้นและลดลงแล้วและมีเพียงโหนดเข้าชมที่เป็นอย่างเคร่งครัดน้อยกว่า2b 2 โดยเฉพาะอย่างยิ่งตั้งแต่b <1,000คุณจะต้องพิจารณาโหนดที่น้อยกว่า 2 000 000 ตัวอย่าง …

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