CodeGolf - หัวหรือก้อย


26

คำแนะนำ

รับสายเข้าที่ไม่รู้จักiที่มีค่าของทั้งหัวหรือหางกลับ1สำหรับหัวหรือ-1สำหรับหางด้วยรหัสที่สั้นที่สุด

ตัวอย่างโค้ดที่ไม่ตีกอล์ฟ (55b):

if(i == "heads"){
    print(1);
}else{
    print(-1);
}

ตัวอย่างโค้ด golfed (16b):

print("t">i||-1)


จาวาสคริปต์ที่ใช้สำหรับตัวอย่าง แต่ก็ไม่ต้องการ ขออภัยถ้ามันง่ายเกินไปสำหรับผู้ใช้ส่วนใหญ่มันสามารถปรับปรุงได้


14
ยินดีต้อนรับสู่ PPCG! นี่ง่ายเกินไปที่จะท้าทายที่น่าสนใจ ในอนาคตโปรดพิจารณาการโพสต์ความท้าทายไปยังแซนด์บ็อกซ์ซึ่งพวกเขาสามารถรับข้อเสนอแนะก่อนโพสต์สดได้
Alex A.

1
6 คำตอบไม่ใช่ความท้าทายที่ไม่ดีแน่นอน ลองอีกครั้ง
edc65

4
ที่ 4 upvotes และ downvote 5 คำถามของคุณไม่ได้รับความนิยม มันเพิ่งได้รับความคิดเห็นที่หลากหลาย ในขณะที่งานในมือเป็นพื้นฐานเพียงเล็กน้อย แต่ก็มีการกำหนดชัดเจนและดึงดูด 7 คำตอบจนถึงคุณลักษณะที่แตกต่างกันหลายวิธี ไม่เลวสำหรับความพยายามครั้งแรก
เดนนิส

7
ฉันสับสนมากในตอนนี้เมื่อวานนี้ -4 ตอนนี้ +4 แน่นอนว่านี่ไม่ใช่การสแต็กโฟลว์: P
Juan Cortés

10
ฉันรอความท้าทายสั้น ๆ เช่นนี้มานานแล้วความท้าทายส่วนใหญ่ยาวเกินไปและซับซ้อนสำหรับมือใหม่อย่างฉัน
Sean Latham

คำตอบ:


11

CJam, 4 ไบต์

I'e#

สมมติว่าตัวแปรIเก็บอินพุตเนื่องจากiไม่ใช่ตัวระบุที่ถูกต้องใน CJam

ลองออนไลน์

I.indexOf('e')นี้จะเทียบเท่ากับรหัส JavaScript


อาจเอาชนะไม่ได้สำหรับความท้าทายนี้
Alex A.

1
ขอโทษฉันไม่เข้าใจข้อกำหนดเพียงพอและทำให้ตัวเองโง่กับคำถามนี้ ฉันจะกลับไปซ่อนตัวในตอนนี้
Juan Cortés

ทำไมคุณไม่รวมpในนี้ มันเป็นมาตรฐานใน CJam หรือเปล่า?
ทิม

@Tim CJam พิมพ์เนื้อหาสแต็คเสมอที่โปรแกรมโดยอัตโนมัติ
Martin Ender

2
@Tim: คำถามที่บอกว่าจะคืนค่า 1 หรือ -1 ดังนั้นฉันคิดว่าการทิ้งตัวเลขไว้บนสแต็กน่าจะดี ฉันได้แก้ไขลิงก์เพื่อแสดงว่าpไม่จำเป็น
เดนนิส

17

C, 18 ไบต์

ค่อนข้างง่าย แต่มาทำเพื่อความสนุก ...

puts("-1"+*i/8%2);

รับสายchar *iมันพิมพ์ 1 สำหรับheadsและ -1 สำหรับtailsด้วยการขึ้นบรรทัดใหม่

คำอธิบาย

ใน C, "-1" + 1จุด 1 "1"ตัวละครไปข้างหน้าดังนั้นจึงเป็นเช่นเดียวกับ ลองดูที่ตัวอักษรตัวแรก:

"heads"[0] = 'h' = 104 = 0b01101000
"tails"[0] = 't' = 116 = 0b01110100

หากเรานับบิตจากขวาสุดที่เริ่มต้นที่ศูนย์บิต 3 คือ 1 ในheadsและ 0 ในtails: การรวมเพื่อ"-1"ให้สตริง ดูเหมือนว่านี้:

"-1" + ((i[0] >> 3) & 1)

ตอนนี้แทนที่i[0]ด้วย*iและการเปลี่ยนที่ถูกต้องด้วยการหารพลังของสองเพื่อบันทึกไบต์ ลบวงเล็บที่ไร้ประโยชน์ออกด้วย:

"-1" + (*i / 8 & 1)

ขณะนี้สามารถทดแทนด้วย& 1 % 2จำนวนตัวละครเหมือนกัน แต่โมดูลัสมีลำดับความสำคัญสูงกว่าทำให้ปล่อยวงเล็บได้ ลบช่องว่าง:

"-1"+*i/8%2

โบนัส

ฉันคิดว่าวิธีที่สั้นที่สุดในการรับจำนวนเต็ม 1 หรือ -1 (ไม่ใช่สตริง) ใน C คือ:

18-*i/6

คำอธิบาย:

'h' = 104
't' = 116

('h' + 't') / 2 = 110
110 - 'h' =  6
110 - 't' = -6

(110 - 'h') / 6 =  1
(110 - 't') / 6 = -1

Apply distributive property (integer division):
18 - 'h' / 6 =  1
18 - 't' / 6 = -1

1
สวยรักมัน
ฆCortés

11

Ruby, 8 (6 ไม่มีเอาต์พุต)

p ?t<=>i

ผู้ประกอบการจรวด!


เห็นได้ชัดว่าเป็นเครื่องมือที่เหมาะสมสำหรับงาน
โม่

9

PHP - 11 ไบต์

<?=1-$i^=F;

งานนี้เพราะ'tails' ^ 'F''2'และ'heads' ^ 'F'→ ซึ่งเมื่อพิมพ์เป็นจำนวนเต็มคือ'.'0

คุณสามารถทดสอบวิธีนี้ (หรือด้านล่าง) ด้วยวิธีดังต่อไปนี้:

<?php foreach(['heads', 'tails'] as $i): ?>
 <?=1-$i^=F;
endforeach; ?>

ลิงค์ Ideone


ทางเลือก

15 : <?=1-md5($i)%3;
16 : <?=md5($i)[5]-5;
16 :<?=-crc32($i)%5;


ด้วยเวอร์ชั่นสั้นฉันมักจะได้รับ 1 โปรดอธิบายว่ามันทำอะไรกับ XOR บ้าง
Juan Cortés

@ JuanCortésฉันได้เพิ่มคำอธิบายและลิงค์ไปยัง Ideone
Primo

2
ตอนนี้กำลังคิดนอกกรอบ!
เดนนิส

6

TI-BASIC, 9-10 ไบต์

cos(πʳinString(Ans,"t

ซื่อตรง "t" อยู่ในตำแหน่งที่ 1 ของ "tails" แต่ "t" ไม่ได้อยู่ในสตริง "heads" ดังนั้น inString (ส่งคืน 1 สำหรับ tails และ 0 สำหรับ heads

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

cos(πinString(Ans,"t

โปรดทราบว่าเครื่องคิดเลข TI ไม่มีชื่อสตริงดังนั้นอินพุตอยู่ในตัวแปรคำตอบของเครื่องคิดเลข โปรดทราบว่าตัวอักษรตัวเล็กเป็นสองไบต์แต่ละตัวดังนั้นโซลูชันนี้ใช้หน่วยความจำน้อยกว่าคำว่า "หัว"


นี่มันเจ๋งมาก. การนับไบต์ของคุณปิดอยู่แม้ว่า - cos (, πและสัญลักษณ์เรเดียนมีทั้งหมดหนึ่งไบต์ดังนั้นที่จริงแล้ว 8-9 ไบต์
MI Wright

1
tและinString(แต่ละไบต์ที่สอง
lirtosiast

โอ้ฉันลืมเรื่องอักษรตัวพิมพ์เล็กเป็นสองไบต์ ไม่เป็นไรแล้ว
MI Wright

5

ฟิชชัน , 26 21 ไบต์

O/';'1
"S@]_"-
R? <tL

มาร์ติน (และคำตอบที่ยอดเยี่ยมของเขาที่นี่ ) ทำให้ฉันมั่นใจในการเรียนรู้ภาษาใหม่และสถานที่ที่ดีไปกว่ากอล์ฟด่วน? มันเกือบจะไม่ดีที่สุดแล้ว แต่ก็สนุกดี! เมื่อฉันรู้สึกดีเกี่ยวกับเรื่องนี้ฉันอาจให้คำอธิบายในรูปแบบบางอย่างหากได้รับการร้องขอ



4

Pyth - 4 ไบต์


 xz"e

ทำงานด้วยหัวหรือก้อย ในฐานะที่iเป็นintใน Pyth, การใช้งานนี้zเป็นชื่อตัวแปรซึ่งมีผู้ใช้ป้อนข้อมูลใด ๆ มันเทียบเท่ากับ Python print(z.find("e"))ดังนั้นให้ใช้วิธีการของ @ Dennis


4

VBA (Excel) 12 ไบต์

ไม่ใช่การเล่นกอล์ฟที่น่าอัศจรรย์ แต่สนุกกับการลองใช้ VBA เพื่อเข้าถึงภาษาการเขียนโปรแกรมที่เหมาะสม ...

?13-asc(i)/6

i เป็นสตริงและมันใช้ประโยชน์จากค่า ASCII ของอักขระตัวแรกหารด้วย 6 และแทนที่จาก 13 ให้เป็น 1 หรือ -1 ง่ายมาก.

ตัวอย่างทำงานในหน้าต่างทันที (10 ไบต์พิเศษเพื่อตั้งค่าตัวแปรอินพุต):

i="Heads":?13-asc(i)/6
 1

4

C, 22 ไบต์

puts(*i>'h'?"-1":"1");

เครดิตไปที่@TheE เพื่อบอกฉันเกี่ยวกับสิ่งนี้ !

คำอธิบาย:

หากอักขระตัวแรกของสตริงมากกว่า'h'สตริง"-1"จะถูกพิมพ์ มิฉะนั้นสตริง"1"จะถูกพิมพ์ โปรดทราบว่าวิธีการนี้มาพร้อมกับอักขระขึ้นบรรทัดใหม่ที่ต่อท้าย


รุ่นเก่า (25 ไบต์):

printf("%d",*i>'h'?-1:1);

คำอธิบาย:

หากอักขระตัวแรกของสตริงมากกว่า'h'-1 จะถูกพิมพ์ มิฉะนั้นจะพิมพ์ 1


ฉันเพิ่งพูดว่า t ก่อนใช้ i เป็น char ชนิดคำจำกัดความที่แท้จริงจะเกิน 1byte เช่นการส่งคืนนี้ - (- 1) ** i / 16
Abr001am

@ Agawa001 แต่ผลตอบแทนที่ 6 hและ t7
Spikatrix

โอ้ฉันลืมไปแล้วฉันต้องใช้พลัง: p
Abr001am

คนที่แต่งตัวประหลาดน่าเสียดายที่ C ไม่มีการดำเนินการทางคณิตศาสตร์เช่นนั้นดังนั้นคุณต้องใช้ -1 * pow (-1, * i / 16) ซึ่งทำให้ใช้งานได้นานขึ้นในทางกลับกันใช้ python และ matlab ** และ ^
Abr001am

1
@CoolGuy จะใช้ทำให้puts(*i>'h'?"-1":"1");ไม่ดีขึ้นหรือไม่ (22 ไบต์)
euanjt

4

Tr: 17 13 ตัวละคร

(หรือ14 10 ถ้าคุณนับเพียงข้อโต้แย้ง ... )

tr -s ta-s -1

วิ่งตัวอย่าง:

bash-4.3$ tr -s ta-s -1 <<< heads
1

bash-4.3$ tr -s ta-s -1 <<< tails
-1

คำอธิบายสั้น ๆ :

tr หมายถึงตัวแปลหมายถึงแทนที่อักขระแต่ละตัวของอินพุตที่พบในอาร์กิวเมนต์แรกด้วยอักขระที่ตำแหน่งเดียวกันในอาร์กิวเมนต์ที่สอง:

tr ta -1 <<< tails         # replaces t ⇢ -, a → 1
⇒ -1ils

หากอาร์กิวเมนต์แรกยาวกว่าอักขระที่ไม่มีตำแหน่งที่ตรงกันในอาร์กิวเมนต์ที่สองจะถูกแทนที่ด้วยอักขระตัวสุดท้ายของอาร์กิวเมนต์ที่สอง:

tr tals -1 <<< tails       # replaces t ⇢ -, a → 1, l → 1, s → 1
⇒ -1i11

เมื่อใช้-s( --squeeze-repeats) ตัวเลือกอักขระต่อเนื่องซึ่งจะถูกแทนที่ด้วยอักขระเดียวกันจะถูกแทนที่พร้อมกัน:

tr -s tals -1 <<< tails    # replaces t ⇢ -, a → 1, l+s → 1
⇒ -1i1

ดังนั้นหากเราระบุตัวละครทั้งหมดใน“ ก้อย” เราจะได้สิ่งที่เราต้องการ:

tr -s tails -1 <<< tails    # replaces t ⇢ -, a+i+l+s → 1
⇒ -1

เช่นเดียวกับ“ heads” แต่ต้องการเก็บ“ t” ไว้ข้างหน้าเพื่อลบเครื่องหมายลบ (อักขระที่เรียงตามตัวอักษรเพื่อความน่าขยะแขยง):

tr -s taedhs -1 <<< heads   # replaces h+e+a+d+s → 1
⇒ 1

การรวมอักขระที่ไม่ซ้ำกันทั้งหมดของ "ก้อย" และ "หัว" ในอาร์กิวเมนต์แรกเดียวการรักษา "t" ไว้ด้านหน้านำไปสู่การแก้ปัญหาขั้นสุดท้าย:

tr -s tadehils -1 <<< tails # replaces t → -, a+i+l+s → 1
⇒ -1

tr -s tadehils -1 <<< heads # replaces h+e+a+d+s → 1
⇒ 1

เพื่อหลีกเลี่ยงการแจกแจงอักขระช่วงเวลาจาก- เป็นรูปแบบสามารถใช้แทนได้


สนใจที่จะอธิบายหรือไม่
Juan Cortés

ที่ถือว่า trBSD POSIXly:tr -s ta-s '-[1*]'
sch

4

ชุดประกอบ 8088, IBM PC DOS ขนาด 17 ไบต์

00000000: b402 0826 8200 7a04 b22d cd21 b231 cd21  ...&..z..-.!.1.!
00000010: c3

แต่อย่างใด:

B4 02           MOV  AH, 02H        ; DOS API display char function     
08 26 0082      OR   DS:[82H], AH   ; set parity flag from input 
7A 04           JPE  HEADS          ; if even, heads - display just '1'
B2 2D           MOV  DL, '-'        ; otherwise first display a '-''
CD 21           INT  21H            ; output DL to console
            HEADS: 
B2 31           MOV  DL, '1'        ; display the '1'
CD 21           INT  21H            ; output DL to console
C3              RET

คำอธิบาย:

ใช้แฟล็กพาริตีของ CPU เพื่อตรวจสอบว่าถ่านตัวแรกคือ'h'(เลขคู่ของเลขฐานสอง1) หรือ't'(เลขฐานสองของเลขคี่1) วิธีนี้ช่วยประหยัดหนึ่งไบต์ในการเปรียบเทียบอักขระ char ใน ASCII

อินพุตจากบรรทัดรับคำสั่งเอาต์พุตไปยังคอนโซล

Input / Output:

ป้อนคำอธิบายรูปภาพที่นี่



4

เชลล์ (พกพา / POSIX), 16 ไบต์

expr $i : he - 1

ลองออนไลน์!
ขอบคุณ@ StéphaneChazelasในunix.stackexchange.com

พยายามแก้ปัญหาอื่น ๆ :
echo $[30#$i%7-1] # 17 bytes but only in bash, zsh. ลองออนไลน์!
echo $((30#$i%7-1)) # 19 bytes but only bash,ksh,zsh. ลองออนไลน์!
he=2;echo $[${i%a*}-1] # 22 bytes But only in bash,zsh . ลองออนไลน์!
a=${i%h*};echo ${a:+-}1 # 23 . พกพา ลองออนไลน์!
he=2;echo $((${i%a*}-1)) # 24 bytes . พกพา ลองออนไลน์!
IFS=h;set $i;echo ${1:+-}1 # 26 (change IFS) . พกพา ลองออนไลน์!
(IFS=h;set $i;echo ${1:+-}1) # 28 (subshell) . พกพา ลองออนไลน์!
(IFS=h;set $i;echo $(($#*2-3))) # 31 bytes . พกพา ลองออนไลน์!

หมายเหตุ: การใช้dashเป็นอุปมาที่สมเหตุสมผลของเครื่องทดสอบเปลือกแบบพกพา

  • expr $i : he - 1ทำงานโดยการนับว่าตรงกับตัวอักษรมากด้วยhe การแข่งขันและการแข่งขัน 0 (ไม่มี) จากนั้น substracting กับ$i : heheads2tails1- 1

  • $[30#$i%7-1]ทำงานได้โดยการแปลงสตริงเป็นจำนวนเต็ม ฐาน 30 และสมัยที่ 7 ได้รับการคัดเลือกจะได้รับความแตกต่างระหว่าง 2 และheads tailsแล้วลบ 1 แปลงหมายเลขไปและ1 โปรดทราบว่า a เป็นรูปแบบของการคำนวณทางคณิตศาสตร์ในรูปแบบโบราณที่ถูกต้องในบางเชลล์เท่านั้น-1
    $[...]$((...))

  • he=2;echo $[${i%a*}-1]ทำงานโดยการสร้างตัวแปรที่มีค่าบางค่าจากนั้นใช้ Arithmetic Expansion เพื่อขยายตัวแปรนั้น (จากค่าข้อความ) การ${i%a*}แปลงheadsไปยังheและtailsไปที่t(ซึ่งในฐานะตัวแปรมีค่า 0)

  • IFS=h;set $i;echo ${1:+-}1ทำงานในสองขั้นตอน การตั้งไอเอฟเอจะhแบ่ง unquoted $iในset $iเป็นส่วนแบ่งตามตัวอักษรh, headsแบ่งออกเป็น''และ'eads'จึงตั้ง$1โมฆะ tailไม่ได้หารด้วยhจึงทำให้เท่ากับ$1 tailsจากนั้น${1:+-}สร้าง a -หากค่าของ$1เป็น non-null (เหมือนในtails) หรือไม่มีอะไร (เช่นเดียวกับ null $1) สัญญาณนั้น (หรือ1เปล่า) นั้นตัดกับ

  • (IFS=h;set $i;echo $(($#*2-3)))ทำงานในลักษณะที่คล้ายกัน แต่ใช้จำนวนของชิ้นส่วน ( $#) ที่สตริงใน$iได้แบ่งออกเป็น


3

Python 2, 17 ไบต์

print'-1'['t'>i:]

'heads'น้อยกว่า't'ดังนั้นประเมินค่าTrue == 1และพิมพ์สตริงหลังอักขระตัวแรก 'tails'มากกว่า't'ดังนั้นประเมินFalse == 0และสตริงทั้งหมดจะถูกพิมพ์

หากเรากำลังทำสิ่งนี้จากบรรทัดคำสั่งด้วยการพิมพ์โดยนัยมันก็จะกลายเป็น:

'-1'['t'>i:]

... เป็นเวลา 12 ไบต์ แต่จะเพิ่มเครื่องหมายคำพูดเดี่ยวให้กับเอาต์พุต


3

QBasic ขนาด 11 ไบต์

นี่ต้องเป็นชิ้นส่วนสั้นที่สุดของ QBasic ที่ฉันเคยเขียน

c=i>"t
?c^c

คำอธิบาย:

ด้านบนเป็น QBasic ที่เล่นกอล์ฟได้สวยมาก เมื่อตัวจัดรูปแบบอัตโนมัติผ่านไปแล้วมันจะมีลักษณะดังนี้:

c = i > "t"
PRINT c ^ c

บรรทัดแรกเปรียบเทียบสตริงกับi "t"ถ้าiเป็น"heads", เป็นเท็จและi > "t" c = 0ถ้าiเป็น"tails", และเป็นความจริงi > "t" c = -1ใช่-1เป็นค่าเริ่มต้นสำหรับบูลีนจริงใน QBasic!

บรรทัดที่สองแผนที่-1ไป-1และ0จะ1ผ่านเคล็ดลับคณิตศาสตร์: (-1)^(-1) == 1/(-1) == -1และแม้ว่าในทางเทคนิคไม่ได้กำหนดทางคณิตศาสตร์ผลตอบแทน0^01

รหัสนี้ต้องการที่iจะประกาศอย่างชัดเจนว่าเป็นตัวแปรสตริง; i$มิฉะนั้นก็จะต้องได้รับการ โปรแกรมทดสอบเต็มรูปแบบ (ทดสอบในQB64 ):

DIM i AS STRING
DATA heads, tails

FOR x = 1 TO 2
READ i

c=i>"t
?c^c

NEXT x

3

Gaia , 5 4 ไบต์

'eI(

คล้ายกับคำตอบ CJam ของเดนนิสค้นหาดัชนีeในสตริงอินพุต

บันทึกหนึ่งไบต์เนื่องจากฉันไม่ทราบว่าอินพุตถูกใช้เป็นอาร์กิวเมนต์โดยอัตโนมัติหากมีค่าสแต็กไม่เพียงพอ

มันทำงานอย่างไร

'e  Push e
I   Index of e in the the input. 2 if heads, 0 if tails
(   Subtract One
Stack gets automatically outputted

ลองออนไลน์!


3

Bash , 22

echo $[0x${1:1:1}/2-6]

ใช้ตัวอักษรตัวที่ 2 ( eหรือa) และตีความเป็นเลขฐานสิบหก (14 หรือ 10) จากนั้นหารด้วย 2 และลบ 6 เพื่อให้ได้คำตอบที่ถูกต้อง

ลองออนไลน์!


เคล็ดลับที่ยอดเยี่ยมฉันจะยืมมัน :)
roblogic

1
สำหรับ bash ให้ใช้: echo $[30#$i%7-1]เพียง 17 ไบต์ :-)
ไอแซค

3

ed , 27 25 21 ไบต์

edทำให้ฉันปวดหัว สุดท้ายคิดว่ามันออกมาพร้อมกับความช่วยเหลือจาก@ed1confบน Twitter และ peeps unix.seบางอย่างเกี่ยวกับ คุณไม่สามารถจับคู่สิ่งต่าง ๆ ด้วยs/re/newtext/ได้คุณจะต้องนำหน้ามันด้วยgอย่างอื่นedบรรจุเศร้า มันเหมือนโปรแกรมยูนิกซ์ที่ไม่พอใจอายุ 50 ปีที่พูดว่า "ลงสนามหญ้าของฉัน"

g/t/s//-
,s/\w\+/1
w

ลองออนไลน์!

-2 bytes โดยการวาง/s
-4ไบต์sedสุดท้ายด้วย @manatwork (& คำตอบที่ฉันได้คัดลอกผลงาน)
เวอร์ชันเก่า:
g/t/s//- g/\w\+/s//1 wq .


1
แต่คุณต้องการเคล็ดลับที่อยู่เฉพาะสำหรับคำสั่งที่ 1 เนื่องจากที่ 2 จะไม่ล้มเหลว และไม่จำเป็นต้องชัดเจนqมันจะลาออกเองเมื่อไม่มีอะไรเหลือให้ทำ และคุณต้องการเพียงขึ้นบรรทัดใหม่หลังจากพวกเขา“.” (หรือ“ roblogic” …) ไม่จำเป็น ลองออนไลน์!
จัดการ

อ่าขอบคุณฉันจะลองคำแนะนำของคุณเมื่อกลับถึงบ้าน ที่ผับตอนนี้👍🏼
roblogic

2

Python 20 ไบต์

print(('h'in i)*2-1)

สิ่งนี้จะส่งคืนFalseถ้าไม่ใช่และTrueถ้าเป็น ในงูหลามFalseและ0เหมือนกันและTrueและ1เป็นเช่น

ดังนั้น:

True (1) * 2 -1 = 2-1 = 1
False (0) * 2 - 1 = 0-1 = -1

2

golflua 25 20 18

w(I.r():f'h'&1|-1)

อาจจะเล่นกอล์ฟได้มากกว่านี้โดยใช้ลูกเล่นบางอย่างที่ฉันไม่ได้คิดในตอนนี้ (ดูประวัติรุ่นเก่า) บันทึก 5 ตัวอักษรโดยย้ายอินพุตไปที่writeและไม่สนใจifคำสั่งที่นั่น findอีกสองตัวอักษรถูกบันทึกไว้โดยไม่สนใจวงเล็บตัวเลือกใน ไม่ได้ตรวจสอบเงื่อนไขที่ล้มเหลว (เช่นอินพุตที่ไม่ใช่หัวหรือก้อย )

Lua จะเทียบเท่า

io.write(io.read():find('h') and 1 or -1)

2

Haskell, 18 ไบต์

f('h':_)=1
f _= -1

สตริงเริ่มต้นด้วยตัวอักษรทุกคนhถูกจับคู่กับ1คนอื่น ๆ -1ทุกคนที่จะ


2

Sed: 16 ตัวอักษร

s/t/-/
s/\w\+/1/

วิ่งตัวอย่าง:

bash-4.3$ sed 's/t/-/;s/\w\+/1/' <<< 'heads'
1

bash-4.3$ sed 's/t/-/;s/\w\+/1/' <<< 'tails'
-1

ดีฉันใช้ regex ของคุณสำหรับedการแก้ปัญหาของฉันแต่มันยังคงใช้เวลา 23 ไบต์เพราะedเก่าและไม่พอใจ!
roblogic

\wและ\+เป็นส่วนขยายของ GNU
sch




2

dc , 8 ไบต์

?z2*1r-p

dc ไม่สามารถทำสิ่งใดที่มีความหมายกับสตริงอื่นนอกจากอ่านและพยายามประเมินพวกมัน การทำเช่นนี้ "หัว" จะส่งสัญญาณเตือนบางอย่างเกี่ยวกับคำสั่งที่ยังไม่ได้ใช้งานและสแต็กเปล่าซึ่งเราไม่สนใจ แต่ที่สำคัญสแต็กยังคงว่างเปล่า "ก้อย" เกือบจะเหมือนกันพร้อมกับข้อยกเว้นที่สำคัญที่ "ls" สุดท้ายโหลดค่าจากการลงทะเบียน s ไปยังสแต็ก

จากนั้นเราใช้ "z" เพื่อรับความยาวของสแต็กและซอทางคณิตศาสตร์เพื่อหาคำตอบที่ถูกต้อง

ลองออนไลน์!


2

รูปสามเหลี่ยมขนาด 10 ไบต์

F.~%.7/-_<

ลองออนไลน์!

หารค่า ASCII ของอินพุตอักขระโดย 7 ลบความฉลาดทางจาก 15 การดำเนินการหยุดเมื่อ IP หมดพื้นที่โปรแกรม ใช้งานได้เพราะสามเหลี่ยมสามารถจัดการการหารจำนวนเต็มเท่านั้น สะดวกสบาย "h" มีค่า 104 ซึ่งเท่ากับ 14 เมื่อจำนวนเต็มหารด้วย 7 "t" คือ 116 ซึ่งเป็น 16 เมื่อจำนวนเต็มหารด้วย 7

/ ชี้แจง Ungolfed:

   F
  . ~
 % . 7
/ - _ <
---------------------------------------------------------------
F                 - Push 15 to Top of Stack
 ~                - Read a character from input, push its value to ToS
   7              - Push 7 to ToS
     <_           - Change directions, then pop ToS-1 and ToS, push their integer quotient
        -         - Pop ToS-1 and ToS, push their difference
          %       - Print ToS as an integer

รุ่นก่อนหน้า (14 ไบต์):

~\81|m/,!<.>i%

อ่านตัวละครจากอินพุต; หากค่า ASCII ของตัวละครนั้นหารด้วย 8 จะมีเศษเหลือให้พิมพ์ -1 มิฉะนั้นจะพิมพ์ 1


2

ถัง ,8 12 8 ไบต์

_d=2*1-.

ลองออนไลน์!

คำอธิบาย (ไวยากรณ์ไม่ถูกต้อง)

_        Take input and discard the last item
 d=      If the top of the stack is d:
   2*    Re-set the top of the stack as 2
     1-  Decrement the top of the stack by 1
       . Explicitly output the top of the stack

-4 ไบต์ต้องขอบคุณการจัดการ


อาจมีความแตกต่างของรุ่นล่าม TIO บ้าง ดูเหมือนว่ามันจะไม่จัดการกับ "หัว" หรือ "ก้อย"
จัดการ

ตอนนี้ฉันแก้ไขโปรแกรม
A̲̲

อาจมีความแตกต่างของรุ่นล่าม TIO บ้าง ดูเหมือนว่ามันจะใช้เวลาการป้อนข้อมูลโดยปริยายและฝืนมันเกี่ยวกับความพยายามที่จะประมวลผลข้อมูล inexistent ใด ๆ ^ที่ทำให้มันทำงานได้โดยไม่
จัดการ

BTW คุณไม่จำเป็นต้องทิ้งตัวอักษร 4 ตัวจนกระทั่ง“ t” เป็นตัวที่สอง“ d” หรือ“ l” เพื่อระบุอินพุตที่คุณได้รับ เพียงแค่ต้องส่งออกอย่างชัดเจนเพื่อให้สามารถออกจากการป้อนข้อมูลที่ไม่ได้ประมวลผลในกอง: ลองออนไลน์! .
จัดการ

ฉันคิดว่าฉันยังสามารถ -1 ไบต์ได้โดยเปลี่ยนเป็น "Reg": TIO!
A

1

Vitsyขนาด 13 ไบต์

แล้วฉันจะไปงานเลี้ยงช้าแค่ไหน ¯ \ _ (ツ) _ / ¯

zv&v'h'=)i1rN
z             Grab all input.
 v            Capture the top item (h or t) as a temp variable.
  &           Generate new stack, move to it.
   v'h'=      Test if the variable is h.
        )i    If it isn't, push -1.
          1   Push 1.
           r  Reverse the stack.
            N Print out the top item as a number.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.