νƒœκ·Έ 보관물: code-challenge

code-challenge

ν”„λΌμž„ 얼간이 저격 νŒ¨ν„΄ currentIndex

일년 쀑 κ°€μž₯ κΈ΄ λ‚ -μ—¬κΈ° μ—¬λΆ„μ˜ μ‹œκ°„μ„ λ‚­λΉ„ν•˜λŠ” 것이 μžˆμŠ΅λ‹ˆλ‹€ …


κ°œμš”

이것은 인기 κ²½μ—° λŒ€νšŒκ°€ μ•„λ‹ˆλ©° κ·Έλž˜ν”½ 좜λ ₯ λ¬Έμ œκ°€ μ•„λ‹™λ‹ˆλ‹€. 65,536 개의 0κ³Ό 1의 λ¬Έμžμ—΄ 만 좜λ ₯ν•˜λ©΄λ©λ‹ˆλ‹€. 질문 ν•˜λ‹¨μ˜ μŠ€νƒ 슀 λ‹ˆνŽ«μ€ 이것을 256 x 256 흑백 μ΄λ―Έμ§€λ‘œ ν‘œμ‹œν•˜κ³  곡식 점수λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ 이미지λ₯Ό μ €μž₯ν•˜κ³  μ½”λ“œμ™€ ν•¨κ»˜ 닡변에 μ—…λ‘œλ“œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ (λ¬Έμžμ—΄ 좜λ ₯이 30,000 자의 μŠ€νƒ κ΅ν™˜ 닡변에 λ§žμ§€ μ•ŠκΈ° λ•Œλ¬Έμ—).


채점

μ΄λ―Έμ§€μ˜ μ μˆ˜λŠ” κ°œλ³„ ν”½μ…€μ˜ 점수의 ν•©κ³„μž…λ‹ˆλ‹€. κ°œλ³„ ν”½μ…€μ˜ μ μˆ˜λŠ” 각 μ˜μ—­ 점수의 ν•© λΉ„ 직ꡐ , ν”„λΌμž„ 거리 의 ν”½μ…€ 만 λ°˜λŒ€ 색상 νšλ“λ˜λŠ” ν™”μ†Œ. μ΄λŸ¬ν•œ 각 ν™”μ†Œμ— λŒ€ν•œ λΆ€λΆ„ μ μˆ˜λŠ” 1/pμ—¬κΈ°μ„œ pν”„λΌμž„ 거리이닀.

이 질문의 λ§₯λ½μ—μ„œ μš©μ–΄λŠ” λ‹€μŒκ³Ό 같은 μ •μ˜λ₯Ό κ°–μŠ΅λ‹ˆλ‹€.

  • λΉ„ 직ꡐ : 픽셀이 같은 행에 μžˆμ§€ μ•Šκ³  같은 열에 μžˆμ§€ μ•ŠμœΌλ©΄ 픽셀이 μŠ€μ½”μ–΄λ§λ˜λŠ” ν”½μ…€κ³Ό μ§κ΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • ν”„λΌμž„ 거리 : 픽셀이 μ •ν™•ν•˜κ²Œ μ†Œμˆ˜ μΈμœ ν΄λ¦¬λ“œ 거리둜 뢄리 된 경우 픽셀은 μŠ€μ½”μ–΄λ§λ˜λŠ” ν”½μ…€κ³Ό ν”„λΌμž„ 거리에 μžˆμŠ΅λ‹ˆλ‹€. 특히, κ±°λ¦¬λŠ” ν™˜μƒμ μœΌλ‘œ μΈ‘μ • 된 μ΅œμ†Œ κ±°λ¦¬μž…λ‹ˆλ‹€. μ™Όμͺ½ μœ„ 픽셀은sqrt(2)였λ₯Έμͺ½ μ•„λž˜ν”½μ…€κ³Όμ˜ κ±°λ¦¬μž…λ‹ˆλ‹€(λͺ¨λ“  4 개의 κ°€μž₯자리 랩).

  • λ°˜λŒ€ 색상 : ν”½μ…€μ˜ 값이 1 인 경우 μŠ€μ½”μ–΄λ§λ˜λŠ” ν”½μ…€κ³Ό λ°˜λŒ€ μƒ‰μƒμž…λ‹ˆλ‹€. 즉, 첫 λ²ˆμ§ΈλŠ” 0이고 두 λ²ˆμ§ΈλŠ” 1μ΄κ±°λ‚˜ 첫 λ²ˆμ§ΈλŠ” 1이고 두 λ²ˆμ§ΈλŠ” 0μž…λ‹ˆλ‹€.

μŠ€νƒ 슀 λ‹ˆνŽ«μ—λŠ” μ΄λ―Έμ§€μ˜ 점수λ₯Ό λ§€κΈ°λŠ” 방법을 λ³΄μ—¬μ£ΌλŠ” 예제 μ½”λ“œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ§€λ§Œ μ΅œμ ν™” λ˜λŠ” 효율적인 μ ‘κ·Ό 방법은 ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©° μ½”λ“œ 만 μˆ˜μ •ν•˜λ©΄ μ΅œμ’… μ΄λ―Έμ§€μ˜ 점수λ₯Ό μΌκ΄€λ˜κ²Œ μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œμ˜ λ‚΄μš©μ΄ μ •ν™•ν•˜μ§€ μ•Šμ€ 경우 μ˜κ²¬μ΄λ‚˜ μ±„νŒ…μœΌλ‘œ μ•Œλ €μ£Όμ‹­μ‹œμ˜€ .

JavaScript 가이 νŠΉμ • 도전 에 λŒ€λ‹΅ ν•˜κΈ°μœ„ν•œ μ΅œμƒμ˜ μ–Έμ–΄ 일 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€ . Snippet μ½”λ“œλŠ” μ˜λ„μ μœΌλ‘œ 더 λΉ λ₯Έ μ ‘κ·Ό 방식에 λŒ€ν•œ λ‹¨μ„œλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄ λ‹΅λ³€μ—μ„œ 이미 μž…μ¦ 된 νš¨μœ¨μ„± 만 μ†Œκ°œ ν•  κ²ƒμž…λ‹ˆλ‹€.


심상

μŠ€μ½”μ–΄λ§ ν”½μ…€

μŠ€μ½”μ–΄λ§ ν”½μ…€μ˜ 뢄포에 λŒ€ν•œ 직관적 인 λŠλ‚Œμ„μ£ΌκΈ° μœ„ν•΄, μ—¬κΈ° (보라색)λŠ” 256 x 256 μ΄λ―Έμ§€μ˜ ν”½μ…€ (128, 128)에 λŒ€ν•œ λΉ„ 직ꡐ μ£Όμš” 거리 ν”½μ…€μž…λ‹ˆλ‹€.

λΉ„ 직ꡐ μ£Όμš” 거리 뢄포 이미지


μž„μ˜μ˜ 이미지

이 μ˜ˆμ œλŠ” Python 3 λ‹΅λ³€ μ˜ˆμ œμ—μ„œ μž„μ˜λ‘œ 생성 된 μ΄λ―Έμ§€μž…λ‹ˆλ‹€. 그것은 138,267.64의 점수λ₯Ό κ°€μ§€κ³  있으며 λ‹Ήμ‹ μ—κ²Œ 이길 수 μžˆμŠ΅λ‹ˆλ‹€.


μž…λ ₯

μ½”λ“œλŠ” μž…λ ₯이 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ‚°μΆœ

이 μ½”λ“œλŠ” 흑백 256 x 256 μ΄λ―Έμ§€μ˜ 픽셀을 λ‚˜νƒ€λ‚΄λŠ” 65,536 개의 0κ³Ό 1의 λ¬Έμžμ—΄μ„ 좜λ ₯ν•΄μ•Όν•©λ‹ˆλ‹€. μˆ«μžλŠ” ꡬ뢄 κΈ°ν˜Έκ°€μ—†λŠ” 연속 λ¬Έμžμ—΄μ΄μ–΄μ•Όν•©λ‹ˆλ‹€. 파일둜 좜λ ₯ν•˜λ©΄ 볡사 및 λΆ™μ—¬ λ„£κΈ°κ°€ 더 μ‰¬μšΈ 수 μžˆμ§€λ§Œ μ΄λŠ” μ‚¬μš©μžμ—κ²Œ 달렀 μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμžμ—΄μ„ λ³΅μ‚¬ν•˜μ—¬ μŠ€νƒ 슀 λ‹ˆνŽ«μ— λΆ™μ—¬ 넣을 수 있으면 μ½”λ“œμ—μ„œ μœ μš©ν•œ λ‹€λ₯Έ 정보λ₯Ό 좜λ ₯ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ°€μž₯ 쒋은 λ¬Έμžμ—΄μ„ νŒŒμΌμ— 좜λ ₯ν•˜κ³  κ°€μž₯ 쒋은 μŠ€μ½”μ–΄λ₯Ό μ •κΈ°μ μœΌλ‘œ STDOUT에 좜λ ₯ν•˜μ—¬ μ‚¬μš©μžκ°€ 검색을 쀑지 ν• μ‹œκΈ°λ₯Ό 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.


μŠ€νƒ 슀 λ‹ˆνŽ«

Sp3000 μ—μ„œ μ§€μ ν–ˆλ“―μ΄ 슀 λ‹ˆνŽ«μ€ 점수λ₯Ό κ³„μ‚°ν•˜λŠ” 데 10 뢄이 걸렸으며 , μ˜λ„μ μœΌλ‘œ λΉ„νš¨μœ¨μ  인 μ°Έμ‘° κ΅¬ν˜„μ˜ κ²½μš°μ—λ„ λ„ˆλ¬΄ λŠλ¦½λ‹ˆλ‹€. Sp3000μ—μ„œ μŠ€μ½”μ–΄λ§μ„μœ„ν•œ ν”½μ…€ μ˜€ν”„μ…‹ 사전 κ³„μ‚°μ˜ κ°œμ„  μ œμ•ˆμ„ νŽΈμ§‘ν–ˆμœΌλ©° 이제 μŠ€μ½”μ–΄λ₯Ό κ³„μ‚°ν•˜λŠ” 데 λͺ‡ μ΄ˆκ°€ κ±Έλ¦½λ‹ˆλ‹€.

canvas = document.getElementById('canvas')
ctx = canvas.getContext('2d')
scoreArea = document.getElementById('scoreArea')
pastedData = document.getElementById('pastedData')
timeout = 0

primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499]

primesSquared = []
for (i=0; i<primes.length; i++) {
    primesSquared.push(primes[i] * primes[i])
}

width = canvas.width
height = canvas.height
area = width * height

scoringFilter = calculateScoringFilter()

function calculateScore() {
    var percentage = Math.floor(currentIndex / 65536 * 10000) / 100
    scoreArea.value = 'Calculating:' + percentage + '%'
    for (var t=0; t<1000; t++) {
        if (currentIndex < 65536) {
            partialScore += pixelScore(currentIndex)
            currentIndex += 1
        } else {
            scoreArea.value = 'Score: ' + partialScore
            return
        }
    }

    timeout = setTimeout(calculateScore, 10)
}

function pixelScore(i) {
    var score = 0
    var x = i % width
    var y = Math.floor(i / width)
    var a, b, xd, yd, j, k, d, m
    for (k=0; k<scoringFilter.length; k++) {
        bundle = scoringFilter[k]
        m = bundle[0]
        a = m % width
        b = Math.floor(m / width)
        j = ((x+a) % width) + width * ((y+b) % height)
        d = bundle[1]
        score += Math.abs(pixels[i] - pixels[j]) / d
    }
    return score
}

function display(pixels) {
    for (var i=0; i<area; i++) {
        ctx.fillStyle = pixels[i] ? 'white' : 'black'
        ctx.fillRect(i % width, Math.floor(i / width), 1, 1)
    }
}

function stop() {
    clearTimeout(timeout)
    scoreArea.value = 'Calculation cancelled.'
}

function isPrimeSquared(n) {
    return primesSquared.indexOf(n) > -1
}

function applyToImage() {
    var potentialPixels = []
    var pastedString = pastedData.value
    if (pastedString.length !== 65536) {
        scoreArea.value = 'Incorrect length:' + pastedString.length
        return
    }
    var i, digit
    for (i=0; i<pastedString.length; i++) {
        digit = pastedString.substring(i, i + 1)
        if (digit === '0') {
            potentialPixels.push(0)
        } else if (digit === '1') {
            potentialPixels.push(1)
        } else {
            scoreArea.value = 'Invalid character ' + i + ':' + digit
            return
        }
    }
    pixels = potentialPixels
    display(pixels)
    scoreArea.value = 'Calculating score...'
    partialScore = 0
    currentIndex = 0

    timeout = setTimeout(calculateScore, 10)
}

function calculateScoringFilter() {
    var scoringFilter = []
    var i, x, y, xd, yd
    for (i=0; i<area; i++) {
        x = i % width
        y = Math.floor(i / width)
        xd = Math.min(x,(-x+width)%width)
        yd = Math.min(y,(-y+height)%height)
        dSquared = xd*xd + yd*yd
        if (xd && yd && isPrimeSquared(dSquared)) {
            d = Math.sqrt(dSquared)
            scoringFilter.push([i, d])
        }
    }
    return scoringFilter
}
<canvas id='canvas' width='256' height='256'></canvas>
<br>
<input id='scoreArea' rows='1' readonly></input>
<br>
<button onclick='applyToImage()'>Apply string to image</button>
<button onclick='stop()'>Stop</button>
<br>
<br>
Paste in string of 65,536 zeroes and ones here:
<br>
<input id='pastedData'></input>

μžμ‹ μ˜ μ½”λ“œμ˜ μ‹œμž‘μ μœΌλ‘œ 좜λ ₯ λ˜λŠ” λ‹€λ₯Έ λ‹΅λ³€μ˜ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 지원 닡변에 λŒ€ν•œ ν¬λ ˆλ”§κ³Ό 링크λ₯Ό μ œκ³΅ν•΄μ•Όν•©λ‹ˆλ‹€. 이 μ§ˆλ¬Έμ— λŒ€ν•œ 닡변은 예제 λ‹΅λ³€μ΄λ‚˜ 질문의 β€‹β€‹μ½”λ“œλ₯Ό 가리지 μ•Šμ•„λ„λ©λ‹ˆλ‹€.

Nerd Sniping μ΄λΌλŠ” μš©μ–΄λ‘œ Randall Munroe의 ν¬λ ˆλ”§



λ‹΅λ³€

CJam, 276496.9062958626 점

2,128*_(]128*

거리가 2 인 직ꡐ가 μ•„λ‹Œ 쌍이 ​​없기 λ•Œλ¬Έμ— 거리가 ν™€μˆ˜ μ—¬μ•Όν•˜λ©° 거리도 μ œκ³±μž…λ‹ˆλ‹€. p 2 = x 2 + y 2 μ΄λ―€λ‘œ x와 y (제곱 μ—¬λΆ€) 쀑 ν•˜λ‚˜λŠ” ν™€μˆ˜ μ—¬μ•Όν•˜κ³  λ‹€λ₯Έ ν•˜λ‚˜λŠ” 짝수 μ—¬μ•Όν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 점은이 μ΄λ―Έμ§€μ—μ„œ 항상 λ°˜λŒ€ μƒ‰μƒμž…λ‹ˆλ‹€.

이것과 κ·Έκ²ƒμ˜ 뢀정적인 κ²ƒλ§Œμ΄ μœ μΌν•œ 졜적의 μ†”λ£¨μ…˜μž…λ‹ˆλ‹€. 졜적의 μ†”λ£¨μ…˜μ—μ„œ μ§κ΅ν•˜μ§€ μ•Šμ€ κΈ°λ³Έ 거리 ν”½μ…€μ˜ 색상은 λ™μΌν•˜μ§€ μ•Šμ•„μ•Όν•©λ‹ˆλ‹€. (3,4) 및 (4,3)κ³Ό 같이 λŒ€κ°μ„ μœΌλ‘œ μΈμ ‘ν•œ λ°˜λŒ€ 픽셀이 μžˆμŠ΅λ‹ˆλ‹€. λ°˜λŒ€ 색상 λ“±μ˜ 픽셀을 μ±„μ›€μœΌλ‘œμ¨ 같은 μƒ‰μƒμ˜ λŒ€κ°μ„ μ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€κ°μ„ μ˜ 각 ν”½μ…€μ—μ„œ μ‹œμž‘ν•˜μ—¬ λͺ¨λ“  λŒ€κ° λŒ€κ°μ„ μ„ 같은 λ°©μ‹μœΌλ‘œ μ±„μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. 그것듀은 λ‘˜λŸ¬ μ‹Έμ—¬ μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ κ·Έλž˜λ„ μ΅œμ μž…λ‹ˆλ‹€.


λ‹΅λ³€

Python 3, 138267.64 점

이것은 ν•„μš”ν•œ κ²ƒμ˜ μ˜ˆμ™€ μ΄κΈΈλ§Œν•œ μ΅œμ†Œν•œμ˜ λŒ€λ‹΅μž…λ‹ˆλ‹€ …

그것은 포함

  • μ–Έμ–΄ 이름.
  • 질문의 μŠ€νƒ 슀 λ‹ˆνŽ« μ μˆ˜μž…λ‹ˆλ‹€.
  • 이미지가 μŠ€νƒ 슀 λ‹ˆνŽ«μ—μ„œ μ €μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • 이 μ½”λ“œλŠ” 65,536 개의 0κ³Ό 1의 λ¬Έμžμ—΄μ„ μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

μ‚°μΆœ

μ•”ν˜Έ

from random import random

output_string = ''
filename = '65536digits.txt'

for t in range(65536):
    digit = int(random() * 2)
    output_string += str(digit)

with open(filename, 'w') as output_file:
    output_file.write(output_string)

이것은 단지 μ˜ˆμΌλΏμž…λ‹ˆλ‹€. 파이썬이 λ°˜λ“œμ‹œμ΄ νŠΉμ • 도전에 λŒ€ν•œ 경쟁적인 닡변에 κ°€μž₯ μ ν•©ν•œ μ–Έμ–΄λŠ” μ•„λ‹™λ‹ˆλ‹€.


λ‹΅λ³€