เขียนโปรแกรมที่ให้ผลลัพธ์“ 2012” - ถึงแม้ว่ามันจะถูกแก้ไข!


116

ความคิดนี้ไม่ใช่ของฉันแม้ว่าฉันจะไม่รู้ว่ามันมาจากไหน ฉันเคยพบเจอในการประกวดเขียนโปรแกรมเมื่อนานมาแล้ว (1998 ถ้าฉันจำได้ถูกต้อง) งานคือการเขียนโปรแกรมในภาษาที่คุณชื่นชอบที่ผลและมีเพียง2012 2012สิ่งที่จับได้คือโปรแกรมจะต้องส่งออก2012หลังจากตัวละครตัวใดตัวหนึ่งถูกแก้ไข การดัดแปลงสามารถเป็นการแทรกการลบหรือการแทนที่ แน่นอนว่าการแก้ไขจะเป็นไปได้ว่าโปรแกรมนั้นยังคงใช้งานได้จริง

เนื่องจากฉันไม่รู้ภาษาการเขียนโปรแกรมทั้งหมดฉันจึงต้องขอให้ผู้ชมช่วยฉันและทดสอบคำตอบที่ส่งมา

เพิ่ม:หลายคนแสดงความคิดเห็นว่าคำจำกัดความของการแก้ไขที่ยอมรับได้ของฉันนั้นคลุมเครือเกินไป นี่คือความพยายามครั้งที่สองของฉัน: การแก้ไขที่ได้รับอนุญาตจะทำให้โปรแกรมของคุณใช้งานได้จริงและจะไม่ทำให้เกิดความผิดพลาด ที่นั่นฉันคิดว่าควรครอบคลุมข้อผิดพลาดในการรวบรวมเวลาเชื่อมโยงและเวลาทำงานทั้งหมด แม้ว่าฉันจะแน่ใจว่าจะมีบางกรณีแปลก ๆ ในบางภาษาอยู่แล้วดังนั้นเมื่อเกิดขึ้นเราจะดูทีละคน


ข้อผิดพลาดเกี่ยวกับรันไทม์เช่นการอ่านที่อยู่ที่ไม่ถูกต้องน่าจะเป็นไปได้อย่างไร
aaaaaaaaaaaa

@PeterTaylor - มี 3 คำตอบแล้ว C one ที่มีการแก้ไขอย่างหนัก คุณสามารถมองหาแรงบันดาลใจที่นั่น
Vilx-

2
ทุกคนคิดว่ามันเป็นไปไม่ได้ใน APL หรือ GolfScript หรือในทำนองเดียวกัน?
Jeff Burdges

14
สิ่งนี้ทำให้ฉันคิดเกี่ยวกับ DNA และความซ้ำซ้อนและศักยภาพของรังสีคอสมิกในการพลิกบิตในโปรแกรมของฉัน สิ่งที่น่าสนใจ
Jon Purdy

11
... คุณต้องนอนหลับ
Vilx-

คำตอบ:


65

C, 53 ตัวอักษร

main(){register*a="2012";(puts("2012"==a?a:"2012"));}

นานกว่าคำตอบของภาษาสคริปต์เล็กน้อยและปฏิบัติตามหลักการพื้นฐานเดียวกัน ขึ้นอยู่กับความจริงที่ว่าเนื่องจากข้อ จำกัด ของไวยากรณ์ของ C ตัวอักษรเท่านั้นที่จะเป็นไปได้ที่จะเปลี่ยนแปลงโดยไม่ทำให้โปรแกรมไม่ถูกต้องอยู่ภายในสตริง!

แก้ไข:โกนออก 4 ตัว

Reedit:ความแข็งแกร่งเพิ่มขึ้นโกนตัวละครตัวหนึ่งออก

เปลี่ยนใหม่:ยาวกว่า แต่แข็งแกร่งกว่า ลอง&ตอนนี้เลย! (ถูกต้องในครั้งนี้)

อัปเดต:ย่อลงเล็กน้อย; เอาชนะแนวทางส่วนใหญ่ที่เห็นจนถึง

อัปเดต:เปลี่ยน int เป็นโมฆะ; ควรเอาชนะแนวทางที่เป็นไปได้สุดท้ายที่จะทำลายมันฉันคิดได้

อัปเดต:ฉันกระหึ่มวิธีการอื่น แทนที่สุดท้ายa(อาจจะเน่า) ด้วย0; การใช้ชื่อสองตัวอักษรควรจัดการกับปัญหานั้น

อัปเดต:ยกเลิกการอัปเดตล่าสุด สมมติว่ามีการเปลี่ยนแปลงที่ก่อให้เกิดข้อผิดพลาดรันไทม์จะไม่ได้รับอนุญาต; aจะทำงานได้ดี

ปรับปรุง:ย้อนรอยบางอย่าง; ความพยายามที่จะยกเลิกการลงทะเบียน*aจะแยกออก ดังนั้นการใช้voidเพื่อแซวข้อผิดพลาดในการคอมไพล์ก็ไม่จำเป็น

ปรับปรุง:และการตัดทอนสุดท้าย; ที่ขึ้นอยู่กับสตริงที่"2012"ถูกวางไว้ที่ แต่หนึ่งที่อยู่ (ซึ่งเป็นเรื่องธรรมดา); และสตริงตัวอักษรนั้นเป็นแบบอ่านอย่างเดียว (เช่นกัน)

อัปเดต:มันมีค่าใช้จ่ายสำหรับฉันตัวละครสองตัว แต่ฉันเอาชนะเซมิไฟนูนอ่อนแอของคุณ!


2
@PaulR: ตอนนี้เปลี่ยนเป็นregister void; registerจะมีการป้องกัน&; จะมีการป้องกันvoid *
Williham Totland

6
ตกลง ... แก้ไขให้ฉันถ้านี่เป็น C ที่ไม่ถูกต้อง แต่เพิ่งจะทำงานกับ VS2010 ของฉัน แทรก;ระหว่างและputs (
Vilx-

39
+1, ขอแสดงความยินดีฉันคิดว่าคุณจับมันแล้ว ฉันเขียนชุดทดสอบแบบง่ายที่พยายามรวบรวมและเรียกใช้โค้ดของคุณในรูปแบบที่ไม่ซ้ำใครและทุกอย่างไม่สามารถรวบรวมขัดข้องหรือพิมพ์ได้2012! (ผมใช้เฉพาะอักขระ ASCII พิมพ์สำหรับการแทรกและทดแทนการทดสอบ แต่ฉันสงสัยขยายตัวละครจะช่วย.)
Ilmari Karonen

3
@IlmariKaronen: เฮ้นั่นเป็นความพยายามมากมาย ขอบคุณที่ผ่านทุกสิ่ง :)
Williham Totland

1
@Titus: ถ้าคุณหมายถึงการเปลี่ยน==สำหรับ!=ใน ternary ที่ทำให้คุณได้ที่ไหนเลย แทนการแสดงผลได้ในขณะนี้เอาท์พุทa "2012"
Williham Totland

38

Haskell, 19

(\xx@2012->xx)$2012

หรือเป็นโปรแกรมเต็มรูปแบบ

29

main=print$(\xx@2012->xx)2012


เพื่อความสนุกสนานอีกเล็กน้อย:

(\l@(_:_:t:[])->t:l)['0'..'2']


เพื่อให้ได้สิ่งที่ไม่สามารถแก้ไขได้ในลักษณะที่ทำให้เกิดข้อผิดพลาดรันไทม์เราสามารถเข้ารหัสข้อมูลในความยาวของรายการซึ่งไม่สามารถแก้ไขได้โดยใช้การเปลี่ยนแปลงตัวละครเพียงตัวเดียวเช่น

map(head.show.length)[[(),()],[],[()],[(),()]]

ในการทำให้สามารถแก้ไขได้มากขึ้น (อย่างปลอดภัย) เราสามารถใช้ตัวเลขนั้นเป็นองค์ประกอบลิสต์ได้ - เพียงแค่ทำให้มันเป็นสตริงเพื่อป้องกันการแลกเปลี่ยนคอมม่าสำหรับเครื่องหมายบวก ':

map(head.show.length)[["2012","2012"],[],["2012"],["2012","2012"]]

เนื่องจากสตริงนี้เป็นเพียงผลลัพธ์ของนิพจน์เรายังสามารถแทนที่มันได้ด้วย - ไม่ใช่ปัญหาด้วยความเกียจคร้านของ Haskell

64 72

a=map(head.show.length.init)[[a,a,a],[a],[a,a],[a,a,a]]
main=putStrLn a

การinitกระทำที่เป็น "ลบหนึ่ง แต่ไม่ใช่เชิงลบ" ที่นี่


นอกจากนี้เรายังสามารถรวมระบบประเภทในรูปแบบความซ้ำซ้อนแล้วเขียนหมายเลขในวิธีที่สามารถแก้ไขได้ด้วยการเปลี่ยนแปลงหนึ่งตัวอักษร ...

u :: Enum a => (a,[b])->(a,b)
u(a,[b]) = (succ a , b)
p :: (a,b)->(a,[b])
p(a,b) = (a,[b])

ι :: (Int,())           -- Integral type to make sure you can't make it 0/0
ι = (\n -> (n-n,()))0

twothousandandtwelve = map(head.show.fst) [ u.p.u.p$ι , ι , u.p$ι , u.p.u.p$ι ]

( GHCi> twothousandandtwelve≡> "2012")

ตอนนี้คุณสามารถเปลี่ยนค่าใด ๆuให้pกลับกันได้ แต่นั่นจะทำให้ความลึกของรายการซ้อนกันในองค์ประกอบ tuple ตัวที่สองและทำให้เกิดข้อผิดพลาดในการรวบรวม

ความคิดนี้สามารถขยายเพิ่มเติมในลักษณะที่ข้อความทั้งหมดสามารถเข้ารหัสขนาดกะทัดรัดง่ายต่อการอ่านและแก้ไขและยังปลอดภัยจากการปรับเปลี่ยนอักขระเดี่ยว


และอีกหนึ่ง ...

main = print N2012
data Counter = Τv |Πy |Υj |Cε |Ho |Φϑ |Ωm |Sg |Πl |Pt |Yϑ |Γσ |Km |Φz |Εα |Av |Ζρ |Ηρ |Εv |Κs |Rζ |Γϑ |Οc |Dι |Rυ |Λd |Bγ |Wt |Xε |Ωη |Ιa |Hζ |Ed |Qj |Wπ |Κw |Qu |Γο |Oι |Mσ |Ωκ |Yg |Kυ |Aj |Du |Λζ |Nζ |Θτ |Pε |Yf |Βa |Τγ |Qx |Jη |Pδ |Iq |Ωn |Fv |Kl |Ψη |Δj |Θσ |Hd |Θq |Υs |Ht |Fρ |Jh |Lζ |Hμ |Υι |Ρζ |Ρv |Dυ |Wo |Iχ |Iζ |Γy |Kr |Sσ |Iμ |Μο |Xw |Εμ |Cσ |Yξ |Aq |Jf |Hσ |Oq |Hq |Nυ |Lo |Jκ |Ρz |Οk |Θi |Θα |Αη |Gh |Lξ |Jm |Ων |Zu |Μc |Qη |Κγ |Αψ |Χζ |Hρ |Γρ |Uϑ |Rj |Χγ |Rw |Mω |Πζ |Θρ |Ωd |Υh |Nt |Tη |Qψ |Θω |Εχ |Iw |Σx |Ηn |Mτ |Xt |Yx |Φε |Hh |Wη |Mf |Ψχ |Νγ |Βξ |Aϑ |Qp |Τϑ |Φm |Uy |Gy |Cd |Bχ |Λl |Οτ |Εa |Df |Li |Aι |Yi |Νκ |Vc |Γx |Φρ |Φp |Nξ |Kf |Tw |Λξ |Φn |Λa |Oψ |Υχ |Fψ |Xω |Τq |Οσ |Σj |Θψ |Το |Νr |Ιπ |Τi |Dτ |Φf |Μn |Χm |Ηε |Wa |Αχ |Uδ |Λf |Ρu |Qk |Wα |Uρ |Τζ |Lg |Qy |Τν |Jϑ |Βδ |Mε |Μι |Πβ |Bη |Eκ |Κz |Ηh |Fδ |Σp |Εγ |Qφ |Μτ |Νχ |Ψν |Pw |Χz |Εϑ |We |Nπ |Tυ |Wg |Bh |Tρ |Ζν |Λm |Ag |Dσ |Πι
                |Oη |Nν |Χl |Χp |Sξ |Πt |Οϑ |Wο |Yη |Cp |Tm |Ξs |Εβ |Ιb |Ρρ |Fs |Um |Ep |Jλ |Rρ |Ρξ |Ua |Οq |Γξ |Zη |Nη |Qτ |Nc |Ez |Xσ |Yφ |Ρy |Yε |Ετ |Φκ |Λω |Ωα |Μκ |Φw |Mt |Tk |Sf |Ηξ |Οb |Νπ |Κε |Mι |Kz |Vi |Ξx |Ψs |Αο |Qδ |Kt |Aσ |Οm |Ψδ |Λγ |Ακ |Hα |Wϑ |Τμ |Γγ |Jδ |Ικ |Ηϑ |Μp |Zo |Κn |Qz |Δe |Pe |Jο |Qι |Tu |Jν |Ξμ |Πω |Αm |Θw |Nε |Dy |Zξ |Υα |Dβ |Hο |Χv |Gr |Ωl |Jb |Σl |Vζ |Ξ  |Nx |Qs |Βh |Qg |Νx |Co |Rσ |Νυ |Χg |Ρt |Wy |Ηκ |Οa |Yμ |Uj |Uξ |Op |Μr |Ζα |Ξw |Mυ |Ar |Ργ |Zζ |Sv |Vy |Βo |Κι |Vϑ |Ξι |Uζ |Fμ |Su |Ιξ |Fϑ |Hi |Hw |Mv |Χχ |Θg |Sν |Pp |Mπ |Pk |Bκ |Lυ |Ρλ |Ιr |Uλ |Νo |Κο |Nh |Lε |Sw |Ξλ |Zυ |Mr |Bv |Κπ |Aγ |Dv |Pd |Ξσ |Μg |Oπ |Χξ |Nj |Kψ |Ξπ |Mκ |Gn |Ωe |Gγ |Pν |Yz |Nl |Οο |Ic |Pz |Ξf |Νω |Υμ |Ηq |Nw |Θm |Μx |Jε |Φy |Οz |Ξz |Ti |Οψ |Φγ |Tψ |Oγ |Zϑ |Ιk |Σw |Rf |Υi |Ωp |Vr |Υτ |Xl |Οβ |Πb |Δν |Οu |Jα |Ττ |Κl |Pf |Iκ |Gk |Πe |Σu |Δβ |Ωh |Nλ |Ξt |My |Πs |Βr |Mγ |Δω |Le |Zρ |Θv |Σs |Ηd |
               Bn |Κu |Δξ |Pτ |Ηα |Δu |Πμ |Ρh |Bω |Τλ |Gt |Αρ |Sh |Aο |Θδ |Δπ |Wq |Tφ |Γo |Γf |Λβ |Xυ |Mη |Δw |Qυ |Vν |Βτ |Γα |Μm |Μπ |Κζ |Θd |Fε |Ρτ |Οn |Αs |Wu |Ξh |Μz |Αν |Aε |Yq |Τε |Cz |Ωu |Ec |Ds |Wρ |Θϑ |Κp |Τδ |Mδ |Ηy |Go |Sb |Rξ |Σϑ |Yο |Jg |Vh |Kσ |Nδ |Ηψ |Γh |Rk |Eο |Μk |Ζk |Ψο |Ψμ |Zσ |Pβ |Ρd |Us |Hυ |Βi |Mχ |Σr |Βι |Sχ |Zγ |Δα |Sτ |Γp |Ns |Sn |Νn |Pξ |Νa |Sω |Σi |Τφ |Xο |Eδ |Ba |To |Vj |Sl |Κκ |Δh |Τχ |Gυ |Ρϑ |Bs |Dh |Μσ |Vd |Iϑ |Kg |Νμ |Dμ |Σγ |Πg |Γg |Εt |Fa |Ψn |Ρx |Αj |Mβ |Kλ |Ξψ |Fω |Qζ |Θj |Kπ |Gf |Oe |Yυ |Κk |Wω |Bδ |Lο |Cβ |Nf |Ol |Σo |Fn |Τβ |Βω |Dn |Ha |Πλ |Ss |Σy |Kϑ |Lp |Dδ |Dψ |Ωo |Xγ |Χk |Ωσ |Δa |Sκ |Jμ |Κt |Rc |Ηc |Lχ |Oε |Μλ |Cs |Il |Tι |Ra |Zα |Ωr |Ob |Wβ |Ον |Γν |St |Xλ |Kv |No |Rε |Kd |Mν |Np |Ωc |Δζ |Nβ |Zπ |Ok |Vι |Tδ |Vδ |Γz |Χα |Μs |Βυ |Xc |Xo |Vp |Γχ |Υf |Θπ |Πj |Pi |Γj |By |Φk |Υq |Ny |Rο |Γd |Ωj |Αy |Εo |Κy |Uc |Rm |Ph |Αδ |Ιl |Ιx |Δτ |Zt |Nq |Ct |Φi |Uv |Eπ
                |Κm |Rλ |Vu |Χσ |Τn |Μe |Φη |Ξβ |Εz |Σω |Bb |Ψε |Sε |Ρm |Δο |Vξ |Φo |Ωε |Zb |Σc |Dζ |Ξp |Rη |Ιψ |Δσ |Χη |Kj |Eμ |Qν |Ri |Ip |La |Νξ |Αγ |As |Nr |Δi |Oν |Ζx |Xκ |Pr |Ελ |Λb |Ψk |Ωβ |Pl |Ιy |Cμ |Ζc |Αg |Σρ |Dw |Ρq |Ιη |Pζ |Σa |Uq |Ρμ |Lω |Fh |Ζδ |Αd |Cψ |Κσ |It |Qκ |Fν |Αb |Ηg |Ιν |Ls |Jr |Ow |Je |Zx |Ld |Jl |Ζd |Μo |Χτ |Kα |Μβ |Mo |Σλ |Xρ |Μq |Ψb |Νd |Ρβ |Wδ |Μf |Κρ |Ηb |Ξτ |Qα |Λv |Zψ |Φt |Sδ |Εh |Rκ |Rμ |Χι |Κυ |Ηj |Pχ |Pη |Jσ |Ρσ |Ιχ |Kζ |Εδ |Nω |Iψ |Γμ |Vσ |Ψρ |Χυ |Αw |Kn |Al |Gj |Zj |Αc |Aζ |Ζi |Bz |Vπ |Πw |Αu |Qf |Bf |Ξo |Ρε |Λy |En |Ey |Wi |Σχ |Τc |Dχ |Fg |Ρo |Zm |Ψω |Fq |Μa |Ηt |Wc |Kε |Κτ |Χψ |Κβ |Λφ |Κq |Υm |Πx |Pj |Mi |Δy |Κχ |Lϑ |Wτ |Lη |Nd |Ωk |Iπ |Tα |Bο |Uε |Lc |Rp |Θx |Ρη |Lu |Μζ |Εd |Gρ |Χμ |Vγ |Ιζ |Πυ |El |Uk |Hc |Ξξ |Λx |Ιο |Μy |Ζm |Jw |Iε |Σφ |Αk |Σf |Ac |Ab |Αq |Δf |Θκ |Υa |Ζτ |Jc |Xμ |Sι |Κv |Ζj |Ει |Oω |Ηδ |Φv |Dα |Fτ |Ko |Et |Ψζ |Jx |Mk |Th |Βλ |Λχ |Οo |Υπ |
               Cζ |Θy |Λk |Γδ |Iυ |Σξ |Υϑ |Cι |Cχ |Εσ |Βψ |Iα |Τη |Eυ |Lφ |Lδ |Υw |Ξο |Uσ |Δb |Nϑ |Ζγ |Δz |Cο |Mb |Ξy |Γυ |Εk |Αζ |Vα |Τυ |Ιω |Wυ |Cτ |Ιγ |Yω |Ωy |Ηp |Ψψ |Ah |Dq |Βv |Ιw |Ox |Ξv |Οζ |Tχ |Πψ |Qb |Rδ |Aψ |Zμ |Ζg |Ψφ |Nφ |Δρ |Χe |Vχ |Ηυ |Ml |Σσ |Ζμ |Sz |Πκ |Sγ |Kq |Dη |Υk |Dt |Ξe |Sc |Νs |Μv |Ev |Ji |Rχ |Xπ |Αo |Lμ |Gδ |Fσ |Λϑ |Λe |Σb |Id |Hb |Γι |Βz |Sβ |Tg |Ζο |Δk |Dl |Λσ |Κϑ |Aw |Uγ |Lx |Uψ |Hs |Ωχ |Δφ |Wσ |Π  |Εe |Ro |Λο |Ud |Fχ |Δψ |Νh |Θμ |Zd |Kb |Οδ |Ex |Να |Φσ |Φω |Pm |Λυ |Xq |Si |Σδ |Gα |Bu |Βw |Eχ |Ρι |Gβ |Vο |Yh |Σε |Χq |Hι |Re |Zχ |Ζp |Eρ |Ωγ |Bξ |Hδ |Oξ |Γc |Μγ |Wφ |Πη |Wj |Ιq |Γs |Πο |Κj |Un |Rι |Dφ |Τl |Ωz |Pμ |Wr |Gω |Gi |Εu |Σq |Ρl |Iν |Zy |Rb |Νk |Ky |Uκ |Ησ |Hy |Ir |Tp |Εc |Bw |Εο |Cm |Εw |Ψf |Yχ |Ιρ |Hβ |Ιz |Vλ |Εj |Oδ |Qρ |Θν |Aρ |Ov |Zω |Gψ |Ij |Ξη |Ps |Φh |Οg |Dp |Ta |Ty |Οe |Uο |Rγ |Οr |Θp |Hλ |Νι |Vk |Νz |Tl |Ψi |Λs |Hη |Ζκ |Rz |Hx |Fξ |Ξn |Φe |Sπ |Ηw |Dκ |Ζω
                |Sr |Vψ |Ντ |Vω |Lv |Νg |Fκ |Jψ |Ζs |Oβ |Υζ |Δg |Fυ |Yκ |Χd |Zf |Φμ |Lt |Ξd |Oφ |Τp |Κh |Ψx |Vυ |Qπ |Θφ |Nψ |Ρχ |Rx |Υz |Ξκ |Ξχ |Qn |Pu |Υψ |Az |Xj |Σd |Φξ |Ws |Xα |Βm |Βf |Lh |Hv |Aω |Hν |Kχ |Ρψ |Aδ |Χx |Sη |Φx |Cκ |Jz |Dr |Xu |Ηζ |Ξζ |Gτ |Ca |Af |Aν |Bι |Mc |Ψg |Ωv |Ωs |Qω |Mψ |Lλ |Μα |Kμ |Vl |Yσ |Οι |Ve |Dν |Eg |Ιυ |Xι |Zν |Xϑ |Νζ |Ni |Sφ |Se |Ζa |Xδ |Νv |Wι |Jv |Jt |Ιh |Υv |Cη |Τd |Ψι |Τu |Ge |Πc |Bυ |Mϑ |Χλ |Δλ |Σψ |Μϑ |Απ |Vg |Κα |Sψ |Ζz |Λδ |Aκ |Λκ |Ga |Κb |Db |Jo |Τa |Fw |Τs |Βϑ |Eτ |Wk |Ξu |Ψl |Αι |Νψ |Δι |Qμ |Υn |Bτ |Ηs |Yw |Ye |Iο |Dο |Γe |Rβ |Qv |Xs |Ηη |Yo |Χj |Dω |Οπ |Uβ |Mλ |Qh |Fο |Βd |Ζr |Οv |Zφ |Αi |Dλ |Pb |Οx |Rv |Uz |Εν |Ψτ |Na |Aη |Βu |Ιd |Ηm |Υd |Wn |Qσ |Οp |Αr |Ηλ |Σι |Br |Cu |Ωζ |Θγ |Qo |Bρ |Bψ |Zβ |Πφ |Ρκ |Qϑ |Bj |Vε |Zz |Ζϑ |Za |Θt |Τψ |Ρο |Jq |Πf |Jφ |Τα |Xχ |Χn |Vo |Αt |Bg |Gs |Bi |Rϑ |Nι |Ρa |Υr |Υν |Λo |Γφ |Δo |Yρ |Χc |Ξα |Gq |Γm |Ωμ |Ζυ |Wζ |At |Mw |
               Cf |Επ |Fo |Οh |Tσ |Ηv |Sα |Ζq |Dk |Jπ |Ιm |Mj |Oi |Ψa |Qγ |Rn |Dξ |De |Γk |Ψm |Lα |Cl |Θο |Γq |Λc |Tx |Nm |Ki |Υο |Χr |Φs |Κi |Φλ |Vq |Αω |Ch |Tμ |Xb |Ζπ |Ym |Ζn |Eω |Ξj |Υκ |Τg |Uo |Ai |Sy |Τe |Ητ |Tτ |Λg |Bp |Δq |Χo |Pπ |Dγ |Δγ |Yπ |Ys |Ωδ |Ψσ |Sζ |Πξ |Rφ |Hj |Uf |Td |Ξk |Xψ |Οj |Cx |Φπ |Gλ |Φδ |Ej |Yψ |Ae |Φφ |Jγ |Qχ |Ξγ |Δp |Σg |Is |Eσ |Λπ |Cδ |Ιe |Cυ |Oh |Hm |Tb |Qi |Οl |Bε |Eψ |Hn |Ja |Σν |Γr |Ηu |Ζξ |Ζb |Nu |Θξ |Κd |Qο |Lq |Λw |Ηf |Kξ |Ευ |Rr |Τm |Εξ |Ψp |Χh |Ξi |Fπ |Μφ |Fu |Cξ |Aα |Pγ |Sk |Cω |Ηr |Αp |Ββ |Bx |Fp |Tζ |Pω |Λp |Lm |Jp |Bl |Φc |Vf |Τz |Εy |Λμ |Rd |Νf |Πρ |Ηx |Μψ |Γη |Bα |Συ |Iσ |Γt |Κξ |Io |Ζφ |Γl |Θf |Γλ |Υγ |Ψh |Xg |Tn |Iu |Bφ |Πχ |Λq |Χπ |Bϑ |Εm |Κφ |Λt |Ιu |Ρs |Ιβ |Ωg |Yν |Lσ |Ζι |Eι |Aτ |Φa |Pα |Θz |Ψκ |Θs |Θη |Ηl |Φζ |Bt |Ρυ |On |Ξε |Tf |Gp |Mα |Μi |Kβ |Σο |Ωξ |Νl |Iz |Fk |Dj |Bπ |Nz |Xr |Mp |Χω |Sϑ |Hu |Αμ |Js |Βn |If |Τw |Ηz |Σz |Po |Yj |Ημ |Yβ |Σm |Do
                |Ηχ |Κg |Θo |Ζh |Ψj |Ψu |Ωφ |Δμ |Γa |Bν |Ιε |Oz |Νq |Υp |Qλ |Υc |Υy |Kc |Kh |Ew |Wγ |Νβ |Ωλ |Οξ |Zι |Yr |Sυ |Γπ |Bm |Μj |Pa |Os |Χδ |Κδ |Εx |Iγ |Eη |Fλ |Tγ |Yλ |Hξ |Φq |Τξ |Ql |Δn |Zn |Ot |Sa |Φψ |Nμ |Ξr |Ξc |Φj |Gl |Oλ |Rπ |Am |Mο |Gx |Fd |Cg |Χu |Lι |Wv |Ζt |Jυ |Pσ |Σκ |Wκ |Pv |Ιg |Ωι |Δx |Φl |Eb |Δυ |Cr |Nχ |Ογ |Νφ |Gu |Ασ |Λi |Rτ |Eh |Xη |Md |Wm |Tt |Πα |Υe |Βk |Ju |Dρ |Χβ |Οs |Γi |Kι |Κe |Mm |Χf |Oκ |Vb |Γβ |Οy |Vv |Νϑ |Hl |Λα |Wξ |Om |Βφ |Ρp |Φβ |Βb |Αυ |Υδ |Χφ |Pλ |Νρ |Υλ |Ul |Kγ |Qc |Νm |Πz |Hφ |Es |Ψπ |Xm |Xξ |Tν |Eλ |Ao |Ak |Ka |Ζη |Xk |Γψ |Βπ |Fβ |Βρ |Xx |Βζ |Iτ |Pϑ |Εb |Ψγ |Τk |Gm |Yn |Xν |Νu |Hϑ |Εr |Τπ |Uw |Mh |Og |Μυ |Tj |Λν |Qm |Xn |Ην |Νi |Kη |Zv |Ιι |Ση |Yk |Dx |Aχ |Ou |Fy |Cα |Θl |Γκ |Ax |Vκ |Cn |Cλ |Ξϑ |Wε |Υl |Ψt |Ωa |Θe |Ξω |Ηo |Ll |Bζ |Kw |Αβ |Δc |Oυ |Βj |Jβ |Νε |Eϑ |Ξg |Tz |Cc |Ry |Sρ |Ψz |Yα |Pq |Υg |Jn |Vμ |Σk |Ck |Ωt |Zg |Pι |Hω |Λλ |Aμ |Wλ |Ιλ |Βc |Ξa |
               Jk |Πϑ |Ιt |Εψ |Hε |Ωϑ |Εη |Ie |Κω |Yc |Iβ |Ου |Hg |Θr |Nn |Uμ |Ζv |Ζχ |Jρ |Pο |Ng |Be |Δv |Fζ |Ρe |Qe |Cq |Κf |Θλ |Tϑ |Ξq |Me |Βq |Oα |Θc |Qr |Δt |Dm |Yu |Ru |Σh |Λr |Yy |Εε |Μχ |Mφ |Δδ |Kφ |Cγ |Ζσ |Iω |Au |Wb |Κc |Πq |Ωω |Pυ |Γn |Nγ |Cv |Βχ |Φg |Gο |Ug |Kο |Βκ |Wμ |Hτ |Hχ |Ue |Οw |Sμ |Sm |Υω |Yb |Χa |Ιi |Κν |Πu |Κψ |Uτ |Lβ |Fj |Pn |Εf |Τσ |Qε |Ψo |Λρ |Oϑ |Πν |Ts |Ηο |Μρ |Ff |Ψβ |Ne |Nκ |Bλ |Bσ |Mx |Πp |Υσ |Ιn |Αz |Fz |Ηa |Uν |Mζ |Δϑ |Yι |Ζe |Ψα |Tο |Βg |Lπ |Ζf |Αλ |Em |Θh |Gπ |Γω |Kω |Tξ |Σn |So |Im |Φυ |Ξb |Ii |Λι |Xz |Kδ |Μω |Uυ |Wf |Χb |Sλ |Lγ |Οη |Ιs |Xβ |Pκ |Bc |Ιp |Od |Αn |Va |Tω |Ζw |Ιτ |Θε |Ρi |Gι |Τh |Υx |Nτ |Δη |Εφ |Kx |Xa |Gν |Ft |Yt |Qd |Gσ |Ξυ |Εs |Nσ |Νc |Λj |Υu |Ρc |Ψξ |Δm |Qβ |Μu |Υb |Nk |Ωτ |Κr |Δd |Iλ |Πa |Ωρ |Χν |Μh |Jξ |Μμ |Fc |Iφ |Zr |Ux |Φb |Πo |Gd |Eζ |Αα |Νν |Λz |Vη |Pψ |Ωf |Lρ |Cb |Ν |Α |Χ |Ω |Zτ |Τκ |Αε |Bβ |Uι |Fi |Ui |Βx |Ωq |Βp |Λh |Uu |Ωw |Xp |Ζβ |Λτ
 | N2012 deriving(Enum); instance Show Counter where show = show . fromEnum

1
ฉันกลัวนี้ไพล์ปรับเปลี่ยนเพียงแค่ปรับแม้ว่ายกเว้นจะโยนที่รันไทม์
Jeff Burdges

3
@JeffBurdges: แน่นอนว่าฉันใช้สิ่งนี้เพื่อรวมไว้ใน "และจะไม่ทำให้เกิดปัญหา"
หยุดที่จะเปิดล็อคไทล์ใน

1
สำหรับa=map(head.show.length)[[a,a],[],[a],[a,a]]วิธีการแก้ปัญหาแทรกระหว่างa []ฉันชอบโพสต์นี้จริงๆ! โซลูชั่นที่ฉลาดมาก
Dillon Cower

9
ฉันได้ตรวจสอบแล้วว่าโปรแกรม 29 ตัวอักษรของคุณมีทั้งหมด 5825 รูปแบบ (แทนที่หรือแทรกอักขระ ASCII 32-126) ได้ตามที่คาดไว้ นี่คือสคริปต์ทดสอบที่ผมใช้ สามารถปรับแต่งได้อย่างง่ายดายเพื่อทดสอบโปรแกรมอื่น ๆ รวมถึงภาษาอื่น ๆ คำเตือน: มันใช้เวลาเกือบ 1 ชั่วโมงเพื่อให้ทำงานบนแล็ปท็อปของฉัน :)
hammar

1
[a]-> []ในโซลูชัน 64 char
John Dvorak

14

JavaScript

ฉันเชื่อว่านี่คือการพิสูจน์ข้อผิดพลาดแบบรันไทม์การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นครั้งเดียวอาจส่งผลให้เกิดข้อผิดพลาดในการคอมไพล์หรือการแจ้งเตือนเดียวที่บอกว่า 2012

แก้ไข: รหัสจะทำให้เกิดข้อผิดพลาด runtime ในสิ่งที่ชอบif("alert(2012 "==r)ฉันย้ายส่วนลองเพื่อจัดการกับมัน

แก้ไข: Nice one Vilx- แต่สามารถแก้ไขได้ :-) ตอนนี้มีวงเล็บไม่ตรงกันสำหรับการแทรกเครื่องหมายอัฒภาคนั้น

แก้ไข: แต่แล้วเครื่องหมายจุลภาคสามารถทำเช่นเดียวกับเครื่องหมายอัฒภาคนั่นคือโฮสต์ของตัวเลือกฉันคิดว่าฉันได้แก้ไขแล้ว แต่ตอนนี้มีรหัสจำนวนมากอันยิ่งใหญ่

แก้ไข: ประยุกต์เล็กน้อย

แก้ไข: อีกหนึ่งข้อบกพร่องในซีรีย์

แก้ไข: นี้ครับรู้สึกนานมากขึ้นและมีความซับซ้อนกว่ากระสุน แต่อย่างน้อยควรดูแลและ~eval!eval

var q="alert(2012 "
var p=1
try{
    if("alert(2012 "==q){
        if(eval(((p=5,q+")")||alert(2012)))){
            if(p!==5){
                alert(2012)
            }
        }
    }
    else{
        alert(2012)
    }
}
catch(e){
    alert(2012)
}

1
เพราะเช่นq-")"ผลตอบแทนNaNซึ่ง eval แปลง"NaN"ก่อน evaling NaNมันซึ่งก็หันกลับไป สิ่งแปลก ๆ ที่ต้องทำ แต่เป็นเรื่องทางเทคนิคดังนั้นจึงไม่เรียกใช้การจับ
aaaaaaaaaaaa

4
สิ่งเดียวกับวิธีการแก้ปัญหาของ C - แทรก;ระหว่างและeval (
Vilx-

1
สำหรับผู้อ่านคอมเม้นต์ช่องโหว่อัฒภาคได้รับการแก้ไขแล้วผมเชื่อว่าโค้ดจะต้องสะอาดหมดจดในตอนนี้
aaaaaaaaaaaa

4
ไม่แน่ใจว่าสิ่งนี้มีค่าหรือไม่ แต่ให้นำ~หน้าevalสาเหตุที่จะสะท้อน2012 สองครั้งแทนที่จะเป็นหนึ่งครั้ง ไม่แน่ใจว่าสิ่งนั้นขัดคำสั่งหรือไม่: P
mellamokb

2
การเพิ่มตัวแบ่ง!หลัง eval(
jimmy23013

13

Perl, 49 ตัวอักษร

  do{
use strict;$_=2012;;2012==$_&&0-print||die}

ขึ้นอยู่กับคำตอบของ JBแต่คนนี้จริงน่าพอใจข้อมูลจำเพาะ การตรวจสอบอย่างละเอียดบ่งชี้ว่าการลบการแทรกหรือการแทนที่อักขระหนึ่งตัวทำให้ออกไม่เปลี่ยนแปลงหรือทำให้โปรแกรมหยุดทำงานเมื่อทำงาน (ตามที่ระบุโดยค่าส่งคืนที่ไม่ใช่ศูนย์และเอาต์พุตไปยัง stderr) อย่างน้อยตราบใดที่การแทรกและ การแทนที่ถูก จำกัด ไว้ที่อักขระ ASCII ที่พิมพ์ได้

(โดยไม่มีข้อ จำกัด งานเป็นไปไม่ได้ใน Perl: คุณสมบัติที่รู้จักกันน้อยของตัวแยกวิเคราะห์ Perl คือหยุดเมื่อพบอักขระ Ctrl-D หรืออักขระ Ctrl-Z ดังนั้นการแทรกสิ่งที่อยู่ข้างหน้าไฟล์ใด ๆ มันเป็นโปรแกรม Perl ที่ถูกต้องที่ไม่ทำอะไรเลย)

แก้ไข:โกนหนึ่งถ่านมากขึ้นโดยการแทนที่ด้วย1==print0-print


หยุดพักด้วย Perl 5.28 โดยที่printเริ่มกลับมา'true'แทน 1 :-P
JB

3
@JB: คุณสามารถลงคะแนนได้เมื่อเกิดเหตุการณ์ :) (เพื่อประโยชน์ของผู้อ่านคนอื่น ๆ นี่เป็นเรื่องตลกเท่าที่ฉันรู้ไม่มีแผนจะเปลี่ยนค่าตอบแทนprintใน Perl 5 เวอร์ชันใด ๆ แม้ว่ามันจะไม่ได้บันทึกไว้อย่างชัดเจนก็ตาม)
Ilmari Karonen

12

brainfuck

ฉันพยายามโน้มน้าวใจตัวเองว่าสิ่งนี้เป็นไปได้และฉันค่อนข้างแน่ใจว่าฉันอาจยืดมันออกไปหน่อย ฉันได้ตั้งสมมติฐานเกี่ยวกับสภาพแวดล้อมของฉัน:

  1. การวนซ้ำไม่สิ้นสุดถือว่าเป็น 'ความผิดพลาด' เงื่อนไขที่คล้ายกันอาจเกิดขึ้นได้โดยการลดศูนย์ที่ผ่านมาหรือทางด้านซ้ายของตำแหน่งหน่วยความจำศูนย์ในล่าม ล่ามหลายคนยากที่จะผิดพลาดในขณะทำงาน ฉันหลีกเลี่ยงปัญหาการหยุดทำงานโดยใช้ลูปไม่ จำกัด ที่ง่ายและชัดเจนที่สุดเท่านั้น
  2. เครื่องหมายวงเล็บเหลี่ยมที่ไม่ตรงกันจะถือเป็นข้อผิดพลาดในการคอมไพล์
  3. สิ่งนี้จะทำงานในสภาพแวดล้อมที่เอาต์พุตของโปรแกรมถูกไพพ์กลับไปเป็นอินพุตของมันเอง ฉันใช้มันเพื่อตรวจสอบว่ามันส่งออก '2012' อย่างแน่นอน นี่เป็นวิธีเดียวที่ฉันจะทำได้เพียงแค่ลบอักขระตัวใดตัวหนึ่งออก

น่าเสียดายถ้าคุณเข้มงวดมากขึ้นฉันกลัวว่ามันจะเป็นไปไม่ได้ นี่คือทางออกของฉัน:

++++++++++++++++++++++++++++++++++++++++++++++++++
.--.+.+.
,--------------------------------------------------[]
,------------------------------------------------[]
,-------------------------------------------------[]
,--------------------------------------------------[]
,[]EOF = 0

โดยทั่วไปคุณสามารถเปลี่ยนรหัสผลลัพธ์หรือรหัสยืนยัน แต่ไม่ใช่ทั้งสองอย่าง หนึ่งในนั้นรับประกันว่าจะทำงาน หากหนึ่งในนั้นไม่ได้ก็จะ 'ผิดพลาด'


5
เอ่อ brainfuck! คุณเพิ่งจะไปใช่มั้ย XD
Vilx-

8
คุณจะต้องการเขาใช้พื้นที่ว่างแทน?
NRGdallas

7

Python2

import sys;xx='2012';(
1/(sys.stdout.write(xx=='2012' and xx or 2012)==None))

ฉันต้องเปลี่ยนสคริปต์ทดสอบของ Rayเล็กน้อยเพื่อทดสอบสิ่งนี้เนื่องจากการเปลี่ยนเส้นทาง stdout กำลังทำให้แตก การส่ง dicts ที่ว่างเปล่าเพื่อเรียกใช้งานเพื่อหลีกเลี่ยงการสร้างเนมสเปซ

exec(prog, {}, {})

ที่ดี! คุณทำได้!
เรย์

6

Brain-Flak , 44 + 3 = 47 ไบต์ [การแข่งขันที่ไม่ใช่]

สิ่งนี้ใช้-Aแฟล็กของ Brain-Flak และส่งออกอักขระ2012ไปยัง STDOUT

((((((((()()()){}){}){}()){})[()])[()])()())

ลองออนไลน์!

ทางเลือก 50 ไบต์

(((((()()()()){}){}){}){})({({}[()])}{}[()()()()])

ลองออนไลน์!

คำอธิบาย

การแก้ไขอักขระเดี่ยวใด ๆ ของรหัสข้างต้นจะทำให้โปรแกรมเกิดข้อผิดพลาด


3
ฮา! ภาษาที่เหมาะสมสำหรับความท้าทาย
DLosc

4

Sisiไม่ใช่ผู้แข่งขัน

ในที่สุดฉันคิดว่าฉันพบหนึ่งในภาษาที่ใช้งานได้ มันยาวอย่างน่ากลัวและภาษานั้นใหม่กว่าคำถาม แต่ก็ยังรู้สึกเหมือนได้รับความสำเร็จ

1 set xx 2012
2 set y xx=2012
3 jumpif y 55
4 set xx 2012
828 set x xx
829 set ax xx
830 set xa xx
831 set axx xx
832 set xax xx
833 set xxa xx
834 set bx xx
835 set xb xx
836 set bxx xx
837 set xbx xx
838 set xxb xx
839 set cx xx
840 set xc xx
841 set cxx xx
842 set xcx xx
843 set xxc xx
844 set dx xx
845 set xd xx
846 set dxx xx
847 set xdx xx
848 set xxd xx
849 set ex xx
850 set xe xx
851 set exx xx
852 set xex xx
853 set xxe xx
854 set fx xx
855 set xf xx
856 set fxx xx
857 set xfx xx
858 set xxf xx
859 set gx xx
860 set xg xx
861 set gxx xx
862 set xgx xx
863 set xxg xx
864 set hx xx
865 set xh xx
866 set hxx xx
867 set xhx xx
868 set xxh xx
869 set ix xx
870 set xi xx
871 set ixx xx
872 set xix xx
873 set xxi xx
874 set jx xx
875 set xj xx
876 set jxx xx
877 set xjx xx
878 set xxj xx
879 set kx xx
880 set xk xx
881 set kxx xx
882 set xkx xx
883 set xxk xx
884 set lx xx
885 set xl xx
886 set lxx xx
887 set xlx xx
888 set xxl xx
889 set mx xx
890 set xm xx
891 set mxx xx
892 set xmx xx
893 set xxm xx
894 set nx xx
895 set xn xx
896 set nxx xx
897 set xnx xx
898 set xxn xx
899 set ox xx
900 set xo xx
901 set oxx xx
902 set xox xx
903 set xxo xx
904 set px xx
905 set xp xx
906 set pxx xx
907 set xpx xx
908 set xxp xx
909 set qx xx
910 set xq xx
911 set qxx xx
912 set xqx xx
913 set xxq xx
914 set rx xx
915 set xr xx
916 set rxx xx
917 set xrx xx
918 set xxr xx
919 set sx xx
920 set xs xx
921 set sxx xx
922 set xsx xx
923 set xxs xx
924 set tx xx
925 set xt xx
926 set txx xx
927 set xtx xx
928 set xxt xx
929 set ux xx
930 set xu xx
931 set uxx xx
932 set xux xx
933 set xxu xx
934 set vx xx
935 set xv xx
936 set vxx xx
937 set xvx xx
938 set xxv xx
939 set wx xx
940 set xw xx
941 set wxx xx
942 set xwx xx
943 set xxw xx
944 set yx xx
945 set xy xx
946 set yxx xx
947 set xyx xx
948 set xxy xx
949 set zx xx
950 set xz xx
951 set zxx xx
952 set xzx xx
953 set xxz xx
954 set xxx xx
955 print xx

เกี่ยวกับ Sisi

Sisi เป็นภาษาของเล่นที่ได้รับแรงบันดาลใจจากการประกอบและ QBasic มันเป็นสิ่งที่ดีสำหรับความท้าทายนี้เพราะไวยากรณ์มี จำกัด มาก

  • แต่ก็มีเพียงสี่คำสั่ง: set, print, และjumpjumpif
  • คำสั่งทั้งหมดมี arity คงที่
  • ทุกสายจะต้องมีหมายเลขบรรทัดที่เพิ่มขึ้นอย่างเคร่งครัด
  • อนุญาตให้ใช้นิพจน์ได้ในsetข้อความสั่งเท่านั้น พวกเขาสามารถมีเพียงหนึ่งการดำเนินการ (อย่างมาก) ซึ่งจะต้องเป็นแบบไบนารี โดยเฉพาะอย่างยิ่ง: การเปลี่ยนแปลงprint xxที่จะprint -xxเป็นข้อผิดพลาดทางไวยากรณ์
  • ชื่อตัวแปรต้องประกอบด้วยตัวอักษรตัวเล็ก
  • ที่สำคัญที่สุด: ไม่มีไวยากรณ์ความคิดเห็น !

โปรแกรม

แก่นของโปรแกรมคือส่วนนี้:

1 set xx 2012
2 set y xx=2012
3 jumpif y 55
4 set xx 2012
955 print xx

เราเก็บ2012ไว้xxแล้วทดสอบว่าประสบความสำเร็จหรือไม่และเก็บผลการทดสอบyไว้ หากyเป็นจริงให้ข้ามไปที่บรรทัด 55 (ข้ามไปยังหมายเลขบรรทัดที่ไม่มีอยู่เพียงแค่กรอไปข้างหน้าอย่างรวดเร็วไปยังบรรทัดถัดไป)

ชุบแข็งด้วยรังสี

  • หากการมอบหมายในบรรทัดที่ 1 มีการปรับเปลี่ยนyจะถือว่าเป็นเท็จการกระโดดจะไม่เกิดขึ้นและบรรทัดที่ 4 xxจะเป็นปี 2012
  • หากการมอบหมายในบรรทัด 2 หรือเงื่อนไขการข้ามในบรรทัดที่ 3 มีการแก้ไขเราไม่สนใจ: xxจะได้รับการตั้งค่าเป็น 2012 ไม่ว่าเราจะกระโดดหรือไม่
  • เป้าหมายการกระโดดในบรรทัดที่ 3 สามารถเปลี่ยนเป็นขนาดเล็กเป็น 5 หรือใหญ่เป็น 955 การปรับเปลี่ยนใด ๆ ที่เป็นไปได้นำไปสู่printบรรทัดที่ 955 ไม่ช้าก็เร็ว เป็นไปไม่ได้ที่จะมีการดัดแปลงหนึ่งอย่างเพื่อข้ามไปข้างหลัง (สร้างลูป) หรือผ่านจุดสิ้นสุดของโปรแกรม
  • หากการมอบหมายในบรรทัดที่ 4 มีการแก้ไขเราไม่สนใจ: การมอบหมายของบรรทัดที่ 1 จะถูกต้องและเราจะข้ามผ่านบรรทัดที่ 4
  • หากมีการแก้ไขบรรทัด 955 เราอาจมีปัญหา สิ่งที่โชคร้ายอย่างหนึ่งเกี่ยวกับ Sisi ก็คือตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นไว้0ดังนั้นการดัดแปลงเช่นprint axนั้นไม่ใช่ข้อผิดพลาด วิธีการแก้ปัญหาที่น่าเกลียด แต่มีประสิทธิภาพเป็นเส้น 828-954 ซึ่งกำหนดปี 2012 ที่จะเป็นไปได้ทุกตัวแปรที่มีระยะทางแก้ไข 1 xxจาก วิธีนี้ช่วยให้มั่นใจได้ว่าการปรับเปลี่ยนใด ๆ ในขั้นสุดท้ายprint xxจะยังคงพิมพ์ในปี 2012
  • หากหมายเลขบรรทัดถูกแก้ไขทั้ง: 1) หมายเลขนั้นจะไม่อยู่ในสถานะสั่งซื้อและเป็นข้อผิดพลาดทางไวยากรณ์หรือ 2) จะไม่มีผลต่อการไหลของโปรแกรม การปรับเปลี่ยนหลักที่เราอาจกังวลเกี่ยวกับ - การเปลี่ยนบรรทัดที่ 4 ถึง 94 ดังนั้นการแทรกหลังจากกระโดดไปที่ 55 - ไม่สำคัญเพราะทั้งหมดนี้กำหนด 2012 xxอีกครั้ง

สิ่งที่ดี! ฉันไม่สามารถคิดวิธีหลีกเลี่ยงสิ่งนี้ "A" สำหรับความพยายามจากฉันที่แน่นอน! :)
Vilx-

3

หลาม

verbose เล็กน้อย (ตอนนี้มีการแก้ไขอัฒภาคที่น่ารำคาญระหว่างprintและ(!):

a=[0]
(lambda x:print(
set(['2012']).intersection(set(["2012"])).pop()))(
*a)

@Jeff Burdges: ใช่ด้วยสิ่งนี้ฉันเป็นธนาคารเกี่ยวกับข้อผิดพลาดรันไทม์ที่ไม่ได้รับอนุญาตเช่นกัน :)
Dillon Cower

ฉันเกรงว่ามันยังคงถูกต้องทางวากยสัมพันธ์หากการตัดกันให้เซตที่ว่างและป๊อปเกิดข้อผิดพลาดรันไทม์ เพิ่ม 2012s เพิ่มเติมทั้งสองด้าน
Jeff Burdges

@DC: ฉันจะบอกว่าข้อยกเว้นไม่เหมือนกับข้อผิดพลาดรันไทม์ถึงแม้ว่าดูเหมือนว่าข้อยกเว้นจะเรียกว่าข้อผิดพลาดใน Python pop()ไอเอ็นจีชุดที่ว่างเปล่าไม่ได้เป็นข้อผิดพลาดในและของตัวเอง แต่มันจะเพิ่ม 'ข้อผิดพลาด'
Williham Totland

1
ข้อยกเว้นจะกลายเป็นข้อผิดพลาดเมื่อไม่ถูกจับ
Ilmari Karonen

1
ใส่เครื่องหมายจุลภาคหลังจากpopผลลัพธ์<built-in method pop of set object at 0xb6fe93ac> ()
gnibbler

3

T-SQL 2012, 55

DECLARE @n CHAR(4)='2012'PRINT IIF(@n='2012',@n,'2012')

ภาษาถิ่นของ SQL คืออะไร ดูเหมือนว่า Transact-SQL (หรือที่รู้จักกันใน SQL Server) แต่มันมีรูปแบบที่ไม่ถูกต้อง
Vilx-

@ Vilx-: ฉันทดสอบใน SQL Server 2008 ด้วยตัวเองเมื่อฉันพยายามทำลายมันและมันก็ใช้ได้ดี
mellamokb

@mellamokb - มันแปลกมาก มันเป็นสิ่งที่ฉันทำและมันบ่นว่าคุณไม่สามารถกำหนดค่าเริ่มต้นให้กับตัวแปรได้ (คุณต้องการคำสั่ง SET แยกต่างหาก) และไม่มี IIF (เฉพาะกรณี)
Vilx-

1
@ Vilx-: อ่าถูกต้องแล้ว ฉันรู้แล้วว่าตอนนี้ฉันกำลังทดสอบ SQL Azure อยู่ ด้วย SQL Server 2008 ฉันได้รับข้อผิดพลาดเช่นเดียวกับคุณ อย่างไรก็ตามดูเหมือนว่าจะทำงานได้ดีใน SQL Server 2012 / Azure นี่คือตัวอย่างของ SQL 2012: sqlfiddle.com/#!6/d41d8/27
mellamokb

ตกลงแสดงความยินดีฉันไม่สามารถหาวิธีที่ชัดเจนในการทำลายสิ่งนี้! :) นั่นไม่ได้บอกว่าไม่มีเลย ;)
Vilx-

3

ฉันสร้างสคริปต์ไพ ธ อนเพื่อตัดสินโซลูชันงูหลามทั้งหมด สคริปต์แบ่งวิธีการแก้ปัญหาหลามแรกและที่สามด้วยวิธีการที่แตกต่างกัน และวิธีที่สองใช้แลมบ์ดาเพื่อป้องกันตัวเองไม่สามารถแตกได้ วิธีการแก้ปัญหาหลามที่สองอยู่ในหลาม 3 ฉันแก้ไขมันเป็นรูปแบบหลาม 2 แล้วตัดสินโปรแกรมที่ทำลายมัน

นี่คือสคริปต์ผู้ตัดสิน

from StringIO import StringIO
import sys

def run(prog, atexp=True):
    stdout = sys.stdout
    fakeOut = StringIO()
    try:
        sys.stdout = fakeOut
        # exec prog # running exec directly will break some solutions by mistake
        exec(prog, {}, {}) 
        return fakeOut.getvalue().rstrip() == '2012'
    except:
        return atexp
    finally:
        sys.stdout = stdout
    return True

def judge(prog):
    RED = '\x1b[31m'
    WHITE = '\x1b[37m'
    ans = True
    chars = """abcdefghijklmnopqABCDEFGHIJKLMNOP`~1234567890!@#$%^&*()_+-=[]{};:'"<>,./?"""
    # attack by replace
    if not run(prog):
        print "Are you joking...This program don't print 2012 itself."
        return False
    p = list(prog)
    for i in xrange(len(prog)):
        for c in chars:
            p[i] = c
            r = run(''.join(p))
            if not r:
                print 'Attack by replace success'
                print 'origin:\n'+prog
                print 'modified:\n'+''.join(p[:i])+RED+c+WHITE+''.join(p[i+1:])
                ans = False
        p[i] = prog[i]
    # attack by delete
    for i in xrange(len(prog)):
        p = prog[:i]+prog[i+1:]
        r = run(''.join(p))
        if not r:
            print 'Attack by delete success'
            print 'origin:\n'+prog
            print 'modified:\n'+''.join(p[:i])+RED+'{|}'+WHITE+''.join(p[i:])
            ans = False
    # attack by insert
    for i in xrange(len(prog)+1):
        p = list(prog)
        p.insert(i, ' ')
        for c in chars:
            p[i] = c
            r = run(''.join(p))
            if not r:
                print 'Attack by insert success'
                print 'origin:\n'+prog
                print 'modified:\n'+''.join(p[:i])+RED+c+WHITE+''.join(p[i+1:])
                ans = False
    if ans: 
        print 'Amazing! judgement passed'
    return ans

p1="""xx='2012'
print(xx if xx=='2012' else
'2012')
"""
p2="""import sys
a=[0]
(lambda x:sys.stdout.write(
set(['2012']).intersection(set(["2012"])).pop()))(
*a)
"""

p3="""print sorted(['2012',
'2012','2012']).__getitem__(1)
"""
p4="""print 2012
"""
judge(p3) 

เย็น! คำตอบของฉันดูดและระเบิดในเวลาเดียวกัน
gnibbler

p2ส่งข้อยกเว้นสำหรับ Python2 เสมอ ผลลัพธ์ไม่เคยปี 2555 โปรแกรมผู้พิพากษาของคุณจะไม่ทำงานภายใต้ Python3 เนื่องจากใช้คำสั่งพิมพ์
gnibbler

@gnibbler ฉันไม่สังเกตเห็นว่าp2อยู่ในหลาม 3
เรย์

ฉันได้ทำคำตอบใหม่สำหรับ Python2 ที่ส่งสคริปต์ของคุณแล้ว
gnibbler


2

Javascript - 68, 77, 84 , 80 chars

นี่คือวิธีแก้ปัญหาที่ควรใช้ในปีนี้ :)

a="eval(alert(new Date().getFullYear()))" 
a.length==37?eval(a||a||a):alert(2012)

นี่คือไวโอลินทดสอบ

อัปเดต 1:แก้ไขปัญหาเมื่อ eval (+ a) แตก (ขอบคุณ eBusiness)

อัปเดต 2:แก้ไขสำหรับ '|' กรณี (ขอบคุณอีกครั้ง eBusiness)

อัปเดต 3:แก้ไขสำหรับกรณี '>' (ขอบคุณอีกครั้งจาก eBusiness) และยากจนสำหรับกรณี '1' :(


คุณไม่ได้คอยปกป้องหลักฐานของคุณ eval(+a)และการดัดแปลงอื่น ๆ มากมายทำงานได้อย่างสมบูรณ์แบบ แต่ไม่ได้ทำอะไรมากมายเลย
aaaaaaaaaaaa

@eBusiness: ขอบคุณสำหรับการชี้eval(+a)กรณีที่ควรได้รับการแก้ไขในขณะนี้ นอกจากนี้ฉันไม่สามารถหาหนึ่งในกรณีแก้ไขที่ทำงานได้ดี แต่ไม่แสดงผลลัพธ์ 2012 ดังนั้นคุณจะโปรดยกตัวอย่างให้ฉัน
Briguy37

eval(0)และeval(-a)เช่นเดียวกันจะทำสิ่งเดียวกัน
aaaaaaaaaaaa

โพสต์ก็สามารถแก้ไขอย่างน้อยจะถูกทำลายโดยการแทนที่ด้วย|| |
aaaaaaaaaaaa

5
เที่ยวบินไปถ้าคุณเปลี่ยนเป็นคนแรกที่จะalert aler=
jimmy23013


2

Excel, 14 ตัวอักษร (โกงเล็กน้อย):

{=2012} (in a 2x1 array with one cell hidden)

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

แน่นอนว่าสิ่งนี้จะพังหากคุณมองว่ามันเป็นเพียงสูตรเดียวเท่านั้นซึ่งต่างกับ 2 สูตรที่มีข้อ จำกัด เหมือนกัน


2

Java 7

class M{
  static String c(){
    String a = "2012",
           b = "2012";
    return a.equals(b)           // 1
            ? a                  // 2
            : a.equals("2012")   // 3
               ? a               // 4
               : b;              // 5
  }

  public static void main(String[]a){
    System.out.print(c());
  }
}

คำอธิบาย:

  1. โดยไม่ต้องเปลี่ยนอะไรเลยมันจะใช้พา ธ ต่อไปนี้: 1 → 2 (และมันจะคืนaค่าของ2012)
  2. หากเนื้อหาของ String aถูกแก้ไขในทางใดทางหนึ่งมันจะใช้พา ธ ต่อไปนี้: 1 → 3 → 5 (และมันจะคืนbค่าที่ไม่เปลี่ยนแปลงของ2012)
  3. หากเนื้อหาของ String bถูกแก้ไขในทางใดทางหนึ่งมันจะใช้พา ธ ต่อไปนี้: 1 → 3 → 4 (และมันจะคืนaค่าที่ไม่เปลี่ยนแปลงของ2012)
  4. หากa.equals(b)on @ 1 ถูกปรับเปลี่ยนเป็นa.equals(a), b.equals(b)หรือ!a.equals(b)จะยังคงใช้เส้นทางต่อไปนี้: 1 → 2 (และมันจะคืนaค่าที่ไม่เปลี่ยนแปลงของ2012)
  5. หากaon @ 2 ถูกเปลี่ยนเป็นbมันจะยังคงใช้พา ธ ต่อไปนี้: 1 → 2 (และมันจะคืนbค่าที่ไม่เปลี่ยนแปลงของ2012)
  6. ถ้าอย่างใดอย่างหนึ่งaหรือbถูกเปลี่ยนเป็นตรงข้ามในบรรทัดที่ 3, 4 หรือ 5 ก็จะยังคงใช้เส้นทางต่อไปนี้: 1 → 2 (และมันจะกลับaมูลค่าที่ไม่เปลี่ยนแปลงของ2012)
  7. หากเนื้อหาของ String ใน @ 3 ถูกแก้ไขในทางใดทางหนึ่งมันจะยังคงใช้พา ธ ต่อไปนี้: 1 → 2 (และมันจะคืนaค่าที่ไม่เปลี่ยนแปลงของ2012)
  8. การเปลี่ยนแปลงMในclass Mหรือaในmain(String[]a)ตัวละครที่ถูกต้องอื่นสามารถทำได้โดยไม่มีการเปลี่ยนแปลงการทำงานของรหัส
  9. การเปลี่ยนแปลงอื่น ๆ จะส่งผลให้เกิดข้อผิดพลาดในการคอมไพล์ (ยกเว้นบางส่วนของการเข้า / whitespaces ซึ่งสามารถลบ / เพิ่ม)

ลองปรับเปลี่ยนทั้งหมดที่นี่เพื่อตรวจสอบว่าพวกเขาทั้งหมดยังคงพิมพ์ 2012

หากคุณสามารถหาวิธีที่จะทำลายมันได้ตามกฎของ OP ฉันอยากรู้ดังนั้นฉันสามารถคิดถึงบางสิ่งที่จะแก้ไขได้
ซึ่งแตกต่างจากคำถามที่คล้ายกันมากที่สุดที่ถ่านเดียวมีการแก้ไขคำถามนี้จะช่วยให้โครงสร้างพื้นฐานของการเขียนโปรแกรมภาษาในคำถามที่จะเป็นเหมือนเดิมดังนั้น Java จนสามารถแข่งขันในหนึ่งป้อนหนึ่ง (ขอหน้ามัน, Java จะ -almost- ไม่เคยชนะอะไรใน SE xD นี้)


เครื่องหมายลบถูกแทรกในเส้นทาง 4 ก่อนหน้าaคืออะไร โปรแกรมจะยังคงส่งออก 2012 หรือจะออก -2012?
วัวต้มตุ๋น

@KritixiLithos มันเป็น String ดังนั้นคุณจึงไม่สามารถแทรก-ก่อนหรือa นี่คือภาพหน้าจอของข้อผิดพลาดในการคอมไพล์ b
Kevin Cruijssen

1

ทับทิม 1.9

puts (
rx=2012
)==2012?rx:2012.send(
:abs)

ฉันสร้างโปรแกรมสั้น ๆ แต่เรียบง่ายซึ่งคุณได้รับเชิญให้ทำลายตามกฎข้างต้น ฉันไม่สามารถหาตำแหน่งที่มีการเปลี่ยนแปลงเอาต์พุต (โดยไม่ทำลายโค้ด) หากมีการ#แทรกเพื่อแสดงความคิดเห็นส่วนที่เหลือของบรรทัด


ทำให้ (r = 2012) == 2012? -r: 2012.send (: abs) พิมพ์ "-2012"
Joanis

@ M.Joanis แต่คุณต้องการตัวละครเพิ่มอีกสองตัว: ช่องว่างและเครื่องหมายลบ เครื่องหมายลบอย่างเดียวจะไม่ทำงาน
Howard

อ่าคุณพูดถูก! ข้อผิดพลาดในการรวบรวม ฉันไม่รู้อะไรเกี่ยวกับทับทิมฉันควรระวังให้มากขึ้น ขออภัย!
Joanis

1
อ้างอิงจากการirbเพิ่มลบก่อนที่rxผลลัพธ์ในโปรแกรมที่ถูกต้องที่ส่งออก-2012...
Konrad Rudolph

2
เปลี่ยนputsไปputcสาเหตุนี้เพื่อการส่งออก?ในรูบี 1.9
ประวัติศาสตร์ 24

1

สกาลา, 95

(หรือ 54 หากข้ามส่วนที่ไม่มีความหมาย)

object Main{def main(ar:Array[String]){print(((s:String)=>if(s=="2012")s else"2012")("2012"))}}

ฉันกลัวว่าฉันไม่รู้เรื่องสกาล่ามากพอที่จะพบข้อบกพร่องใด ๆ :( คนอื่นได้โปรดดู
หน่อยได้

มันไม่ยากในระดับนี้ ความแข็งของสกาล่าส่วนใหญ่เกิดจากความซับซ้อนของระบบพิมพ์ของมัน (ซึ่งฉันยังคงไม่สามารถเข้าใจได้อย่างสมบูรณ์: D)
Sarge Borsch

ฉันไม่รู้สกาล่า แต่(...),("2012")ดูเหมือนว่าจะทำลาย
jimmy23013

1

C #

ไม่ง่ายอย่างนี้ใช่ไหม? ...

class program
{
    static void Main()
    {
        var result = "2012";

        if (result == "2012")
            Console.WriteLine(result);
        else
            Console.WriteLine("2012");
    }
}

ตกลงสิ่งที่ฉันคิดถึง


1
จะเกิดอะไรขึ้นถ้าคุณเปลี่ยนบรรทัดที่ 8 เป็น "Console.WriteLine (-result);"
เกล็นแรนเดอร์ส - เพอร์สัน

ไม่มีเรียบเรียง C # ที่นี่ แต่ไม่ควรเปลี่ยนสาย 7 เพื่อif (result += "2012")ทำให้การส่งออก20122012?
Philipp

hmmmm ... ฉันไม่ได้คิดว่า ... กลับไปที่กระดานวาดภาพ
สงคราม

@Philipp - Nop ที่จะไม่รวบรวม คุณต้องการบูลีนเป็นค่าสำหรับifคำสั่งไม่ใช่สตริง
Vilx-

6
การเพิ่ม;หลังจากelseทำให้เอาต์พุตสองครั้ง
jimmy23013

1

PHP, 30

<?=$i=2012;$i==2012?$i:2012;?>

ยินดีต้อนรับสู่ PPCG! โพสต์แรกที่ดี! คุณสามารถเพิ่มคำอธิบายได้ด้วยหรือไม่
Rɪᴋᴇʀ

2
และนี่คือวิธีที่ฉันจะเอาชนะมันได้:<?=$i=2012;$i==2012?-$i:2012;?>
Vilx-

@ Vilx- ดีฉันไม่ได้คิดถึงเรื่องนั้น
jsa

ความพ่ายแพ้อ่อนแอสำหรับการใดวิธีการแก้ปัญหา PHP หนึ่งบรรทัด: ใส่โค้ดทั้งหมดในความคิดเห็น<?#$i=2012;$i==2012?$i:2012;?>Solution กับที่: $i=2012แทรกบรรทัดใหม่หลังจาก
ติตัส

1

แท๊กซี่ 396 ไบต์

2012 is waiting at Starchild Numerology.2012 is waiting at Starchild Numerology.Go to Starchild Numerology: w 1 r 3 l 2 l 3 l 2 r.Pickup a passenger going to Equal's Corner.Pickup a passenger going to Equal's Corner.Go to Equal's Corner: w 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery: n 3 r 1 r 1 r.Pickup a passenger going to Post Office.Go to Post Office: n 1 l 1 r.

จัดรูปแบบสำหรับมนุษย์นั่นคือ:

2012 is waiting at Starchild Numerology.
2012 is waiting at Starchild Numerology.
Go to Starchild Numerology: w 1 r 3 l 2 l 3 l 2 r.
Pickup a passenger going to Equal's Corner.
Pickup a passenger going to Equal's Corner.
Go to Equal's Corner: w 1 l.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: n 3 r 1 r 1 r.
Pickup a passenger going to Post Office.
Go to Post Office: n 1 l 1 r.

จากการอ่านคำตอบอื่น ๆ โซลูชันดูเหมือนว่าจะเลือกภาษาที่เปราะบางตั้งค่าตรวจสอบค่าพิมพ์ค่า


1

SmileBASIC

OPTION STRICT
VAR A$=@2012
GOTO A$@2012
IF SHIFT(A$)THEN VAR B
?A$VAR C
B=C

ก่อนอื่นเราเปิดใช้งานโหมดเข้มงวด สิ่งนี้บังคับให้คุณประกาศตัวแปรทั้งหมดก่อนใช้และป้องกันสิ่งต่าง ๆ เช่นการเปลี่ยนแปลง A $ เป็น? B $

ถัดไปจะสร้างตัวแปรสตริงชื่อ "A $" และตั้งค่าเป็น "@ 2012" เพื่อให้แน่ใจว่ามูลค่าของ A $ ไม่ได้ยุ่งกับโปรแกรมจะพยายามข้ามไปที่ป้ายกำกับและป้ายกำกับเดียวในโปรแกรมคือ @ 2012

ตอนนี้ A $ เป็น "@ 2012" แน่นอน แต่ก่อนที่จะพิมพ์ @ ต้องถูกลบออก SHIFT () ลบรายการแรกในสตริงหรืออาร์เรย์ (เช่นเดียวกับ pop () แต่จากส่วนอื่น ๆ ) หากต้องการยกเลิกค่าที่ส่งคืนโดย SHIFT จะถูกส่งไปยังบล็อก IF / THEN ซึ่งไม่ได้ทำอะไรเลย ในกรณีที่มีคนพยายามคอมเม้นท์บรรทัดนั้นเราจะประกาศตัวแปร "B" ซึ่งจะถูกใช้ในภายหลัง หาก VAR ถูกใส่เครื่องหมายความคิดเห็นบรรทัดสุดท้ายจะส่งข้อผิดพลาดตัวแปรที่ไม่ได้กำหนด

ตอนนี้พิมพ์ A $ และมี VAR อื่นเพื่อป้องกันความคิดเห็น บรรทัดสุดท้ายทำให้แน่ใจว่าตัวแปร B และ C ได้รับการประกาศแล้ว


ตกลง ... ฉันไม่รู้อะไรเกี่ยวกับ SmileBASIC ดังนั้นนี่เป็นการคาดเดาอย่างหมดจด: ?-A$VAR C- ผลลัพธ์นี้ได้-2012หรือไม่
Vilx-

ไม่สามารถใช้งานได้เพราะ A $ เป็นสตริง
12Me21

เดี๋ยวก่อนฉันมีความคิด! สิ่งที่เกี่ยวกับ: ?B$VAR C? :)
Vilx-

สิ่งนี้จะทำให้เกิดข้อผิดพลาดเนื่องจากยังไม่ได้ประกาศ "B $"
12Me21

0

Haskell, 65

import Data.List
nub$filter(\x->x==2012||x==2012)([2012]++[2012])

Perl, 84

use strict;use English;$ARG=
2032;s/.*/2012/unless$ARG eq 2012;$SUBSEP=2012;print;

วิธีการล้มเหลว:

use strict;use English;"2012 2012"=~
/2012|2012|2012/;print$MATCH||$MATCH;

คุณแก้ปัญหา Perl สามารถหักโดยการเปลี่ยนครั้งแรกกับสิ่งที่ต้องการ$& $0
โฮเวิร์ด

และ Haskell จะแตกถ้าคุณแทนที่เครื่องหมายจุลภาคด้วยเครื่องหมายบวก พยายามอย่างกล้าหาญ
เจฟฟ์ Burka

ฉันคิดว่าnub$filter(\x->x==2012||x==2012)(2012:[2012])อาจปลอดภัยสำหรับโซลูชัน Haskell
เจฟฟ์ Burka

ฉันลืมuse Englishใน perl ที่จะแก้ไขได้ ฉันคิดว่าการแก้ไขหลายอย่างใช้ได้ผลกับ Haskell รวมถึงการเปลี่ยนเป็นสตริง
Jeff Burdges

1
วิธีการแก้ปัญหา Perl ยังคงค่อนข้างบอบบาง วิธีการบางอย่างที่จะทำลายมัน (ที่พบขณะที่การทดสอบคำตอบของตัวเอง ) ประกอบด้วยแทนที่printด้วย*rint, prin:, p:intหรือ#rint, prepending =ไปบรรทัดแรกหรือแม้กระทั่งการเปลี่ยนs/.*/ด้วยs/./หรือy/.*/(ซึ่งจะได้รับการแก้ไขโดยการเริ่มต้น$ARGที่จะ2012เริ่มต้นด้วย) นอกจากนี้$SUBSEPเคล็ดลับของคุณยังไม่ได้ป้องกันการแทรก*เซมิโคลอนสุดท้าย แต่วิธีแก้ปัญหาที่ง่ายกว่าคือการลบเซมิโคลอนที่ไม่จำเป็นออกไป
Ilmari Karonen

0

PHP, 43 48

 $a='2012';echo($a==date('Y')?abs($a):date('Y'));

การใส่-ระหว่าง?และกับ$aผลลัพธ์ใน-2012การพิมพ์
Gareth

ความน่ารักที่น่ารักด้วยdate()แต่โปรแกรมก็ต้องทำงานเกินปี 2012 เช่นกัน ;)
Vilx-

@Gareth - hmm :)
The Coder

1
@ Vilx- "งานคือการเขียนโปรแกรมในภาษาที่คุณชื่นชอบที่ส่งออกปี 2012" มันบอกว่าจะต้องทำงานเกินปี 2012? :)
Coder

1
@TheCoder ตกลงตอนนี้ฉันจะแทรก-ระหว่างของฉัน และหน้าท้อง ;-)
Gareth

0

ทับทิม ( 57 36)

แก้ไขและอีกหนึ่งใน 36 ตัวอักษร

p((x,y='2012','2012';x=='2012'?x:y)) 

ฉันเดาว่าการใช้สตริงนั้นค่อนข้างจะไม่ปลอดภัยเพราะสิ่งลบนั้นไม่ทำงานอีกต่อไป


แก้ไขต่อไปลอง (36 ตัวอักษร) [ไม่เป็นไรเพิ่มผลลัพธ์-หลังจาก]p-2012

p [2012,2012] .find (2012) .first || 2012


อันนี้จะใช้งานได้ในปีนี้เท่านั้น แต่สำหรับการแข่งขันที่คล้ายกันในอนาคต :) (15.chars)

p Time.now.year

โปรดทราบว่าการทดแทนนี้ยังใช้งานได้:

p Time.new.year

57 ตัวอักษร หากคุณนับบรรทัดใหม่เช่นกันก็คือ 76 ตัวอักษร

p( 
#
#
#
#
#
#
#
#
#
#
__LINE__.to_s.prepend(
#
#
#
#
#
#
#
__LINE__.to_s))


สองวิธีแรก - เพิ่ม#ที่จุดเริ่มต้นของบรรทัด วิธีการแก้ปัญหาที่ผ่านมา - pใส่ขึ้นบรรทัดใหม่ก่อน (หมายเหตุ - ฉันไม่รู้ทับทิมเองดังนั้นอาจผิด)
Vilx-

แช่ง :) คุณถูกต้อง
Patrick Oscity

พิมพ์ "2012" ให้ฉัน คำพูดไม่สอดคล้อง - พวกเขา?
ไม่ทราบผู้ใช้

ใช่คุณพูดถูก คุณสามารถใช้$><<หรือputsแทน อะไรก็ตามฉันจะไม่ลองอีกต่อไปฉันยอมแพ้ :)
Patrick Oscity

0

คำถาม 23

{$[2012~m:2012;m;2012]}

.

q){$[2012~m:2012;m;2012]}`
2012
q){$[1012~m:2012;m;2012]}`
2012
q){$[2012~m:1012;m;2012]}`
2012
q){$[2012~m:2012;m;1012]}`
2012
q){$[2012~\m:2012;m;2012]}`
2012
q){$[2012~/m:2012;m;2012]}`
2012
q){$[2012~'m:2012;m;2012]}`
2012

ฯลฯ


และเพิ่มค่าลบ ( -) หรือไม่ - {$[-2012~m:2012;m;2012]}- {$[2012~m:-2012;m;2012]}-{$[2012~m:2012;m;-2012]}
Gaffi

มันยังคงส่งออก 2012 q){$[-2012~m:2012;m;2012]}` 2012- q){$[2012~m:-2012;m;2012]}` 2012-q){$[2012~m:2012;m;-2012]}` 2012
tmartin

นี้สามารถเอาชนะโดยการเปลี่ยนออก;m;หาสิ่งที่ต้องการหรือ;1; ;x;
ท้องถนน

0

อืม .. ฉันขอลอง:

class a {
  int i=2012, j=2012;
  public static void main(String[] args){if (i==j)
    {System.out.println(i);}else{System.out.println(i);}
  }
}

128 ตัวอักษรที่ไม่มีช่องว่าง

class a{int i=2012, j=2012;public static void main(String[] args){if(i==j){System.out.println(i);}else{System.out.println(i);}}}

1
แตกโดยการใส่ "-" เช่นSystem.out.println(-i)(สำหรับ println แรก) นอกจากนี้ยังทำลายโดยเช่นเปลี่ยนครั้งแรกด้วยเช่นprintln(i) println(1)อาจแตกหักโดยเปลี่ยนi == jเป็นi += j(หรือ - = เป็นต้น)
TLW

0

PHP

ฉันหวังว่ามันจะไม่แตกหัก :)

$a="2012";ob_start();function c(){ob_clean();return"2012";}function ee($s){return crc32($s)+printf($s);}
print(ee($a)==1367825560?die()
:c());

ฉันจะเพิ่มตัวละครตัวหนึ่งไปยังจุดสิ้นสุดของเส้นนี้: และฉันได้รับecho(printf("%s",$a)==4)?die(3 20123
Vilx-

อืม… PHP 5.4.7 ทำงานได้อย่างถูกต้องเมื่อตาย (3.
Stanislav Yaglo

คุณถูก. ความผิดฉันเอง. ดำเนินการค้นหาต่อ ...
Vilx-

PHP 5.3.3 - ถูกต้องเช่นกัน die () ส่งออกเฉพาะสตริง แต่จะไม่ส่งออกหมายเลข
Stanislav Yaglo

เดี๋ยวก่อนพบแล้ว! เพียงแค่เปลี่ยนไป."2012" ."FAIL":)
Vilx-

0

Groovy: 26

x=2012;print x^2012?2012:x

ฉันไม่ค่อยรู้จัก Groovy มากนัก แต่จะใช้ได้ไหม x=2012;print x^2012?2012:-x
Vilx-

สิ่งที่-หา?
อาร์มันด์

@Alison -คือการลองและแก้ไขรหัสของคุณด้วยอักขระหนึ่งตัวเพื่อไม่ให้ใช้งานได้อีกต่อไป
Gareth

1
x=2012;print x^=2012?2012:x(เปลี่ยน^เป็น^=) เปลี่ยนผลลัพธ์เป็น 0
ฮิสโทแกต

0

Lua

print(- -(function(ab,ba)assert(ab==ba)return- -ab end)(2012,2012))

1
ถ้าคุณลบหนึ่งใน-สัญญาณเหล่านั้น
Vilx-

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