เจ้านายของคุณส่งอีเมลรายการงานเขียนโปรแกรม 12 รายการที่เขาต้องการให้คุณทำโดยเร็วที่สุด งานที่จะเพียงพอที่เรียบง่าย แต่เจ้านายของคุณเป็นผู้ประกอบการซอฟต์แวร์หนุ่มดูดโดยเครือข่ายสังคมยืนยันว่าการแก้ปัญหาของคุณจะสามารถที่จะพอดีภายในเดียวทวิตเตอร์ทวีต
ซึ่งหมายความว่าคุณมีรหัส 140 ไบต์เท่านั้นเพื่อแก้ปัญหางานทั้งหมดโดยเฉลี่ย 11.67 ไบต์ต่องาน (ใช่แล้ว Twitter นับตัวอักษรแต่เจ้านายของคุณพูดเป็นจำนวนไบต์โดยเฉพาะ)
คุณรู้ว่าไม่มีวิธีใดที่จะแก้ปัญหาทั้ง 12 งานใน 140 ไบต์ แต่คุณสงสัยว่าเจ้านายของคุณจะไม่ทดสอบวิธีแก้ปัญหาทั้งหมดของคุณ ดังนั้นคุณจะต้องแก้ปัญหาให้มากที่สุดเท่าที่จะทำได้โดยข้ามบางส่วนไป ความคิดของคุณก็คือว่ามันไม่สำคัญซึ่งส่วนหนึ่งของงานที่คุณเสร็จสมบูรณ์ก็เพียงเรื่องที่เซตเป็นขนาดใหญ่ที่สุดเท่าที่เป็นไปได้
คุณสามารถทำงานให้สำเร็จได้กี่งาน
ท้าทาย
เขียนโปรแกรมมากถึง 12 โปรแกรมโดยแต่ละโปรแกรมสามารถแก้ไขหนึ่งใน 12 ภารกิจที่ระบุด้านล่างได้อย่างถูกต้อง ผลรวมสะสมของความยาวของโปรแกรมเหล่านี้ต้องไม่เกิน 140 ไบต์
อีกทางหนึ่งคุณอาจเขียนโปรแกรมเดี่ยวยาวไม่เกิน 140 ไบต์ซึ่งใช้จำนวนเต็มตั้งแต่ 1 ถึง 12 และดำเนินการแก้ไขตามภารกิจที่เกี่ยวข้องโดยป้อนข้อมูลให้มากขึ้นตามความจำเป็น ไม่ใช่ทุกงานที่ต้องทำงาน แต่มีเพียงงานที่นับรวมเข้ากับคะแนนของคุณ งานที่ไม่ทำงานนั้นได้รับอนุญาตให้ทำผิดพลาดหรือทำอย่างอื่น
ในกรณีใดกรณีหนึ่ง "โปรแกรม" ในความเป็นจริงอาจเป็นฟังก์ชั่นที่รับอินพุตเป็นอาร์กิวเมนต์หรือพร้อมท์และพิมพ์หรือส่งคืนเอาต์พุต ตัวอย่างเช่นคุณอาจเขียนฟังก์ชั่น 140 ไบต์ที่ดูเหมือนf(taskNumber, taskInput)
หรือคุณอาจเขียนโค้ดแยกต่างหากสำหรับแต่ละงานบางฟังก์ชั่นเป็นบางฟังก์ชั่นและบางโปรแกรมเป็นโปรแกรมเต็มเปี่ยม
รายละเอียดอื่น ๆ:
รหัสทั้งหมดจะต้องเขียนในภาษาเดียวกัน
ตามปกติอินพุตควรมาจาก stdin, บรรทัดคำสั่ง, อาร์กิวเมนต์ของฟังก์ชันหรืออะไรก็ตามที่เป็นปกติสำหรับภาษาของคุณ เอาต์พุตถูกพิมพ์ไปยัง stdout หรือทางเลือกที่ใกล้เคียงที่สุดกับภาษาของคุณหรือส่งคืนในรูปแบบที่เหมาะสม
การจัดรูปแบบอินพุตที่เหมาะสมนั้นใช้ได้ เช่นอัญประกาศรอบสตริงหรือ
\n
แทนที่จะขึ้นบรรทัดใหม่ตามจริงเอาต์พุตควรเป็นสิ่งที่ถูกเรียกใช้โดยไม่มีการจัดรูปแบบภายนอกหรือพื้นที่ว่าง ข้อยกเว้นคือบรรทัดใหม่ต่อท้ายที่เป็นตัวเลือกเดียว
รหัสที่ทำงานในสภาพแวดล้อมREPL เท่านั้นไม่ถือว่าเป็นโปรแกรมหรือฟังก์ชัน
คุณไม่สามารถเขียนหลายโปรแกรมที่แก้ปัญหาหลายงาน มันเป็นหนึ่งในโปรแกรมที่ (นึกคิด) แก้ปัญหางานทั้งหมดหรือ (นึกคิด) 12 โปรแกรมที่แต่ละแก้งานเดียว
การโพสต์งานแก้ปัญหาที่คุณไม่ได้เขียนหรือแก้ไขเพียงเล็กน้อยเท่านั้นไม่ได้รับอนุญาตโดยไม่ให้สิทธิ์กับผู้แต่งดั้งเดิมและได้รับอนุญาตเช่นกัน หากคำตอบของคุณประกอบด้วยวิธีแก้ปัญหาที่สั้นที่สุดจากคำตอบอื่น ๆ ทั้งหมดก็ควรเป็นวิกิชุมชน
เกณฑ์การให้คะแนน
การส่งที่ทำภารกิจให้เสร็จสมบูรณ์มากที่สุดคือผู้ชนะ หากการส่งสองครั้งเสมอกันผู้ที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ หากจำนวนไบต์ถูกผูกไว้การส่งก่อนหน้านี้จะชนะ คำตอบ wiki ของชุมชนไม่ได้รับอนุญาตให้ชนะ
อย่าลืมบอกเราว่างานใดที่คุณแก้ไขไม่ใช่แค่งาน!
แต้มต่อสำหรับผู้ที่ไม่ใช่นักกอล์ฟ:
อาจเป็นไปได้ว่าความท้าทายนี้จะถูกครอบงำโดยภาษากอล์ฟ หลายภาษาอาจมีปัญหาในการแก้ปัญหาแม้แต่หนึ่งหรือสองงานภายใน 140 ไบต์ ดังนั้นคุณอาจส่งคำตอบที่ไม่สามารถแข่งขันได้โดยมีการ จำกัด 3 ทวีตคือ 420 ไบต์ กฎอื่น ๆ ทั้งหมดยังคงเหมือนเดิม
งาน
ภารกิจที่ 1 - ตัวเลขสามตัวสามารถสร้างรูปสามเหลี่ยมได้หรือไม่?
ใช้จำนวนเต็มบวกสามค่าแล้วส่งค่าความจริง /ค่าเท็จที่ระบุว่าสามบรรทัดที่มีความยาวเหล่านั้นสามารถสร้างรูปสามเหลี่ยมได้หรือไม่ คุณไม่อาจถือว่าตัวเลขมาในลำดับใดก็ได้
ตัวอย่างความจริง (หนึ่งรายการต่อบรรทัด):
20 82 63
1 1 1
2 3 4
1 2 2
ตัวอย่างที่เป็นเท็จ:
6 4 10
171 5 4
1 1 2
1 2 3
ภารกิจที่ 2 - ใกล้เคียงที่สุดกับหนึ่งล้าน
ระบุสตริงทศนิยม 7 หลัก (0-9) ให้จัดเรียงใหม่เพื่อให้ได้ตัวเลขที่ใกล้เคียงกับหนึ่งล้านมากที่สุด นั่นคือabs(1000000 - rearrangedNumber)
ควรจะลดลง
พิมพ์หรือส่งกลับจำนวนผลลัพธ์เป็นจำนวนเต็มไม่ใช่สตริง (ดังนั้นไม่ควรมีเลขศูนย์นำหน้ายกเว้นว่าเป็นบรรทัดฐานสำหรับภาษาของคุณ)
เช่นการป้อนข้อมูลของ9034318
ควรส่งผลให้984331
(และไม่1033489
)
2893984
2348899
ควรจะเป็น
0001000
1000000
ควรจะเป็น
0000020
200000
ควรจะเป็น
ภารกิจที่ 3 - เครื่องมือจำลองแป้นพิมพ์อย่างง่าย
ใช้เวลาในสายของอักษรตัวพิมพ์เล็ก (AZ) <>
ช่องว่างและวงเล็บมุม อ่านจากซ้ายไปขวาสตริงนี้แสดงถึงคีย์ที่ถูกกดบนคีย์บอร์ดมาตรฐานในขณะที่เท็กซ์เอดิเตอร์ว่างเปล่าเริ่มเปิด ตัวอักษรและช่องว่างตรงกับปุ่มปกติ แต่<
ตรงกับปุ่มลูกศรซ้ายและ>
ปุ่มลูกศรขวาซึ่งทั้งคู่ย้ายเคอร์เซอร์เมื่อกด
<
เลื่อนเคอร์เซอร์ไปทางซ้ายหนึ่งอักขระหรือไม่ทำอะไรเลยถ้าเคอร์เซอร์อยู่ที่จุดเริ่มต้นของสตริง
>
เลื่อนเคอร์เซอร์ไปทางขวาหนึ่งอักขระหรือไม่ทำอะไรเลยถ้าเคอร์เซอร์อยู่ที่ท้ายสตริง
เอาต์พุตสตริงที่จะอยู่ในเท็กซ์เอดิเตอร์เมื่อกดคีย์ทั้งหมดในสตริงอินพุตแล้ว ไม่อนุญาตให้ใช้โค้ดเอาต์พุตสำหรับเลื่อนเคอร์เซอร์เพื่อย้ายเคอร์เซอร์
จะมีอักขระที่ไม่ใช่ลูกศรอย่างน้อยหนึ่งตัวในอินพุต
เช่นการป้อนข้อมูลที่ควรผลผลิตui<<q>>ck <<<<<<the<<<<>>> >>>>>>>>brown x<o<f
the quick brown fox
op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>m
llammoptimizer
ควรให้
e< <c<b<a
abc e
ควรให้
<<<>><><<><toast>><<>><><<>><
toast
ควรให้
ภารกิจที่ 4 - ตัวอักษร FILTHE
ในแบบอักษรมาก, 6 ของตัวพิมพ์ใหญ่ตัวอักษรตัวอักษรภาษาอังกฤษประกอบด้วยมิดชิดของเส้นแนวนอนและแนว: E
, F
, H
, I
, และL
T
เราจะเรียกตัวอักษรเหล่านี้ว่า FILTHE
ใช้สตริงตัวอักษรตัวพิมพ์ใหญ่ (AZ) และนับจำนวนบรรทัดในตัวอักษร FILTHE เพื่อแสดงผลจำนวนเต็มผลลัพธ์
E
, F
, H
, I
, L
และT
มี 4, 3, 3, 3, 2 และ 2 สายตามลำดับ
เช่นGEOBITS
มี 4 + 3 + 2 = 9 สายส่วนหนึ่งของตัวอักษร FILTHE (สำหรับ.E..IT.
) 9
ดังนั้นการส่งออกที่ควรจะเป็น
ABCDEFGHIJKLMNOPQRSTUVWXYZ
17
การส่งออกควร
ABCDGJKMNOPQRSUVWXYZ
0
การส่งออกควร
FILTHYLINESINLETTERS
39
การส่งออกควร
ภารกิจที่ 5 - Alex Recursive A.
ผู้ดูแลของเราอเล็กซ์เอมีชื่อย่อที่ค่อนข้างลึกลับว่า "A"
ตอนนี้ฉันไม่แน่ใจ แต่ผมคิดว่าย่อมาจากA.
.A xelA
และฉันยังสวยแน่ใจว่ายืนอยู่ตรงนั้นลอบสำหรับ.A
Alex A.
ดังนั้นเพื่อให้ได้ชื่อเต็มของอเล็กซ์เราจะต้องขยายออกไปA.
และ.A
:
Alex A. -> Alex [A.] -> Alex [.A xelA] -> Alex .A xelA -> Alex [.A] xelA -> Alex [Alex A.] xelA -> Alex Alex A. xelA -> etc.
ให้โปรแกรมของคุณใช้จำนวนเต็มแบบไม่ลบและขยายAlex A.
หลาย ๆ ครั้งโดยแสดงผลลัพธ์สตริง
ดังนั้น
0
จะกลายเป็นAlex A.
,
1
กลายเป็นAlex .A xelA
,
2
กลายเป็นAlex Alex A. xelA
,
3
กลายเป็นAlex Alex .A xelA xelA
,
4
กลายเป็นAlex Alex Alex A. xelA xelA
,
5
กลายเป็นAlex Alex Alex .A xelA xelA xelA
,
และอื่น ๆ
(ฉันทำสิ่งนี้เพราะฉันรู้สึกไม่ดีที่จะทิ้งอเล็กซ์โดยไม่ตั้งใจออกจากการท้าทายบรรณาการ mod : P)
ภารกิจที่ 6 - การหมุนของ Numpad
ใช้จำนวนเต็มตั้งแต่ 1 ถึง 9 (คุณอาจใช้เป็นสตริง) ส่งออกตัวเลข 3 × 3 ของตัวเลข
789
456
123
หมุนเพิ่มขึ้น 90 °เพื่อให้ตัวเลขหลักปรากฏขึ้นที่ใดก็ได้ในแถวบนสุด เมื่อ5
ใดที่อินพุตเข้าการหมุนใด ๆ จะเป็นเอาต์พุตที่ถูกต้องเนื่องจาก5
ไม่สามารถหมุนไปด้านบนได้
เช่นเมื่อ3
มีการป้อนข้อมูลทั้งสอง
963
852
741
และ
321
654
987
เป็นผลลัพธ์ที่ถูกต้อง
สำหรับอินพุต4
เท่านั้น
147
258
369
เป็นผลลัพธ์ที่ถูกต้อง
ภารกิจที่ 7 - แยกเลขเป็นสิบ
รับสายอักขระเลขฐานสิบ (0-9) ที่ไม่มีข้อยกเว้นและส่งออกค่าจริงหากสามารถแบ่งออกเป็นส่วนที่ต่อเนื่องกันโดยที่ตัวเลขทั้งหมดในแต่ละส่วนรวมเป็น 10 หากไม่สามารถทำได้ให้ส่งออกค่าเท็จ
เช่น19306128
สามารถแยกออกได้เช่น19|3061|28
ส่วนทั้งหมดรวมถึง 10 (1 + 9, 3 + 0 + 6 + 1, 2 + 8) ดังนั้นค่าความจริงควรออก
ตัวอย่างความจริง (หนึ่งรายการต่อบรรทัด):
19306128
073
730
0028115111043021333109010
2222255
ตัวอย่างที่เป็นเท็จ:
6810410
9218
12341
5222225
000
งาน 8 - นาฬิกาสี่เหลี่ยม
ใช้ในสตริงหลายขนาดที่มีขนาดสม่ำเสมอ
เอาต์พุต12
ถ้าอินพุตคือ
_ _
| | |
|_ _|
เอาต์พุต3
ถ้าอินพุตคือ
_ _
| |_|
|_ _|
เอาต์พุต6
ถ้าอินพุตคือ
_ _
| | |
|_|_|
เอาต์พุต9
ถ้าอินพุตคือ
_ _
|_| |
|_ _|
ไม่มีกรณีอินพุตอื่น ๆ
งานที่ 9 - วงเล็บเหลี่ยม
ใช้เวลาในสตริง 4 ไบต์ที่มีหนึ่งของแต่ละวงเล็บซ้าย(
, [
, {
และ<
ในลำดับใด
เพิ่มวงเล็บปีกกาด้านขวาที่สอดคล้องกันดังนั้นสตริงมีความยาว 8 ไบต์และมีเส้นแนวตั้งของความสมมาตร เช่นจะกลายเป็น[<({
[<({})>]
จากนั้นสลับวงเล็บเหลี่ยมทุกอันในสตริงนี้ เช่นจะกลายเป็น[<({})>]
]>)}{(<[
เอาท์พุทสตริงตัวยึด 8 ไบต์เดิมด้วยเวอร์ชันที่กลับด้านบนและด้านล่างในบรรทัดที่แยกกัน
ดังนั้นเอาต์พุตสุดท้ายสำหรับอินพุต[<({
จะเป็น
]>)}{(<[
[<({})>]
]>)}{(<[
ในทำนองเดียวกันผลลัพธ์สำหรับ<({[
ควรเป็น
>)}][{(<
<({[]})>
>)}][{(<
การป้อนข้อมูลที่(<<[
ไม่ถูกต้องเนื่องจากขาดหายไปและมีความเป็นพิเศษ{
<
งาน 10 - กำหนดขอบเขต
ใช้เวลาในตารางสี่เหลี่ยมของข้อความ (1 × 1 ที่เล็กที่สุด) ทำจากของ.
ที่แสดงถึงพื้นที่ว่างและX
ของที่เป็นตัวแทนของกระเบื้องที่เป็นของแข็ง เซลล์ที่อยู่นอกขอบเขตกริดถือว่าว่างเปล่า คุณอาจสมมติว่าแถวและคอลัมน์ขอบกริด 4 รายการแต่ละรายการจะมีอย่างน้อยหนึ่งX
รายการ
เช่นอินพุตที่ถูกต้องอาจเป็น:
XXX.....X.....
X..X...X.X....
XXX.....X....X
เอาท์พุทอีกตารางสี่เหลี่ยมของข้อความที่ทุกเซลล์ที่ว่างเปล่าที่เพื่อนบ้านX
orthogonally หรือแนวทแยงมุม, รวมทั้งผู้ที่อยู่นอกตารางการป้อนข้อมูลที่o
กลายเป็น โดยพื้นฐานแล้ว perimiter of o
's จะถูกวาดรอบส่วนของแผ่นกระเบื้องที่เป็นของแข็งทั้งหมด กริดใหม่ไม่ควรมีขนาดใหญ่เกินกว่าที่ควรจะเป็น
ดังนั้นผลลัพธ์ของตัวอย่างข้างต้นจะเป็น:
ooooo...ooo.....
oXXXoo.ooXoo....
oXooXo.oXoXo.ooo
oXXXoo.ooXoo.oXo
ooooo...ooo..ooo
ในทำนองเดียวกันเอาต์พุตของอินพุตXXX..X.X
ควรเป็น
oooooooooo
oXXXooXoXo
oooooooooo
และเอาท์พุท
oooooooooo.
oXXXooXoXo.
oooooooooo.
จะไม่ถูกต้องเนื่องจากคอลัมน์ด้านขวาสุดว่างเปล่าไม่จำเป็น
คุณอาจจะใช้ใด ๆ ที่แตกต่างกัน 3 ASCII พิมพ์ตัวอักษรในสถานที่ของ.
, และX
o
งาน 11 - Sator Square
เอาท์พุทSator Square :
SATOR
AREPO
TENET
OPERA
ROTAS
ตัวอักษรใด ๆ อาจเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ดังนั้น
SatOR
aRePO
tenet
OPERa
RoTaS
เป็นเอาต์พุตที่ถูกต้อง
ไม่มีอินพุต
งาน 12 - ทวีตยอดเยี่ยม
ไม่มีอินพุต แต่เอาต์พุตสตริงASCII ที่พิมพ์ได้ 140 ไบต์ที่มีอย่างน้อยหนึ่งในอักขระ ASCII ที่พิมพ์ได้ 95 ตัว (ดังนั้น 45 ตัวอักษรจะซ้ำกัน)
ผลรวมของรหัสอักขระของ 140 ไบต์ทั้งหมดในสายอักขระนี้ต้องเป็นตัวเลือกสำคัญของ Sophie Germainเช่นหมายเลขเฉพาะp
ที่2p+1
สำคัญ รหัสตัวอักษรสำหรับพื้นที่คือ 32, 33 !
, 34 "
, และอื่น ๆ ถึง ~
126 ผลรวมสามารถคำนวณเป็น Python sum(map(ord, myString))
ได้
ตัวอย่างผลลัพธ์คือ:
! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d
ผลรวมของรหัสตัวอักษรคือหมายเลขเฉพาะ 12203 ซึ่งมีรหัสที่ปลอดภัยที่สอดคล้องกันคือ 24407
import
s อย่างไร สมมติว่าฉันเขียน 5 ฟังก์ชันที่ 2 ต้องการโมดูลเดียวกัน (เช่นimport Math
) นี่นับเป็นสองครั้งหรือไม่?