태그 보관물: code-challenge

code-challenge

“우주를 여행 할 때…” Neptune | 24622

태양계에서 가장 큰 20 개의 물체 중 하나의 이름이 주어집니다. 당신의 임무는 반경의 근사치를 킬로미터 단위로 반환하는 것입니다.

이것은 점수 가 당신의 최악의 근사값을 기준으로 페널티 비율 곱한 코드 길이 (바이트)로 구성되는 입니다. 따라서 최저 점수가 이깁니다 .

1

“우리가 우주를 여행 할 때”는 검은 안식일에 의한 플래닛 캐러밴 의 마지막 줄이며 , 나중에 판테라에 의해 덮힌 다 .

태양계 물체

출처 : Wikipedia

주의 : 순위는 정보 제공만을위한 것입니다. 입력은 객체 의 이름 입니다.

  n | Object   | Radius (km)
----+----------+-------------
  1 | Sun      |   696342
  2 | Jupiter  |    69911
  3 | Saturn   |    58232
  4 | Uranus   |    25362
  5 | Neptune  |    24622
  6 | Earth    |     6371
  7 | Venus    |     6052
  8 | Mars     |     3390
  9 | Ganymede |     2634
 10 | Titan    |     2575
 11 | Mercury  |     2440
 12 | Callisto |     2410
 13 | Io       |     1822
 14 | Moon     |     1737
 15 | Europa   |     1561
 16 | Triton   |     1353
 17 | Pluto    |     1186
 18 | Eris     |     1163
 19 | Haumea   |      816
 20 | Titania  |      788

또는 복사하여 붙여 넣기하기 쉬운 목록으로 :

'Sun', 'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Earth', 'Venus', 'Mars', 'Ganymede', 'Titan', 'Mercury', 'Callisto', 'Io', 'Moon', 'Europa', 'Triton', 'Pluto', 'Eris', 'Haumea', 'Titania'
696342, 69911, 58232, 25362, 24622, 6371, 6052, 3390, 2634, 2575, 2440, 2410, 1822, 1737, 1561, 1353, 1186, 1163, 816, 788

너의 점수

하자 의 예상 반경 수 개체 및하자 이 객체에 대한 프로그램의 해답이 될 수.

Rn

nth

An

그런 다음 점수는 다음과 같이 정의됩니다.

S=L×max1i20(max(AiRi,RiAi)2)

여기서 은 코드 길이 (바이트)입니다.

L

예:

코드의 크기가 바이트이고 최악의 근사치가 대신 의 추정 반경으로 달에있는 경우 점수는 다음과 같습니다.

100

1000

1737

S=100×(17371000)2=302

낮을수록 좋습니다.

답변을위한 권장 헤더 :

Language, 100 bytes, score = 302

당신이 사용할 수있는 이 스크립트를 (일에서 티타니아에 첫 번째 줄 = 코드 길이, 향후 20 개 라인 = 당신의 출력) 점수를 계산합니다.

규칙

  • 소문자, 전체 대문자 또는 위에서 설명한대로 정확히 제목 (제목)으로 개체 이름을 사용할 수 있습니다. 다른 혼합 사례는 허용되지 않습니다.
  • 입력은 20 개의 가능한 이름 중 하나가 보장됩니다.
  • 정수 또는 부동 소수점을 반환 할 수 있습니다. 두 경우 모두 패널티는 이러한 값을 사용하여 직접 계산해야합니다 (부동의 경우 반올림 값이 아님).
  • 양수 값을 반환해야합니다.
  • 빈 프로그램은 허용되지 않습니다.


답변

PowerShell , 3 바이트, 3637

2e4

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

매우 순진하고 지루한 구현; 20000입력에 관계없이 반환합니다 . 태양을 특수하게 배치하거나 2모두 대신 부동 소수점 값을 사용하는 것과 같은 실험을 수행 하면 코드 길이가 크기 비교 이득을 상쇄하기에 충분하게 증가했기 때문에 점수가 떨어졌습니다.


답변

젤리 , 34 바이트, 점수 = 37

OḌ“⁸|5/!‘%ƒị“RNFLOJMjs⁽\u[USJ‘1.1*

입력은 대문자이며 출력은 최소 1.1의 거듭 제곱입니다.

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

작동 원리

OḌ“⁸|5/!‘%ƒị“RNFLOJMjs⁽\u[USJ‘1.1*  Main link. Argument: s (string)

O                                   Ordinal; map the char in s to their code points.
                                        "ERIS" -> [69,82,73,83]
 Ḍ                                  Undecimal; treat the result as an array of digits
                                    in base 10 and convert it to integer.
                                        [69,82,73,83] -> 69000+8200+730+83 = 78013
  “⁸|5/!‘                           Literal; yield [136, 124, 53, 47, 33].
         %ƒ                         Fold the array by modulus, using the computed
                                    integer as initial value.
                                        78013 -> 78013%136%124%53%47%33 = 32
            “RNFLOJMjs⁽\u[USJ‘      Literal; yield [82, 78, 70, 76, 79, 74, 77, ...
                                    106, 115, 141, 92, 117, 91, 85, 83, 74].
           ị                        Retrieve the element from the array to the right,
                                    at the index to the left.
                                    Indexing is 1-based and modular.
                                        32 = 16 (mod 16) -> 'J' = 74
                              1.1*  Raise 1.1 to the computed power.
                                        74 = 1.1**74 = 1156.268519450066


답변

Java (JDK) , 90 바이트, 점수 = 97

s->("ýCĄ (ᬺ!˂Fɍ".charAt(s.substring(2).chars().sum()%96%49%25)-7)*100

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

  • 이 항목은 표시 할 수없고 멀티 바이트 유니 코드 문자를 모두 사용합니다 (그러나 Java는이를 허용합니다). 정확한 코드는 TIO를 확인하십시오.
  • 입력은 제목 케이스 여야합니다.
  • 이 코드는 인코딩 할 때 마지막 두 자리를 건너 뛸 수 있고 값을 100으로 곱하여 근사 할 수 있도록 값을 최고 100의 배수 (때로는 위, 때로는 아래로)로 반올림합니다.
  • 이 항목은 다양한 해시를 사용하여 25 코드 포인트 문자열 (찾을 수있는 가장 짧은 문자열)에 맞습니다.

크레딧

  • Kevin Cruijssen 덕분에 반지름 (100으로 나눈 값)을 String명시적인 int배열 로 하드 코딩 하는 대신 직접 인코딩하여 -48 점 (-45 바이트) .

답변

Wolfram Language 114103 97 88 86 82 바이트. 점수 = 114103 97 89 87 83 점

(#&@@EntityValue[Interpreter["AstronomicalObject"]@#,"Radius"]/._String->507)1.61&

덕분에 6 점 이상 Dennis, 덕택에 6 점 이상, 6 점 lirtosiast이상이 추가되었습니다 user202729.

Mathematica는 태양계 데이터 (많은 추가 천문학적 데이터)를 가져올 수 있지만, 아래 설명과 같이 약간의 조정이 필요합니다.

Interpreter[#,"AstronomicalObject"]&로 표시되는 용어와 관련된 엔터티 (즉, 컴퓨터 계산 가능 개체)를 반환합니다 #.

EntityValue[AstronomicalObject[],"Radius"]엔터티의 반경 (마일)을 반환합니다. “Haumea”의 경우 816.27 (즉 507 * 1.61) 값이 반환됩니다.

반경 1.61을 마일로 곱하면 마일에서 킬로미터로 변환됩니다. 가장 극단적 인 경우에도 정수가 아닌 10 진수 값이 1 % 미만의 오류를 차지합니다.

[[1]]단위없이 km를 반환합니다. 이것은 나중에로 변경되어 #&@@동일한 결과를 얻었습니다.


답변

파이썬 3 , 점수 95, 95 바이트

lambda n:ord("ؙҢ?ਏ?ാᣣ४ঈ挒ឤ?̰ҋ??ۉՉ怮ܞ੊̔"[int(n,35)%87%52%24-1])

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


파이썬 3 , 점수 133, 133 바이트

lambda n:int(f'00e0{10**18+10**6}10x1h2411j4?00??811i1207wazxmwuvko?mw??xc1ze1ldyujz6zysi4?ob??k9lym6w'[int(n,35)%87%52%24-1::23],36)

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


답변

파워 쉘은 150 141 바이트, 골 (163) (153)

($args|% t*y|?{'Su6963J699S582U253N246Ea63V60Ma33G26Ti25Me24C24I18M17Eu15T13P12E12H8Titani8'-cmatch"$(($y+=$_))(\d+)"}|%{100*$Matches.1})[-1]

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

테스트 스크립트 :

$f = {
($args|% t*y|?{'Su6963J699S582U253N246Ea63V60Ma33G26Ti25Me24C24I18M17Eu15T13P12E12H8Titani8'-cmatch"$(($y+=$_))(\d+)"}|%{100*$Matches.1})[-1]
}

$penalty = @(
    ,("Sun"      , 696342)
    ,("Jupiter"  ,  69911)
    ,("Saturn"   ,  58232)
    ,("Uranus"   ,  25362)
    ,("Neptune"  ,  24622)
    ,("Earth"    ,   6371)
    ,("Venus"    ,   6052)
    ,("Mars"     ,   3390)
    ,("Ganymede" ,   2634)
    ,("Titan"    ,   2575)
    ,("Mercury"  ,   2440)
    ,("Callisto" ,   2410)
    ,("Io"       ,   1822)
    ,("Moon"     ,   1737)
    ,("Europa"   ,   1561)
    ,("Triton"   ,   1353)
    ,("Pluto"    ,   1186)
    ,("Eris"     ,   1163)
    ,("Haumea"   ,    816)
    ,("Titania"  ,    788)
) | % {
    $s,$expected = $_
    $result = &$f $s
    $ratio = [Math]::Max($result/$expected, $expected/$result)
    $ratio*$ratio
}
$scriptLength = $f.ToString().Length - 2  # -4 if CRLF mode
$penaltyMax = ($penalty|Measure-Object -Maximum).Maximum
$score = $scriptLength * $penaltyMax
"$score = $scriptLength * $penaltyMax"

산출:

152.731283431953 = 141 * 1.08320059171598

설명:

  • 이름에는 문자 만 포함되며 반지름에는 숫자와 점이 포함됩니다. 따라서 모든 데이터를 데이터 문자열로 작성하고 정규식 검색을 수행 할 수 있습니다.
  • 스크립트는 왼쪽에서 오른쪽으로 모든 하위 문자열을 검색하고 마지막으로 찾은 결과를 가져옵니다.
  • 데이터 문자열을 줄이려면 입력이 제목 대소 문자 여야합니다.
  • end of line mode단지 LF입니다.

예:

Titania         Triton         Titan
--------------  -------------  -------------
T       -> 1.3  T      -> 1.3  T      -> 1.3
Ti      -> 2.5  Tr     ->      Ti     -> 2.5
Tit     ->      Tri    ->      Tit    ->
Tita    ->      Trit   ->      Tita   ->
Titan   ->      Triton ->      Titan  ->
Titani  -> .8
Titania ->

Result is .8    Result is 1.3  Result is 2.5

Powershell, 178 바이트, 178 점

($args|% t*y|?{'Su696342J69911S58232U25362N24622Ea6371V6052Ma3390G2634Ti2575Me2440C2410I1822M1737Eu1561T1353P1186E1163H816Titani788'-cmatch"$(($y+=$_))(\d+)"}|%{+$Matches.1})[-1]


답변

05AB1E , 점수 100 66 60 ( 100 61 56 바이트 )

•1∞²îc|I‰∍T‡sÇ3¡ò½в…»Ë•§•1ë£ñƒq£û¿’…•S£y¦¦ÇO96%49%25%èт*

@ OlivierGrégoire 의 Java 답변 포트 이므로이 첫 번째 답변이 마음에 드시면 그를 찬성 해야합니다!
제목 케이스에 입력하십시오.

모든 테스트 사례를 확인하십시오.


05AB1E , 점수 100 (100 바이트 )

•*Òâ%ÌÜS…Ùb‹Úi{e!]ɸ·vÌBUSηHã£āðxyµŠ•§•3«8¹ØмS7Ç•S£.•WùηƵ@,Sº,ûεβʒóÃX\¹Θäáá’Ý)”Ωož∞-z.A±D•3ôI2£Iθ«kè

전체 소문자로 입력하십시오. 정확한 반경을 출력하므로 페널티가 추가되지 않습니다.

모든 테스트 사례를 확인하십시오.

설명:

•*Òâ%ÌÜS…Ùb‹Úi{e!]ɸ·vÌBUSηHã£āðxyµŠ•
                   # Compressed integer 696342699115823225362246226371605233902634257524402410182217371561135311861163816788
 §                 # Casted to string (bug, should have been implicitly..)
  3«8¹ØмS7Ç•      # Compressed integer 65555444444444444433
   S               # Converted to a list of digits: [6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3]
    £              # The first integer is split into parts of that size: ["696342","69911","58232","25362","24622","6371","6052","3390","2634","2575","2440","2410","1822","1737","1561","1353","1186","1163","816","788"]
     .•WùηƵ@,Sº,ûεβʒóÃX\¹Θäáá’Ý)”Ωož∞-z.A±D
                   # Compressed string "sunjursanursneeeahvesmasgaetinmeycaoioomoneuatrnploershaatia"
      3ô           # Split into parts of size 3: ["sun","jur","san","urs","nee","eah","ves","mas","gae","tin","mey","cao","ioo","mon","eua","trn","plo","ers","haa","tia"]
        I2£        # The first two characters of the input
           Iθ      # The last character of the input
             «     # Merged together
              k    # Get the index of this string in the list of strings
               è   # And use that index to index into the list of integers
                   # (and output the result implicitly)

내이 05AB1E 팁을 참조하십시오 (섹션에서는 어떻게 큰 정수를 압축하는 데 어떻게?어떻게 문자열을 사전의 일부를 압축? ) 방법 압축 사용 작품을 이해하기.

나는 태양을 매핑하는 70 바이트 대안을 만들었습니다 600,000. [목성, 토성] ~ 60,000; [우라누스, 해왕성]에서 30,000; [지구, 금성] ~ 6,000; [mars, ganymede, 티탄, 수은, callisto] ~ 3,000; [io, moon, europa, triton, pluto, eris] ~ 1,500; 및 [haumea; titania] ~ 750. 불행히도 그것은 117 점을 얻었습니다. 나중에 다른 방법으로 100 이하로 갈 수 있는지 알 수 있습니다.