ปริศนาค้นหาคำ


29

ให้ข้อความสี่เหลี่ยมเป็นตัวต่อการค้นหาคำและสตริงการค้นหาพิจารณาว่าข้อความนั้นมีสตริงการค้นหาหรือไม่ สตริงการค้นหาอาจปรากฏขึ้น:

  • แนวนอนแนวตั้งหรือแนวทแยงมุม
  • ไปข้างหน้าหรือข้างหลัง

คุณสามารถเขียนฟังก์ชันหรือโปรแกรมและรับสองสายเป็นอินพุตผ่านอาร์กิวเมนต์ของฟังก์ชัน ARGV หรือ STDIN เอาต์พุตควรเป็นผลลัพธ์ที่เป็นจริงหรือเป็นเท็จซึ่งสามารถส่งคืนจากฟังก์ชันหรือเขียนไปยัง STDOUT

สมมติว่าข้อความนั้นจะมีอักขระ ASCII ที่พิมพ์ได้โดยอิสระ (รหัสฐานสิบหก 20 ถึง 7E) และตัวแบ่งบรรทัด ตัวอักษรเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ คุณอาจสมมติว่าข้อความที่ป้อนเป็นรูปสี่เหลี่ยมผืนผ้านั่นคือทุกบรรทัดมีความยาวเท่ากัน คุณอาจป้อนข้อมูลให้จบลงด้วยการขึ้นบรรทัดใหม่หรือไม่ (ถ้าเป็นเรื่องสำคัญสำหรับการส่งของคุณ)

นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ

ตัวอย่าง

การใช้กริดนี้จากบทความของ Wikipedia เกี่ยวกับการค้นหาคำว่าเป็นข้อมูลแรก:

WVERTICALL
ROOAFFLSAB
ACRILIATOA
NDODKONWDC
DRKESOODDK
OEEPZEGLIW
MSIIHOAERA
ALRKRRIRER
KODIDEDRCD
HELWSLEUTH

สตริงการค้นหาต่อไปนี้ควรให้ผลลัพธ์จริงหรือเท็จตามลำดับ:

Truthy: RANDOM, VERTICAL, HORIZONTAL, WORDSEARCH, WIKIPEDIA, TAIL
Falsy:  WordSearch, CODEGOLF, UNICORN

หรือใช้ข้อความอินพุตนี้

Lorem ipsum dolor sit amet consectetu
r adipisicing elit sed do eiusmod tem
por incididunt ut labore et dolore ma
gna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco lab
oris nisi ut aliquip ex ea commodo co
nsequat. Duis aute irure dolor in rep
rehenderit in voluptate velit esse ci
llum dolore eu fugiat nulla pariatur.

เราได้รับผลการค้นหาดังต่อไปนี้ (ใช้เครื่องหมายคำพูดตอนนี้เนื่องจากมีช่องว่างในสตริงการค้นหาบางรายการ):

Truthy: "Lorem", "mine", "uma bop", "tuetdod", "snol,a", "texas", "pii.d  v", "vexta"
Falsy:  "lorem", "wordsearch", "pii.d v", "mute"

2
ที่เกี่ยวข้อง: codegolf.stackexchange.com/questions/31743/…
edc65

คำตอบ:


7

CJam, 46 37 ไบต์

qN%{_zW%__,N**2$2$+,)/z\}4*]:+N*eas#)

อ่านกริดจาก STDIN และคำว่าเป็นอาร์กิวเมนต์บรรทัดคำสั่ง พิมพ์จำนวนเต็มบวกสำหรับการแข่งขันและ 0 สำหรับการแข่งขัน

ที่ค่าใช้จ่ายของสองไบต์พิเศษทั้งสองสตริง (คำ, linefeed, ตาราง) สามารถอ่านได้จาก STDIN:

qN%(\{_zW%__,N**2$2$+,)/z\}4*](\:+N*\#)

คุณสามารถลองรุ่นนี้ออนไลน์ที่มีล่าม CJam

ตัวอย่างการวิ่ง

$ for W in Lorem mine uma\ bop tuetdod snol,a texas pii.d\ \ v vexta WordSearch CODEGOLF UNICORN; do echo -e "$(cjam wordsearch.cjam "$W" < grid)\t$W"; done
1       Lorem
3085    mine
2055    uma bop
5142    tuetdod
3878    snol,a
1426    texas
5371    pii.d  v
2536    vexta
0       WordSearch
0       CODEGOLF
0       UNICORN

พื้นหลัง

สมมติว่าอินพุตเป็นกริดต่อไปนี้:

ABCD
EFGH
IJKL

แยกที่ linefeeds เราได้รับอาร์เรย์ดังต่อไปนี้:

A := [
         "ABCD"
         "EFGH"
         "IJKL"
     ]

ครอบคลุมคำตะวันออก (คำจากซ้ายไปขวา)

ตอนนี้เราเข้าร่วมองค์ประกอบของการAใช้สตริงlen(A)linefeeds เป็นตัวคั่น

"ABCD⏎⏎⏎EFGH⏎⏎⏎IJKL"

จากนั้นเราสับสตริงผลลัพธ์เป็นหน่วยความยาวlen(A) + len(A[0]) + 1:

[
    "ABCD⏎⏎⏎E"
    "FGH⏎⏎⏎IJ"
    "KL"
]

หากเรา "zip" อาร์เรย์ (สลับแถวและคอลัมน์) เราจะได้รับ:

[
    "AFK"
    "BGL"
    "CH"
    "D⏎"
    "⏎⏎"
    "⏎⏎"
    "I⏎"
    "EJ"
]

ที่ครอบคลุมคำตะวันออกเฉียงใต้

หากเราซิป A และกลับลำดับของแถวผลลัพธ์เราจะได้รับ:

[
    "DHL"
    "CGK"
    "BFJ"
    "AEI"
]

ที่ครอบคลุมภาคใต้และ - หลังจากทำซ้ำกระบวนการสำหรับ diagonals - คำตะวันตกเฉียงใต้

การซิปและการย้อนกลับอีกครั้งเราได้รับ:

[
    "LKJI"
    "HGFE"
    "DCBA"
]

ที่ครอบคลุมตะวันตกและ - หลังจากทำซ้ำกระบวนการสำหรับเส้นทแยงมุม - คำทางตะวันตกเฉียงเหนือ

การซิปและการย้อนกลับอีกครั้งเราได้รับ:

[
    "IEA"
    "JFB"
    "KGC"
    "LHD"
]

ที่ครอบคลุมภาคเหนือและ - หลังจากทำซ้ำกระบวนการสำหรับ diagonals - คำตะวันออกเฉียงเหนือ

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

รหัสทำตามที่อธิบายไว้ในส่วนก่อนหน้าโดยมีความแตกต่างเล็กน้อยสองประการ:

  • มันซิปและกลับด้านหนึ่งครั้งในตอนแรก
  • มันคำนวณเป็นlen(A) + len(A[0])len(A + zip(A))

ในที่สุดมันจะรวมแถวทั้งหมดของอาร์เรย์ที่สร้างขึ้นทั้งหมดโดยใช้ linefeeds เป็นตัวคั่นและค้นหาคำในสตริงผลลัพธ์

qN%                                   " A := split(input(),'\n')                          ";
   {                    }4*           " Do 4 times:                                       ";
    _zW%                              "   B := reverse(zip(A))                            ";
        __,N**                        "   C := B.join(len(B) * '\n')                      ";
              2$2$+,)/z               "   D := zip(C.chunks(len(A + B) + 1))              ";
                       \              "   A := B                                          ";
                           ]          " Collect all values of A and D in an array R.      ";
                            :+        " R := flatten(R)                                   ";
                              N*      " R := R.join('\n')                                 ";
                                eas   " I := flatten(ARGV)                                ";
                                   #) " print R.index(I) + 1                              ";

7

Java: 183 211 321

boolean s(char[]w,char[]s){int j,z,a=s.length,i=a*9,f=1,q=0;for(;s[q++]>10;);for(;i-->0;)for(j=w.length,z=i/9;i%9!=4&j-->0&z>=0&z<a&&s[z]==w[j];z+=q*(i/3%3)+i%3-q-1)f*=j;return f==0;}

กำลังดุร้ายขั้นพื้นฐาน ฉันไม่คิดว่าจะพูดอะไรมาก อินพุตเป็นเข็มแรกและกองหญ้าที่สอง สมมติว่ากริดถูกยกเลิกการขึ้นบรรทัดใหม่

รุ่นที่อ่านง่ายขึ้นเล็กน้อยพร้อมเคสทดสอบแสดง:

public class WordSearch {
    static String grid = "WVERTICALL\nROOAFFLSAB\nACRILIATOA\nNDODKONWDC\nDRKESOODDK\nOEEPZEGLIW\nMSIIHOAERA\nALRKRRIRER\nKODIDEDRCD\nHELWSLEUTH";
    static String search = "RANDOM";

    public static void main(String[] args) {
        System.out.println(new WordSearch().s(search.toCharArray(),grid.toCharArray()));
    }

    boolean s(char[]w,char[]s){
        int j,z,a=s.length,i=a*9,f=1,q=0;
        for(;s[q++]>10;);
        for(;i-->0;)
            for(j=w.length,z=i/9;
                i%9!=4&j-->0&z>=0&z<a&&s[z]==w[j];
                z+=q*(i/3%3)+i%3-q-1)
                f*=j;
        return f==0;
    }
}

if(e<1)return 1>0;อาจเป็นไปreturn e<1;ไม่ได้
FryAmTheEggman

@FryAmTheEggman ไม่ว่าจะกลับมาหลังจากพบความล้มเหลวครั้งแรกดังนั้นมันจะไม่ค้นหากริดทั้งหมด
Geobits

1
อาขอโทษได้หายไปในที่นั่น; _;
FryAmTheEggman

4
ออกสองลูปอาจจะทรุดตัวลงเป็นหนึ่งแทนดังนั้นคุณควรจะทำi=a*9,และfor(;i-->0;)แล้วz=i/9;และi%a!=4&และอื่น ๆ ?
จะ

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

6

JavaScript (E6) 111 116

กำลังค้นหาตัวละครทุกตัวในทุกทิศทุกทาง

F=(b,w)=>
  [1,-1,r=b.search('\n'),-r,++r,-r,++r,-r].some(d=>
    [...b].some((_,p)=>
      [...w].every(c=>c==b[p+=d],p-=d)
    )
  )

ทดสอบในคอนโซล FireFox / Firebug

;["RANDOM", "VERTICAL", "HORIZONTAL", "WORDSEARCH", "WIKIPEDIA", "TAIL",
"WordSearch", "CODEGOLF", "UNICORN"]
.forEach(w=>console.log('\n'+ w +' -> '+
  F("WVERTICALL\nROOAFFLSAB\nACRILIATOA\nNDODKONWDC\nDRKESOODDK\nOEEPZEGLIW\nMSIIHOAERA\nALRKRRIRER\nKODIDEDRCD\nHELWSLEUTH",w)))

เอาท์พุต

RANDOM -> true
VERTICAL -> true
HORIZONTAL -> true
WORDSEARCH -> true
WIKIPEDIA -> true
TAIL -> true
WordSearch -> false
CODEGOLF -> false
UNICORN -> false

5

Python, 175

ไม่ได้รับแรงบันดาลใจมากนัก แต่นี่ไป:

def s(h,n):
 l=h.find('\n')+2;h+='\n'*l;L=i=len(h)
 while i>0:
  i-=1
  for d in[-l,1-l,2-l,-1,1,l-2,l-1,l]:
    j=i;m=len(n)
    for c in n:m-=c==h[j%L];j+=d
    if m<1:i=-1
 return-i

อาร์กิวเมนต์แรกคือกองหญ้าส่วนที่สองคือเข็ม


ฉันคิดว่าคุณสามารถบันทึก 6 ตัวอักษรโดยใช้และh,n=input() printนอกจากนี้ยังใช้งานได้กับอินพุตที่ไม่ใช่สี่เหลี่ยมจัตุรัสหรือไม่? (m = len (n)? ฉันยอมรับว่าคุณไม่เข้าใจสิ่งที่คุณกำลังทำอย่างเต็มที่ดังนั้นฉันอาจผิดอย่างสมบูรณ์!)
FryAmTheEggman

@FryAmTheEggman: ใช่มันใช้งานได้กับอินพุต nonsquare
Ell

1
บางมาตรฐานการเพิ่มประสิทธิภาพหลาม: while i>0ไปwhile i:(เนื่องจากiไม่สามารถเป็นลบ) เพื่อif m<1:i=-1 i-=m<1
xnor

1
@ xnor ฉันคิดว่าคุณอาจเข้าใจผิดif m<1:i=-1เหมือนif m<1:i-=1ว่าทั้งสองจะไม่ทำงานเพราะเขาตั้งค่าiเป็นลบ
FryAmTheEggman

@FryAmTheEggman โอ้ใช่ฉันทำผิดทั้งหมด
xnor

5

Bash + coreutils, 214 169 ไบต์

r()(tee >(rev) $@)
t()(eval paste -d'"\0"' `sed 's/.*/<(fold -1<<<"&")/'`)
d()(while IFS= read l;do echo "$a$l";a+=_;done|t)
r<<<"$2"|r >(d) >(r|t) >(r|d)|r|grep -q "$1"

การใช้งานฟังก์ชั่น 3 แปลงr, tและdจะกลับไขว้ทแยงและการเปลี่ยนแปลงในทุกชุดที่จำเป็น

อัปเดต - rตอนนี้ฟังก์ชั่นจะสร้างเอาท์พุทแบบกลับด้านและไม่กลับด้านเพื่อความนุ่มนวลเป็นพิเศษ

ป้อนผ่านอาร์กิวเมนต์ commandline - สตริงการค้นหาตามด้วยบล็อก (ค้นหาบรรทัดใหม่) คั่นด้วยคำ

เอาท์พุทเป็นรหัสสถานะการออกจากเชลล์ที่ถูกต้องตามหลัก - 0 หมายถึง TRUE และ 1 หมายถึง FALSE

เอาท์พุท:

$ for w in "Lorem" "mine" "uma bop" "tuetdod" "snol,a" "texas" "pii.d  v" "vexta" ; do ./ws.sh "$w" "Lorem ipsum dolor sit amet consectetu
r adipisicing elit sed do eiusmod tem
por incididunt ut labore et dolore ma
gna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco lab
oris nisi ut aliquip ex ea commodo co
nsequat. Duis aute irure dolor in rep
rehenderit in voluptate velit esse ci
llum dolore eu fugiat nulla pariatur."; echo $?; done
0
0
0
0
0
0
0
0
$ for w in WordSearch CODEGOLF UNICORN ; do ./ws.sh "$w" "Lorem ipsum dolor sit amet consectetu
r adipisicing elit sed do eiusmod tem
por incididunt ut labore et dolore ma
gna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco lab
oris nisi ut aliquip ex ea commodo co
nsequat. Duis aute irure dolor in rep
rehenderit in voluptate velit esse ci
llum dolore eu fugiat nulla pariatur."; echo $?; done
1
1
1
$ 

1. ฉันกำลังจะแนะนำT()(tee >(r) $@)แต่ก็ยังดีกว่า 2. ฉันไม่คิดว่าฉันเคยเห็นไวยากรณ์ของฟังก์ชันนั้นมาก่อน 3. พิจารณาว่าสตริงที่ไม่ว่างเปล่าเป็นความจริงและสตริงที่ว่างเปล่าเป็นเท็จฉันคิดว่าคุณสามารถละเว้น-qได้
เดนนิส

หากคุณกำหนดr()(tee >(rev) $@), r<<<"$2"|r >(d) >(r|t) >(r|d)|r|grep "$1"ควรจะทำงานได้เป็นอย่างดี
เดนนิส

ฉันไม่ได้ทำการทดสอบอะไรเลย แต่ทั้งสองกรณีทดสอบในคำถามถูกตรวจสอบเมื่อฉันพยายาม
เดนนิส

@Dennis Nice - มันใช้ได้แล้วตอนนี้ ฉันตรวจสอบกับ Martin - เขาต้องการที่-qจะยังคงอยู่
Digital Trauma

5

C 163

f(char*h,char*n){int i,j,d,p,y=0,l=strlen(h),w=strchr(h,10)-h+1;for(i=l*9;i--;y+=d&&!n[j]){p=i/9;d=i%9/3*w-w+i%3-1;for(j=0;p>=0&p<l&h[p]==n[j];j++)p+=d;}return y;}

ไม่มีการจัดเรียงกริดใหม่ฉันเพียงแค่ลองตัวอักษรเริ่มต้นทุกตัวในทุกทิศทางแล้วเดินไปตามทางจนกว่าฉันจะวิ่งออกจากกริดหรือพบความไม่ตรงกัน

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

Ungolfed ในโปรแกรมทดสอบ

char h[]="WVERTICALL\nROOAFFLSAB\nACRILIATOA\nNDODKONWDC\nDRKESOODDK\nOEEPZEGLIW\nMSIIHOAERA\nALRKRRIRER\nKODIDEDRCD\nHELWSLEUTH\n";

f(char*h,char*n){                                   //haystack,needle
  int i,j,d,p,y=0,l=strlen(h),w=strchr(h,10)-h+1;   //l=length of whole grid. w=width of row, including terminal newline ASCII 10
  for(i=l*9;i--;){                                  //for each start letter and direction
    p=i/9;                                          //pointer to start letter
    d=i%9/3*w-w+i%3-1;                              //9 possible values of direction vector {-w,0,w}+{-1,0,1}
    for(j=0;p>=0&p<l&h[p]==n[j];j++)p+=d;           //walk p in the direction defined by d until we walk off the top or bottom of the grid or a mismatch is fount
    y+=d&&!n[j];                                    //if we got all the way to the terminal 0, record it as a hit. If d=0, don't record as this is an invalid direction.
  }
  return y;   
}

main(int c, char**v){
  printf("%d",f(h,v[1]));  
}

เอาท์พุต

โปรดทราบว่าฟังก์ชั่นจะคืนค่าจำนวนเหตุการณ์ทั้งหมดของสตริงที่ค้นหาในตาราง ดังนั้นจึงODส่งกลับ 6 หากไม่พบเหตุการณ์ที่เกิดขึ้นก็จะส่งกลับ 0 ซึ่งเป็นค่าเท็จใน C การเปลี่ยนเป็นy|=d*!n[j]บันทึกหนึ่งตัวอักษร แต่สูญเสียฟังก์ชันการทำงานนี้

$ ./a UNICORN
0

$ ./a CODEGOLF
0

$ ./a WordSearch
0

$ ./a RANDOM
1

$ ./a WORDSEARCH
1

$ ./a VERTICAL
1

$ ./a HORIZONTAL
1

$ ./a WIKIPEDIA
1

$ ./a TAIL
1

$ ./a OD
6

5

C # - 218 197 186 ไบต์

ฟังก์ชัน C # ที่รับ 2 สตริงคำแรกที่ค้นหาหลังจากนั้นกริดที่มีการป้อนบรรทัด ( \n) ระหว่างบรรทัด ตอนนี้สิ่งต่าง ๆ กำลังหมดหวัง ... ดังนั้นจริง ๆ แล้วว่าการแก้ไขก่อนหน้าของฉันไม่ทำงาน!

รหัส Golfed:

bool F(string D,string S){int l=S.Length,i=l*13,r,p;for(S+="\n";i-->l*5;i=r<0?r:i)for(r=D.Length,p=i%l;p>-1&p<l&r-->0&&D[r]==S[p];p+=(S.IndexOf('\n')+1)*(i/l%9/3-1)+i/l%3-1);return i<0;}

golfed น้อยกว่าด้วยรหัสทดสอบ:

class P
{
    static void Main()
    {
        System.Console.WriteLine(new P().F(System.Console.ReadLine(),System.Console.In.ReadToEnd())?"Truthy":"Falsy"); // because why not
    }

    bool F(string D,string S)
    {
        int l=S.Length,i=l*13,r,p;

        for(S+="\n";i-->l*5;i=r<0?r:i) // for each cell/direction
            for(r=D.Length,p=i%l;p>-1&p<l&r-->0&&D[r]==S[p];p+=(S.IndexOf('\n')+1)*(i/l%9/3-1)+i/l%3-1); // test against string (backwards)

        return i<0;
    }
}

4

Haskell - 173

แทนที่จะค้นหาบนกริดโดยตรงฉันเปลี่ยนกริดในวิธีที่ต่างกันและจับคู่คำกับแต่ละแถวของกริดใหม่

ตัวอย่างเช่น,

G1    G2    G3       G4   G5

abcd  aA1   abcd     a..  ..1
ABCD  bB2   .ABCD    bA.  .A2
1234  cC3   ..1234   cB1  aB3
      dD4            dC2  bC4
                      D3  cD
                       4  d

ค้นหาคำในแต่ละแถวของ G1, G2, G4 และ G5 จากนั้นเราก็ทำเสร็จแล้ว โปรดทราบว่า G3 ไม่ได้ใช้ฉันโพสต์ไว้ที่นี่เพื่อประกอบภาพเท่านั้น

แนวคิดที่คล้ายกันนี้ใช้กับการค้นหาไปข้างหน้าและข้างหลัง: เพียงแค่ค้นหาคำเดิมและคำที่ตรงกันข้าม

ตอนนี้เราได้ค้นหา 8 ทิศทางแล้ว นี่คือรหัสที่มีความถูกต้องได้รับการตรวจสอบโดยสคริปต์อื่น

import Data.List
v=reverse
t=transpose
y=any
d r=zipWith(++)(scanr(\_->('\n':))[]r)r
g r w=y(y$y((==w).take(length w)).tails)[r,t r,t.d$r,t.d.v$r]
f r w=y(g(lines r))[w,v w]

ฟังก์ชั่นfคือสิ่งที่เราต้องการและอาร์กิวเมนต์ของมันrคือสตริงสี่เหลี่ยมผืนผ้าwเป็นคำที่ค้นหา


4

Python 2 - 246 259 275 308 298 297 294 313 322

w,s=input()
r=range
d='\n'
I=''.join
w=w.split(d)
t,u=len(w),len(w[0])
v=d.join([I(x)for x in zip(*w)]+[d]+[I([w[i+j][i]for i in r(min(u,t-j))])+d+I([w[i][i+j]for i in r(min(t,u-j))])for j in r(max(t,u))]+[d]+w)
print s in v or s[::-1]in v

ขอบคุณ Will สำหรับความช่วยเหลือเกี่ยวกับการพิมพ์และกำหนดการเข้าร่วม

ขอบคุณรถไฟใต้ดินที่ทำให้ฉันนึกถึงพื้นที่เล่นกอล์ฟอย่างถูกต้อง p

แก้ไขสำหรับการจับคู่ที่ไม่ดีเนื่องจากใช้ ',' เป็นตัวคั่น

เห็นได้ชัดว่าวิธีที่ดีที่สุดในการเล่นกอล์ฟคือการเพิ่มการเลื่อนแนวนอนเป็นตัน

การป้อนข้อมูลที่เป็นช่องว่าง ปังขึ้นบรรทัดใหม่คั่นบรรทัดในคำพูด: "WVERTICALL \ nROOAFFLSAB \ nACRILIATOA \ nNDODKONWDC \ nDRKESOODDK \ nOEEPZEGLIW \ nMSIIHOAERA \ nALRKRRIRER \ nKODIDEDRCD \ nHELWSLEUTH", "สุ่ม"


1
L=len;J=''.joinฯลฯ และprint any(s in(v,d,w,r...))? ฉันกำลังจะไปตามเส้นเดียวกันเมื่อผมเห็นคุณโพสต์ :)
Will

@ จะขอบคุณสำหรับความช่วยเหลือ! การกำหนดค่าใช้จ่าย len เท่ากับตัวละครให้มากที่สุดเท่าที่จะทำได้และฉันไม่แน่ใจเกี่ยวกับวิธีกำหนดการเข้าร่วมอย่างเหมาะสม
FryAmTheEggman

ทุกที่ที่คุณมี)หรือ]ตามด้วยช่องว่างคุณสามารถออกจากพื้นที่
undergroundmonorail

2

APL (Dyalog Classic)ขนาด 44 ไบต์

1∊⍞⍷↑{⍉0,⍵,↑(0,⊢)\↓0,⍵}¨{⍉⌽⍵}\4⍴⊂↑a⊆⍨a≠⊃⌽a←⎕

ลองออนไลน์!


อืมฉันขอโทษ แต่ดูเหมือนว่าคุณไม่สามารถรับข้อมูลเช่นนี้ที่นี่มันจะต้อง\nแยกจากกัน (นั่นคือมี⎕TC[2]ตัวคั่น)
Erik the Outgolfer

@EriktheOutgolfer โอ้อึ ... ฉันจะแก้ไขในภายหลัง ขอบคุณ
ngn

แก้ไขแล้วตอนนี้น่าเสียดายอีกต่อไป
ngn

0

J , 60 53 ไบต์

<@[e.[:,[:(;|.)@>[:<\\.@>[:(<"1,</.)@>@(;|.@|:)[;.2@]

ลองออนไลน์!

ต้องการอินพุตแรกเพื่อไม่มีบรรทัดใหม่

คำอธิบาย:

linkrotate=: ;|.@|:     NB. link with itself rotated 90° ccw
infixes   =: <\\.       NB. list of boxes containing the infixes
lines     =: <"1 , </.  NB. horizontal and diagonal lines, boxed
linkrev   =: ;|.        NB. link with itself reversed
appearin  =: <@[ e. [: , [: linkrev@> [: infixes@> [: lines@>@linkrotate [;.2@]

ลองออนไลน์!

ตะขอมีประโยชน์


มันดูเหมือนว่านี้ทำงานมากเกินไป (51 bytes)
user202729

0

วุ้นขนาด 16 ไบต์

แก้ไขได้ ความท้าทาย (อาจซ้ำซ้อน) ที่เกี่ยวข้องโดยมี 15 จาก 16 ไบต์เหล่านี้เป็นแกนหลักของรหัส ...

ỴZU$3С;ŒD$€Ẏw€Ẹ

ลิงก์ dyadic ยอมรับรายการอักขระทางด้านซ้ายและรายการอักขระทางด้านขวาซึ่งส่งคืน 1 หากพบและ 0 หากไม่ใช่

ลองออนไลน์!

อย่างไร?

ZU$3С;ŒD$€Ẏw€Ẹ - Link: words, grid
   3С          - repeat three times and collect the results (inc input):
  $             -   last two links as a monad:
Z               -     transpose
 U              -     upend     (together these rotate by a quarter)
          €     - for €ach:
         $      -   last two links as a monad:
       ŒD       -     get forward-diagonals
      ;         -     concatenate
           Ẏ    - tighten (to get all the runs across the grid) 
             €  - for €ach run:
            w   -   sublist-index (0 if not found)
              Ẹ - any truthy? (i.e. was the word found?)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.