คำตอบของชีวิตจักรวาลและทุกสิ่ง


46

งาน

กำหนด String เป็น input งานของคุณคือการส่งออก42 เท่านั้นถ้าใส่ String ที่จะเกิดขึ้นตรงต่อไปนี้:

abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz

มันอาจส่งออกค่าอื่นใดสร้างข้อผิดพลาดหรือไม่เอาท์พุทเลยถ้าอินพุตไม่เท่ากับสตริงดังกล่าวข้างต้น


เกณฑ์การชนะ

นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ!


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

@froddy: ถ้าตัวละครเท่านั้น? ติดตามสตริง (คือ | คือ) ตัวแบ่งบรรทัดหรือไม่ กลไกการป้อนข้อมูลตามปกติของฉันไม่สนใจว่าการป้อนข้อมูลจะถูกยกเลิกโดยการขึ้นบรรทัดใหม่หรือไม่ แต่ให้ผลเหมือนกันทั้งสองกรณี
Joey

@ fR0DDY: ไม่มีคำจำกัดความที่ชัดเจนเกี่ยวกับวิธีการจัดการอินพุตที่เหลือดังนั้นจึงไม่มี 'ผิด' ที่นี่
PatrickvL

3
@PatrickvL มันจะพูดถึง 'เท่านั้น' ถ้าอินพุตเป็นสตริงที่กำหนด ดังนั้นabbcccddddeeeee...zzabcไม่พอใจว่าฉันคิดว่าและฉันสามารถดูบางโปรแกรมที่ให้ใช่กับอินพุตนั้น
fR0DDY

2
@ fR0DDY: ให้ฉันใส่อีกวิธี: ไม่มีข้อกำหนดเกี่ยวกับวิธีการป้อนข้อมูลที่คั่นด้วยดังนั้นจึงเปิดให้ตีความ นอกจากนี้ยังไม่มีการพูดถึงการเข้ารหัสอักขระ (ฉันเดาว่าพวกเราส่วนใหญ่ถือว่าเป็นค่าเริ่มต้นของสภาพแวดล้อมของพวกเขา - ANSI, UTF8 และ UTF16LE จะเป็นที่นิยมที่สุด) นอกจากนี้ยังไม่มีการเอ่ยถึงวิธีการนำเสนอ - มันถูกป้อนผ่านอินพุตมาตรฐานผ่านพารามิเตอร์บรรทัดคำสั่งหรือไม่ ดังนั้นคุณจะเห็นว่าการมีอิสระทั้งหมดนี้ทำให้เกิดการตีความบางอย่างที่คุณจะทำเครื่องหมายว่า 'ไม่ถูกต้อง' ในขณะที่คนอื่นจะตัดสินว่ามัน 'เข้ากันได้' NOFI แต่นี่เป็นการฝึกฝนรายวันสำหรับพวกเราบางคน
PatrickvL

คำตอบ:


20

Golfscript, 20

26,{.97+\{.}*}%=42`*

กับบรรทัดใหม่ 21 ตัวอักษร (โดย Nabb)

26,{).[96+]*}%n+=42`*

ที่จริงนับบีเอาชนะฉันนี่คือคำตอบดั้งเดิมสำหรับบรรทัดใหม่ 22 ตัวอักษร

26,{.97+\{.}*}%n+=42`*

นี่เป็นเพียงการสร้างสตริงที่มาและเพียงแค่เปรียบเทียบกับสตริงจาก stdin


3
26,{).[96+]*}%n+=42`*สำหรับ 21 (inc newline)
Nabb

เฮ้มันใช้งานไม่ได้n+เพราะอาร์เรย์ไม่แบน คุณจะต้องรักษาทั้ง 20 ตัวอักษรเดิมของคุณหรือเพิ่ม a ~เพื่อปรับเงื่อนไขด้านในของอาร์เรย์ให้เรียบ
Nabb

@Nabb, heheh ฉันไม่ได้ตระหนักถึงการขึ้นบรรทัดใหม่ทำให้มันแตกต่าง
คุณ

13

ทับทิม 1.9 46 42 39 ตัวอักษร

p (?a..?z).map{|a|a*$.+=1}*""==gets&&42

สมมติว่าอินพุตไม่ถูกยกเลิกด้วยการขึ้นบรรทัดใหม่


สิ่งที่เกี่ยวกับการขึ้นบรรทัดใหม่รับ
steenslag

2
@steenslag: สเปคไม่ได้พูดอะไรอินพุตถูกยกเลิกโดย newline ดังนั้นวิธีการแก้ปัญหานี้ถือว่าไม่มี
Ventero

11

โปรแกรม C - 78 89

แก้ไข:อย่าพิมพ์ 42 เมื่อมีอักขระพิเศษ

สมมติว่าอินพุตไม่มีการขึ้นบรรทัดใหม่

main(i,j){for(i=1;i<27;i++)for(j=i;j--;getchar()==96+i?0:exit(1));puts("42"+!!gets(&i));}

หากคำนำหน้าไม่ตรงกันโปรแกรมจะออก หากส่วนนำหน้าตรงกัน แต่มีอักขระพิเศษ 1-3 หรือมากกว่านั้นให้พิมพ์ 2 มิฉะนั้นจะสร้างลักษณะการทำงานที่ไม่ได้กำหนด

นี้สามารถทำตัวละครตัวหนึ่งที่สั้นลงโดยการเปลี่ยนไปexit(1) fork()โอ้และในบันทึกย่อที่ไม่เกี่ยวข้องอย่าลืมบันทึกเอกสารที่เปิดอยู่ในกรณีด้วยเหตุผลใดก็ตามระบบของคุณจะล็อค


1
สิ่งนี้จะพิมพ์ 42 ถ้าสตริงยาวกว่าสตริงที่ต้องการและคำนำหน้าตรงกับสตริงที่ต้องการ
fR0DDY

8

PHP (60)

สมมติว่าอินพุตมีให้ใน commandline:

for(;$i<702;)$s.=chr(96.5+sqrt($i+=2));echo$s!=$argv[1]?:42;

คำอธิบาย : คุณสามารถดูสตริงเป็นโครงสร้างสามเหลี่ยม

j     i   val
0     0   a
1   1-2   bb
2   3-5   ccc
3   6-9   dddd
4 10-14   eeeee
5 15-20   ffffff
      ...

เส้นjเริ่มต้นที่ดัชนีi = j*(j+1)/2(นั่นคือสูตรตัวเลขสามเหลี่ยม) การแก้สมการกำลังสองทำให้ดัชนีiอยู่ในบรรทัดj = int((sqrt(8*i+1)-1)/2)และมีอักขระ97 + int((sqrt(8*i+1)-1)/2)อยู่ 0-350ช่วงดัชนีช่วยให้เราสามารถลดความซับซ้อนที่96.5 + sqrt(2*(i+1))แต่ที่ไม่ถือเป็นจริงสำหรับค่าขนาดใหญ่

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


+1, ใช้งานได้;) อืมมมคุณโปรดอธิบายเพิ่มเติมเกี่ยวกับวิธีการใช้$s.=chr(96.5+sqrt($i+=2));งานได้ไหม?
ไคลด์ Lobo

แก้ไข ฉันหวังว่ามันสมเหตุสมผลแล้ว :-)
sam hocevar

สำหรับ (; $ i <702;) $ s = Chr (96.5 + sqrt ($ i + = 2));. ก้อง ($ s == $ argv [1]) * 42; มีเพียง 61 ตัวอักษรโดยสมมติว่าอินพุต stdin
Viper_Sb

@Viper_Sb: ขอบคุณสำหรับคำใบ้; ฉันไม่แน่ใจเกี่ยวกับกฎดังนั้นฉันเลียนแบบโซลูชันของไคลด์ ฉันจะไปกับคำแนะนำของคุณ
sam hocevar

1
@powtac ไวยากรณ์ภาษาไม่ต้องการช่องว่างที่นี่
sam hocevar

7

Perl, 35 43

map$s.=$_ x++$a,a..z;say 42if<>~~$s

ต้องการ Perl 5.10 หรือใหม่กว่า (เรียกใช้ด้วย-E) ไม่มีการขึ้นบรรทัดใหม่ในอินพุต

ฉันชอบผลข้างเคียงของฉัน regex ดีกว่า แต่รหัสที่สั้นกว่าพูด นี่มันเป็นของที่ระลึก มีไว้สำหรับ Perl 5.10 หรือใหม่กว่า แต่สำหรับคุณสมบัติ regex ขั้นสูง / ทดลองเท่านั้นดังนั้นจึงpจำเป็นต้องใช้ตัวเลือกบรรทัดคำสั่งเท่านั้น

$a=a;$_=/^(??{$b++;$a++."{$b}"}){26}$/&&42

ยอดเยี่ยม ฉันพยายามอย่างหนักเพื่อเอาชนะเร็กคอร์ด w / แบบเรียกซ้ำ แต่ทำไม่ได้ต่ำกว่า 43c : - ((
รองเท้าบูท

ทำไมจึงจำเป็นต้องพูด$a++."{$b}"แทนที่จะเป็นเพียงแค่$a++.$b?
Timwi

@ Timwi เพราะฉันต้องการวงเล็บปีกกาเหล่านั้นจะปรากฏในสตริงผลลัพธ์ ฉันไม่ต้องการจับคู่ตามตัวอักษร "d4" ฉันต้องการ "dddd" ซึ่งแสดงเป็น regex "d {4}"
JB

แน่นอน. ขอบคุณที่อธิบาย!
Timwi

มากับวิธี 33 ไบต์สำหรับเรื่องนี้! ลองออนไลน์!
Dom Hastings

7

05AB1E , 7 ไบต์ (ไม่แข่งขัน)

AƶJQi42

ลองออนไลน์!

คำอธิบาย

A       push lowercase alphabet
 ƶ      lift every letter, push it and multiply it by its index
  J     join the list
   Qi   does it equal the input?
     42 push 42 and output implicitly

เพียงแค่ผ่านความท้าทายในการเรียนรู้ 05AB1E (และการเล่นกอล์ฟโดยทั่วไป) ความท้าทายนี้ถูกทำเครื่องหมายว่าใช้งานได้เมื่อวานนี้และฉันพบวิธีแก้ปัญหาสั้น ๆ แล้วทำไมไม่แชร์ล่ะ :)


3
ยินดีต้อนรับสู่ PPCG!
Steadybox

6

โปรแกรม Haskell - 71 67 64 57

ถือว่าไม่มีการขึ้นบรรทัดใหม่และไม่ส่งออกอย่างใดอย่างหนึ่ง

f x|x==[c|c<-['a'..'z'],_<-['a'..c]]="42"
main=interact f

การใช้งาน:

$ echo -n 'abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz' | { ./42; echo; }
42
$ echo -n 'something else' | { ./42; echo; }
42: 42.hs:1:0-54: Non-exhaustive patterns in function f


$

1
fwiw รหัสนี้ยังอ่านง่ายมาก
Dan Burton

1
ตั้งแต่zipWithหยุดเมื่อถึงจุดสิ้นสุดของรายการที่สั้นกว่าคุณสามารถแทนที่['a'..'z']ด้วย['a'..]และบันทึก 3 ตัวอักษร
hammar

@hammar: ขอบคุณ ฉันบันทึก char อีก 1 ตัวโดยใช้ >> = (concatMap) แทน concat และ zipWith
Joey Adams

@hammar: บันทึกมากขึ้นโดยใช้สัญลักษณ์แทน >> = และแลมบ์ดา :-)
Joey Adams

2
@Joey: หรือดียิ่งขึ้น:[c|c<-['a'..'z'],_<-['a'..c]]
hammar

4

J, 29

f=:42#~((>:#a.{~97+])i.26)-:]

ตัวอย่าง:

f 'oasijfiojasef'

f 23841235

f 'abbccc...'
42

ฉันชอบเจและฉันพบว่ามันน่าเกลียดและน่ากลัว และฉันชอบมัน.
seequ

4

D: 94 ตัวอักษร

void f(S)(S s){S t;foreach(i;0..26)t~=array(repeat(cast(char)(i+'a'),i+1));s==t&&writeln(42);}

ชัดเจนยิ่งขึ้น:

void f(S)(S s)
{
    S t;

    foreach(i; 0 .. 26)
        t ~= array(repeat(cast(char)(i + 'a'), i + 1));

    s == t && writeln(42);
}

3

Delphi, 164 132

อันนี้สร้างสตริงและเพียงแค่เปรียบเทียบกับอาร์กิวเมนต์บรรทัดคำสั่งแรก มันสั้นและยุ่งยากน้อยกว่าการส่งอื่น ๆ ของฉัน:

var s:string;c,i:int8;begin repeat s:=s+Char(c+97);i:=i-1;c:=c+Ord(i<0);if i<0then i:=c;until c=26;Write(42*Ord(s=ParamStr(1)));end.

(โปรดทราบว่ารุ่นนี้สันนิษฐานว่าcและiตัวแปรเริ่มต้นที่ค่าเริ่มต้นที่ 0 เช่นเดียวกับกรณีในรุ่น Delphi (2010) ของฉัน)

เช่นเดียวกับการส่งอื่น ๆ ของฉันสิ่งนี้ต้องการอักขระน้อยลงหากการสร้างสายอักขระไม่ได้เกิดขึ้นในฟังก์ชั่นอย่างที่ฉันเคยทำมาก่อน:

Delphi, 181

program a;{$APPTYPE CONSOLE}function s(c,i:byte):string;begin if(i>0)then Exit(Char(c)+s(c,i-1));if(c<122)then Exit(s(c+1,c-95));end;begin if(s(97,1)=ParamStr(1))then Write(42);end.

โปรดทราบว่าการส่งออกไม่จำเป็นต้องขึ้นบรรทัดใหม่ดังนั้น WriteLn () กลายเป็นเขียน ()


3

PHP - 45 ตัวอักษร

ฉันแปลกใจที่ไม่มีใครโพสต์คำตอบใด ๆ ที่ใช้ hashing มันเป็นวิธีการทดสอบขนาดที่มีประสิทธิภาพมากสำหรับสตริงที่แน่นอน

echo md5($argv[1],1)!='¯è a@ÛÚƒ:ïT�p'?:42;

ข้อมูลเป็นชนิดของยากที่จะคัดลอก / วางเนื่องจากมี null-byte อยู่ตรงกลางของรหัส นี่คือรหัสฐานสิบหกสำหรับการทดสอบ

65 63 68 6f 20 6d 64 35 28 24 61 72 67 76 5b 31 5d 2c 31 29 21 3d 27 af e8 a0 61 40 db da 7f 11 0f 83 3a ef 54 00 70 27 3f 3a 34 32 3b


2
ฉลาด! แม้ว่าจะมีเทคนิคการป้อนค่าอื่น ๆ ที่ให้ค่าแฮชเดียวกันนี้ แต่ก็ไม่ได้ตอบสนองความต้องการของการส่งออก 42 เท่านั้นหากอินพุตอยู่ในรูปแบบที่ระบุ
mellamokb


3

Pyth, 14

*42qzsm*dhxGdG

เพียงสร้างสตริงที่จำเป็นแล้วเปรียบเทียบกับอินพุตและคูณด้วย 42


'เปรียบเทียบกับอินพุทและคูณด้วย 42' คงไม่เคยคิดเรื่องนี้มาก่อนเลย คุณเพียงแค่ช่วยฉันโกนขน 1 ตัวจากทางออกของฉัน ขอบคุณ
AndoDaan

Argh ฉันมาสายเกินไป คุณอธิบายได้ไหมว่ามันทำงานอย่างไร ฟังก์ชั่นนี้mทำให้ฉันเดือดร้อน…
Jim

1
@Jim เราเริ่มต้นด้วยฟังก์ชั่นแผนที่mซึ่งใช้ฟังก์ชั่นกับแต่ละองค์ประกอบของอินพุต การป้อนข้อมูลคือGตัวอักษร xGdค้นหาตำแหน่งของdตัวละครในตัวอักษรในGตัวอักษร hเพิ่มทีละตัวและ*dทำซ้ำตัวละครหลาย ๆ ครั้ง นอกmฟังก์ชั่นsรวมรายการผลลัพธ์ของสตริงลงในสตริงเดียวแล้วqzตรวจสอบว่าผลลัพธ์เท่ากับอินพุตหรือไม่ บูลีนจะถูกแสดงราวกับว่าเป็น0เท็จและ1หากเป็นจริงดังนั้น*42ผลลัพธ์จะเป็นมูลค่าของ42ถ้าเป็นจริงและ0ถ้าเป็นเท็จ
isaacg

3

Brachylog (2) 15 ไบต์ภาษาโพสต์วันที่ท้าทาย

⊇Ạ∧?o?ọtᵐ~⟦₁+₁₆

ลองออนไลน์!

และตอนนี้สำหรับคำตอบที่ทำงานบนหลักการที่แตกต่างอย่างสิ้นเชิงเพื่อให้เห็นมากที่สุดที่นี่ นี่คือการส่งฟังก์ชั่น (คำถามไม่ได้ระบุประเภทของการส่งที่ต้องการ แต่ฟังก์ชั่นได้รับอนุญาตโดยค่าเริ่มต้น)

คำอธิบาย

คำตอบนี้ทำงานโดยการกำหนดประเภทของสตริง: ที่ a) มีตัวอักษรตัวพิมพ์เล็กทั้งหมดของตัวอักษร, b) อยู่ในลำดับการเรียงและ c) ที่ใช้จำนวนที่เกิดขึ้นของตัวละครแต่ละตัวในสตริงสร้างลำดับต่อเนื่อง จำนวนเต็มเริ่มต้นจาก 1 (มันควรจะชัดเจนว่ามีหลายสตริงดังกล่าว แต่สิ่งที่เราต้องการในกรณีพิเศษคือสั้นที่สุด) จากนั้นถ้าสตริงเป็นไปตามเกณฑ์เหล่านั้นเราเพิ่ม 16 ถึงจำนวนอักขระที่แตกต่างกันใน สตริง; สิ่งนี้จะสร้าง 42 ถ้าสตริงเป็นคำถามที่ถามเราถึงกรณีพิเศษและอย่างน้อย 43 ในกรณีอื่นทั้งหมด (หากสตริงไม่ผ่านเกณฑ์ใด ๆ ที่เป็นของหมวดหมู่ฟังก์ชันจะสิ้นสุดในความล้มเหลวซึ่งเป็นประเภทที่คล้ายกับการโยนข้อยกเว้น)

นี่คือวิธีการตีความรหัสที่มา:

⊇Ạ∧?o?ọtᵐ~⟦₁+₁₆
⊇Ạ               {the input} contains all lowercase letters
  ∧              and
   ?o?           the input sorts to itself
                 {and; implied when two conditions overlap}
     ?ọ          the {character, number of occurrences} pairs for the input
       tᵐ        when the second element of each is taken
         ~       create an output that could have been produced by
          ⟦₁     outputting the list of integers from 1 to some input inclusive;
            +₁₆  add 16 to that input {and output it}

3

R, 60 58

if(readline()==paste0(rep(letters,1:26),collapse=""))cat(42)

if(scan(,"")==paste(rep(letters,1:26),collapse=""))cat(42)

ขอบคุณสำหรับคำแนะนำโดย @giusppe


ฉันคิดว่าแค่pasteนี้ก็โอเคแล้วคุณสามารถใช้scan(,"")แทนreadline()ได้
จูเซปเป้

2

Python (84)

ถือว่าขึ้นบรรทัดใหม่ท้ายท้ายอินพุต

sys นำเข้า
ถ้า ''. เข้าร่วม (c * chr (c + 96) สำหรับ c อยู่ในช่วง (27)) + '\ n' == sys.stdin.read (): print 42

1
ทำไมไม่ใช้raw_inputแทนsys.stdin.read?
Juan

1
@ Juan: raw_inputเพียงอ่านบรรทัดเดียว; ฉันไม่แน่ใจว่า "อินพุต" จะเป็นบรรทัดเดียวเสมอหรืออาจมีการตัดสิทธิ์อินพุตในบรรทัดต่อมา
Hoa Long Tam

2

Python - 62 ตัวอักษร

print("".join(x*chr(x+96) for x in range(27))==raw_input())*42

2
อาจจะสั้นกว่าในหลาม print("".join(x*chr(x+96)for x in range(27))==input())*423:
mbomb007

2

Perl, 49 46 ตัวอักษร

ที่จะใช้ในโปรแกรมไม่ใช่ในบรรทัดคำสั่ง

$..=chr($+96)x$ for 1..26;$.eq(pop)&&print '42'

join('',map$_ x++$x,'a'..'z')eq pop&&print'42'

ความนับถือ

RBO

แก้ไข: แนวคิดที่คัดลอกมาจาก Ventero


2

PHP 92 88 87 ตัวอักษร

function _($a){for($i=97;$i<123;$i++)for($j=$i-96;$j;$j--)$b.=chr($i);echo($b==$a)*42;}

แก้ไข

แทนที่$j<0ด้วย$jและreturn $b==$a?42:0;ด้วยecho $b==$a?42:0;

แทนที่echo $b==$a?42:0;ด้วยecho($b==$a)*42;


2
อาจเป็น 80 ตัวอักษรหากไม่ใช่เพราะสัญญาณดอลลาร์ที่เลวร้ายทั้งหมด
Joey Adams

ดูรายการของฉันสำหรับโซลูชันลูปเดี่ยว
sam hocevar

2

อารัมภบท ECLiPSe - 173

c(_,[],_):-!. c(A,M,N):-length(L,N),checklist('='(A),L),append(F,L,M),P is N-1,B is A-1,c(B,F,P). ?- read_string(end_of_file,351,S),string_list(S,L),c(122,L,26),writeln(42).

2

JavaScript (91 93 94 98 102 116 )

การใช้งาน: a('string')ผลตอบแทนถ้าตามสเป็คที่ถูกต้องหรือ420

function a(z){for(i=r='';i++<26;)for(j=i;j--;)r+=String.fromCharCode(i+96);return(z==r)*42}

http://jsfiddle.net/g25M3/6/

แก้ไข : ถูกลบออกและตัดออกทั้งสองช่องว่างในvarfor (

แก้ไข 2 : เปลี่ยนj>0เป็นjและ

  1. return (z==r)?42:0; ไปยัง
  2. return z==r?42:0

แก้ไข 3 : เริ่มต้นiด้วยi='', เปลี่ยน

  1. (z==r)?42:0 ไปยัง
  2. (z==r)*42

แก้ไข 4 : การเปลี่ยนแปลง

  1. for(;i<27;i++) ไปยัง
  2. while(i++<26)

แก้ไข 5 : การเปลี่ยนแปลง

  1. i=r='';while(i++<26) ไปยัง
  2. for(i=r='';i++<26;) และ
  3. for(j=i;j;j--) ไปยัง
  4. for(j=i;j--;)

ดีคุณสามารถลดอีก 12 ตัวอักษรหากคุณไม่ได้ใช้varเพื่อประกาศตัวแปร;)
ไคลด์ Lobo

@ ไคลด์: ขอบคุณ! for (นอกจากนี้ยังพบว่าผมสามารถลบช่องว่างระหว่าง
mellamokb

ใช่กำลังจะแนะนำเหมือนกัน;) โอ้และฉันเขียนรหัสโซลูชันใน PHP โดยใช้ตรรกะเดียวกับของคุณ
Clyde Lobo

คุณสามารถบันทึกอีก 2 ตัวอักษรโดยแทนที่ return(z==r)?42:0;ด้วยreturn z==r?42:0
Clyde Lobo

j>0อาจเป็นแค่jฉันคิดว่า
คุณ

2

JavaScript 1.8, 99 ตัวอักษร

function c(x)(x.replace(/([a-z])\1*/g,function(m)!(a-m.length)*m.charCodeAt(0)-96-a++,a=1)==0)*a+15

ฉันกล้าให้คุณเข้าใจมัน :)


2

PHP - 59

สมมติว่ามีการป้อนข้อมูลอย่างน้อย 1 รายการบน cli

echo md5($argv[1])!='afe8a06140dbda7f110f833aef540070'?:42;

มันทำงานได้มากหรือน้อยยกเว้น md5 นั้นสามารถทำซ้ำทางเทคนิคกับ algo hashing ได้


2

PowerShell v2 +, 47 ไบต์

42*(-join(1..26|%{,[char]($_+96)*$_})-ceq$args)

โครงสร้างช่วงฟีดที่ผ่านห่วงด้วย1..26 |%{...}การวนซ้ำแต่ละครั้งเราใช้ตัวดำเนินการเครื่องหมายจุลภาคเพื่อสร้างอาร์เรย์ตามตัวอักษรของการ[char]คูณด้วยจำนวนลูปปัจจุบัน จากนั้นเรา-joinที่ร่วมกันทั้งหมดเพื่อสร้างสตริงabbcccdddd...แล้วใช้เป็นกรณี ๆ ไป-ceqเปรียบเทียบกับการป้อนข้อมูลของเรา$argsซึ่งจะส่งผลทั้งในหรือ$TRUE $FALSEใน PowerShell ค่าบูลีนสามารถโยนโดยปริยายเป็น1หรือตามลำดับซึ่งเป็นสิ่งที่เกิดขึ้นที่นี่ด้วย0 42*จะพิมพ์ออกหาก42ใส่เป็นabbccc...zzzzzzzzzzzzzzzzzzzzzzzzzzและจะออกเป็น0อย่างอื่น


คุณสามารถบันทึก byte :) ลองออนไลน์!
mazzy

2

K, 26 ไบต์

{(::;42)x~,/(1+!26)#'.Q.a}
{(::;42)x~,/(1+!26)#'.Q.a}"hello"
{(::;42)x~,/(1+!26)#'.Q.a}"abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz"
42

ขอบคุณ


{$[x~.Q.a@&1+!26;42;]}สำหรับ22ไบต์
streetster

1
42*(&!27)~-96+"j"$สำหรับ18ไบต์ (porting ฉันตกลงคำตอบ)
ท้องถนน

2

VBA 91

ไม่มีคำตอบ VBA ใด ๆ แต่ใช้งานได้:

Function f(t)
    For i = 1 To 26
        o = o & String(i, Chr(i + 96))
    Next
    f = -42 * (t = o)
End Function

มันเป็นไปไม่ได้จริง ๆ ที่จะลบช่องว่างออกจากสิ่งนี้?
แยกผลไม้

1
เวอร์ชันย่อ, 61 ไบต์ -o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
Taylor Scott

@ Challenger5 ไม่มันเป็นไปไม่ได้ ความเห็นของสกอตต์เทย์เลอร์เป็นสิ่งที่แน่นอน มันทำงานในหน้าต่างฉับพลันและรับค่าจากเซลล์A1เป็นอินพุต
Engineer Toast

2

APL (Dyalog) , 18 17 ไบต์

42/⍨⍞≡819⌶⎕A/⍨⍳26

ลองออนไลน์!

สี่ไบต์ที่ชัดเจนสามารถบันทึกได้หากเราได้รับอนุญาตให้ใช้ตัวพิมพ์ใหญ่

42 42

/⍨ ถ้า (lit. จำลองแบบโดย)

 การป้อนอักขระ

 เหมือนกันกับ

819⌶ ที่ต่ำลง

⎕Alphabet

/⍨ ทำซ้ำโดย

 หนึ่งผ่าน

26 26


1

Clojure - 61 ตัวอักษร

(fn[a](if(=(mapcat #(repeat%(char(+% 96)))(range 1 27))a)42))

ใช้ประโยชน์จากข้อเท็จจริงต่อไปนี้:

  • Clojure สามารถตีความสตริงใด ๆ โดยอัตโนมัติเป็นลำดับของตัวอักษร
  • ฉันสามารถใช้ช่วงของตัวเลขตั้งแต่ 1 ถึง 26 เพื่อสร้างตัวละครและทำซ้ำตัวเลขหรือเวลาที่ถูกต้องเพื่อสร้างอินพุต "ถูกต้อง"

จะบันทึก 6 ตัวอักษรถ้า Clojure อนุญาตให้ซ้อน # () s ..... คุณลักษณะที่สำคัญขอ Clojure 1.4 ฉันคิดว่า!
mikera

1

Javascript 144

อาจจะดีขึ้นอย่างมีนัยสำคัญเรียกซ้ำได้เสมอไปไกลสำหรับฉัน

การบีบอัด

function r(a,b,d,c){c++;if(b<d)a+=r(a,b+1,d,c);for(i=0;i<c;i++)a=String.fromCharCode(b)+a;return a}function q(a){if(q==r(a,97,122,0))return 42};

บีบอัดน้อย

function r(s, c, x, w){        
    w++;
    if(c < x)
        s += r(s, c + 1, x, w);
    for(i = 0; i < w; i++)
        s = String.fromCharCode(c) + s;              
    return s;
}
function q(z){
    if(q==r(z,97, 122, 0))
        return 42;            
}

alert(q("rgrg"));

1

Delphi, 127

var b:Char;c,i:Int8;begin repeat if i<0then i:=c;Read(b);if c+97<>Ord(b)then Exit;i:=i-1;c:=c+Ord(i<0)until i=27;Write(42);end.

หนึ่งในนี้อ่านสตริงจากการป้อนข้อมูลที่เปรียบเทียบมันเป็นมันไปเขียน 42 zเมื่อป้อนข้อมูลที่ตรงกับขึ้นจนสุดท้าย

Delphi, 157

var b:pchar;c,i:byte;begin b:=CmdLine+85;c:=97;i:=1;repeat Inc(b);if b^<>Char(c)then Exit;Dec(i);if i>0then Continue;c:=c+1;i:=c-96;until i=27;Write(42);end.

Delphi, 188

program a;{$APPTYPE CONSOLE}var b:pchar;c,i:byte;begin b:=CmdLine+85;c:=97;i:=1;repeat Inc(b);if(b^<>Char(c))then Exit;Dec(i);if(i>0)then Continue;c:=c+1;i:=c-96;until(i=27);Write(42);end.

รุ่นนี้ไม่ได้ใช้ฟังก์ชั่นซึ่งบันทึกตัวละครได้ไม่กี่ตัวเมื่อเทียบกับเทคนิคก่อนหน้านี้:

Delphi, 213

program a;{$APPTYPE CONSOLE}function t(b:pchar;c,i:byte):byte;begin repeat Inc(b);if(b^<>Char(c))then Exit(0);Dec(i);if(i>0)then Continue;c:=c+1;i:=c-96;until(i=27);t:=42;end;begin WriteLn(t(CmdLine+77,97,1));end.

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

นอกจากนี้โปรดทราบว่าฉันเพิ่ม CmdLine ด้วยตัวอักษร 77 ตัวเนื่องจากเป็นออฟเซ็ตที่ฉันต้องข้ามพื้นที่ปฏิบัติการที่ใช้งานได้ในพื้นที่ของฉัน (Delphi ไม่มีตัวชี้อาร์กิวเมนต์โดยตรง) ปรับให้เข้ากับการตั้งค่าของคุณ (อาจนำไปสู่ ​​1 ตัวอักษรน้อยลงเมื่อชดเชย <10)


คุณสามารถตั้งค่าประเภทแอปพลิเคชันภายใต้ ProjectOptions / DelphiCompiler / Linking / GenerateConsoleApplication นอกจากนี้คุณสามารถละเว้นprogram a;บรรทัด และวงเล็บรอบb^<>Char(c), i>0และi=27สามารถถอดออกได้
Wouter van Nifterick

@Wouter van Nifterick: ขอบคุณสำหรับคำแนะนำฉันจะใช้มันกับการส่งอื่น ๆ ของฉันด้วย (ฉันไม่รู้ด้วยซ้ำว่าif i>0thenจะรวบรวม!)
PatrickvL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.