常に「2012」を出力するプログラムを作成します-変更された場合でも!


116

このアイデアは私のものではありませんが、どこから生まれたのかはわかりません。私はかつてプログラミングコンテストで会ったことがあります(1998年、記憶が正しければ)。タスクは、お気に入りの言語でプログラムを作成し、出力する2012 だけ 2012です。キャッチは、プログラムがまだ出力しなければならないということである2012任意の後の1の文字のが修正されます。変更は、挿入、削除、または置換のいずれかです。もちろん、変更はプログラムがまだ構文的に有効であるようになります。

私はすべてのプログラミング言語を知っているわけではないので、聴衆に助けてもらい、提出された答えをテストする必要があります。

追加:多くの人が、受け入れられる変更の私の定義があいまいすぎるとコメントしました。2番目の試みは次のとおりです。許可された変更により、プログラムは構文的に有効なままになり、クラッシュすることはありません。そこでは、コンパイル時、リンク時、および実行時のすべてのエラーをカバーすべきだと思います。とにかくいくつかの言語で奇妙なエッジケースがあると確信していますが、それが出てきたら個別に見ていきます。


最も可能性の高い無効なアドレスの読み取りなどの実行時エラーはどうですか?
aaaaaaaaaaaa

@PeterTaylor-すでに3つの回答がありますが、Cの回答は大幅に修正されています。そこからインスピレーションを探すことができます。
Vilx-

2
これがAPLやGolfScriptで不可能な場合、または同様に簡潔な場合、誰でも理解できましたか?
ジェフバード

14
これにより、DNAと冗長性、およびプログラムで宇宙線が反転する可能性について考えるようになりました。興味深いもの。
ジョンパーディ

11
...睡眠が必要です。
-Vilx-

回答:


65

C、53文字

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

スクリプト言語が答えるよりも少し長く、同じ基本原則に従います。Cの構文の制約により、プログラムを無効にすることなく変更できる文字は文字列内にあるという事実に依存しています!

編集: 4文字を削ります。

再編集:堅牢性が向上し、1つのキャラクターが削られました。

再編集:より長いが、より堅牢。&今すぐお試しください!(今回は正確に)。

更新:少し短くしました。これまでに見られたほとんどのアプローチを打ち負かす。

更新: intをvoidに変更しました。私が考えることができるそれを破る最後の可能なアプローチを打ち負かす必要があります。

更新:別のアプローチを思いつきました。最後のa(腐敗する可能性のある)を0;に置き換えます。2文字の名前を使用すると、この問題に対処できます。

更新:最終更新は取り消されました。実行時エラーの原因となる変更は許可されていません。aうまく動作します。

更新:さらにバックトラック; *a間接参照しようとすると、セグメンテーション違反も発生します。そのためvoid、コンパイルエラーを解決するために使用する必要はありません。

更新:そして最後の短縮。"2012"これは、1つのアドレス(これは一般的です)に配置されている文字列に依存しています。また、リテラル文字列は読み取り専用です(これも一般的です)。

更新: 2文字の費用がかかりましたが、あなたのちっぽけなセミコロンを倒しました!


2
@PaulR:に変更されましたregister voidregister防ぐためにそこにあります&void防ぐためにそこにあります*
ウィリハムトットランド

6
OK ...これが無効なCである場合は修正してください。ただし、VS2010で機能しました。挿入;の間puts(
Vilx-

39
+1、おめでとうございます、あなたはそれを釘付けにしたと思います。コードの可能なすべての1文字のバリエーションをコンパイルして実行しようとする簡単なテストハーネスを作成しましたが、それらはすべてコンパイル、クラッシュ、または印刷されませんでした2012!(挿入と置換のテストには印刷可能なASCII文字のみを使用しましたが、レパートリーの拡張が役立つとは思いません。)
イルマリカロネン

3
@IlmariKaronen:へー、それは大変な努力です。すべてを通過してくれてありがとう。:)
ウィリーハムトットランド

1
@タイタス:三者での切り替え==を意味する場合!=、それはどこにも行かない。出力する代わりに、a現在出力します"2012"
ウィリハムトットランド

38

ハスケル、19

(\xx@2012->xx)$2012

または、完全なプログラムとして、

29

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


もう少し楽しみ:

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


単なる実行時エラーを生じるような方法で変更できないものを取得するために、1文字の変更だけでは変更できないリストの長さで情報をエンコードできます。

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

(より安全に)変更可能にするために、数値自体をリスト要素として使用することもできます。コンマがプラスと交換されないように文字列にするだけです。

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

この文字列は式の結果であるため、Haskellの怠laのおかげで問題ではなく、それを再度使用することもできます。

64 72

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

ここでinitは、「マイナス1、ただし非負」として機能します。


冗長性スキームに型システムを含めて、1文字の変更で修正できる方法で番号を書き込むこともできます...

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"

いずれかup逆に変更することもできますが、それは常に2番目のタプル要素のリストスタックの深さを台無しにし、コンパイル時エラーを引き起こします。

このアイデアをさらに拡張して、テキスト全体をコンパクトにエンコードし、読みやすく編集しやすく、しかも単一の文字を変更しても安全なようにすることができます。


そしてさらに別の...

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
実行時に例外がスローされますが、これでコンパイルがうまく修正されるのではないかと心配しています
ジェフバード

3
@JeffBurdges:確かに、これを「そしてクラッシュさせない」に含めるようにしています。
反時計回りに

1
以下のためにa=map(head.show.length)[[a,a],[],[a],[a,a]]解決策、挿入aの間[]。しかし、私はこの投稿が本当に好きです!非常に賢いソリューション。
ディロンコウアー

9
29文字のプログラム(ASCII文字32-126の置換または挿入)の5825種類すべてが期待どおりに動作することを確認しました。これが私が使用したテストスクリプトです。他の言語を含む他のプログラムをテストするために簡単に調整できます。警告:私のラップトップで実行するのにほぼ1時間かかりました:)
hammar

1
[a]-> []64文字ソリューションで
ジョンドヴォルザーク

14

JavaScript

これは実行時エラーの証拠であり、単一の変更はコンパイルエラーまたは2012年を示す単一のアラートのいずれかになるはずです。

編集:コードはのようなもので実行時エラーを起こすでしょうif("alert(2012 "==r)、私はそれに対処するためにtryセクションを移動しました。

編集:Vilx-がいいですが、修正可能です:-)現在、そのセミコロンを挿入するためのブラケットの不一致があります。

編集:しかし、その後、コンマはセミコロンと同じことをすることができます。それはオプションのホストです、私はそれを修正したと思いますが、今では非常に多くのコードがあります。

編集:少し簡略化。

編集:バグ修正の無限シリーズのもう1つ。

編集:この種は防弾よりも長くて複雑に感じますが、少なくともとの世話をする必要が~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評価する"NaN"前にevalが変換し、単純にに戻しNaNます。奇妙なことをしますが、技術的には合法なので、キャッチは呼び出されません。
aaaaaaaaaaaa

4
Cソリューションと同じこと- との;間に挿入します。eval(
Vilx-

1
コメントリーダーの場合、セミコロンの脆弱性は修正されています。コードは現在きれいになっていると思います。
aaaaaaaaaaaa

4
これがカウントされるかどうかはわかりませんが~、の前にを置くと、1 回ではなく2回evalエコー2012 ます。それがルールに従わないかどうかわからない:P
mellamokb

2
!after eval(を追加すると壊れます。
jimmy23013

13

Perl、49文字

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

JBの回答に基づきますが、これは実際に仕様を満たします。徹底的なチェックは、すべての1文字の削除、挿入、または置換が、少なくとも挿入と限り、出力を変更しないままにするか、実行時にプログラムをクラッシュさせる(ゼロ以外の戻り値とstderrへの出力で示される)置換は、印刷可能なASCII文字に制限されています。

(制限なしでは、Perlではタスクを実行できません。Perlパーサーのあまり知られていない機能は、Ctrl-DまたはCtrl-Z文字に遭遇すると停止するため、いずれかのファイルの前にそれらのいずれかを挿入することです何もしない有効なPerlプログラムに変換します。)

編集:に置き換えて1==print、もう1つの文字を削り0-printます。


Perl 5.28で中断し、1の代わりにprint戻り始めます: 'true'-P
JB

3
@JB:それが起こったら、あなたはそれを下票することができます。:)(他の読者のために、これは冗談です。私の知る限りprint、Perl 5のどのバージョンでも、明示的に文書化されていなくても、戻り値を変更する予定はありません。)
Ilmariカロネン

12

ブレインファック

私はこれが可能であることを自分自身に納得させようとしています。そして、私はそれを少し広げすぎたかもしれないと確信しています。私の環境についていくつかの仮定をしました。

  1. 無限ループは「クラッシュ」と見なされます。特定のインタープリターでは、ゼロを超えて、またはメモリー位置ゼロの左側をデクリメントすることにより、同様の条件が達成される可能性があります。多くのインタープリターは、実行時にクラッシュするのが困難です。最も単純で明白な無限ループのみを使用することで、停止の問題を回避します。
  2. 一致しない角括弧は、コンパイルエラーと見なされます。
  3. これは、プログラムの出力が自身の入力にパイプで戻される環境でのみ機能します。これを使用して、実際に「2012」が出力されたことを確認します。これは、出力文字の1つを単純に削除する唯一の方法です。

残念ながら、もっと厳しくした場合、これが不可能になるのではないかと心配しています。私の解決策は次のとおりです。

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

基本的に、出力コードまたは検証コードを変更できますが、両方は変更できません。それらの1つが動作することが保証されています。それらのいずれかがそうでない場合、それは「クラッシュ」します。


5
うわ、ブレインファック!あなたはただ、そうでしたね?XD
Vilx-

8
代わりに空白を使用することを希望しましたか?
NRGdallas

7

Python2

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

これをテストするには、stdoutリダイレクトが壊れていたため、Rayのテストスクリプトを少し変更する必要がありました。空の辞書をexecに渡すと、名前空間の汚染を回避できます

exec(prog, {}, {})

すばらしいです!できた!
レイ

6

Brain-Flak、44 + 3 = 47バイト[非競合]

これはBrain-Flakの-Aフラグを使用し、文字2012をSTDOUTに出力します

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

オンラインでお試しください!

代替、50バイト

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

オンラインでお試しください!

説明

上記のコードのいずれかに単一文字を変更すると、プログラムでエラーが発生します。


3
ハ!チャレンジに適した言語。
DLosc

4

Sisi、非競合

最後に、自分の言語の1つが機能することを発見したと思います。それは恐ろしく長く、言語は質問よりも新しいですが、それでも達成のように感じます。

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に触発された玩具言語です。構文が非常に限られているため、この課題に適しています。

  • それだけで4つのコマンドがあります:setprintjump、とjumpif
  • すべてのコマンドのアリティは固定されています。
  • すべての行には、厳密に増加している行番号が必要です。
  • 式はsetステートメントでのみ許可されます。含めることができる操作は(最大で)1つのみで、バイナリである必要があります。特に:変更print xxするprint -xx構文エラーです。
  • 変数名は小文字で構成する必要があります。
  • 最も重要なのは、コメント構文ないことです!

プログラム

プログラムの中核はこの部分です:

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

に格納2012xx、それが成功したかどうかをテストし、テスト結果をに格納しyます。y真実であれば、55行目にジャンプします(存在しない行番号にジャンプするだけで、次の行に早送りします)。

放射線硬化

  • 行1の割り当てが変更された場合、yfalseになり、ジャンプは発生せず、行4はxx2012に設定されます。
  • 行2の割り当てまたは行3のジャンプ条件が変更された場合、気にしませxxん。ジャンプするかどうかにかかわらず、2012に設定されます。
  • 行3のジャンプターゲットは、最小5または最大955に変更できます。可能な変更は、print遅かれ早かれ、行955に到達します。1つの変更では、後方にジャンプする(ループを作成する)ことも、プログラムの終わりを超えることもできません。
  • 行4の割り当てが変更されても、気にしません。行1の割り当ては正しく、行4を超えてジャンプします。
  • 行955が変更された場合、問題が発生している可能性があります。Sisiの不幸な点の1つは、初期化されていない変数がデフォルト0であるため、変更print axはエラーではないということです。いが効果的な解決策は、行828〜954です。これは、2012を、編集距離が1のすべての可能な変数に割り当てxxます。これにより、最終版への変更がprint xx2012年でも印刷されることが保証されます。
  • 行番号が変更された場合、1)順序が狂って構文エラーになるか、2)プログラムの流れに影響を与えません。心配する主な変更は、行4を94に変更し、それによって55へのジャンプ後に挿入することxxです。これは、2012を再度割り当てるだけなので重要ではありません。

いいね!これを回避する方法は考えられません。私からの努力の「A」、それは確かです!:)
Vilx-

3

Python

少し冗長です(今は、!print(!の間の厄介なセミコロンを修正しています)。

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

@Jeff Burdges:ええ、これで、実行時エラーも禁止されています。:)
ディロン・コーワー

交差点が空のセットを生成し、popが実行時エラーをスローする場合、それはまだ構文的に正しいと思います。両側に2012を追加します。
ジェフバード

@DC:例外はランタイムエラーとは異なりますが、例外はPythonではエラーと呼ばれます。pop()空のセットを作成すること自体はエラーではありませんが、「エラー」が発生します。
ウィリハムトットランド

1
キャッチされない例外はエラーになります。
イルマリカロネン

1
pop出力の後にコンマを挿入<built-in method pop of set object at 0xb6fe93ac> ()
ニブラー

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はありません(CASEのみ)と文句を言いました。
Vilx-

1
@ Vilx-:ああ、あなたは正しい。SQL Azureで実際にテストしていることに気付きました。SQL Server 2008では、同じエラーが発生します。ただし、SQL Server 2012 / Azureでは正常に動作するようです。SQL 2012のデモを次に示し
#!

OK、おめでとう、これを破る明らかな方法を見つけることができません!:)それは何もないと言っているわけではありません。;)
Vilx-

3

すべてのPythonソリューションを判断するためのPythonスクリプトを作成しました。このスクリプトは、多くの異なる方法で、最初と3番目のpythonソリューションを破壊します。そして、2番目のソリューションは、ラムダを使用して自身を保護しますが、壊れません。2番目のpythonソリューションはpython 3です。私はそれをpython 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) 

クール!私の答えは同時に吸うと吹く
ニブラー

p2Python2に対して常に例外をスローします。出力は2012年になることはありません。ジャッジプログラムは、printステートメントを使用するため、Python3では実行されません。
ニブラー

@gnibbler p2python 3にあることに気づきませんでした。-
レイ

私は働いてきた新しい回答スクリプトを渡しPython2ために
gnibbler


2

Javascript- 68、77、84、80の文字

今年はうまくいくはずのソリューションは次のとおりです:)

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を出力しない変更ケースの1つを見つけることができなかったので、例を挙げてください。
Briguy37

eval(0)そしてeval(-a)、例えば同じことをします。
aaaaaaaaaaaa

編集後は、に置き換えることで少なくとも破損する可能性が||あり|ます。
aaaaaaaaaaaa

5
最初alertをに変更すると中断しますaler=
jimmy23013

2

Ruby 1.9-43文字

qq=[:p,2012]
b if qq!=[:p,2012]
send(
*qq)

テストされていないので、取り除いてください。


2

Excel、14文字(わずかに不正行為):

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

配列の有効な変更は両方のセルの内容に影響し、1つのセルのみを変更しようとするとエラーメッセージがトリガーされます。

もちろん、2つの式が同一であるように制約されているのに対して、実際には1つの式にすぎないという見方をすると、これは破綻します。


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)、@ 1上に変更されa.equals(a)b.equals(b)または!a.equals(b)それはまだ同じ次のパスになります:1→2(およびそれが返されますa年代の変わらない値を2012)。
  5. 場合はa2 @上に変更されたb1→2(およびそれが返されます:それはまだ次のパスを取りますb年代の変わらない値を2012)を。
  6. 3行目、4行目、または5行目のいずれかaまたはb反対に変更された場合でも、次のパスを使用します:1→2(そして戻りますa2012
  7. @ 3の文字列の内容が何らかの方法で変更された場合、次のパスを使用します:1→2(そして aの変更されていない値をます2012
  8. 変更Mclass Mamain(String[]a)別の有効な文字にすることは、コードの機能を変更することなく行うことができます。
  9. その他の変更を行うと、コンパイルエラーが発生します(削除/追加が可能な一部のエンター/空白を除く)。

ここでこれらのすべての変更を試して、それらがすべて2012でも印刷されることを確認します。

あなたが私が知りたいOPのルールに従ってそれを破る方法を見つけることができるなら、私はそれを修正する何かを考えることができます。
単一の文字が変更されるほとんどの同様の質問とは異なり、この質問により、問題のプログラミング言語の基本構造が損なわれないため、Javaは最終的に1つのエンターワンで競うことができます。このSE xD)。


マイナス記号とは何aですか?プログラムはまだ2012を出力しますか、それとも-2012を出力しますか?
牛は

@KritixiLithosこれは文字列なので-aorの前にを挿入することはできませんbコンパイルエラーのスクリーンショットを次に示します。
ケビンCruijssen

1

Ruby 1.9

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

この短いがシンプルなプログラムを構築し、上記のルールに従ってブレークするように招待します。#行の残りをコメントアウトするためにa が挿入されている場合、出力が変更される位置を見つけることさえできませんでした(コードを壊すことなく)。


puts(r = 2012)== 2012?-r:2012.send(:ABS)版画"-2012"
Joanis

@ M.Joanisただし、スペース文字とマイナス記号の2つの追加文字が必要です。マイナスだけでは機能しません。
ハワード

ああ、あなたは正しい!コンパイルエラー。Rubyについては何も知らないので、もっと注意する必要があります。ごめんなさい!
ジョアニス

1
によるとirbrx出力する有効なプログラムの結果の前にマイナスを追加すると-2012
コンラッドルドルフ

2
に変更putsするputc?、Ruby 1.9でこれが出力されます。
histocrat

1

Scala、95

(または意味のない部分をスキップする場合は54)

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

Scalaについて十分な知識がないため、欠陥を見つけることができないのではないでしょうか。:(他の人、見てください、してください?
-Vilx

このレベルでは難しくありません。Scalaの硬度のほとんどは、その型システムの複雑さによるものです(まだ完全には理解できません:D)
Sarge Borsch

私はScalaを知りませんが、それ(...),("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);」に変更するとどうなりますか?
グレンランダース-パーソン14

ここにはC#コンパイラはありませんが、7行目を変更しif (result += "2012")て出力するべきではありません20122012か?
フィリップ14

うーん...私はそれを考えていませんでした...図面に戻る
戦争14

@Philipp-いいえ、コンパイルできません。if文字列ではなく、ステートメントの値としてブール値が必要です。
ヴィルクス

6
;後を追加elseを 2回出力されます。
jimmy23013

1

PHP、30

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

PPCGへようこそ!素敵な最初の投稿!説明も追加できますか?
Rɪᴋᴇʀ

2
そして、ここに私がそれを打ち負かす方法があります:<?=$i=2012;$i==2012?-$i:2012;?>
Vilx-

@ Vilx-ニース、私はそれについて考えていませんでした。
jsa

PHPの1行のソリューションでは不十分な敗北:コード全体をコメントに<?#$i=2012;$i==2012?$i:2012;?>します$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

スマイルベーシック

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の両方が宣言されていることを確認しています。


OK ...私はSmileBASICについて何も知らないので、これは純粋に推測です:?-A$VAR C-この出力はできます-2012か?
-Vilx-

A $は文字列であるため、機能しません。
12Me21

待って、私はアイデアを持っています!どうですか:?B$VAR C?:)
Vilx-

「B $」が宣言されていないため、エラーが発生します。
12Me21

0

ハスケル、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が壊れます。しかし、勇敢な試み。
ジェフバーカ

nub$filter(\x->x==2012||x==2012)(2012:[2012])Haskellソリューションにとって安全だと思います。
ジェフバーカ

use Englishperl を忘れてしまったので、修正します。Haskellでは、文字列への切り替えなど、いくつかの修正が機能すると思います。
ジェフバード

1
Perlソリューションはまだ非常に脆弱です。(テスト中見つけ、それを破るために、いくつかの方法で、私自身の答えは)交換が含まprint*rintprin:p:intまたは#rint、先頭に追加=最初の行に、あるいは交換s/.*/s/./たりy/.*/(初期化することによって固定されるであろう$ARG2012して始めること)。また、最後のセミコロンの前に$SUBSEPaを挿入することを防ぐことはできません*が、はるかに簡単な解決策は、不要なセミコロンを削除することです。
イルマリカロネン

0

PHP、 43 48

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

挿入-の間?$aで結果を-2012印刷されます。
ガレス

とのかわいい試みですdate()が、プログラムは2012年以降も動作する必要があります。;)
Vilx-

@Gareth-うーん:)
コーダー

1
@ Vilx-「タスクは、2012年を出力するお気に入りの言語でプログラムを作成することです」と2012年以降に機能する必要があると言いますか?:)
コーダー

1
@TheCoderわかりました、今私は私の-間に挿入するつもりですか?と腹筋。;-)
ガレス

0

ルビー(57 36)

編集 36文字に1つ。

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))


最初の2つのソリューション- #行の先頭にa を追加します。最後の解決策-の前に改行を入力しますp。(注-私は自分でRubyを知らないので、おそらく間違っています)。
-Vilx-

いまいましい:)あなたは正しいです
パトリックオスシティ

私のために「2012」を印刷します。引用符は準拠していません-ですか?
ユーザー不明

うん、君のいうとおりだ。$><<またはputs代わりに使用できます。いずれにせよ、私はこれをもう試すつもりはありません、私はあきらめました:)
パトリックオスシティ

0

Q、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 == ji += 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());

この行の最後に1文字追加しecho(printf("%s",$a)==4)?die(3ます20123
Vilx-

うーん…PHP 5.4.7はdieで正しく動作します(3.
スタニスラフヤグロ

あなたが正しい。私の悪い。検索を継続しています...
Vilx-

PHP 5.3.3 —同様に正しい。die()は文字列のみを出力し、数値は出力しません。
スタニスラフヤグロ

待って、ダッ、見つけた!に変更."2012"するだけ."FAIL"です。:)
Vilx-

0

グルービー:26

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

Groovyについてはあまり知りませんが、これでうまくいくでしょうか?x=2012;print x^2012?2012:-x
Vilx-

何の-ためですか?
アルマン

@Alison -は、コードが機能しなくなるように1文字でコードを変更しようとすることです。
ガレス

1
x=2012;print x^=2012?2012:x(変更^^=0に出力を変化させる)
histocrat

0

ルア

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

1
これらの-兆候の1つを削除するとどうなりますか?
ヴィルクス

ああ、それらのいずれ2012かを別のものに変更すると、アサートはエラーを発生させます。うーん...まあ、あなたはルールを乱用するための創造性ポイントに値すると思います。しかし、真剣に、それはそれが意図された方法ではありません。
Vilx-
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.