토양 pH 화학을 배우자!


14

앤드류는 용액의 산도 및 농업에 관심이있는 화학자입니다. 몇 달 간의 연구 끝에 (Google은 친구가 아닙니다), pH (수소 가능성) 측면에서 사람이 읽을 수있는 산도 수준에 관한 다음 표 *를 생각해 냈습니다 .

         교파 | pH 범위
                             |
    ------------------------- + ------------------------ -----   
    초 산성 | 3.5 이하
    ------------------------- + ------------------------ ------
    매우 산성 | 3.5와 4.4 사이
    ------------------------- + ------------------------ ------
    매우 강산성 | 4.5와 5.0 사이
    ------------------------- + ------------------------ ------
    강산성 | 5.1에서 5.5 사이
    ------------------------- + ------------------------ ------
    적당히 산성 | 5.6 ~ 6.0
    ------------------------- + ------------------------ ------
    약간 산성 | 6.1과 6.5 사이
    ------------------------- + ------------------------ ------
    중립 | 6.6에서 7.3 사이
    ------------------------- + ------------------------ ------
    약간 알칼리성 | 7.4와 7.8 사이
    ------------------------- + ------------------------ ------
    알카라인 | 7.9와 8.4 사이
    ------------------------- + ------------------------ ------
    강 알칼리성 | 8.5와 9.0 사이
    ------------------------- + ------------------------ ------
    매우 강 알칼리성 | 9.0 이상

물질의 pH를 나타내는 음이 아닌 10 진수가 주어지면 명칭을 출력합니다. 표준 방법으로 입력하고 출력 할 수 있습니다 . 입력 할 수있는 데이터 유형은 다음과 같습니다.

  • 흙손
  • 더블
  • 언어의 표준 10 진수 데이터 유형

그리고 교파를 나타내는 문자열을 출력해야합니다. 화학 관련 내장 기능은 금지되어 있습니다 (죄송합니다, Mathematica!) .

근사 규칙 : 받는 pH가 교파의 상한과 다음의 하한 사이 (예 : 7.8와 7.9 사이) 인 경우 두 값 사이의 가장 가까운 값에 가깝게됩니다 : pH ≥ upperBound of the 첫 번째 + 0.5 인 경우 두 번째 명칭을 받아야하지만, pH <첫 번째 + 0.5의 경계인 경우 첫 번째 값을받습니다 (예 : 7.85는 7.9에 근사하지만 7.84999는 7.8에 근사). 설명은 테스트 사례를 참조하십시오.

테스트 사례 :

입력-> 출력

6.40-> 약간 산성
8.399-> 적당히 알칼리성
3.876-> 매우 산성
10.60-> 매우 강 알칼리성     
0.012-> 초 산성
7.30-> 중립
7.85-> 적당히 알칼리성 (근사치 규칙이 적용됨)
7.849-> 약간 알칼리성 (근사치 규칙이 적용됨)
6.55-> 중립 (근사 규칙이 적용됨)

이것은 이므로 가장 짧은 유효한 제출 (바이트)이 이깁니다!

* 앤드류는 그걸 생각해 내지 않았습니다 . 위키 백과 였습니다 !


삭제 된 게시물을 볼 수있는 사용자를위한 샌드 박스
Mr. Xcoder 2016 년

그래, 이것은 실제 산도 수준에서는 실제로 작동하지 않습니다. 레몬 주스보다 더 산성 인 것은 매우 산성입니다
파괴적인 레몬

@DestructibleLemon 레몬 주스가 초산 성인 경우 , -31.3이 전체 원자 폭탄 인 것처럼 행동하는 Fluoroantimonic acid :))
Mr. Xcoder

오, 네가 어디로 잘못 갔는지 봤어 3.5 ph는 초 산성이 아니지만 식물을 재배하는 토양이 3.5 ph 인 경우 초 산성입니다. 내 말은,이 표는 토양 ph를 말합니다
파괴 가능한 레몬

1
Brownie는 Python 또는 Swift에서 답변을 제시합니다 :)
Mr. Xcoder

답변:


6

젤리 ,  77 73  71 바이트

“£RĿÐƭðṚ°ƲṂṾẒ=ʂXḣsịɠ<»Ḳµ,Ṛ;€"“¡D⁺“a&»j“¿<z»W¤ṙ3
×20<“FYeoy³ƓɗʋṆ‘Sị¢⁾. y

숫자를 받아서 문자 목록을 반환하는 모나드 링크; 또는 결과를 인쇄하는 전체 프로그램.

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

어떻게?

“ ... »Ḳµ,Ṛ;€"“¡D⁺“a&»j“¿<z»W¤ṙ3 - Link 1, name list: no arguments
“ ... »                          - compression of "Ultra Extremely Very.strongly Strongly Moderately Slightly"
       Ḳ                         - split at spaces
        µ                        - monadic chain separation, call that adjectives
          Ṛ                      - reverse adjectives
         ,                       - pair these two lists
              “¡D⁺“a&»           - compression of [" alkaline"," acidic"]
             "                   - zip with:
           ;€                    -   concatenate for €ach
                             ¤   - nilad followed by links as a nilad
                       “¿<z»     -   compression of "Neutral"
                            W    -   wrap in a list
                      j          - join
                              ṙ3 - rotate left by 3: ["Strongly alkaline","Moderately alkaline","Slightly alkaline","Neutral","Slightly acidic","Moderately acidic","Strongly acidic","Very.strongly acidic","Extremely acidic","Ultra acidic","Ultra alkaline","Extremely alkaline","Very.strongly alkaline"]

×20<“FYeoy³ƓɗʋṆ‘Sị¢⁾. y - Main link: number, pH
×20                     - multiply by 20
    “FYeqy³ƓɗʋṆ‘        - code-page indexes = [70,89,101,111,121,131,147,157,169,180]
   <                    - less than? (vectorises)
                        -   i.e.: pH < [3.5,4.45,5.05,5.55,6.05,6.55,7.35,7.85,8.45,9]
                S       - sum
                  ¢     - call last link (1) as a nilad
                 ị      - index into (1-indexed and modular)
                        - ...note that the sum is never 11 or 12, so "Ultra alkaline" and
                        -    "Extremely alkaline" wont be fetched, but that a sum of 0
                        -    fetches "Very.strongly alkaline", as required.
                   ⁾.   - literal list of characters ['.', ' ']
                      y - translate (replace any '.' with a ' ' i.e. for "Very.strongly")
                        - if running as a full program, implicit print

나는 항상 05AB1E와 Jelly 사이의 경쟁을 즐깁니다. 단 2 바이트 거리
Mr. Xcoder

3
젤리는 05AB1E를 이겼습니까?!?!
아웃 골퍼 에릭


4

C # (. NET 코어) , 236 바이트

p=>{var l=new[]{70,89,101,111,121,131,147,157,169,180,280};var a="Ultra,Extremely,Very strongly,Strongly,Moderately,Slighty, acidic,Neutral, alkaline".Split(',');int i=0;for(;p*20>=l[i];i++);return i==6?a[7]:i<6?a[i]+a[6]:a[12-i]+a[8];}

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

이 솔루션 p은 14보다 클 수 없습니다.


4

T-SQL, 305 299 바이트

DECLARE @ char(999)=REPLACE(REPLACE(REPLACE(REPLACE('SELECT TOP 1i FROM(VALUES(''Very s$#9&S$#8.4&Moderately#7.8&Slightly#7.3&Neutral'',6.5&Slightly@6&Moderately@5.5&S$@5&Very s$@4.4&Extremely@3.4&Ultra@-1))x(i,j),t WHERE j<a','#',' alkaline'','),'@',' acidic'','),'&','),('''),'$','trongly')EXEC(@)

입력은 a 열이 있는 기존 테이블 t통해 이루어집니다 .DECIMAL(4,1) / 출력 규칙에 따라 집니다.

때문에 DECIMAL(4,1) 값이 입력 테이블에 입력 할 때 데이터 유형, 반올림 어떤 "근사 규칙은"이렇게 명시 적으로 내 코드에 의해 관리 할 필요가 없습니다, 일어난다.

공간 절약 REPLACES이 수행 된 후 입력 테이블을 값 목록과 결합하는 간단한 SQL 쿼리입니다.

SELECT TOP 1 i
FROM(VALUES
    ('Very strongly alkaline',9),
    ('Strongly alkaline',8.4),
    ('Moderately alkaline',7.8),
    ('Slightly alkaline',7.3),
    ('Neutral',6.5),
    ('Slightly acidic',6),
    ('Moderately acidic',5.5),
    ('Strongly acidic',5),
    ('Very strongly acidic',4.4),
    ('Extremely acidic',3.4),
    ('Ultra acidic',-1)
) x(i,j), t
WHERE j<a

나는 순서를 반대로 TOP 1 입력 값보다 작은 첫 번째 항목을 선택합니다.

이 형식 (줄 바꿈과 여분의 공백을 제거한 후)조차도 318 바이트 에서 꽤 좋습니다 . 의 오버 헤드를 추가 DECLARE, REPLACESANDEXEC 에만 모든 반복 문구와 가치가된다.

편집 : 여러 값에서 불필요한 ".0"을 제거하여 6 바이트 저장


3

05AB1E , 81 80 79 77 76 74 바이트

'Ĉ“¢³¿™ly³¾‚Òw““³¾§ÓªÅ“«#¦¦’šÉaƒ£’«Š’w¡Îic’«)˜™'wð:I•t{~À•ST+.¥70+20/‹Oè

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

테스트 스위트

설명

'Ĉ                   # push the string "neutral"
“¢³¿™ly³¾‚Òw“         # push the string "slightly moderately strongly veryw"
“³¾§ÓªÅ“              # push the string "strongly extremely ultra"
«                     # concatenate the top 2 items on the stack
 #                    # split on spaces
  Â                   # push a reversed copy
   ¦¦                 # remove the first 2 elements of the copy ("ultra", "extremely")
’šÉaƒ£’«              # append the string "walkaline" to each ("walk"+"a"+"line")
        Š             # move down 2 places on the stack
’w¡Îic’«              # append the string "wacidic" to each ("w"+"acid"+"ic")
        )˜            # wrap stack in a list and flatten
          ™           # title case each
           'wð:       # replace each instance of "w" with a space
I                     # push input
 •t{~À•               # push the base 255 compressed number 920006021
       ST+            # split to list of digits and add 10 to each
          .¥          # undelta (compute increments from 0)
            70+       # add 70 to each
               20/    # divide each by 20
                  ‹   # compute input less than for each
                   O  # sum
                    è # use this to index into list of strings

놀랍게도 05AB1E
Mr. Xcoder

파티에 늦었지만 여전히 궁금한 점이 있습니다. 누구나이 언어로 직접 프로그래밍합니까 (코드 골프 전용 인 경우에도) 또는 "컴파일러"의 출력입니까?
avl42

1
@ avl42 : 우리는이 언어로 직접 코딩합니다 (일반적으로 물론 골프 용). 누군가가 프로덕션 코드에서 이것을 사용하는 것을 싫어합니다.) 해석 된 언어 이므로이 언어로 작성한 코드는 파이썬 코드로 해석됩니다.
Emigna

1
나는 "해석"보다는 "번역"라고 말하고 싶지만 @Emigna (그 반대 의미의 종류입니다)
anatolyg

@anatolyg : 네, 맞습니다. 나는 항상 어떤 이유로, 아마도 파이썬으로 인해 해석 된 것으로 생각합니다. 해석 된 언어로 번역됩니다 :)
Emigna

2

망막 228 바이트

$
.00
\.(.)\.?(.).*
$1$2
.+
$*
1{900,}
VA
1{845,}
STA
1{785,}
MA
1{735,}
SLA
1{655,}
Neutral
1$
1 acidic
1{605,}
SL
1{555,}
M
1{505,}
ST
1{445,}
V
1{350,}
Extremely
1+
Ultra
M
Moderately
V
Very sT
T
trongly
L
lightly
A
 alkaline

온라인으로 사용해보십시오!링크에는 테스트 스위트가 포함되어 있습니다. 설명:

$
.00
\.(.)\.?(.).*
$1$2

여분의 소수점과 두 개의 0을 접미어로 입력하고 그 뒤에 소수점과 두 자리를 제외한 모든 숫자를 삭제하여 입력에 100을 곱하십시오.

.+
$*

단항으로 변환합니다.

1{900,}
VA
1{845,}
STA
1{785,}
MA
1{735,}
SLA

모든 알칼리를 처리하여 나중에 확장 될 약어로 변환하십시오.

1{655,}
Neutral

중립을 처리하십시오.

1$
1 acidic

남은 것은 산성이어야합니다. (그러나 pH가 0.001 인 경우 1을 그대로 두십시오)

1{605,}
SL
1{555,}
M
1{505,}
ST
1{445,}
V
1{350,}
Extremely
1+
Ultra

모든 산을 처리하십시오.

M
Moderately
V
Very sT
T
trongly
L
lightly
A
 alkaline

약어를 확장하십시오.


와우, 골프를하는데 시간이 걸렸다 고 생각합니다.
Mr. Xcoder


2

자바 스크립트 (ES6) 192 189 185 184 바이트

k=>([...'09544474540'].some(n=>(i--,k-=++n)<0,i=7,k=k*10-33.5),'Neutral,Slightly,Moderately,Strongly,Very strongly,Extremely,Ultra'.split`,`[i<0?-i:i]+(i?i>0?' acidic':' alkaline':''))

테스트 사례


1

엑셀, 240 바이트

=CHOOSE((A1<6.55)+(A1<6.05)+(A1<5.55)+(A1<5.05)+(A1<4.45)+(A1<3.5)+(A1>=7.35)+(A1>=7.85)+(A1>=8.45)+(A1>9)+1,"Neutral","Slightly","Moderately","Strongly","Very Strongly","Extremely","Ultra")&IF(A1<6.55," acidic",IF(A1>=7.35," alkaline",""))

0

자바 스크립트, 222 209 바이트

x=>'Very strongly,Strongly,Moderately,Slightly,Neutral,Extremely,Ultra'.split(',',7,x-=0.049)[x>9?0:x>8.4?1:x>7.8?2:x>7.3?3:x>6.5?4:x>6?3:x>5.5?2:x>5?1:x>4.4?0:x>3.5?5:6]+(x<6.5?' acidic':x>7.3?' alkaline':'')

아직도 약간의 골프

var f = x=>'Very strongly,Strongly,Moderately,Slightly,Neutral,Extremely,Ultra'.split(',',7,x-=0.049)[x>9?0:x>8.4?1:x>7.8?2:x>7.3?3:x>6.5?4:x>6?3:x>5.5?2:x>5?1:x>4.4?0:x>3.5?5:6]+(x<6.5?' acidic':x>7.3?' alkaline':'')

console.log(f(6.40));
console.log(f(8.399));
console.log(f(3.876));
console.log(f(10.60));
console.log(f(0.012));
console.log(f(7.30));
console.log(f(7.85));
console.log(f(7.849));
console.log(f(6.55));


함수에 변수를 할당해야한다고 생각하지 않습니다.
Zacharý
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.