“2012”를 출력하는 프로그램을 수정하더라도 수정하십시오!


116

이 아이디어는 제 아이디어가 아닙니다. 비록 그것이 어디에서 유래했는지는 모르겠습니다. 아주 오래 전에 프로그래밍 공모전에서 한 번 만났습니다 (1998 년, 내가 정확하게 기억한다면). 이 작업은 원하는 언어 2012 로만 출력되는 프로그램을 작성하는 2012 입니다. 문제 는 문자 중 하나 가 수정 된 2012후에도 프로그램이 여전히 출력되어야한다는 입니다. 수정은 삽입, 삭제 또는 교체 일 수 있습니다. 물론, 프로그램이 여전히 구문 상 유효하도록 수정 될 것이다.

나는 모든 프로그래밍 언어를 모르기 때문에 청중에게 나를 도와주고 제출 된 답변을 테스트하도록 요청해야합니다.

추가 : 많은 사람들이 수용 가능한 수정에 대한 나의 정의가 너무 모호하다고 말했습니다. 두 번째 시도는 다음과 같습니다 . 허용 된 수정으로 인해 프로그램이 구문 상 유효하게 유지되고 충돌이 발생하지 않습니다. 거기에서 모든 컴파일 타임, 링크 타임 및 런타임 오류를 다루어야한다고 생각합니다. 어쨌든 어떤 언어에서는 이상한 경우가있을 것이라고 확신하지만, 그것이 올 때 우리는 그것을 개별적으로 볼 것입니다.


유효하지 않은 주소를 읽는 것과 같은 런타임 오류는 어떻습니까?
aaaaaaaaaaaa

@ PetetTaylor-세 가지 답변이 있습니다. C는 크게 수정되었습니다. 거기에서 영감을 찾을 수 있습니다.
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 문자를 깎았습니다.

편집 : 견고성이 증가하여 한 캐릭터가 면도되었습니다.

다시 수정 :길지만 더 강력합니다. &지금 시도하십시오 ! (올바로 이번에).

업데이트 : 약간 단축되었습니다. 지금까지 본 대부분의 접근 방식을 물리칩니다.

업데이트 : int가 void로 변경되었습니다. 내가 생각할 수있는 그것을 깨기 위해 가능한 마지막 접근법을 물리 쳐야합니다.

업데이트 : 나는 다른 접근법을 좋아했습니다. 마지막 a(썩을 수도 있음)을 0; 두 글자로 된 이름을 사용하면 문제가 해결됩니다.

업데이트 : 마지막 업데이트가 취소되었습니다. 런타임 오류를 유발하는 변경이 허용되지 않는다고 가정합니다. a잘 작동합니다.

업데이트 : 좀 더 역 추적; 역 참조 *a를 시도해 도 segfault가됩니다. 따라서 void컴파일 오류를 괴롭히는 데 사용할 필요는 없습니다.

업데이트 : 그리고 최종 단축; 그것은 "2012"하나의 주소 (일반적인)에 배치 되는 문자열 에 의존합니다 . 리터럴 문자열은 읽기 전용입니다 (일반적 임).

업데이트 : 그것은 두 자의 비용이 들었지만, 당신의 작은 세미콜론을 물리 쳤습니다!


2
@PaulR : 이제 register void; 는 register거기에 방지하는 것입니다 &; 는 void방지 할 수있다 *.
Williham Totland

6
확인 ...이 C가 유효하지 않은 경우 수정하십시오.하지만 VS2010에서 작동했습니다. 와 ;사이에 삽입하십시오 . puts(
Vilx-

39
+1 축하합니다, 당신이 그것을 못 박았다고 생각합니다. 코드의 가능한 모든 한 문자 변형을 컴파일하고 실행하려고 시도한 간단한 테스트 장치를 작성했으며 그중 하나는 컴파일, 충돌 또는 인쇄되지 않았습니다 2012! (삽입 및 대체 테스트에는 인쇄 가능한 ASCII 문자 만 사용했지만 레퍼토리를 확장하면 도움이되지 않을 것입니다.)
Ilmari Karonen

3
@IlmariKaronen : Heh, 그것은 많은 노력입니다; 모든 것을 통과 해 주셔서 감사합니다. :)
Williham Totland

1
@Titus : 삼항식 에서 전환 ==을 의미한다면 !=아무데도 갈 수 없습니다. 출력하는 대신 a이제 출력 "2012"합니다.
Williham Totland

38

하스켈, 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반대를하지만, 그 두 번째 튜플 요소에 항상 엉망 목록 스태킹의 깊이를하고자하여 컴파일 타임 오류를 트리거합니다.

이 아이디어는 전체 텍스트를 콤팩트하게 인코딩하고 읽고 편집하기 쉬우 며 여전히 단일 문자를 수정하지 않아도되는 방식으로 확장 될 수 있습니다.


그리고 또 하나는 ...

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 : 물론, 이것을 "충돌을 일으키지 않을 것"에 포함시키는 것으로 생각합니다.
counterclockwis 설정을 중단

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 문자의 솔루션
존 드보락

14

자바 스크립트

나는 이것이 런타임 오류 증거라고 생각합니다. 단일 변경하면 컴파일 오류가 발생하거나 2012라는 단일 경고가 발생해야합니다.

편집 : 코드에서와 같은 런타임 오류가 발생 if("alert(2012 "==r)했습니다. 처리 섹션을 이동하여 처리했습니다.

편집 : 좋은 하나 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평가하기 "NaN"전에 eval로 변환 하기 만하면됩니다 NaN. 이상한 일이지만 기술적으로 합법적이므로 캐치를 불러 일으키지 않습니다.
aaaaaaaaaaaa

4
C 솔루션과 같은 것- 와 ;사이에 삽입하십시오 . eval(
Vilx-

1
주석 독자에게는 세미콜론 취약점이 수정되었습니다. 코드가 깨끗하다고 ​​생각합니다.
aaaaaaaaaaaa

4
이것이 계산되는지 아닌지는 확실하지 않지만 ~앞에 표시 eval하면 한 2012 번이 아니라 두 번 에코 됩니다 . 그것이 규칙을 준수하지 않는지 확실하지 않습니다 : P
mellamokb

2
!후를 추가하면 eval(중단됩니다.
jimmy23013

13

펄, 49 자

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

JB의 답변을 기반으로 하지만 실제로이 사양을 충족시킵니다 . 철저한 검사는 적어도 하나의 삽입과 교체는 인쇄 가능한 ASCII 문자로 제한됩니다.

(제한없이 Perl에서는 작업이 불가능 합니다. Perl 파서의 거의 알려지지 않은 기능 은 Ctrl-D 또는 Ctrl-Z 문자를 만나면 중지되므로 모든 파일 앞에 문자를 삽입하는 것입니다 아무것도하지 않는 유효한 Perl 프로그램에 넣습니다.)

편집 : 로 교체 1==print하여 하나 이상의 문자를 제거 했습니다 0-print.


1 :-P 대신에 print반환 'true'을 시작 하는 Perl 5.28에서 중단
JB

3
@ JB : 글쎄, 당신은 그것이 일어날 때 그것을 downvote 수 있습니다. :) (다른 독자들의 이익을 위해, 이것은 농담입니다. 내가 아는 한, printPerl 5의 모든 버전에서 명시 적으로 문서화 되어 있지 않더라도 리턴 값을 변경할 계획 은 없습니다 .)
Ilmari Karonen

12

Brainfuck

나는 이것이 가능하다는 것을 확신하려고 노력하고 있으며, 나는 그것이 그것을 너무 멀리 뻗었을 것이라고 확신합니다. 내 환경에 대해 몇 가지 가정을했습니다.

  1. 무한 루프는 '충돌'로 간주됩니다. 특정 인터프리터에서 0을지나 메모리 위치 0의 왼쪽으로 감소시켜 비슷한 조건을 달성 할 수 있습니다. 런타임에 많은 통역사가 충돌하기가 어렵습니다. 가장 단순하고 가장 명확한 무한 루프 만 사용하여 정지 문제를 피합니다.
  2. 일치하지 않는 대괄호는 컴파일 오류로 간주됩니다.
  3. 이것은 프로그램의 출력이 자신의 입력으로 다시 파이프되는 환경에서만 작동합니다. 나는 그것을 실제로 '2012'출력했는지 확인하기 위해 사용합니다. 이것은 출력 문자 중 하나를 삭제하는 것만으로 해결할 수있는 유일한 방법입니다.

불행히도, 더 엄격 해지면 이것이 불가능 할까 걱정됩니다. 내 해결책은 다음과 같습니다.

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

기본적으로 출력 코드 또는 확인 코드를 변경할 수 있지만 둘 다 변경할 수는 없습니다. 그들 중 하나는 작동합니다. 그들 중 하나가 그렇지 않으면 '충돌'합니다.


5
어이! 당신은 방금 했습니까? XD
Vilx-

8
대신 공백을 사용 했습니까?
NRGdallas

7

파이썬 2

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

stdout 리디렉션이 중단되어 Ray의 테스트 스크립트를 약간 변경 하여 이것을 테스트해야했습니다. 빈 dicts를 exec에 전달하면 네임 스페이스가 오염되지 않습니다.

exec(prog, {}, {})

큰! 해냈 군!
Ray

6

Brain-Flak , 44 + 3 = 47 바이트 [비경쟁]

Brain-Flak의 -A플래그를 사용하여 문자 2012를 STDOUT으로 출력합니다.

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

온라인으로 사용해보십시오!

대안, 50 바이트

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

온라인으로 사용해보십시오!

설명

위의 코드 중 하나를 단일 문자로 수정하면 프로그램 오류가 발생합니다.


3
하아! 도전에 적합한 언어.
DLosc

4

시시 , 비경쟁

마지막으로 작동하는 언어 중 하나를 찾았습니다. 엄청나게 길고, 언어는 질문보다 더 새롭지 만 여전히 성취처럼 느껴집니다.

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는 어셈블리 및 QBasic에서 영감을 얻은 장난감 언어입니다. 구문이 매우 제한되어 있기 때문에이 문제에 유용합니다.

  • 그것은 네 개의 명령이 있습니다 : set, print, jump,와 jumpif.
  • 모든 명령에는 고정 된 특성이 있습니다.
  • 모든 줄에는 줄 번호가 있어야합니다.
  • 표현식은 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는 xx2012로 설정 됩니다.
  • 2 행의 지정 또는 3 행의 점프 조건이 수정되면 상관하지 xx않습니다.
  • 3 행의 점프 대상은 5 또는 955로 변경할 수 있습니다. 가능한 모든 수정 사항은 print조만간 온라인 955로 이동합니다. 한 번의 수정으로 뒤로 건너 뛰거나 (루프 만들기) 프로그램 끝을 지나갈 수 없습니다.
  • 4 행의 과제가 수정되면 상관 없습니다. 1 행의 과제가 정확하고 4 행을 뛰어 넘습니다.
  • 955 행이 수정되면 문제가있을 수 있습니다. Sisi의 불행한 점 중 하나는 초기화되지 않은 변수의 기본값이로 설정되어 0있으므로 수정 print ax이 오류가 아니라는 것 입니다. 추악하지만 효과적인 솔루션은 828-954 행으로, 편집 거리가 1에서 1 인 모든 가능한 변수에 2012를 지정합니다 xx. 이렇게하면 최종 수정 사항이 print xx2012 년에도 계속 인쇄됩니다.
  • 줄 번호가 수정되면 1) 순서가 잘못되어 구문 오류가 발생하거나 2) 프로그램 흐름에 영향을 미치지 않습니다. 우리가 걱정하는 주요 수정 사항은 4 줄에서 94 줄로 변경하여 55로 점프 한 후에 삽입하는 것은 중요하지 않습니다 .2012 년을 xx다시 할당하기 때문 입니다.

좋은 것! 나는 이것을 우회하는 방법을 생각할 수 없다. 저의 노력에 대한 "A", 그건 확실합니다! :)
Vilx-

3

파이썬

(사이 성가신 세미콜론에 대한 수정과 함께 지금은 약간의 자세한 정보 print(!)

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

@ Jeff Burdges : 예,이 오류로 인해 런타임 오류도 허용되지 않습니다. :)
Dillon Cower

교차점이 빈 세트를 생성하고 팝이 런타임 오류를 발생 시키는 경우 여전히 구문 적으로 올바른지 두려워합니다 . 양쪽에 2012를 더 추가하십시오.
Jeff Burdges

@ DC : 예외는 파이썬에서 오류라고하지만 예외는 런타임 오류와 동일하지 않다고 말하고 싶습니다. pop()빈 세트를 ping하는 것은 그 자체로는 오류가 아니지만 '오류'가 발생합니다.
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가 없습니다 (CAS 만).
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에 대한 예외를 발생시킵니다. 출력은 2012 년 이 아닙니다 . 판사 프로그램은 print 문을 사용하므로 Python3에서 실행되지 않습니다.
gnibbler

@gnibbler 나는 p2파이썬 3에있는 것을 보지 못했습니다.
Ray

스크립트를 전달하는 Python2에 대한 새로운 답변 을 작성했습니다
gnibbler


2

자바 스크립트 -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 년을 출력하지 않는 수정 사례 중 하나를 찾을 수 없으므로 예를 들어 주시겠습니까?
Briguy37

eval(0)그리고 eval(-a)예를 들어 같은 일을한다.
aaaaaaaaaaaa

포스트 편집은 적어도 교체로 나눌 수 있습니다 |||.
aaaaaaaaaaaa

5
첫 번째 alert를로 변경하면 중단됩니다 aler=.
jimmy23013

2

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

배열을 올바르게 변경하면 두 셀의 내용에 영향을 미치며 한 셀만 변경하려고하면 오류 메시지가 나타납니다.

물론, 동일하게 제약 된 2 개의 공식이 아니라 실제로는 하나의 공식이라는 견해를 취하면 이는 무너집니다.


2

자바 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. 문자열의 내용이 a어떤 식 으로든 수정되면 다음과 같은 경로를 사용합니다. 1 → 3 → 5 ( b의 변경되지 않은 값을 반환합니다 2012).
  3. 문자열의 내용이 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. 경우 a@ 2로 변경 b1 → 2 (그리고 반환합니다 : 그것은 여전히 다음과 같은 경로를 취할 것 b년대에게의 변화 값을 2012).
  6. 어느 경우 a또는 b1 → 2 (그것을 반환 : 라인에 대향로 변화 3, 4 또는 5가 여전히 다음 경로를 취할 것이다 a년대를 그대로의 값 2012)
  7. @ 3의 문자열 내용이 어떤 식 으로든 수정되면 여전히 다음과 같은 경로를 사용합니다. 1 → 2 ( a의 변경되지 않은 값을 반환합니다 2012)
  8. 변경 Mclass M또는 a에서 main(String[]a)다른 유효한 문자로하는 코드의 기능을 변경하지 않고 수행 할 수 있습니다.
  9. 다른 변경으로 인해 컴파일 오류가 발생합니다 (일부 입력 / 공백은 제외 / 추가 가능).

이 수정 사항을 모두 시도하여 모두 여전히 2012 년을 인쇄하는지 확인하십시오.

OP의 규칙에 따라 위반 할 수있는 방법을 찾을 수 있다면 알고 싶을 것입니다.
단일 문자가 수정되는 대부분의 유사한 질문과 달리,이 질문은 문제가되는 프로그래밍 언어의 기본 구조를 그대로 유지하므로 Java는 마침내 하나의 경쟁에서 경쟁 할 수 있습니다 (Java는 거의 직면하지 않습니다) 이 SE xD).


경로 4 앞에 음수 부호가 무엇입니까 a? 프로그램이 여전히 2012를 출력합니까, 아니면 -2012를 출력합니까?
암소 qua

@KritixiLithos 문자열이므로 또는 -앞에 앞에를 삽입 할 수 없습니다 . 다음은 컴파일 오류의 스크린 샷입니다. ab
Kevin Cruijssen

1

루비 1.9

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

위의 규칙에 따라 중단하도록 초대 된이 짧지 만 간단한 프로그램을 작성합니다. #나머지 줄을 주석 처리하기 위해 a 를 삽입 하면 출력이 변경되는 위치를 찾을 수 없었습니다 (코드를 끊지 않고) .


풋 (r = 2012) == 2012? -r : 2012.send (: abs) "-2012"를 출력합니다.
Joanis

@ M.Joanis 그러나 공백 문자와 빼기의 두 문자가 추가로 필요합니다. 빼기만으로는 작동하지 않습니다.
Howard

아 맞아! 컴파일 오류 나는 루비에 대해 아무것도 모른다. 더 조심해야한다. 죄송합니다!
Joanis

1
에 따르면 irb, 빼기 전에 마이너스를 추가하면 rx유효한 프로그램이 출력됩니다 -2012.
Konrad Rudolph

2
변경 putsputc출력 (A)에 원인이 ?루비 1.9 인치
histocrat

1

스칼라, 95

(의미가없는 부분을 건너 뛰는 경우 54)

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

스칼라에 대해 결함을 찾기에 충분하지 않을까 걱정됩니다. :( 다른 사람들도 좀보세요?
Vilx-

이 수준에서는 어렵지 않습니다. : 스칼라 경도의 대부분은 (D 난 아직도 완전히 이해 할 수 없음)의 형식 시스템의 복잡성 때문이다
사지 (Sarge) 러시아 식 수프의 일종

나는 스칼라를 모른다. 그러나 (...),("2012")그것을 깨뜨리는 것처럼 보였다.
jimmy23013

1

씨#

분명히이 단순한 것이 아닌가? ...

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

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

내가 뭘 그리워?


1
8 번째 줄을 "Console.WriteLine (-result);"로 변경하면 어떻게됩니까?
Glenn Randers-Pehrson

여기에 C # 컴파일러는 없지만 if (result += "2012")출력 을 위해 7 행을 변경해서는 안됩니다 20122012.
Philipp

흠 ... 나는 생각하지 않았다 ... 다시 드로잉 보드로 돌아 가기
전쟁

@Philipp-아니요, 컴파일되지 않습니다. if문자열이 아닌 명령문 의 값으로 부울이 필요 합니다.
Vilx-

6
;after else를 추가하면 두 번 출력됩니다.
jimmy23013 2019

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;?>솔루션에 넣습니다 $i=2012.
Titus

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

스마일 BASIC

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

펄, 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.
Howard

쉼표를 더하기 부호로 바꾸면 Haskell이 중단됩니다. 그러나 용감한 시도.
Jeff Burka

nub$filter(\x->x==2012||x==2012)(2012:[2012])Haskell 솔루션에 안전 하다고 생각 합니다.
Jeff Burka

나는 use English펄을 잊어 버렸습니다 . 문자열로 전환하는 것을 포함하여 Haskell에 대해 몇 가지 수정 사항이 작동한다고 생각합니다.
Jeff Burdges

1
Perl 솔루션은 여전히 ​​매우 취약합니다. (테스트하는 동안 발견 그것을 깰 수있는 몇 가지 방법 내 자신의 대답 ) 교체 포함 print하여 *rint, prin:, p:int또는 #rint, 붙이는 =첫 번째 줄에, 또는 교체 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-흠 :)
코더

1
@ Vilx- "과업은"2012 년을 출력하는 좋아하는 언어로 프로그램을 작성하는 것 "입니다. 2012 년 이후에는 어디에서 작동해야합니까? :)
코더

1
@TheCoder 좋아, 이제 -사이에 내를 삽입 할 것인가? 복근. ;-)
Gareth

0

루비 ( 57 36)

편집 하고 36 문자로 다른 하나.

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

빼기 일이 더 이상 작동하지 않기 때문에 문자열 사용은 꽤 안전합니다.


EDIT 다음 시도 (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 7:10에

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;.
streetster

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은 die (3.
Stanislav Yaglo

네가 옳아. 내 잘못이야. 검색 계속 ...
Vilx-

PHP 5.3.3 — 또한 정확합니다. die ()는 문자열 만 출력하고 숫자는 출력하지 않습니다.
Stanislav Yaglo

잠깐, DUH, 찾았습니다! 로 변경 ."2012"하십시오 ."FAIL". :)
Vilx-

0

그루비 : 26

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

나는 Groovy를 많이 모르지만 이것이 효과가 있습니까? x=2012;print x^2012?2012:-x
Vilx-

무엇 -입니까?
Armand

@Alison -더 이상 작동하지 않도록 한 문자로 코드를 작성하고 수정하는 것입니다.
Gareth

1
x=2012;print x^=2012?2012:x(변경 ^^=0으로 출력을 변경)
histocrat

0

루아

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.