왜곡 된 전화 번호


19

음성 메일 메시지를받는 방법을 알고 있고 사람의 연결 상태가 좋지 않았으며 다시 전화를 거는 방법을 찾으려고했지만 "5"인지 "8"인지 확실하지 않습니다. 말했다?

이것이이 도전입니다.

좋은 소식은 발신자가 자신의 번호를 두 번 읽었지만 두 곳에서 모두 깨 졌다는 것입니다.

프로그램은 다음과 같이 입력해야합니다.

5551231234 / 5551231234

처음 10 자리 숫자는 처음으로 전화 번호가 음성 메일로 표시되고 두 번째 세트는 두 번째로 표시됩니다. 오직 ... 이것은 다음과 같이 보일 것입니다 :

555?ABC1_36? / 55?522_1?234
  • 숫자 다음에 물음표가 표시되면 해당 숫자에 대한 최상의 추측임을 나타냅니다 (예 : "5?"는 "아마도 5, 반복과 비교"를 의미 함).
  • 밑줄은 누락 된 알려진 숫자를 나타내며 정적으로 너무 퍼지되어 해독 할 수 없습니다.
  • 글자는 바로 그 것입니다 : 글자. 그것들을 각각의 숫자로 취급하십시오
    • ABC-> 2, DEF-> 3, GHI-> 4, JKL-> 5, MNO-> 6, PQRS-> 7, TUV-> 8, WXYZ-> 9
    • 모든 샘플 입력은 대문자를 사용합니다 (ToUpper () 호출을 안전하게 생략 할 수 있음)
    • 언어가 소문자로 더 잘 작동하면 입력에 소문자를 자유롭게 사용하고 ToLower () 호출을 생략 할 수 있습니다. 답에 유의하십시오.

다음과 같은 판단 요청을 추가로 가정 할 수 있습니다.

5? / _     -> 5  //5 is the best guess we have, use it
5? / 5?    -> 5  //uncertain, but matching
5? / 4?    -> ?  //conflict
 5 / 4     -> ?  //conflict
5? / 4     -> 4  //solid information overrides possible value
 5 / 4?    -> 5  //solid information overrides possible value
 _ / _     -> ?  //no information available

또한 모든 입력에 물음표를 제외한 10 자리 전화 번호가 포함되어 있다고 가정 할 수 있습니다. 10 자리가 아닌 입력 (예 1234567 / 1234567:)은 해결할 수없는 것으로 취급되거나 (잘못된 출력) 오류가 발생할 수 있습니다.

입력

0-9A-Z _?/위에서 설명한대로 한 줄의 문자

산출

유효한 10 자리 전화 번호로 구문 분석 할 수 있으면 전화 번호를 출력하십시오. 그렇지 않으면 어떤 형태의 오류 표시 (예 : -1, false 또는 빈 줄)를 출력합니다.

평소대로 가장 짧은 승리.

샘플 입력 :

1234567890 / 1234567890
1234567890? / 1234567890
123456789_ / 1234567890
1234567890? / 123456789_
1234567890 / 1234567890?
1234567890 / 123456789_
123456789_ / 1234567890?
1234567890? / 1234567890?
1234567890? / 1234567891?
123456789_ / 123456789_
555CALLUS1 / 5552255871
404_12?6039 / 4041?1560_9
_GETREVENGE / 16?36?_2838_
1?691460_50 / 16_14609?50
61?08977211 / 612?897725?1
40?0INSTA__ / 8?00_NSTI?LL
3985_534?10 / 39?8?5053_10
7__7294?737 / 7797299?_37
28?897_384?1 / _8?89763861
271168090_ / 27116800?09
6802?148343 / 67?01148343
94_11628?2?6? / 9491162_47?
17?4285_689 / 1__26?52689
6_311?95_38 / 6731194?7?38
380?7DRAGON / 3807378?5?66
4?647_93236 / 5646?6?9__36
365?268898_ / 366267?7?984
GRATEDBATE / IRATEDBATE
5307_079?93 / ____8_____
535_3_0255 / 52?5_3_024?5
55_____088 / 54?2397207?7?
6_48398_95 / _946?398?6_5?
_0_312_3_1 / 81?53123?1?71
____1_____ / 64?255?508?61
8427820607 / 6?424?8?__6?07
50_3707__6 / 52?8375?74?56
615___8255 / 62?526?983?2?1?
__652618__ / 8365261__0
149___933_ / 1_9677?92?31
___7?281562 / 3438?28154?2
5?7?7?___8?3?7?4 / 57_855837_
605_272481 / 605427__81
86?569__731 / 88560?0?7721
1__91654?15 / 17?9?9165715
800NWABODE / 80069ABI?DE
8___9017_0 / 8_2494?12?9_
_024?5?91?470 / 304?17908?7_
42510704_2 / 4_51070492
9338737_89 / 93_873PLUS
327762_401 / 327_MASH01
33093_2058 / 3309_12058
4061_33578 / 40619_3578
559_383197 / 559938_197
94_9746084 / 9459746_84
1_37655238 / 163POLKA_T
_672FRIZZY / 767237499_
8_76318872 / TIP63188_2
51_8404321 / 5178404_21
358_030314 / 358603_314
2597_85802 / 25979_5802
77141_1408 / 7714_91408
330858_457 / 330_586457
4686079_39 / 46_6079239
86457508_6 / 8_45750826
523226626_ / _23BANNANA
_ISSY_ISSY / 44__9548?79?
6?00B_YJILT / 800289KILL?
2?52803___0 / 1526?0390?61?
FI?ND___T?HE / EAS?T?EREGGS?
0_231?95_38 / 0723194?7?38
0?647_39236 / 0646?6?3__36
025?267798_ / 06?6265?9?984
0061_33578 / _0619_3578

나는 가능한 모든 엣지 케이스 (처음 11 개 항목)가 보장된다는 것을 확신했지만 그 외에는 거의 무작위입니다.

최신 정보

맨 아래에 4 개의 항목이 선행 0으로 추가되었습니다 (Jonathan Allan의 제안에 따라).

샘플 입력에 대한 올바른 출력 :

https://pastebin.com/gbCnRdLV

Jonathan Allan 항목 의 출력을 기반으로합니다 (형식화 된 출력이 이상적임).


입력을에 의해 분리 된 단일 문자열로 가져와야 " / "합니까 아니면 두 개의 표준 입력으로 사용할 수 있습니까?
L3viathan

@ L3via 나는 원래 단일 문자열을 가져야한다고 생각했습니다.
Draco18s

7
@ Draco18s 단일 문자열은 도전에 아무것도 가져 오지 않습니다
fəˈnɛtɪk

1
@ fəˈnɛtɪk 아무도 샌드 박스에 아무 말도하지 않았지만, 입력 쌍 사용하는 것에 반대 하는 것은 없습니다 . 제가 처음에 생각한 방식이었습니다.
Draco18s

1
누가 전화 번호로 문자를 사용하여 음성 메일을 남기나요?!
Jonathan Allan

답변:


3

젤리 , 84 바이트

+4 바이트-모든 경우에 동일하게 작동해야한다고 생각하므로 키패드 조회 정수를을 사용하여 숫자 문자로 다시 변환했습니다 +49Ọ.

”?e‘ḣ@µ”_eḤ‘ẋ@
;Ṃµ68DṬ+3RØAṁẇ@€FT+49Ọȯµ€Fṡ2i”?Ḃ$ÐḟÇ€
ḟ⁶ṣ”/Ç€ZLÐṂ€Q€LỊ$ÐfF€Ḣ€ḟ”_µL⁼⁵ȧ

지정된 형식으로 문자열을 가져와 전화 번호를 문자 목록으로 반환하거나 유효하지 않은 경우 0을 반환하는 함수입니다. 프로그램으로서 이것은 마치 문자열 인 것처럼 인쇄됩니다.

작동 방식으로 숫자를 여러 번 반복 할 수 있습니다
(예 :"123456789_ / 123456789_ / 1234567890" )
... 심지어 한 번만 말을하고, 정의 된 로직이 적용됩니다.

온라인으로 사용해보십시오! 또는 참조 모든 샘플 입력을 .

어떻게?

”?e‘ḣ@µ”_eḤ‘ẋ@ - Link 1, helper to vary the length of a 2-slice: list s
”?             - literal '?'
  e            - exists in s                   (1 or 0)
   ‘           - increment                     (2 or 1)
    ḣ@         - head with reversed @rguments  (s or s[:1] - removes 2nd value if not '?')
      µ        - monadic chain separation, call that t
       ”_      - literal '_'
         e     - exists in t                   (1 or 0)
          Ḥ    - double                        (2 or 0)
           ‘   - increment                     (3 or 1)
            ẋ@ - repeat t that many times      (t*3 or t - [`_`]->['_','_','_'])

;Ṃµ68DṬ+3RØAṁẇ@€FT+49Ọȯµ€Fṡ2i”?Ḃ$ÐḟÇ€ - Link 2, reformat a phone number: char list of [0-9][A-Z], p
;                                     - concatenate p with
 Ṃ                                    - minimum of p - (?<_<0<1<...<9<A<...<Z - never "?" however, since it only follows a digit.)
                                      -   - this is simply to make a 2-slice with the last character on the left, as used at the very end of this link.
  µ                                   - monadic chain separation call that q
                       µ€             - monadic chain separation, for €ach v in q do:
   68                                 -   literal 68
     D                                -   cast to a decimal list -  [6,8]
      Ṭ                               -   untruth                -  [0,0,0,0,0,1,0,1]
       +3                             -   add 3                  -  [3,3,3,3,3,4,3,4]
         R                            -   range                  -  [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3,4],[1,2,3],[1,2,34]]
          ØA                          -   uppercase alphabet     -  ABCDEFGHIJKLMNOPQRSTUVWXYZ
            ṁ                         -   mould like the range ^ -  [ABC,DEF,GHI,JKL,MNO,PQRS,TUV,WXYZ]
             ẇ@€                      -   sublist v exists in that? for €ach, with reversed @rguments
                F                     -   flatten        (e.g. 'E' -> [0,1,0,0,0,0,0,0]; '4' -> [0,0,0,0,0,0,0,0]
                 T                    -   truthy indexes (e.g. 'E' -> [2]; '4' -> [])
                  +49                 - add 49
                     Ọ                - cast to character
                      ȯ               -   or             (e.g. 'E' -> [3]; '4' -> '4')
                         F           - flatten
                          ṡ2          - all slices of length 2
                                 Ðḟ   - filter discard if:
                                $     -   last two links as a monad:
                            i         -     first index of
                             ”?       -     literal '?'   (first index returns 0 if none exists)
                               Ḃ      -   mod 2 (so this filter discards pairs starting with '?')
                                   Ç€ - call the last link (1) as a monad for €ach slice

ḟ⁶ṣ”/Ç€ZLÐṂ€Q€LỊ$ÐfF€Ḣ€ḟ”_µL⁼⁵ȧ - Main link: string (or char list) s
ḟ                               - filter discard any:
 ⁶                              - literal ' '
  ṣ                             - split on:
   ”/                           - literal '/'
     Ç€                         - call the last link (2) as a monad for €ach
       Z                        - transpose
         ÐṂ€                    - filter, for €ach, keep items with minimal:
        L                       -   length
            Q€                  - de-duplicate €ach
                 Ðf             - filter keep items with:
                $               - last two links as a monad:
              L                 -   length
               Ị                -   insignificant? (=1 effectively here)
                   F€           - flatten €ach
                     Ḣ€         - head €ach
                       ḟ        - filter discard any of:
                        ”_      -   literal '_'
                          µ     - monadic chain separation, call that r
                           L    - length(r)
                             ⁵  - literal 10
                            ⁼   - equal?
                              ȧ - and r (0 if r did not result in a 10-digit list, else r)

오류가있는 55_____088 / 54?2397207?7?5523972088같습니다. 해결해야합니다 : 모든 누락 된 숫자가 있고 오른쪽의 불확실한 숫자가 왼쪽에 있습니다. 모든 단순한 경우가 실행됩니다.
Draco18s

아, 중복 필터라고 생각한 것을 제거했습니다. 고치기 ...
Jonathan Allan

전에 가봤는데 골프가 아니 었습니다! ;)
Draco18s

Ooof는 시간이 걸렸습니다 (테스트하는 동안 다른 버그를 발견했습니다). 고정 할 때 필터를 다시 추가하는 것과 동일한 바이트 수로 되돌 렸습니다 (허우).
Jonathan Allan

@ Draco18s-모든 것이 좋아 보이나요? 문제의 테스트 사례에 대한 예상 결과를 제공하거나 유효하지 않은 사례를 분리하는 것이 좋습니다.
Jonathan Allan

7

파이썬 2 , 314 307 274 바이트

lambda s:g(*''.join(q<n<"["and`(int(n,36)-4-(n>"R")-(n>"Y"))//3`or n for n in s).split(" / "))
def g(a,b,s=str.startswith):
 if b:c,d,e,f=a[0],a[1:],b[0],b[1:];b=(c==e and[c,q][c=="_"]or"_"in c+e and min(c,e)or[q,c,e][s(f,q)-s(d,q)])+g(d[s(d,q):],f[s(f,q):])
 return b
q="?"

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


5

파이썬 3 549 530 509 453 449 410 406 394 393 391 바이트

이것이 향상 될 수 있다고 확신하지만 시작입니다.

def f(e,z,q="?",u=str.isnumeric):
 if e+z in(e,z):return""
 o,O,t,T,*x=e[0],e[1:2],z[0],z[1:2],e[1:],z[1:]
 if"?"in o+t:return f([e,x[0]][o==q],z)
 if u(o):
  if u(t):return t+f(*x)if O==q!=T else o+f(*x)if o==t or T==q!=O else 1
  return o+f(*x)
 if u(t):return t+f(*x)
def g(s):
 for a,b in zip(map(chr,range(65,91)),"2223334445556667777888999"):s=s.replace(a,b)
 return f(*s.split(" / "))

나는 str.translate글자와 래퍼 기능을 사용하고 있습니다.g 를 사용하여 원하는 형식으로 입력합니다. 실제 기능 f은 재귀 적이며 모호한 입력에 대해서는 실패합니다. 그래도 여전히 많은 회개가 있기 때문에 개선의 여지가 많이 있다고 확신합니다.

개량:

  • 조건을 결합하여 19 바이트 절약
  • 삼항으로 21 바이트 저장
  • @TuukkaX 덕분에 수동 사전 대신 사전 이해를 사용하여 56 바이트를 절약했습니다.
  • @TuukkaX의 개선과 함께 @ovs가 제안한 방법으로 전환하여 4 바이트를 절약했습니다.
  • @ovs의 개선으로 38 바이트를 절약했습니다 (그리고 마지막으로 제거 가능한 공백은 제거되었습니다)
  • str.isnumeric키워드 인수 에 정의 하여 4 바이트를 절약 했습니다.
  • 결합 비교 연산자와 12 바이트를 저장 (예를 T==q!=O)
  • 로 전환 not(e or z)하여 1 바이트를 저장 했습니다 e+z in(e,z).
  • 자주 사용하는 것을 저장하여 2 바이트 절약 (E,Z)

여기에는 맨 위 행 기본값을 포함하지 않는 사전 이해가 포함됩니다. 나는 3의 시퀀스를 싫어하지만 수학으로 대체 될 수 있습니다.
Yytsi


@ovs 니스. 알파벳은 변경할 수 있습니다 map(chr,range(65,91)).
Yytsi

2
RE : 평판을 포기하기 위해 커뮤니티 위키를 만들면 , 컨센서스는 아니오 이며, 친절한 도움을 받아들이고, 당신과 같은 신용을 얻습니다 .
Jonathan Allan

1
나는 여기에 다시 올 때마다이 답변이 짧아
진다고

3

자바 스크립트 (ES6) 180 190 188 바이트

편집 : 허위 출력 규칙을 준수하기 위해 +10 +9 바이트


카레 구문에서 두 개의 입력 문자열을 사용합니다 (a)(b). false추측 한 전화 번호를 나타내는 문자열 또는 하나를 반환합니다 .

a=>b=>!(s=(F=a=>a.match(/(.\??)|_/g).map(([x,y])=>(x<=9?++x:parseInt(x,36)*.32-(x>'Y'))|(x!='_'&!y)*16))(a).map((x,i)=>(x=(d=x^(y=F(b)[i]),x>y)?x:y)&&(d&16|!(d%x))?--x&15:a).join``)[10]&&s

작동 원리

1 단계-입력 문자열 파싱

먼저 F()다음 규칙을 적용하여 문자열을 정수 배열로 변환하는 함수를 정의합니다 .

  • 밑줄은 0 으로 변환됩니다
  • 숫자 N 또는 동등한 문자가 (N + 1) 또는 16으로 변환 됨 (예 : "2"→ 19, "R"→ 24)
  • 숫자 N 또는 이에 상응하는 문자 다음에 질문 마크가 N + 1 로 변환됩니다 (예 : "2?"→ 3, "R?"→ 8)

다음과 같이 다른 방법으로 해석 할 수 있습니다.

  • 0 알 수 없음
  • [ 1 .. 10 ]신뢰할 수 없음
  • [ 17 .. 26 ]신뢰할 수 있음

F()에 모두 적용 됩니다 . 이것은 두 가지 가능한 해석에 해당하는 전화 번호의 각 숫자에 대해 정수 쌍 (x, y) 을 제공합니다.ab

2 단계-숫자 추측

각 쌍 (x, y) 에 대해 다음을 계산합니다.

  • d = x XOR y
  • x = MAX (x, y) 신뢰할 수없는 값보다 신뢰할 수있는 값을 항상 선호

경우 X == 0 , 그것은 모두 입력이 밑줄 것을 의미한다. 따라서이 경우 숫자를 알 수 없습니다.

경우 ! X = 0 다음 조건 중 하나에 해당하는 경우, 우리는 안전하게 자리를 추론 할 수 있습니다 :

condition       | interpretation
----------------+------------------------------------------------------
(d AND 16) != 0 | one input is unreliable and the other one is reliable
d == 0          | both inputs are identical
d == x          | one input is an underscore

마지막 두 조건을와 병합 할 수 있습니다 !(d % x). 따라서 최종 공식 :

x && (d & 16 || !(d % x))

참이면, (x-1) AND 15 를 계산하여 x 를 추측 한 자릿수로 다시 변환 합니다.

테스트 사례

(콘솔 스 니펫은 더 많은 출력 히스토리를 지원할 수 없으므로 처음 50 개만)


1234567890? / 1234567890?로 해결해야합니다 1234567890. 현재 코드 출력 123456789?은 입력보다 정보가 적습니다. Assume: 5? / 5? -> 5 //uncertain, but matching
Draco18s

@ Draco18s 내가 말한 것과 달리 51 개의 테스트 사례가 포함되었습니다 . 그래서 첫 번째 것이 떨어지고 모든 것이 한 줄씩 움직였습니다. (이제 수정되었습니다. 죄송합니다.)
Arnauld

아아 그럼에도 불구하고 테스트 사례에 대해 일종의 거짓 또는 오류 값을 출력해야합니다. 그러나 그렇지 않으면 좋아 보인다.
Draco18s

2

펄 5 , 211 바이트

... 들여 쓰기와 줄 바꿈없이

@i=map{y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/22233344455566677778889999/;$_}split' / ',shift;
print map{
  $_=join'',map{s,(\d\??|_),,;$1}@i;
  /((\d)\??\2\??|(\d)\??_|_(\d)\??|(\d)\d\?|\d\?(\d))$/;$2//$3//$4//$5//$6//'?'
}1..10

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


83652618?0일종의 잘못된 값이나 오류 값보다는 "최선"( )을 반환하는 것처럼 보입니다 .
Draco18s

내가 실수하지 않으면 퍼즐이 원하는 것입니다. "다음 판단 요청을 추가로 가정 할 수 있습니다"제목 아래의 사례를 확인하십시오. 아님?
Kjetil S.

죄송합니다. 답장을받지 못했습니다. 판단 요청에 대해 수행 한 섹션은 a ?를 사용 하여 누락 된 정보를 해결할 수있는 방법이 없음을 나타내며 출력 섹션으로 넘어갑니다....Otherwise output some form of error indication (e.g. -1, false, or an empty line).
Draco18s

2

망막 150 140 136 바이트

Kritixi Lithos 덕분에 몇 바이트 절약

T`?L`#22233344455566677778889
./.

(?<=(\d)(\w#?){9}).#|.#(?=(\w#?){9}(\d)(?!#))
$1$4
#

_(?=.{9}(.))|(?<=(.).{9})_
$1$2
^(\d*)\1$|.*
$1

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

설명:

첫 번째 줄 ?은 입력의 #모든 문자를 숫자 로 변환합니다 . 그런 다음 공백을 /입력에서 제거합니다 . 다음 두 줄은 "추측 대 확실성"사례를 처리합니다 (예 : 5? \ 4로 대체 됨 4 \ 4). 모두 제거한 후 #들, "번호 대와 라인 8 및 9 거래 _"의 경우는 ( _ \ 3이된다3 \ 3 ). 그런 다음 문자열의 양쪽이 일치하면 처음 10 자리를 유지합니다. 그렇지 않으면 전화 번호가 유효하지 않아 모든 것이 삭제됩니다.

임의 길이 (및 동일한 크기)의 전화 번호에 작동하는 대체 160 바이트 솔루션 : TIO


를 1 바이트를 저장 (/|_)하도록 변경할 수 있습니다 [/_]. 또한 당신이 사용할 수 있다고 생각 ;대신 x그 때문에 [^x]될 수 있습니다\w
Kritixi LITHOS

1

PHP, 251 236 바이트

for(;a&$c=preg_replace(["#[^_?](?!\?)#","#_#"],["$0k","?<"],join("-",$argv))[++$i];)${$k+="-"==$c}.=$c<_&$c>=A?0|(ord($c)-($c>W)-($c>P)-59)/3:$c;for(;$c=${1}[$k+1];)echo($n=${1}[$k])==($m=${2}[$k++])|($b=${2}[$k++])!=$c?$c>$b?$n:$m:"?";

명령 행에서 입력을받습니다. 온라인으로 실행 -nr하거나 사용해보십시오 .

고장

# A: transform input
                                    # 2. replace single chars with two-character chunk and make sortable:
                                    #   replace "_" with "?<", append "k" to everything else not followed by "?"
for(;a&$c=preg_replace(["#[^_?](?!\?)#","#_#"],["$0k","?<"],join("-",$argv))[++$i];)    # (unknown "<" < unsure "?" < certain "k")
${$k+="-"==$c}.=                # if "-", next argument
        $c<_&$c>=A              # if letter
            ?0|(ord($c)-($c>W)-($c>P)-59)/3 # then translate to digit
            :$c                             # else don´t
    ;
# B: evaluate
for(;$c=${1}[$k+1];)            # loop through arguments: $c=command 2
    echo
        ($n=${1}[$k])                   # $n=digit 2
        ==                          # if digits are equal
        ($m=${2}[$k++])                 # $m=digit 3
        |
        ($b=${2}[$k++])             # $b=command 3
        !=$c                        # or "commands" are not
            ?$c>$b?$n:$m            # then get the one with the more definitive "command"
            :"?"                    # else conflict/unknown
    ;

골프

  • preg_replace 첫 번째 : -8 바이트
  • join: -2
  • $$k대신 $t[$k]: -5

1

PHP, 200 + 8 바이트

Arnaulds 솔루션에서 영감을 얻었습니다 .

for($s=join($argv);$c=ord($s[$i++]);$i+=$x)$t[]=$c>90?63:15&($c<65?$c:($c-($c>80)-($c>87)-59)/3)|16*$x="?"==$s[$i];for(;$p++<10;)echo chr(($e=$t[$p]^$d=$t[$p+10])&48|!(15&$e)?min($t[$p],$d)&15|48:63);

명령 행 인수에서 입력을받습니다. 온라인으로 실행 -nr하거나 사용해보십시오 .

오류 출력 제한을 준수하도록 수정 : ( X불완전한 번호로 인쇄 ) :

  • 제거 |48(-3 바이트)
  • 교체 echo chr(...);$r.=...;echo$r>1e10?X:$r;(11 바이트)

고장

for($s=join($argv);$c=ord($s[$i++]);    # loop through characters of arguments
    $i+=$x)                             # skip "?"
$t[]=
    $c>90                               # if "_"
        ?63                             # then 32+16+15
        :                               # else
            15&(                            # lower 4 bits of
            $c<65                               # if digit
            ?$c                                 # then digit
            :($c-($c>80)-($c>87)-59)/3          # else letter mapped to digit
        )
        |16*$x="?"==$s[$i]                  # if next char is "?", add 16
;
for(;$p++<10;)echo chr( # loop through translated arguments
    (
        $e=$t[$p]^      # 2. $e=difference
        $d=$t[$p+10]    # 1. $d=char from 2nd argument
    )&48                # if certainties differ
    |!(15&$e)           #    or digits do not
    ?min($t[$p],$d)&15|48   # then pick the more definite digit (15|48 -> "?")
    :63             # else "?"
);

골프

  • 해결 preg_replace_callback(-10 바이트)
  • 10 자리 입력에 의존 (-9)
  • 그리고 추가 골프 (-8)
  • 분리 join문자 (-7)
  • $x과제를 끝 으로 이동 (-2)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.