ค้นหาคำอนันต์!


36

(หมายเหตุ: นี่เป็นการแยกส่วนจากการท้าทายครั้งก่อนของฉันค้นหาคำที่หมุนวน! )

คำจำกัดความของInfinity Word :

  1. หากคุณเชื่อมต่อกับเส้นโค้งของตัวละครทั้งหมดของInfinity Wordบนตัวอักษร (AZ) คุณจะได้รับสัญลักษณ์อินฟินิตี้∞เช่นในแผนภาพด้านล่าง
  2. การเชื่อมต่อที่สม่ำเสมอทั้งหมดจะต้องหยุดทำงานการเชื่อมต่อคี่ทั้งหมดต้องขึ้น
  3. คุณสามารถละเว้นตัวพิมพ์ใหญ่ / ตัวพิมพ์เล็กหรือพิจารณา / แปลงทั้งหมดเป็นตัวพิมพ์ใหญ่หรือทั้งหมดเป็นตัวพิมพ์เล็ก
  4. คำที่ป้อนเป็นอักขระในช่วงตัวอักษรของ AZ ไม่มีช่องว่างไม่มีเครื่องหมายวรรคตอนหรือสัญลักษณ์
  5. แต่ละคำจะต้องมีความยาว 5 ตัวอักษร คำ> 5 หรือ <5 ไม่ถูกต้อง
  6. หากคำมีอักขระซ้อนกันสองคำคำนั้นไม่ถูกต้องเช่น "FLOOD" หรือ "QUEEN"
  7. คำอนันต์ทั้งหมดเริ่มต้นและจบด้วยตัวละครเดียวกัน

นี่คือตัวอย่างบางส่วน:

คำอนันต์

งาน:

เขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบที่จะใช้คำจากอินพุตมาตรฐานและจะส่งออกถ้าเป็นInfinity Wordหรือไม่ เอาต์พุตสามารถเป็นจริง / เท็จ, 1/0, 1 / Null ฯลฯ

กรณีทดสอบ:

Infinity Words:
ALPHA, EAGLE, HARSH, NINON, PINUP, RULER, THEFT, WIDOW

NOT Infinity Words:
CUBIC, ERASE, FLUFF, LABEL, MODEM, RADAR, RIVER, SWISS, TRUST, 
KNEES, QUEEN, GROOVE, ONLY, CHARACTER, OFF, IT, ORTHO

กฎ:

  1. รหัสที่สั้นที่สุดชนะ

ภารกิจเสริม:

ค้นหารายการคำที่ไม่มีที่สิ้นสุดมากเท่าที่คุณจะทำได้ในพจนานุกรมภาษาอังกฤษ คุณสามารถใช้ตัวอย่างเป็นข้อมูลอ้างอิงรายการสินค้าทั้งหมดของคำภาษาอังกฤษที่นี่


เราสามารถสมมติว่าอินพุตมีความยาว 5 เสมอหรือไม่ คุณได้กำหนดกฎที่ 5: " แต่ละคำจะต้องมี 5 ตัวอักษรคำ> 5 หรือ <5 ไม่ถูกต้อง " แต่ไม่มีคำที่ไม่มีที่สิ้นสุดที่มีอักขระน้อยกว่าหรือมากกว่า 5 ตัว
Kevin Cruijssen

4
ตลกดีที่ALPHAสร้างรูปแบบนั้น
เสียชีวิต

@KevinCruijssen คุณต้องตรวจสอบว่าคำเคารพคำจำกัดความฉันได้อัพเดทคดีเท็จ
มาริโอ

1
@Arnauld ห้าตัว "A" เชื่อมต่อกับตัวเอง (หรือไม่ขยับเลย) สร้างจุดเดียวมันไม่ได้วาดสัญลักษณ์อินฟินิตี้ดังนั้นฉันไม่คิดว่ามันเป็นกรณีที่ดี
มาริโอ

3
ฉันได้ตัดสินใจที่จะแก้ไขปัญหาตัวเลือกงาน "ค้นหาเป็นรายการที่เป็นอินฟินิตี้คำได้มากเท่าที่คุณสามารถในพจนานุกรมภาษาอังกฤษ ..." ผมใช้แหล่งนี้และคำตอบของเควิน Cruijssenเพื่อผลิตรายการ 278 Infinity คำนี้
Thomas Quinn Kelly

คำตอบ:


19

เยลลี่ , 43 41 40 25 24 23 22 21 14 13 ไบต์

-7 ไบต์ขอบคุณ fireflame241 ( 0ị=1ị$-> =ṚḢและการใช้IIA⁼2,2ทดสอบการหมุน 4 ครั้ง)

-1 ต้องขอบคุณ Kevin Cruijssen (การใช้ nilad ที่ใช้งานไม่ได้Ø2ซึ่งทำให้ได้[2,2])

=ṚḢȧOIṠIIA⁼Ø2

TryItOnline
หรือกรณีทดสอบทั้งหมด (บวก "RULES")

อย่างไร?

คำอินฟินิตี้มี:

  1. ตัวอักษรตัวแรกและตัวสุดท้ายเดียวกัน;
  2. ความยาว 5;
  3. ไม่มีตัวอักษรเท่ากันติดกัน
  4. ผลรวมของ delta ตัวอักษรสี่ตัวของมันเท่ากับศูนย์;
  5. ผลรวมของสัญญาณสี่เดลตาอักษรของมันเท่ากับศูนย์;
  6. สองตัวอักษรบวกลบหรือสองตัวอักษรลบในแถว

แต่ทั้งหมด (1) และ (เท่า) (4) อาจจะต้มลงไปอยู่ในสภาพที่สัญญาณอักษรเดลต้าหมุนของบาง[1,1,-1,-1](ที่สัญลักษณ์ของ0เป็น0)

fireflame241 ตั้งข้อสังเกตว่านี่คือสิ่งที่เทียบเท่ากับ deltas ของ deltas ของสัญลักษณ์ delta ตัวอักษร[[2,2],[2,-2],[-2,2],[-2,-2]]ซึ่งอาจถูกทดสอบโดยค่าสัมบูรณ์ที่เท่ากับ[2,2]!

อย่างไร?

=ṚḢȧOIṠIIA⁼Ø2 - Main link: word
 Ṛ            - reverse word
=             - equals? (vectorises)
  Ḣ           - head (is the first character equal to the last?)
   ȧ          - and
    O         - cast word to ordinals
     I        - increments - the alphabet deltas (or just [] if 1st != last)
      Ṡ       - sign (vectorises)
       I      - increments - deltas of those signs
        I     - increments - deltas of those
         A    - absolute value (vectorises)
           Ø2 - literal [2,2]
          ⁼   - equals? (non-vectorising version)

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

คำอธิบายที่เข้ามา
Jonathan Allan

2
@PascalvKooten ส่วนใหญ่เพื่อความสนุกและเพื่อการแข่งขันที่รหัสกอล์ฟ - ฉันค่อนข้างใหม่กับรหัสกอล์ฟและเยลลี่ดังนั้นการรวมโปรแกรม Jelly เข้าด้วยกันจึงเป็นเหมือนตัวต่อปริศนาเกือบทุกครั้ง ฉันพบว่ามันน่าพอใจ หากใครอยากได้สิ่งที่จับต้องได้จากเกมนี้เราควรใช้มันเพื่อฝึกฝนทักษะในภาษาที่ใช้กันโดยทั่วไปในโลกแห่งความจริงแม้ว่าหรือแน่นอนสร้างภาษากอล์ฟของตัวเอง!
Jonathan Allan

1
@ lois6b :) คุณเริ่มต้นด้วยการกวดวิชาและจากนั้นใช้หน้าเว็บที่มีคำจำกัดความ Atom , คำจำกัดความ Quicksและเรียกดูรหัสที่มา
Jonathan Allan

1
14 ไบต์กอล์ฟหลักที่นี่ใช้IIเพื่อตรวจสอบความเท่าเทียมกันกับการหมุนของ 1,1, -1, -1
fireflame241

11

Java 8, 231 193 185 122 103 78 ไบต์

s->s.length==5&&(s[1]-s[0])*(s[3]-s[2])<0&(s[2]-s[1])*(s[4]-s[3])<0&s[4]==s[0]

ลองที่นี่

-38 ไบต์ขอบคุณที่@ dpa97สำหรับการเตือนให้ผมใช้แทนchar[] -63 ไบต์ขอบคุณสูตรที่ได้รับของ@KarlNapf -25 ไบต์โดยแปลงจาก Java 7 เป็น Java 8 (และส่งคืนบูลีนแทนจำนวนเต็ม)String

193 ไบต์ตอบ:

int c(char[]s){if(s.length!=5)return 0;int a=s[0],b=s[1],c=s[2],d=s[3],e=s[4],z=b-a,y=c-b,x=d-c,w=e-d;return e!=a?0:(z>0&y>0&x<0&w<0)|(z<0&y>0&x>0&w<0)|(z>0&y<0&x<0&w>0)|(z<0&y<0&x>0&w>0)?1:0;}

คำอธิบาย:

  • หากความยาวของสตริงไม่ใช่ 5 เราจะคืนค่า false
  • หากตัวอักษรตัวแรกไม่เท่ากับตัวอักษรตัวสุดท้ายเราจะกลับมา false
  • จากนั้นเราจะตรวจสอบกรณีที่ถูกต้องสี่รายการทีละรายการ (ขอระบุตัวอักษรห้าตัวเป็น 1 ถึง 5) และกลับมาtrueถ้ามันสอดคล้องกับกรณีใด ๆ ของพวกเขา (และfalseอื่น ๆ ):
    1. หากมีการกระจายอักขระห้าตัวเช่น: 1<2<3>4>5(เช่นALPHA)
    2. ถ้าห้าตัวอักษรที่มีการกระจายที่ชอบ: 1>2<3<4>5(เช่นEAGLE, HARSH, NINON, PINUP)
    3. หากมีการกระจายอักขระห้าตัวเช่น: 1<2>3>4<5(เช่นRULER)
    4. หากมีการกระจายอักขระห้าตัวเช่น: 1>2>3<4<5(เช่นTHEFT, WIDOW)

กฎสี่ข้อเหล่านี้สามารถทำให้ง่ายขึ้น1*3<0 and 2*4<0(ขอบคุณคำตอบ Python 2 ของ@KarlNapf )


2
+1 เพื่อชดเชย downvote ที่ไม่ได้อธิบาย ... เท่าที่ฉันสามารถบอกได้ว่านี่เป็นวิธีการทำงานที่สมบูรณ์แบบ
Arnauld

1
ฉันได้มันลงไปที่ 215 การแปลง s เป็นถ่าน [] ถ่าน [] c = s.toCharArray (); int z = c [1] -c [0], y = c [2] -c [1], ..
dpa97

@ ขอบคุณ dpa97 สำหรับการแจ้งเตือนที่จะใช้เป็นข้อมูลแทนchar[] String-38 ไบต์ขอบคุณสำหรับคุณ
Kevin Cruijssen

1
บูลีนของคุณสามารถปรับให้เหมาะสม: z,xและw,yต้องมีเครื่องหมายสลับดังนั้นจึงพอที่จะตรวจสอบz*x<0และw*y<0
Karl Napf

@KarlNapf อ่าฉันตีความความคิดเห็นของคุณผิดไม่กี่ชั่วโมงที่ผ่านมา ฉันได้ใช้สูตรที่ได้รับมาสำหรับ -63 ไบต์ :) ขอบคุณ
Kevin Cruijssen

4

JavaScript (ES6), 91 89 87 ไบต์

บันทึก 2 ไบต์ต้องขอบคุณ Ismael Miguel

s=>(k=0,[...s].reduce((p,c,i)=>(k+=p>c?1<<i:0/(p<c),c)),k?!(k%3)&&!s[5]&&s[0]==s[4]:!1)

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

เราสร้าง bitmask 4 บิตซึ่งkเป็นตัวแทนของการเปลี่ยน 4 ระหว่าง 5 อักขระของสตริง:

k += p > c ? 1<<i : 0 / (p < c)
  • หากอักขระก่อนหน้านั้นสูงกว่าอักขระถัดไปบิตจะถูกตั้งค่า
  • ถ้าตัวอักษรก่อนหน้าต่ำกว่าตัวถัดไปบิตจะไม่ถูกตั้งค่า
  • หากอักขระก่อนหน้านี้เหมือนกันกับตัวอักษรตัวถัดไป bitmask ทั้งหมดจะถูกบังคับเพื่อNaNให้คำถูกปฏิเสธ (เพื่อให้เป็นไปตามกฎ # 6)

bitmasks ที่ถูกต้องนั้นเป็นบิตที่มี1การเปลี่ยนสองครั้งติดต่อกัน(บิตแรกและบิตสุดท้ายที่ถูกพิจารณาว่าต่อเนื่องกันด้วย):

Binary | Decimal
-------+--------
0011   | 3
0110   | 6
1100   | 12
1001   | 9

กล่าวอีกนัยหนึ่งคือชุดค่าผสมซึ่ง ได้แก่ :

  • k? : มากกว่า 0
  • !(k%3): สอดคล้องกับ 0 โมดูโล 3
  • ต่ำกว่า 15

เงื่อนไขอื่น ๆ คือ:

  • !s[5] : มีอักขระไม่เกิน 5 ตัว
  • s[0]==s[4] : อักขระที่ 1 และ 5 เหมือนกัน

หมายเหตุ : เราไม่ได้ตรวจสอบอย่างชัดเจนk != 15เพราะคำที่ตามหลังรูปแบบดังกล่าวจะถูกปฏิเสธโดยเงื่อนไขสุดท้ายนี้

กรณีทดสอบ

รุ่นเริ่มต้น

สำหรับบันทึกรุ่นแรกของฉันคือ 63 ไบต์ ผ่านทุกกรณีทดสอบเรียบร้อยแล้ว แต่ล้มเหลวในการตรวจจับอักขระที่เหมือนกันติดต่อกัน

([a,b,c,d,e,f])=>!f&&a==e&&!(((a>b)+2*(b>c)+4*(c>d)+8*(d>e))%3)

ด้านล่างนี้เป็นรุ่น 53- ไบต์ที่ Neil แนะนำในความคิดเห็นซึ่งใช้ได้ดี (และล้มเหลว) ได้ดี:

([a,b,c,d,e,f])=>!f&&a==e&&!((a>b)-(b>c)+(c>d)-(d>e))

แก้ไข:ดูคำตอบของ Neilสำหรับรหัสด้านบน / ที่แก้ไขแล้วเสร็จ


0000ยังสอดคล้องกับ 0 modulo 3 แต่อีกครั้งคุณไม่สามารถมีตัวอักษรตัวแรกและตัวสุดท้ายเหมือนกันดังนั้นเช่น 15 คุณไม่จำเป็นต้องทดสอบอย่างชัดเจน
Neil

สำหรับเวอร์ชั่นเริ่มต้นนั้นคุณสามารถใช้!((a>b)-(b>c)+(c>d)-(d>e))?
Neil

p<c?0:NaNสามารถเขียนเป็น0/(p<c)ซึ่งจะช่วยประหยัด 2 ไบต์
Ismael Miguel

@Neil เกี่ยวกับการทดสอบกับ 0: คุณพูดถูก (อย่างไรก็ตามฉันจำเป็นต้องk?ทำการทดสอบเพราะเป็นไปได้NaN) เกี่ยวกับเวอร์ชันสำรองของคุณ: นั่นน่าจะใช้ได้จริง
Arnauld

@IsmaelMiguel - โทรดี! ขอบคุณ
Arnauld

4

JavaScript (ES6), 78 ไบต์

([a,b,c,d,e,f])=>a==e&&!(f||/(.)\1/.test(a+b+c+d+e)||(a>b)-(b>c)+(c>d)-(d>e))

อิงตามรหัสที่ไม่ถูกต้องของ @ Arnauld แต่เล่นกอล์ฟและแก้ไข ทำงานโดยตรวจสอบครั้งแรกว่าตัวอักษรตัวแรกเหมือนกับตัวที่ห้า (ซึ่งรับประกันได้ถึง 5 ตัวอักษร) และความยาวของสายอักขระไม่เกิน 5 หลังจากตรวจสอบตัวอักษรที่ซ้ำกันตามลำดับ ซึ่งควรมีจุดสูงสุดหนึ่งจุดและห่างกันสองตัวอักษรสองราง

  • หากจุดสูงสุดและรางเป็นตัวอักษรกึ่งกลางและตัวแรก / ตัวสุดท้ายการเปรียบเทียบสองตัวแรกและการเปรียบเทียบสองตัวสุดท้ายจะยกเลิก
  • หากจุดสูงสุดและรางเป็นตัวอักษรที่สองและสี่ดังนั้นการเปรียบเทียบกลางสองและการเปรียบเทียบทั้งสองด้านนอกจะถูกยกเลิก
  • มิฉะนั้นมีบางอย่างล้มเหลวในการยกเลิกและการแสดงออกโดยรวมกลับเท็จ

แก้ไข: ทางเลือก 78- ไบต์แก้ปัญหาตามคำตอบของ @ KarlNapf:

([a,b,c,d,e,f],g=(a,b)=>(a<b)-(a>b))=>a==e&&!f&&g(a,b)*g(c,d)+g(b,c)*g(d,e)<-1

3

รหัสออก Python 2 ขนาด 56 ไบต์

s=input()
v,w,x,y,z=map(cmp,s,s[1:]+s[0])
v*x+w*y|z>-2>_

เอาต์พุตผ่านรหัสออก: ข้อผิดพลาดสำหรับเท็จและเรียกใช้สำเร็จเป็นจริง

ใช้เวลาสตริงsที่มีตัวอักษรabcde, หมุนมันจะbcdeaไม่เปรียบเทียบ elementwise v,w,x,y,zของตัวละครที่เกี่ยวข้องและได้รับมอบหมายให้พวกเขาห้าตัวแปร ความยาวผิดจะให้ข้อผิดพลาด

คำอินฟินิตี้ทั้งหมดมี

v*x == -1
w*y == -1
z == 0

ซึ่งสามารถตรวจสอบได้พร้อมกันv*x+w*y|z == -2ดังนี้ การเปรียบเทียบการv*x+w*y|z>-2>_ลัดวงจรของการเชื่อมโยงแบบโซ่หากเป็นกรณีนี้และจะทำการประเมิน-2>_ซึ่งทำให้เกิดข้อผิดพลาดในชื่อ


อ่าเป็นวิธีที่ดีที่คุณเล่นกอล์ฟแบบมีเงื่อนไขมากขึ้น!
Karl Napf

3

Python 2, 110 87 60 ไบต์

บันทึก 1 ไบต์ขอบคุณ Neil

ต้องการอินพุตที่อยู่ในเครื่องหมายคำพูดเช่น 'KNEES'

Trueถ้ามันเป็นคำที่Falseไม่สิ้นสุดถ้าไม่และมันมีความยาว 5 และพิมพ์ข้อความผิดพลาดถ้าความยาวไม่ถูกต้อง

s=input()
a,b,c,d,e=map(cmp,s,s[1:]+s[0])
print a*c+b*d|e<-1

แรงบันดาลใจจากคำตอบของxnorที่ใช้map(cmp...

s=input()
e=map(cmp,s,s[1:]+s[0])
print e[4]==0and e[0]*e[2]+e[1]*e[3]==-2and 5==len(s)

วิธีแก้ปัญหาก่อนหน้า:

s=input()
d=[ord(x)-ord(y)for x,y in zip(s,s[1:])]
print s[0]==s[4]and d[0]*d[2]<0and d[1]*d[3]<0and 4==len(d)

ใช้ตรรกะที่เหมาะสมที่สุดของKevin Cruijssen


ทำไมไม่a*c+b*d+2==0==e?
Neil

@ ไม่มีใช่ทำไมไม่ แต่ xnor a*c+b*d|eนั้นสั้นกว่า
Karl Napf

ผมคิดว่า<-1การทำงานอาจเพราะทั้งสอง-2|1และเท่าเทียมกัน-2|-1 -1
Neil


2

Python 2, 71 ไบต์

lambda s:map(cmp,s,s[1:]+s[0])in[[m,n,-m,-n,0]for m in-1,1for n in-1,1]

รับค่าสตริงsด้วยอักขระabcdeหมุนไปที่bcdeaและทำการเปรียบเทียบองค์ประกอบของอักขระที่เกี่ยวข้อง

a  b   cmp(a,b)
b  c   cmp(b,c)
c  d   cmp(c,d)
d  e   cmp(d,e)
e  a   cmp(e,a)

-1, 0, 1ผลที่ได้คือรายชื่อของ จากนั้นตรวจสอบว่าผลลัพธ์เป็นหนึ่งในลำดับที่ถูกต้องของขึ้นและลง:

[-1, -1, 1, 1, 0]
[-1, 1, 1, -1, 0]
[1, -1, -1, 1, 0]
[1, 1, -1, -1, 0]

เป็นที่เกิดจากแม่แบบที่มี[m,n,-m,-n,0] m,n=±1การ0ตรวจสอบล่าสุดว่าอักษรตัวแรกและตัวสุดท้ายมีค่าเท่ากันและความยาวช่วยให้มั่นใจได้ว่าสตริงอินพุตมีความยาว 5


ทางเลือก 71. ตรวจสอบเงื่อนไขในการเปรียบเทียบในขณะที่รับรองความยาวที่เหมาะสม

def f(s):a,b,c,d,e=map(cmp,s,s[1:]+s*9)[:5];print a*c<0==e>b*d>len(s)-7

1

R, 144 ไบต์

คำตอบนั้นขึ้นอยู่กับตรรกะของ @Jonathan Allan มันอาจจะเป็นกอล์ฟ

s=strsplit(scan(,""),"")[[1]];d=diff(match(s,LETTERS));s[1]==tail(s,1)&length(s)==5&all(!rle(s)$l-1)&!sum(d)&!sum(sign(d))&any(rle(sign(d))$l>1)

กรณีทดสอบซอ - ริ (ตัวอย่างเวกเตอร์ แต่ตรรกะเดียวกัน)


ตั้งแต่คุณมีการตรวจสอบว่าlength(s)==5คุณสามารถแทนที่ด้วยs[1]==tail(s,1) วิธีการหนึ่งไบต์สั้นเพื่อตรวจสอบความยาวของมันs[1]==s[5] is.na(s[6])ร่วมกันทั้งสองเปลี่ยนแปลงกลับTRUEสำหรับsความยาว 5 ตรงและFALSEอย่างอื่นเช่นTRUE&NAเป็นNAแต่เป็นFALSE&NA FALSEนอกจากนี้คุณยังสามารถบันทึกไม่กี่ไบต์โดยการแทนที่ด้วย!sum(sign(d))&any(rle(sign(d))$l>1) !sum(a<-sign(d))&any(rle(a)$l>1)
rturnbull

1

อารัมภบท GNU, 47 ไบต์

i([A,B,C,D,A]):-A>B,B>C,C<D,D<A;i([B,C,D,A,B]).

กำหนดเพรดิเคตiที่ประสบความสำเร็จ (ในความเป็นจริงหลายต่อหลายครั้งในความเป็นจริง) สำหรับคำที่ไม่มีที่สิ้นสุดดังนั้นจึงส่งออก "ใช่" เมื่อเรียกใช้จากล่าม (ตามปกติสำหรับ Prolog); ล้มเหลวสำหรับคำที่ผู้สมัครที่มีตัวอักษรตัวแรกและตัวสุดท้ายไม่ตรงกันหรือไม่ยาว 5 ตัวอักษรดังนั้นจะแสดงผลเป็น "ไม่" เมื่อเรียกใช้จากล่าม และขัดข้องด้วยการล้นสแต็กหากกำหนดคำที่เป็นคำที่ไม่ใช่คำอินฟินิตี้ แต่เป็นตัวอักษรห้าตัวที่มีการจับคู่สองตัวแรกและตัวสุดท้าย (ฉันไม่แน่ใจว่าทำไมมันล่ม การเรียกแบบเรียกซ้ำควรจะถือได้ว่าเป็น tailcall เห็นได้ชัดว่าเครื่องมือเพิ่มประสิทธิภาพของ GNU Prolog ไม่ดีมาก) การประสบความสำเร็จคือความจริงของ Prolog เทียบเท่ากับความจริงและความล้มเหลวเทียบเท่ากับความเท็จ ความผิดพลาดนั้นมีความผิดพลาดมากกว่าความจริงและการแก้ไขจะทำให้การแก้ปัญหานั้นใช้เวลานานขึ้นอย่างมากดังนั้นฉันหวังว่าสิ่งนี้จะนับเป็นโซลูชันที่ถูกต้อง

อัลกอริทึมนั้นค่อนข้างง่าย (และแน่นอนว่าโปรแกรมนั้นสามารถอ่านได้ค่อนข้างดี); ตรวจสอบว่าตัวอักษรเป็นรูปแบบหนึ่งในสี่รูปแบบที่สร้างคำที่ไม่มีที่สิ้นสุดหรือไม่และลองเปลี่ยนรูปแบบอีกครั้ง เราไม่จำเป็นต้องตรวจสอบตัวอักษรสองตัวอย่างชัดเจนเนื่องจากตัวดำเนินการ<และ>ให้เราตรวจสอบโดยปริยายในเวลาเดียวกันกับที่เราตรวจสอบว่า deltas ตรงกัน


1

อันที่จริง , 38 27 ไบต์

คำตอบนี้เป็นแรงบันดาลใจส่วนใหญ่โดยโจนาธานอัลลันคำตอบของวุ้นที่ดีเยี่ยม อาจมีหลายสถานที่ที่สามารถเล่นกอล์ฟได้ดังนั้นคำแนะนำการเล่นกอล์ฟจึงยินดีต้อนรับ! ลองออนไลน์!

O;\♀-dY@♂s4R`0~;11({k`Míub*

Ungolfing

     Implicit input s.
O    Push the ordinals of s. Call this ords.
;    Duplicate ords.
\    Rotate one duplicate of ords left by 1.
♀-   Vectorized subtraction. This effectively gets the first differences of ords.
d    Pop ord_diff[-1] onto the stack. This is ords[0] - ords[-1].
Y    Logical negate ord_diff[-1], which returns 1 if s[0] == s[-1], else 0.
@    Swap (s[0] == s[-1]) with the rest of ord_diff.

♂s       Vectorized sgn() of ord_diff. This gets the signs of the first differences.
4R       Push the range [1..4] onto the stack.
`...`M   Map the following function over the range [1..4]. Variable x.
  0~;      Push -1 onto the stack twice.
  11       Push 1 onto the stack twice.
  (        Rotate x to TOS.
  {        Rotate the stack x times, effectively rotating the list [1, 1, -1, -1].
  k        Wrap it all up in a list.

     Stack: list of rotations of [1, 1, -1, -1], sgn(*ord_diff)
í    Get the 0-based index of sgn(*ord_diff) from the list of rotations. -1 if not found.
ub   This returns 1 only if sgn(*ord_diff) was found, else 0.
     This checks if the word loops like an infinity word.

*    Multiply the result of checking if the word s loops and the result of s[0] == s[-1].
     Implicit return.


1

TI-BASIC, 81 ไบต์

สายอักขระที่จะผ่านเข้าไปในโปรแกรมอยู่ใน Ans ส่งคืน (และแสดงโดยปริยาย) 1 หากคำที่ป้อนคือ Infinity Word และ 0 (หรือออกโดยมีข้อความแสดงข้อผิดพลาด) หากไม่มี

seq(inString("ABCDEFGHIJKLMNOPQRSTUVWXYZ",sub(Ans,A,1)),A,1,length(Ans
min(Ans(1)=Ans(5) and {2,2}=abs(deltaList(deltaList(deltaList(Ans)/abs(deltaList(Ans

ข้อผิดพลาดกับตัวอักษรซ้ำ ๆ หรือไม่ใช่ตัวอักษร 5 ตัว


1

05AB1E , 16 ไบต์

Ç¥DO_s.±¥¥Ä2DиQ*

ท่าเรือ@JonathanAllan 's คำตอบวุ้น

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

Ç             # Convert the (implicit) input string to a list of unicode values
              #  i.e. "RULES" → [82,85,76,69,82]
 ¥            # Take the deltas
              #  i.e. [82,85,76,69,82] → [3,-9,-7,13]
  DO          # Duplicate and take the sum
              #  i.e. [3,-9,-7,13] → 0
    _         # Check if that sum is exactly 0
              # (which means the first and last characters are equal)
              #  i.e. 0 and 0 → 1 (truthy)
 s            # Swap so the deltas are at the top of the stack again
            # Get the sign of each
              #  i.e. [3,-9,-7,13] → [1,-1,-1,1]
    ¥         # Get the deltas of those signs
              #  i.e. [1,-1,-1,1] → [-2,0,2]
     ¥        # And then get the deltas of those
              #  i.e. [-2,0,2] → [2,2]
      Ä       # Convert them to their absolute values
       2Dи    # Repeat the 2 two times as list: [2,2]
          Q   # Check if they are equal
              #  i.e. [2,2] and [2,2] → 1 (truthy)
 *            # Check if both are truthy (and output implicitly)
              #  i.e. 1 and 1 → 1 (truthy)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.