มาเรียนเคมีเคมีของดินกัน!


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

เนื่องจากตัวเลขทศนิยมที่ไม่เป็นลบแสดงถึงค่าความเป็นกรดของสารส่งออกค่าของมัน คุณสามารถใช้อินพุทและเอาท์พุทให้โดยวิธีการมาตรฐานใดประเภทข้อมูลที่คุณได้รับอนุญาตให้ป้อนด้วยคือ:

  • ลอย
  • สอง
  • ประเภทข้อมูลเลขฐานสิบแบบมาตรฐานของภาษาของคุณ
  • เชือก

และคุณต้องส่งออกสตริงที่เป็นตัวแทนของนิกาย Built-in ที่เกี่ยวข้องกับสารเคมีที่เป็นสิ่งต้องห้าม(ขออภัย Mathematica!)

กฎการประมาณค่า:หากค่า pH ที่คุณได้รับอยู่ระหว่างขอบเขตบนของหน่วยและขอบเขตล่างของค่าถัดไป (เช่นระหว่าง 7.8 และ 7.9) ค่านั้นจะได้รับค่าใกล้เคียงที่สุดระหว่างค่าทั้งสอง: ถ้าค่า pH B ส่วนบนของ 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 -> เป็นกลาง (ใช้กฎการประมาณ)

นี่คือดังนั้นการส่งที่ถูกต้องที่สั้นที่สุด (เป็นไบต์) ชนะ!

* แอนดรูไม่ได้เกิดขึ้นกับว่ามันเป็นวิกิพีเดีย !


Sandboxสำหรับผู้ที่สามารถดูโพสต์ที่ถูกลบ
Mr. Xcoder

ใช่มันใช้ไม่ได้กับระดับความเป็นกรดที่แท้จริง สิ่งที่เป็นกรดมากกว่าน้ำมะนาวมีความเป็นกรดสูงเป็นพิเศษ
มะนาวที่ถูกทำลายได้

@DestructibleLemon หากน้ำมะนาวเป็นกรดรุนแรงแล้วกรดฟลูออโรไทติโฟนิกที่ทำตัวเหมือนมี −31.3 เป็นระเบิดปรมาณูทั้งหมด :))
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

ลิงก์ monadic ที่รับหมายเลขและส่งคืนรายการอักขระ หรือโปรแกรมเต็มรูปแบบการพิมพ์ผล

ลองออนไลน์!

อย่างไร?

“ ... »Ḳµ,Ṛ;€"“¡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?!?!
Erik the Outgolfer


4

C # (. NET Core) 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(@)

การป้อนข้อมูลผ่านทางตารางที่มีอยู่ก่อนทีกับ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, REPLACESและEXECจะกลายเป็นเพียงคุ้มค่ากับทุกวลีซ้ำแล้วซ้ำอีก

แก้ไข : บันทึก 6 ไบต์โดยการลบ ".0" ที่ไม่จำเป็นในหลายค่า


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

ทวีคูณการป้อนข้อมูลด้วย 100 ด้วยการเติมจุดทศนิยมว่างและศูนย์สองตัวจากนั้นลบจุดทศนิยมและทั้งหมดยกเว้นตัวเลขสองหลัก

.+
$*

แปลงเป็นเอก

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

จัดการกับด่างทั้งหมดแปลงเป็นตัวย่อที่จะขยายในภายหลัง

1{655,}
Neutral

จับที่เป็นกลาง

1$
1 acidic

สิ่งที่เหลือจะต้องเป็นกรด (แต่ปล่อยให้ 1 ในกรณีที่ค่า pH เป็น 0.001)

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

Python 2 , 202 ไบต์

-15 ไบต์ขอบคุณ @JonathanAllan

lambda k:'Neutral_Slightly_Moderately_Strongly_Very strongly_Extremely_Ultra'.split('_')[abs(sum(round(k*10)>ord(i)for i in'",27<AINT')+(k>9)-(3.45<k<3.5)-6)]+(' acidic'*(k<6.55)or' alkaline'*(k>=7.35))

ลองออนไลน์!


2
คุณเอาคะแนนบราวนี่ของฉัน
Mr. Xcoder

2

JavaScript (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

Excel, 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

Javascript, 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.