ใน Java / .NET / C / JavaScript / ฯลฯ คุณสามารถใช้ ternary-ifs เพื่อตัดคำสั่ง if-shorten ให้สั้นลง
ตัวอย่าง (ใน Java):
// there is a String `s` and an int `i`
if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
สามารถย่อให้สั้นด้วย ternary- หาก:
s=i<0?"Neg":i>0?"Pos":"Neut";
ท้าทาย:
อินพุต: if-else ปกติ (เป็นไปได้ด้วยการซ้อน) ที่ตั้งค่าตัวแปรเดียว
เอาต์พุต: ternary ที่แปลงแล้วหาก
กฏท้าทาย:
- คุณสามารถสมมติว่ากรณีอื่นทั้งหมดเป็นไปได้โดยไม่ต้องวงเล็บ (ดังนั้นถ้าบล็อกอื่น / if- ถ้า / อื่นมีร่างกายเดียว)
- คุณสามารถสันนิษฐานได้ว่าจะไม่มีช่องว่างแท็บหรือบรรทัดใหม่ยกเว้นช่องว่างเดียวหลังจากแต่ละช่อง
else
(รวมถึงที่else if
) - คุณสามารถสันนิษฐานได้ว่าชื่อตัวแปรที่ใช้นั้นเป็นตัวพิมพ์เล็กตัวเดียว (
[a-z]
) - ค่าที่กำหนดให้กับตัวแปรสามารถเป็นหนึ่งใน:
- สตริง (โดยไม่มีช่องว่าง / แท็บ / ใหม่สาย) ซึ่งจะถูกล้อมรอบด้วยราคาสองครั้ง (เช่น
"Test"
,"SomeString"
,"Example_string"
ฯลฯ ) คุณสามารถสันนิษฐานได้ว่าสายจะไม่เคยมีสตริงif
หรือelse
ไม่ก็จะมีช่องว่างแท็บการขึ้นบรรทัดใหม่ (หนี)=
ราคาสองครั้งหรือตัวอักษร มันสามารถมีตัวละคร><(){}[];?:!&|
แต่จะอยู่ในช่วง ASCII ที่พิมพ์ได้เท่านั้น (['!' (33), '~' (126)]
) - จำนวนเต็ม (เช่น
0
,123
,-55
ฯลฯ ) - ทศนิยม (เช่น
0.0
,0.123
,-55.55
ฯลฯ )
- สตริง (โดยไม่มีช่องว่าง / แท็บ / ใหม่สาย) ซึ่งจะถูกล้อมรอบด้วยราคาสองครั้ง (เช่น
- ค่าจะไม่ถูกนำมาผสมกัน ดังนั้นตัวแปรทั้งหมดที่ได้รับคือจำนวนเต็มไม่ใช่จำนวนเต็มและบางตัวเป็นสตริง
- เงื่อนไขภายในวงเล็บสามารถมีตัวอักษรต่อไป
=<>!+-/*%&|[]
, ,a-z
0-9
คุณสามารถสมมติว่าจะไม่มีวงเล็บในและคุณยังสามารถสมมติว่าจะไม่มีฟิลด์ (ทำให้สับสน) ที่มีอักขระมากกว่าหนึ่งตัวที่ใช้ (เช่นif(if<0)
) - คุณสามารถสันนิษฐานได้ว่าจะไม่มีการตัดสั้น ๆ ชอบแทน
i*=10
i=i*10
- คุณจะไม่ได้มีการจัดการห้อย
else
กรณีดังนั้นสิ่งที่สามารถจับคู่ด้วยif
else
คือif(a)if(b)r=0;else r=1;
ไม่ได้เป็นอินพุตกรณีที่เป็นไปได้if(a)if(b)r=0;else r=1;else r=2;
หรือif(a&&b)r=0;else if(a&&!b)r=1;else r=-1;
อย่างไรก็ตาม - I / O ยืดหยุ่นได้ อินพุตและเอาต์พุตสามารถเป็นสตริงรายการอักขระอ่านจาก STDIN, เอาต์พุตไปยัง STDOUT ฯลฯ การโทรของคุณ
- Ternaries ทั้งหมดจะมีการเชื่อมโยงที่ถูกต้องเช่นเดียวกับมาตรฐานในภาษาส่วนใหญ่ ( แต่ไม่ใช่ในตัวอย่าง PHP )
กฎทั่วไป:
- นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
อย่าปล่อยให้ภาษาที่ใช้รหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ codegolfing พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ ' - กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
- ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
- หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
- นอกจากนี้โปรดเพิ่มคำอธิบายหากเป็นไปได้
กรณีทดสอบ:
Input: if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
Output: s=i<0?"Neg":i>0?"Pos":"Neut";
Input: if(i%2<1)r=10;else r=20;
Output: r=i%2<1?10:20;
Input: if(n<10)if(m<0)i=0;else i=10;else if(m<0)i=-1;else i=1;
Output: i=n<10?m<0?0:10:m<0?-1:1;
Input: if(i==1)i=0.0;else i=0.25;
Output: i=i==1?0.0:0.25;
Input: if(!a)if(b)r=0;else r=1;else r=2;
Output: r=!a?b?0:1:2;
Input: if(a)if(b)r=0;else r=1;else if(c)r=2;else r=3;
Output: r=a?b?0:1:c?2:3;
Input: if(a&&b)r=0;else if(a&&!b)r=1;else r=-1;
Output: r=a&&b?0:a&&!b?1:-1;
Input: if(i[0]>0)if(j>0)if(q>0)r="q";else r="j";else r="i";else r="other";
Output: r=i[0]>0?j>0?q>0?"q":"j":"i":"other";
Input: if(i>0)r="i";else if(j>0)r="j";else if(q>0)r="q";else r="other";
Output: r=i>0?"i":j>0?"j":q>0?"q":"other";
Input: if(a>0)if(a<2)x="one";else if(a<3)x="two";else if(a<4)x="three";else x="other";else x="other";
Output: x=a>0?a<2?"one":a<3?"two":a<4?"three":"other":"other";
Input: if(b[0]<=b[1])q=5;else if(b[0]==null)q=0;else q=-10;
Output: q=b[0]<=b[1]?5:b[0]==null?0:-10;
if ... then ... else
เป็นผู้ประกอบการที่สาม ดังนั้นถ้าคุณเขียนlet result = if 10 > 100 then 99 else -99
แล้วค่าของจะresult
-99