Trả lời cho cuộc sống, vũ trụ và tất cả mọi thứ


46

Bài tập, nhiệm vụ

Cho một chuỗi như là đầu vào, nhiệm vụ của bạn là để đầu ra 42 chỉ nếu đầu vào Chuỗi sẽ xảy ra là chính xác những điều sau đây:

abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz

Nó có thể xuất bất kỳ giá trị nào khác, tạo ra lỗi hoặc không xuất ra, nếu đầu vào không bằng Chuỗi đã nói ở trên.


Tiêu chí chiến thắng

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!


Nhiều giải pháp được cung cấp ở đây là sai vì chúng in 42 khi chuỗi dài hơn chuỗi mong muốn và tiền tố khớp với chuỗi mong muốn.
fR0DDY

@froddy: Nếu các ký tự duy nhất thì sao? theo chuỗi (là | là) ngắt dòng? Cơ chế đầu vào thông thường của tôi không quan tâm liệu đầu vào có bị chấm dứt bởi ngắt dòng hay không nhưng mang lại kết quả giống nhau trong cả hai trường hợp.
Joey

@ fR0DDY: Không có định nghĩa rõ ràng về cách xử lý phần còn lại của đầu vào, vì vậy không có "sai" ở đây.
PatrickvL

3
@PatrickvL Nó chỉ đề cập đến 'chỉ' nếu đầu vào là chuỗi đã cho. Vì vậy, abbcccddddeeeee...zzabckhông thỏa mãn rằng tôi cho rằng và tôi có thể thấy một số chương trình đưa ra có trên đầu vào đó.
fR0DDY

2
@ fR0DDY: Hãy để tôi nói theo một cách khác: Không có thông số kỹ thuật nào về cách phân tách đầu vào, vì vậy đó là mở để giải thích. Cũng không có đề cập đến mã hóa ký tự (tôi đoán hầu hết chúng ta đều mặc định môi trường của họ - ANSI, UTF8 và UTF16LE sẽ là những thứ phổ biến nhất). Cũng không đề cập đến cách trình bày đầu vào - nó được nhập thông qua đầu vào tiêu chuẩn, thông qua một tham số dòng lệnh? Vì vậy, bạn thấy - có tất cả sự tự do này nhường chỗ cho một số giải thích mà bạn sẽ đánh dấu là "không chính xác", trong khi những người khác sẽ đánh giá nó là "tuân thủ". NOFI, nhưng đây là thực hành hàng ngày đối với một số người trong chúng ta.
PatrickvL

Câu trả lời:


20

Golf, 20

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

với dòng mới, 21 ký tự (bởi Nabb)

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

Trên thực tế, Nabb đánh bại tôi, đây là giải pháp ban đầu cho dòng mới, 22 ký tự

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

Điều này chỉ đơn giản là tạo chuỗi nguồn và chỉ so sánh nó với chuỗi từ stdin.


3
26,{).[96+]*}%n+=42`*cho 21 (bao gồm dòng mới).
Nabb

Heh, nó không hoạt động mà không có n+vì mảng không phẳng. Bạn sẽ phải giữ 20 ký tự gốc của mình hoặc thêm một ký tự ~để làm phẳng các điều khoản bên trong của mảng.
Nabb

@Nabb, heheh, tôi đã không nhận ra dòng mới làm cho nó khác đi.
BẠN

13

Ruby 1.9, 46 42 39 ký tự

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

Giả sử đầu vào không bị chấm dứt với một dòng mới.


Những gì về dòng mới từ được?
steenslag

2
@steenslag: Thông số kỹ thuật không nói bất cứ điều gì đầu vào bị chấm dứt bởi một dòng mới, vì vậy giải pháp này giả định là không có.
Ventero

11

Chương trình C - 78 89

Chỉnh sửa: Không in 42 khi có thêm ký tự.

Giả sử đầu vào không có một dòng mới.

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

Nếu tiền tố không khớp, chương trình sẽ thoát. Nếu tiền tố khớp nhưng có thêm 1-3 ký tự, hãy in 2. Mặt khác, tạo ra hành vi không xác định.

Điều này có thể được làm cho một nhân vật ngắn hơn bằng cách thay đổi exit(1)thành fork(). Ồ, và trên một ghi chú không liên quan, hãy nhớ lưu bất kỳ tài liệu mở nào trong trường hợp, vì bất kỳ lý do gì , hệ thống của bạn sẽ bị khóa.


1
Điều này sẽ in 42 nếu chuỗi dài hơn chuỗi mong muốn và tiền tố khớp với chuỗi mong muốn.
fR0DDY

8

PHP (60)

Giả sử đầu vào được cung cấp trong dòng lệnh:

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

Giải thích : bạn có thể xem chuỗi dưới dạng cấu trúc tam giác.

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
      ...

Dòng jbắt đầu tại chỉ mục i = j*(j+1)/2(đó là công thức số tam giác). Việc giải phương trình bậc hai dẫn đến chỉ số inằm trên đường thẳng j = int((sqrt(8*i+1)-1)/2)và do đó chứa ký tự 97 + int((sqrt(8*i+1)-1)/2). Các 0-350phạm vi chỉ số cho phép chúng tôi để đơn giản hóa đến 96.5 + sqrt(2*(i+1)), nhưng điều đó không còn đúng với giá trị lớn hơn.

Chỉnh sửa : Chuyển sang đầu vào dòng lệnh như được đề xuất trong các ý kiến.
Chỉnh sửa : Sử dụng toán tử có điều kiện để lưu một ký tự


+1, nó hoạt động;) Umm bạn có thể vui lòng giải thích như thế nào $s.=chr(96.5+sqrt($i+=2));hoạt động?
Clyde Lobo

Đã chỉnh sửa. Tôi hy vọng nó có ý nghĩa :-)
sam hocevar

for (; $ i <702;) $ s. = chr (96,5 + sqrt ($ i + = 2)); echo ($ s == $ argv [1]) * 42; Chỉ có 61 ký tự, giả sử đầu vào stdin
Viper_Sb

@Viper_Sb: cảm ơn vì gợi ý; Tôi không chắc chắn về các quy tắc nên tôi bắt chước giải pháp của Clyde. Tôi sẽ đi với đề nghị của bạn.
sam hocevar

1
@powtac cú pháp ngôn ngữ không yêu cầu khoảng
trắng

7

Perl, 35 43

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

Cần Perl 5.10 trở lên (chạy với -E), không có dòng mới trong đầu vào.

Tôi thích regex tác dụng phụ của tôi tốt hơn, nhưng mã ngắn hơn đã nói. Đây là một món quà lưu niệm. Cũng dành cho Perl 5.10 trở lên, nhưng chỉ dành cho các tính năng regex nâng cao / thử nghiệm, do đó chỉ cần một ptùy chọn dòng lệnh.

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

Xuất sắc. Tôi đã cố gắng hết sức để đánh bại regex đệ quy này nhưng không thể đạt dưới 43c. : - ((
ủng cao su

Tại sao cần phải nói $a++."{$b}"thay vì chỉ $a++.$b?
Timwi

@Timwi vì tôi cần những dấu ngoặc nhọn đó xuất hiện trong chuỗi kết quả. Tôi không muốn khớp với "d4" theo nghĩa đen, tôi muốn "dddd", được biểu thị dưới dạng regex "d {4}"
JB

Tất nhiên. Cảm ơn vì đã giải thích!
Timwi

Đến với giải pháp 33 byte cho việc này! Hãy thử trực tuyến!
Dom Hastings

7

05AB1E , 7 byte (không cạnh tranh)

AƶJQi42

Hãy thử trực tuyến!

Giải trình

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

Chỉ cần trải qua một số thử thách để học 05AB1E (và chơi golf nói chung). Thử thách này được đánh dấu là hoạt động ngày hôm qua và tôi đã tìm thấy một giải pháp ngắn, vậy tại sao không chia sẻ? :)


3
Chào mừng đến với PPCG!
Steadybox

6

Chương trình Haskell - 71 67 64 57

Giả sử không có dòng mới nào và cũng không xuất ra một dòng nào.

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

Sử dụng:

$ 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
Mã này vẫn rất dễ đọc.
Dan Burton

1
Từ zipWithđiểm dừng khi nó đạt đến cuối danh sách ngắn hơn, bạn có thể thay thế ['a'..'z']với ['a'..]và tiết kiệm 3 ký tự.
hammar

@hammar: Cảm ơn. Tôi đã lưu thêm 1 char bằng cách sử dụng >> = (concatMap) thay cho concat và zipWith.
Joey Adams

@hammar: Được lưu nhiều hơn bằng cách sử dụng ký hiệu thay vì >> = và lambda :-)
Joey Adams

2
@Joey: Hoặc thậm chí tốt hơn:[c|c<-['a'..'z'],_<-['a'..c]]
hammar

4

J, 29

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

thí dụ:

f 'oasijfiojasef'

f 23841235

f 'abbccc...'
42

Tôi thích J. Và tôi thấy nó xấu xí và kinh khủng. Và tôi thích nó.
xem

4

D: 94 ký tự

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

Dễ đọc hơn:

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

Cái này xây dựng một chuỗi và chỉ so sánh nó với đối số dòng lệnh đầu tiên. Nó ngắn hơn và ít khó khăn hơn so với đệ trình khác của tôi:

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.

(Lưu ý rằng phiên bản này giả định rằng các biến cibắt đầu được khởi tạo ở 0, như trường hợp trong phiên bản Delphi của tôi (2010).)

Giống như bài nộp khác của tôi, bài này cần ít ký tự hơn nếu việc xây dựng chuỗi không diễn ra trong một chức năng, như tôi đã làm trước đây:

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.

Lưu ý rằng đầu ra không cần một dòng mới, vì vậy WriteLn () đã trở thành Write ().


3

PHP - 45 ký tự

Tôi ngạc nhiên không ai đăng bất kỳ câu trả lời sử dụng băm. Đây là một cách rất hiệu quả để kiểm tra chuỗi chính xác.

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

Dữ liệu rất khó sao chép / dán vì có một byte rỗng ở giữa mã. Đây là một kết xuất hex của mã cho mục đích thử nghiệm.

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
Tài giỏi! Mặc dù về mặt kỹ thuật có các giá trị đầu vào khác có cùng hàm băm này, nhưng nó không hoàn toàn thỏa mãn yêu cầu xuất ra 42 chỉ khi đầu vào ở định dạng được chỉ định.
mellamokb

3

Scala 79

 if((for(i <- 1 to 26;j<-1 to i)yield(96+i).toChar).mkString==args(0))print(42)

3

Bình thường, 14

*42qzsm*dhxGdG

Chỉ cần xây dựng chuỗi cần thiết, sau đó so sánh với đầu vào và nhân với 42.


'so sánh với đầu vào và nhân với 42.' sẽ không bao giờ nghĩ về điều đó một mình. Bạn chỉ cần giúp tôi cạo 1 ký tự ra khỏi giải pháp của tôi. Cảm ơn.
AndoDaan

Argh, tôi đến quá muộn. Bạn có thể giải thích làm thế nào nó hoạt động? Chức năng mgây rắc rối cho tôi
Jim

1
@Jim Chúng tôi bắt đầu với chức năng bản đồ m, áp dụng một chức năng cho từng yếu tố đầu vào của nó. Đầu vào là G, bảng chữ cái. xGdtìm vị trí của d, ký tự trong bảng chữ cái, trong G, bảng chữ cái. htăng số đó lên một lần và *dsao chép nhân vật như vậy nhiều lần. Bên ngoài mhàm, skết hợp danh sách chuỗi kết quả thành một chuỗi, sau đó qzkiểm tra xem kết quả có bằng đầu vào không. Booleans được biểu diễn như là 0Sai và 1nếu đúng, do đó, *42kết quả là giá trị 42nếu đúng và 0nếu sai.
isaacg

3

Brachylog (2), 15 byte, thách thức ngôn ngữ postdates

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

Hãy thử trực tuyến!

Và bây giờ cho một câu trả lời hoạt động trên một nguyên tắc hoàn toàn khác với hầu hết được nhìn thấy ở đây. Đây là một chức năng gửi (câu hỏi không chỉ định loại gửi nào được mong muốn, nhưng các chức năng được cho phép theo mặc định).

Giải trình

Câu trả lời này hoạt động bằng cách xác định một loại chuỗi: những chuỗi a) chứa tất cả các chữ cái viết thường của bảng chữ cái, b) theo thứ tự được sắp xếp và c) lấy số lần xuất hiện của mỗi ký tự trong chuỗi tạo ra một chuỗi liên tiếp số nguyên bắt đầu từ 1. (Cần phải rõ ràng có nhiều chuỗi như vậy, nhưng chuỗi chúng tôi muốn trường hợp đặc biệt là ngắn nhất.) Sau đó, nếu chuỗi đáp ứng các tiêu chí đó, chúng tôi thêm 16 vào số lượng ký tự riêng biệt trong chuỗi; điều này sẽ tạo ra 42 nếu chuỗi là câu hỏi yêu cầu chúng ta trong trường hợp đặc biệt và ít nhất 43 trong tất cả các trường hợp khác. (Nếu chuỗi không thành công trong bất kỳ tiêu chí nào thuộc về danh mục, hàm sẽ kết thúc trong thất bại, giống như ném một ngoại lệ.)

Dưới đây là cách diễn giải mã nguồn:

⊇Ạ∧?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)

Cảm ơn lời đề nghị của @giusppe


Tôi nghĩ chỉ pastelà tốt ở đây, và bạn có thể sử dụng scan(,"")thay vì readline().
Giuseppe

2

Con trăn (84)

Giả sử một dòng mới ở cuối đầu vào.

nhập khẩu hệ thống
if ''. tham gia (c * chr (c + 96) cho c trong phạm vi (27)) + '\ n' == sys.stdin.read (): in 42

1
Tại sao không sử dụng raw_inputthay thế sys.stdin.read?
Juan

1
@Juan: raw_inputchỉ đọc một dòng duy nhất; Tôi không chắc chắn liệu "đầu vào" sẽ luôn là một dòng hay liệu có thể loại bỏ đầu vào trên các dòng sau hay không.
Hoa Long Tâm

2

Python - 62 ký tự

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

2
Có thể ngắn hơn trong Python 3 : print("".join(x*chr(x+96)for x in range(27))==input())*42.
mbomb007 ngày

2

Perl, 49 46 ký tự

được sử dụng trong một chương trình, không phải trên dòng lệnh

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

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

Trân trọng

rbo

Chỉnh sửa: Ý tưởng trích xuất từ ​​Ventero


2

PHP 92 88 87 ký tự

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

BIÊN TẬP

Thay thế $j<0bằng $jreturn $b==$a?42:0;vớiecho $b==$a?42:0;

Thay thế echo $b==$a?42:0;bằngecho($b==$a)*42;


2
Có thể là 80 ký tự nếu nó không dành cho tất cả các ký hiệu đô la kỳ dị.
Joey Adams

Cũng xem mục nhập của tôi cho một giải pháp vòng lặp đơn.
sam hocevar

2

Prolog 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 )

Cách sử dụng : a('string'), trả về 42nếu hợp lệ theo thông số kỹ thuật, hoặc 0.

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/

Chỉnh sửa : Đã xóa varvà loại bỏ hai khoảng trắng trong for (.

Chỉnh sửa 2 : Thay đổi j>0thành j, và

  1. return (z==r)?42:0; đến
  2. return z==r?42:0

Chỉnh sửa 3 : Khởi tạo ivới i='', thay đổi

  1. (z==r)?42:0 đến
  2. (z==r)*42

Chỉnh sửa 4 : Thay đổi

  1. for(;i<27;i++) đến
  2. while(i++<26)

Chỉnh sửa 5 : Thay đổi

  1. i=r='';while(i++<26) đến
  2. for(i=r='';i++<26;)
  3. for(j=i;j;j--) đến
  4. for(j=i;j--;)

Chà, bạn có thể giảm thêm 12 ký tự nếu bạn không sử dụng varđể khai báo các biến;)
Clyde Lobo

@Clyde: Cảm ơn! Cũng tìm thấy tôi có thể loại bỏ không gian giữa for (.
mellamokb

Vâng, cũng sắp đề xuất như vậy;) Ồ và tôi đã mã hóa một giải pháp trong PHP bằng cách sử dụng logic giống như của bạn
Clyde Lobo

Bạn có thể lưu thêm 2 ký tự bằng cách thay thế return(z==r)?42:0;bằngreturn z==r?42:0
Clyde Lobo

j>0có thể chỉ là jtôi nghĩ.
BẠN

2

JavaScript 1.8, 99 ký tự

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

Tôi dám cho bạn hiểu ý nghĩa của nó :)


2

PHP - 59

Giả sử ít nhất 1 đầu vào được cung cấp qua cli

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

Nó ít nhiều hoạt động, ngoại trừ md5 về mặt kỹ thuật có thể có các bản sao với thuật toán băm.


2

PowerShell v2 +, 47 byte

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

Xây dựng một phạm vi 1..26, nguồn cấp dữ liệu thông qua một vòng lặp với |%{...}. Mỗi lần lặp, chúng tôi sử dụng toán tử dấu phẩy để xây dựng một mảng bằng chữ của dòng hiện tại [char]nhân với số vòng lặp hiện tại. Sau đó -join, tất cả chúng ta cùng nhau xây dựng chuỗi abbcccdddd...và sau đó sử dụng -ceqso sánh phân biệt chữ hoa chữ thường so với đầu vào của chúng ta $args, điều này sẽ dẫn đến một trong hai $TRUEhoặc $FALSE. Trong PowerShell, các giá trị Boolean có thể được đặt hoàn toàn dưới dạng 1hoặc 0tương ứng, đó là những gì xảy ra ở đây với 42*. Sẽ in ra 42nếu đầu vào đang abbccc...zzzzzzzzzzzzzzzzzzzzzzzzzzvà sẽ xuất 0khác.


bạn có thể lưu một byte :) Hãy thử trực tuyến!
mê mẩn

2

K, 26 byte

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

Cảm ơn


{$[x~.Q.a@&1+!26;42;]}cho 22 byte.
streetster

1
42*(&!27)~-96+"j"$cho 18 byte (chuyển câu trả lời oK của tôi ).
streetster

2

VBA 91

Không có câu trả lời VBA nào nhưng điều này hoạt động:

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

Có thực sự không thể loại bỏ bất kỳ khoảng trắng từ này?
Trái cây Esolanging

1
Phiên bản thu gọn, 61 byte -o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
Taylor Scott

@ Challenger5 Không, không phải là không thể. Taylor's Scott bình luận chính xác là như vậy. Nó chạy trong Cửa sổ ngay lập tức và lấy giá trị từ ô A1làm đầu vào.
Kỹ sư Toast

2

APL (Dyalog) , 18 17 byte

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

Hãy thử trực tuyến!

Bốn byte rõ ràng có thể được lưu nếu chúng ta được phép sử dụng chữ hoa.

42 42

/⍨ if (lit. sao chép bởi)

 nhập ký tự

 giống hệt với

819⌶ hạ lưu

⎕AMột lphabet

/⍨ nhân rộng bởi

 một qua

26 26


1

Clojure - 61 ký tự

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

Khai thác các sự kiện sau:

  • Clojure có thể diễn giải bất kỳ chuỗi nào tự động như một chuỗi ký tự
  • Tôi có thể sử dụng phạm vi số từ 1 đến 26 để vừa tạo các ký tự vừa lặp lại số hoặc số lần chính xác để tạo đầu vào "chính xác"

Tôi sẽ tiết kiệm được 6 ký tự nếu Clojure cho phép lồng # () ..... yêu cầu tính năng quan trọng cho Clojure 1.4 Tôi nghĩ vậy!
mikera

1

Javascript 144

Có lẽ có thể được cải thiện đáng kể, đệ quy luôn luôn là một đầu xa đối với tôi.

Nén

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};

Ít nén

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.

Cái này đọc chuỗi từ đầu vào, so sánh nó khi nó đi, ghi 42 khi đầu vào khớp với đến cuối cùng 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.

Phiên bản này không sử dụng chức năng, giúp lưu khá nhiều ký tự khi so sánh với phiên bản trước của kỹ thuật này:

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.

Mặc dù hơi dài, chủ yếu là do các từ khóa dài của Delphi và nhu cầu khởi tạo các ứng dụng bảng điều khiển trước khi chúng có thể ghi đầu ra.

Cũng lưu ý rằng tôi đã tăng CmdLine lên 77 ký tự, vì đó là phần bù tôi cần bỏ qua đường dẫn thực thi cục bộ (Delphi không có con trỏ đối số trực tiếp). Điều chỉnh để phù hợp với thiết lập của riêng bạn (có thể dẫn đến 1 ký tự ít hơn khi bù <10).


Bạn có thể đặt loại ứng dụng trong ProjectOptions / DelphiCompiler / Linking / GenerateConsoleApplication. Ngoài ra, bạn có thể bỏ qua program a;dòng. Và dấu ngoặc xung quanh b^<>Char(c), i>0i=27có thể được gỡ bỏ.
Wouter van Nifterick

@Wouter van Nifterick: Cảm ơn những lời đề nghị, tôi cũng sẽ áp dụng chúng cho các bài nộp khác của mình. (Tôi thậm chí còn không biết if i>0thensẽ biên dịch!)
PatrickvL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.