เอาต์พุตตำแหน่งแรกในโปรแกรมของคุณสำหรับอักขระอินพุตแต่ละตัว


43

ท้าทาย

เขียนโปรแกรมที่ไม่ว่างเปล่า / ฟังก์ชั่นpที่ได้รับสายเข้าไม่ว่างเปล่าs, เอาท์พุทตำแหน่งของเกิดขึ้นครั้งแรกของตัวละครของแต่ละในรหัสแหล่งที่มาของsp

ตัวอย่างเช่นหากโปรแกรมของคุณคือ

main() { cout << magic << cin }
^0   ^5   ^10  ^15  ^20  ^25

และได้รับอินพุตabcd{เอาต์พุตควรเป็น

[1, x, 9, x, 7] (0-based)        [2, x, 10, x, 8] (1-based)

นี่xแสดงให้เห็นถึงผลใด ๆ ที่ไม่ได้เป็นผลผลิตที่ถูกต้องสำหรับตำแหน่งตัวอักษร (เช่นจำนวนลบ, 0ถ้าคุณใช้การจัดทำดัชนี 1-based NaN, Infสตริงpotatoเป็นจำนวนมากขึ้นกว่าความยาวของโปรแกรม ฯลฯ )

ข้อ จำกัด

ไม่อนุญาตให้อ่านซอร์สโค้ด (เช่นใน Quine ที่เหมาะสม) อนุญาตให้ใช้ความคิดเห็นได้ แต่จะนับรวมกับคะแนนของคุณ

อินพุตและเอาท์พุตสามารถทำได้ในรูปแบบที่สมเหตุสมผล แต่ต้องไม่คลุมเครือ (เฉพาะตัวคั่นเพิ่มเติมไม่มีrandสตรีมและอ้างว่าคำตอบนั้นอยู่ที่ใดที่หนึ่ง) สอดคล้องกัน (เช่นxจากข้างบนควรเป็นค่าเดียวกันเสมอ) และมนุษย์ อ่านได้ ; ตัวอย่างเช่นสตริงหรืออาร์เรย์อักขระ คุณสามารถสมมติว่าอินพุตเป็นสตริง (หรืออาร์เรย์) ของอักขระ ASCII ที่พิมพ์ได้ ไม่จำเป็นต้องจัดการ Unicode ทั้งชุด


กำหนดโค้ดเพจเองหรือ ASCII ที่ไม่สามารถพิมพ์ได้ในโค้ดของคุณ?

หากภาษาของคุณใช้โค้ดเพจที่กำหนดเอง (Jelly, APL และอื่น ๆ ) คุณจะต้องคำนึงถึงเรื่องนั้นด้วย (ดังนั้นโปรแกรม€æÆจะต้องแสดงผลลัพธ์[1, x, 2]สำหรับอินพุต€%æ) การใช้เฉพาะอักขระที่ไม่ใช่ ASCII เพื่อส่งออก-1เสมอ (เนื่องจากอินพุตเป็น ASCII เท่านั้น) ไม่ใช่โซลูชันที่ถูกต้อง คุณอาจจะคิดว่าโปรแกรมของคุณโดยกำเนิดยอมรับเพจรหัสที่กำหนดเองของคุณเช่นถ้าโปรแกรมของคุณมีวิธีการของการแปลงตัวอักษรที่Aจะเป็นจำนวนเต็ม65(การเข้ารหัส ASCII), คุณอาจคิดว่ามันตอนนี้แปลงตัวอักษรที่ 65 65ในเพจของคุณไป


แรงบันดาลใจจากความท้าทายต่อไปนี้: การรับรู้ตำแหน่ง


การใช้อักษรตัวพิมพ์ใหญ่มีความสำคัญหรือไม่
Kritixi Lithos

@KritixiLithos โดยค่าเริ่มต้นใช่
Martin Ender

@KritixiLithos มันทำแน่นอน
Sanchises

หากโปรแกรมของฉันใช้ดัชนี0ถึง9เท่านั้นฉันต้องมีตัวคั่นหรือฉันสามารถส่งออกเช่น01030708070?
เดนนิส

@Dennis ไม่คุณไม่ได้ มันไม่คลุมเครือสม่ำเสมอและอ่านง่าย การขอตัวคั่นจะไม่เพิ่มสิ่งที่น่าสนใจให้กับความท้าทายดังนั้นโดยทั้งหมดหมายความว่าการนับไบต์ของคุณต่ำเกินไป ;)
Sanchises

คำตอบ:


24

Python2, 55 ไบต์

a=" )dfi(+m,nprut.';";print map(('a="'+a).find,input())

เริ่มต้นด้วยสตริงที่มีอักขระทั้งหมดที่ใช้ในรหัสแล้วค้นหาดัชนี


5
ฉันไม่เห็นว่านี่เป็นคำตอบที่น่าเบื่อ ฉันคิดว่าการใช้ควินมาตรฐานนั้นน่าสนใจน้อยกว่านี้มาก :)
Martin Ender

เนื่องจากนี่คือ Python 2, จะไม่เป็นการหยุดพักของอินพุตส่วนใหญ่หรือไม่ raw_inputถ้าไม่หยุดพักที่คุณจะต้องใช้
TidB

@TidB อืมฉันเดาไม่เลยเหรอ? คุณมีความคิดเห็นใดในใจ?
ร็อด

@ เร็วไม่เป็นไรฉันแค่โง่เล็กน้อย มันจะทำงานเสมอเมื่อคุณป้อน iterable โง่ฉัน
TidB

12

Lenguage , 56,623 ไบต์

ด้านล่างเป็น hexdump ของ 256 ไบต์แรก ไบต์ที่เหลือสามารถเลือกโดยพลการ

0000000: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f  ................
0000010: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f  ................
0000020: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f   !"#$%&'()*+,-./
0000030: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f  0123456789:;<=>?
0000040: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f  @ABCDEFGHIJKLMNO
0000050: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f  PQRSTUVWXYZ[\]^_
0000060: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f  `abcdefghijklmno
0000070: 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f  pqrstuvwxyz{|}~.
0000080: 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f  ................
0000090: 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f  ................
00000a0: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af  ................
00000b0: b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf  ................
00000c0: c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf  ................
00000d0: d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df  ................
00000e0: e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef  ................
00000f0: f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff  ................

เอาต์พุตเป็นไบต์ตามธรรมเนียมสำหรับ brainfuck และคณะ

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

,[.,]นี้เป็นโปรแกรมที่ง่ายแมวโดยเฉพาะ

ซอร์สโค้ดมีค่า 256 ไบต์ทั้งหมดตามลำดับดังนั้นดัชนีของแต่ละไบต์ในนั้นจะตรงกับค่าของมัน


4
อืมฉันคิดว่า Lenguage เป็นภาษาเดียวที่ผู้คนมักจะมีขนาดใหญ่กว่าคำสั่งสามคำ ...
Sanchises

2
Lenguage ยังเป็นภาษาเดียวที่พบวิธีโกงอย่างต่อเนื่องซึ่งจะไม่สามารถแข่งขันในภาษาอื่นจากระยะไกลได้ : P
Dennis

จะไม่+[,.]ทำคะแนนที่ดีกว่านี้หรือ
Sanchises

@Sanchises นั่นจะช่วยประหยัดได้ประมาณ 12,000 bytes แต่มันก็จะพิมพ์ค่าว่างเป็นพิเศษตอนท้าย
เดนนิส

2
ดีฉันคิดว่า null null อยู่ใน input (แม้ว่าฟังก์ชั่นคือการยุติสตริง) และจะอยู่ที่ตำแหน่งที่ 0 ในโปรแกรมของคุณ ... ;)
Sanchises

10

Lenguage , 1.22e7 ไบต์

ประกอบด้วย12263215 NULไบต์(Hex 0x00)

ส่งออก a NULสำหรับตัวละครทุกตัวที่ไม่ปรากฏในแหล่งที่มา

เล่ห์เหลี่ยมคืออินพุตจะไม่ประกอบด้วย a NULดังนั้นเราจึงส่งออกจำนวนNULs ที่มีอักขระในอินพุตเสมอ

นี่แปลเป็นโปรแกรม Brainfuck ต่อไปนี้

,[[-].,]

และด้วยการสลาย ...

,[[-].,]
,[    ,]    #Basic Input loop.
  [-]       #Zero out the cell.
     .      #Print it (A NUL).

นี่แสดงให้เห็นถึงพลังที่แท้จริงของ Lenguage ในฐานะภาษากอล์ฟ กลัวมัน


2
เล่ห์เหลี่ยมที่ฉลาดเช่นนี้คุณเกือบจะชนะ ... คุณลองย้อนกลับด้วยใช่เช่น 0x00 ไบต์และการจัดทำดัชนี 1 รายการ?
Sanchises

ฉันอยากจะรัก แต่ Brainfuck / Lenguage (หรืออย่างน้อยก็เป็นล่ามที่ฉันใช้) ไม่สามารถแยกความแตกต่างระหว่าง EOF และ 0x00 ดังนั้นฉันจะไม่สามารถตอบความท้าทายได้
ATaco

Brainfuck และคณะ โดยปกติจะได้รับอนุญาตให้พิมพ์จำนวนเต็มเป็นไบต์เช่นคุณจะพิมพ์ SOH สำหรับ 1, NUL สำหรับ 0
Dennis

@Sanchises คุณช่วยยืนยันได้ไหมว่าเป็นกรณีนี้?
เดนนิส

1
จะไม่,[>.,]สั้นลงหรือ
Jo King

8

เยลลี่ , 10 9 ไบต์

“ṾiЀƓv”v

ลองออนไลน์!

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

“ṾiЀƓv”v  Main link. No arguments.

“ṾiЀƓv”   Set the left argument and the return value to s := 'ṾiЀƓv'.
        v  Execute the string s as a monadic Jelly program with argument s.

 Ṿ         Uneval; yield a string representation of s, i.e., r := '“ṾiЀƓv”'.
     Ɠ     Read one line from STDIN and evaluate it like Python would.
  iЀ      Find the index of each character in the input in r.
      v    Eval the list of indices as a monadic Jelly program with argument s.
           Why?
             This is the shortest way to add the character 'v' to the string s,
             meaning that we can use r without having to append anything.
           What?
             The v atom vectorizes at depth 1 for its left argument, meaning that
             it acts on arrays of numbers and/or characters. When fed an array of
             integers, it first converts them to strings, then concatenates the
             strings and evaluates them as a Jelly program. For example, the array
             [1, 2, 3] gets cast to the string '123', then evaluates, yielding 123.
             Something slightly different happens if the array starts with a 0. For
             example, the array [0, 1, 2] gets cast to '012' just as before, but
             Jelly views '0' and '12' as two separate tokens; numeric literals
             cannot start with a 0. Since the Jelly program is monadic, the first
             token – '0' – sets the return value to 0. Since the second token –
             '12' – is also a niladic link, the previous return value is printed
             before changing the return value to 12. Then, the program finishes
             and the last return value is printed implicitly.

8

pbrain, 402 356 340 338 329 ไบต์

[(:<>)+,-.](>>>>>>)+([-]<<[->+>+<<]>>[-<<+>>]>>[-<+<+>>]<[->+<]<[-<->]<)+([-]+++++++[>+++++++++++++<-]>)+([-]+++++[>++++++++<-]>)+(-:<+++[->++++++<]>)+(-:++)+(-:++)+(----:+)+(-:++)+(-:+)+(-:+)+(-:+)+([-]++:++)+([>[->+>+<<]>>[-<<+>>]<:>>+:[[-]>+<]>-[<<<<[-.>]>>>>>>+>>>>>]<<[-]<<+<-]>>>)[-]>>>>>>>,[<<<<<<++<+++++++++++++:>>>>>>,]

วุ้ย @KritixiLithos กับฉันทำงานนี้มา 4 วันแล้ว

พิมพ์0x00ถ้าอินพุทถ่านไม่ได้อยู่ในโปรแกรม, ดัชนีของถ่าน (1-based) ในฐานสิบหกเป็นอย่างอื่น ลองออนไลน์!

คำอธิบาย:

[(:<>)+,-.]
All chars listed here; like other submissions 
(>>>>>>)
@KritixiLithos added this part; I don't know what it does but saves the program
+([-]<<[->+>+<<]>>[-<<+>>]>>[-<+<+>>]<[->+<]<[-<->]<)
Comparison ;calculates z=x!=y and puts it in between x and y
Start; X _ _ _ Y
           ^
End;   X Z _ _ Y
         ^
+([-]+++++++[>+++++++++++++<-]>)
Function to add 91 to the tape
+([-]+++++[>++++++++<-]>)
Function to add 40 to the tape
+(-:<+++[->++++++<]>)
Function to add 58 to the tape
+(-:++)
Function to add 60 to the tape
+(-:++)
Function to add 62 to the tape
+(----:+)
Function to add 41 to the tape
+(-:++)
Function to add 43 to the tape
+(-:+)
Function to add 44 to the tape
+(-:+)
Function to add 45 to the tape
+(-:+)
Function to add 46 to the tape
+([-]++:++)
Function to add 93 to the tape
+([>[->+>+<<]>>[-<<+>>]<:>>+:[[-]>+<]>-[<‌​<<<[-.>]>>>>>>+>>>>>]<<[-]<<+<-]>>>)

ฟังก์ชั่นสุดท้ายนี้คือลูป มันวน[(:<>)+,-.]ซ้ำอักขระที่เลือกตามลำดับและเปรียบเทียบอินพุตกับอักขระ ตอนนี้ฉันจะอธิบายเพิ่มเติมเกี่ยวกับการทำงานของวงนี้

12-n n+2 _ n+2: _ _ _ i _ _ _ _ _ _;  n=loop counter
                  ^                ;  i=input

กองซ้อนดูเหมือนว่าขณะที่อยู่ในลูป ห่วงจะทำงานจนกว่าคือ12-n แล้วเรามีเคาน์เตอร์ซึ่งเป็น0 n+2ตัวนับนี้เป็นจำนวนฟังก์ชันสำหรับอักขระแต่ละตัวที่เลือก ดังนั้นเมื่อn=0, จะตรงกับตัวอักษรตัวแรกคือn+2 ไม่เพียงแค่นั้นมันจะแปลงเคาน์เตอร์เป็นตัวละคร[>[->+>+<<]>>[-<<+>>]<:

เมื่อตัวชี้เป็นที่ที่คาเร็ตอยู่เราจะเปรียบเทียบอักขระที่สร้างจากตัวแปรตัวนับกับอินพุตในขณะที่รักษาไว้

12-n n+2 _ n+2: Z _ _ i _ _ _ _ _ _;  n=loop counter
                ^                  ;  i=input

Zคือ0เมื่ออักขระเท่ากับอินพุตหรือจำนวนเต็มอื่นที่ไม่ใช่ศูนย์

ตอนนี้เรามาพร้อมกับคำสั่ง if เพื่อตรวจสอบความเท่าเทียมกันนี้

[[-]>+<]

หากZไม่ใช่ศูนย์เช่นอักขระและอินพุตไม่เหมือนกันเราจะเพิ่มตำแหน่งหน่วยความจำถัดไป

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

[-]>>>>>>>
Clears first byte; goes to position to start program
,[<<<<<<++<+++++++++++++:>>>>>>,]
Loops inputs


6

Javascript, 34 ไบต์

f=a=>a.map(v=>('f='+f).indexOf(v))

มันรับอินพุตเป็นอาร์เรย์ของสตริงxคือ-1(การจัดทำดัชนีแบบ 0)


มันได้รับอนุญาตเนื่องจากวิธีการดังกล่าวยังเป็นที่ยอมรับสำหรับ quines มันไม่ได้เปิดไฟล์ต้นฉบับและอ่านหรือใช้ตัวแปรที่เริ่มต้นไปยังแหล่งที่มา
mbomb007

1
@ mbomb007 ฉันไม่สามารถพูดสำหรับเครื่องมือ JavaScript ทั้งหมด แต่ใน Firefox Function.toString ทำงานได้โดยอ่านแหล่งที่มา จนถึงจุดหนึ่งมันจะพังในการแก้ปัญหาสร้างถ้าแหล่งที่มาไม่ได้อยู่ที่นั่นเมื่อมันพยายามที่จะอ่าน (ฉันยังไม่ได้ลองเมื่อไม่นานมานี้เพราะการสร้างข้อบกพร่องนั้นโดยทั่วไปแล้วมีข้อผิดพลาด)
Neil

ฉันไม่คิดว่ามันจะแตกต่างไปจากการทำs='s=%s;print s%%s';print s%sใน Python มันไม่รวมf=ดังนั้นมันก็โอเค
mbomb007

1
คุณไม่สามารถทำเช่นนั้นเพราะอินพุตaควรจะเป็นสตริง ไม่มีmapฟังก์ชั่นสำหรับสตริง
manonthemat

@ manonthemat "คุณสามารถสันนิษฐานได้ว่าอินพุตเป็นสตริง (หรืออาร์เรย์)"
LarsW


5

Ruby, 41 88 86 71 69 67 61 56 ไบต์

a='p$<.chrs{| #index};"';$<.chars{|c|p"a='#{a}".index c}

ขอบคุณ Lynn ที่ฆ่า 6 ไบต์


1
a='p$<.chrsm{| #index};"';p$<.chars.map{|c|"a='#{a}".index c}ควรทำงานด้วยการรับข้อมูลจาก STDIN
ลินน์

4

> <> (ปลา) 70 ไบต์

 #.0+4*a5;!?l|!?f4*b+l1--naolc3*1+0.01?!|~ed+0.0+2e-{:;!?+1:i-1:r}+2:"

อาจยาวที่สุด> <> 1 ซับที่ฉันเคยทำ

มันจะพิมพ์ผลลัพธ์สำหรับอักขระแต่ละตัวที่พบในบรรทัดแยก (0 ดัชนี)

อักขระที่ไม่พบจะพิมพ์ความยาวของรหัส + 1 เสมอ (ฉันสามารถเปลี่ยนได้หากถือว่าไม่เป็นในสถานะปัจจุบัน) ดังนั้นในกรณีนี้ 71 จะเป็นอักขระ "ไม่พบ"

ฉันจะอธิบายได้เมื่อฉันมีเวลา

บางกรณีทดสอบ

## K = 1 \ n1 \ n71

# "# = 1 \ n69 \ n1

ลองออนไลน์

> <> ภาษา


ฉันคิดว่า 71 เป็นเรื่องปกติเพราะไม่พบผลลัพธ์ มันสอดคล้องกันไม่คลุมเครือและสามารถอ่านได้โดยมนุษย์ซึ่งฉันคิดว่าสำคัญกว่านั้นคือ "... ผลลัพธ์ใด ๆ ที่ไม่ใช่จำนวนเต็มบวก" ฉันขยายกฎเพื่อสะท้อนการตัดสินใจครั้งนี้
Sanchises

3

Perl 6 , 50 52 ไบต์

{(('R~.index$_) for}\\'R~'{((\'').index($_) for $_)}

แปลของการแก้ปัญหาทับทิม GB ของและวิธีการแก้ปัญหาของ Rod หลาม

แลมบ์ดาที่ป้อนรายการอักขระและแสดงรายการรายการดัชนีที่เป็นศูนย์ ( Nilสำหรับอักขระที่ไม่มีอยู่)

แก้ไข: แก้ไขการกำกับดูแล - ต้องเพิ่ม 2 ไบต์ :(


3

Clojure, 43 56 48 ไบต์

แก้ไข: ประณามฉันลืม2! เพิ่มจาก 43 เป็น 56

แก้ไข 2: อัปเดตโค้ดตัวอย่างด้านล่างข้อความนี้อัปเดตจำนวนไบต์ที่จะไม่รวม(def f ...) แต่เป็นเพียงส่วนแฮชแผนที่

{\{ 0\\   1\  3\0   4\1 10\3 14\4 20\2 34 \} 43}

แผนที่แฮชประกอบด้วยอักขระ01234{\\}เท่านั้นและเข้ารหัสตำแหน่งของพวกเขา ใน Clojure hash-maps สามารถใช้งานฟังก์ชั่นได้ตามที่แสดงในตัวอย่างที่สมบูรณ์ ( fสามารถแทนที่ด้วยคำจำกัดความ hash-map):

; Keeping track of the zero-based index:
;      00000000001111111111222222222233333333334444444444
;      01234567890123456789012345678901234567890123456789
(def f {\{ 0\\   1\  3\0   4\1 10\3 14\4 20\2 34 \} 43})

(map f "0123456789{} \\abcdef") ; (4 10 34 14 20 nil nil nil nil nil 0 43 3 1 nil nil nil nil nil nil)
(apply str (keys f))            ; " 01234{\\}"

ฉันเดาว่าสิ่งนี้นับ :)


2

JavaScript ขนาด 39 ไบต์

p=s=>[...s].map(c=>`p=${p}`.indexOf(c))

console.log( p('mapP') )


1
คุณช่วยอธิบายได้[...s]มั้ย
Erresen

เป็นที่รู้จักกันในนามผู้ประกอบการสเปรดคุณสามารถดูเคล็ดลับการเล่นกอล์ฟ ES6ได้อีกเล็กน้อย
Washington Guedes

2
ไม่อนุญาตให้อ่านซอร์สโค้ด
Arnauld

2

Pyth, 11 ไบต์

xL_+N"N+_Lx

โปรแกรมที่รับอินพุต"quoted string"พร้อมกับเครื่องหมายคำพูดใด ๆ ในสตริงที่มีการหลีกเลี่ยงก่อนหน้านี้\และพิมพ์รายการของค่าศูนย์ดัชนีที่มี-1อักขระที่ไม่ได้อยู่ในแหล่งที่มา

ลองออนไลน์!

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

xL_+N"N+_Lx    Program. Input: Q
xL_+N"N+_Lx"Q  Implicit quote closure and implicit input
     "N+_Lx"   Yield the string "N+_Lx"
   +N          Prepend a quote
  _            Reverse
 L          Q  Map over Q:
x               Yield the index of the character in the string
               Implicitly print

2

05AB1E , 19 ไบต์

"'ìsvDyk,"'"ìsvDyk,

ลองออนไลน์!

เอาต์พุตนี้ -1 แทนที่ chars ที่หายไป


หลุยส์เมนโดะโพสต์สิ่งนี้ (แก้ไขเล็กน้อย) บนGolf คุณเป็นสิ่งที่ดีมาก! การเพิ่ม "s" และ "k" ลงในผลการค้นหาคำตอบนี้เช่นกัน อย่างไรก็ตามฉันไม่สามารถรับเครดิตสำหรับการเปลี่ยนแปลงเล็กน้อย ... หลุยส์คุณสามารถส่งข้อความถึงฉันได้ถ้าคุณต้องการที่จะโพสต์สิ่งนี้อีกครั้งและฉันจะลบทิ้ง หากคุณต้องการเห็นความคืบหน้าของฉันก่อนค้นหาคำถามนั้นให้ดูการแก้ไข อืม ... มันเป็นอย่างมีนัยสำคัญเช่นของเขาที่จุดหนึ่ง


@Sanchises ทำงานให้ฉัน!
Magic Octopus Urn

เด็ดเย็นเด็ด!
Sanchises

@MagicOctopusUrn ทำได้ดีมาก !!
Luis Mendo

2

SmileBASIC, 128 96 88 86 ไบต์

?R<3+CD,4LINPUT(S$)WHILE""<S$?INSTR("?R<3+CD,4LINPUT(S$)WHILE"+CHR$(34),SHIFT(S$))WEND

สิ่งสำคัญที่ต้องตระหนักคือว่านี้ไม่ได้จริงๆเป็นความท้าทายที่ควิน คุณจะต้องรหัสที่มาขึ้นอยู่กับตัวละครที่ไม่ซ้ำกันที่ผ่านมา

ฉันใส่อักขระอย่างน้อย 1 ตัวที่จุดเริ่มต้นของรหัส: ?R<3+CD,4LINPUT(S$)WHILE"ดังนั้นฉันต้องเก็บสำเนาของโปรแกรมจนถึงเครื่องหมายคำพูดแรก


1

Python, 90 88 ไบต์

a,b,d=" ()+.7:[]efilmnor","a,b,d=\"",lambda e:[[b.find(d),a.find(d)+7][d in a]for d in e]

กรณีทดสอบ:

print(d("a,b(]q"))
#[0, 1, 2, 8, 15, -1]

1

สแต็ก , ไม่ใช่การแข่งขัน, 36 ไบต์

เมื่อฉันพูดภาษานี้ยังคงพัฒนาฉันหมายถึงมัน เห็นได้ชัดว่าpromptเคยใช้กองทั้งหมด นี่คือเหตุผลที่ฉันไม่สามารถมีสิ่งที่ดี ลองที่นี่!

[tostr ':!' + prompt CS index out]:!

นี่คือกรอบมาตรฐาน quine โดยทั่วไป:ซ้ำฟังก์ชั่นในกองซึ่งจะถูกดำเนินการแล้วด้วย[...] !จากนั้นภายใน[...]จะดำเนินการกับฟังก์ชันในสแต็ก มันได้ปลดเปลื้องมันสตริงผนวก:!(โปรแกรมเอง) promptจากนั้นจะใช้เวลาการป้อนข้อมูลด้วยสตริง CSแปลงเป็นสตริงอักขระ สตริงอักขระแตกต่างจากสตริงปกติเล็กน้อยซึ่งมีตัวดำเนินการ vectorize ทับมัน ในกรณีนี้indexเวกเตอร์เหนืออินพุตทำให้แต่ละดัชนีของสตริงอินพุตในโปรแกรมในที่สุดก็ถูกoutputted

สำหรับอินพุตHello, World!สิ่งนี้จะให้:

(-1 27 -1 -1 2 -1 6 -1 2 5 -1 26 9)

ฉันลองใช้อันที่ไม่มี quine (เช่นการเข้ารหัสสตริงของอักขระที่ปรากฏในแหล่งที่มาของคุณ) แต่มีเครื่องหมายอัญประกาศประเภทเดียวใน Stacked กล่าวคือ'ดังนั้นจึงควรใช้โซลูชันประเภทนั้นอีกต่อไป


1

Huskขนาด 12 ไบต์

m€`:'""m€`:'

ลองออนไลน์!

คำอธิบาย

คำอธิบายใช้¨เพื่อกำหนดขอบเขตสตริงและ'กำหนดขอบเขตอักขระ:

m€`:'""m€`:'  -- implicit input, for example: ¨m"a1`¨
      "m€`:'  -- string literal: ¨m€`:'¨
  `:'"        -- append character '"': ¨m€`:'"¨
m             -- map function over each character (example with 'a'):
 €            -- | index of first occurrence (1-indexed): 0
              -- : [1,6,0,0,3]

1

Java 8, 172 122 ไบต์

a->{/*.indexOf(c)+\" ;}orh:Systmup*/for(char c:a)System.out.print("a->{/*.indexOf(c)+\\\" ;}orh:Systmup".indexOf(c)+" ");}

จัดทำดัชนี 0 และให้-1สำหรับอักขระที่ไม่ได้เป็นส่วนหนึ่งของรหัสต้นฉบับ

คำอธิบาย:

ลองออนไลน์

a->{                         // Method with character-array parameter and no return-type
  /*.indexOf(c)+\" ;}orh:Systmup*/
                             //  Comment containing the remaining characters of the code
  for(char c:a)              //  Loop over the input-array
    System.out.print(        //   Print:
      "a->{/*.indexOf(c)+\\\" ;}orh:Systmup"
                             //    String containing all the characters used in the code
      .indexOf(c)+" ");}     //    Print the index of the char, plus a space as delimiter

1

J , 31 22 ไบต์

11|1+i.~&'11|1+i.~&'''

ลองออนไลน์!

ดัชนี 1 ตัวสำหรับอักขระที่ไม่มีอยู่ในรหัส ''ย่อมาจากคำพูดเดียว ค้นหาอักขระแต่ละตัวในสตริง11|1+i.~&'เพิ่ม 1, โมดูโล 11



1

Perl 5กับ-pl, 43 ไบต์

ใช้อินพุตที่คั่นด้วยบรรทัดใหม่และพิมพ์-1อักขระที่ไม่ปรากฏในโปรแกรม

$s=q{$_=index"\$s=q{$s};eval\$s",$_};eval$s

ลองออนไลน์!


@Sanchises แก้ไขในขณะนี้ขอโทษเกี่ยวกับที่ เห็นได้ชัดว่าอ่านไม่ถูกต้อง!
Dom Hastings

ไม่มีปัญหา. ขอบคุณที่นำชีวิตใหม่มาสู่ความท้าทายนี้!
Sanchises

1

Stax , 19 ไบต์

"'sym[]I+"'"s+ym[]I

เรียกใช้และแก้ไขข้อบกพร่อง

เอาต์พุตดัชนีที่อ้างอิง 0 ตัวละครหนึ่งตัวต่อบรรทัด กลับกลายเป็นว่าสั้นกว่าการแก้ไข"34bL"34bLควินินที่ฉันเขียนไว้ก่อนหน้านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.