비유 안심


27

여기 꽤 많은 사람들이 열렬한 XKCD 리더 일 것입니다. 그래서 저는 여러분이 Megan이 쉽게 할 수있는 일을하도록 도전 할 것입니다 : 컴퓨터가 결코 할 수없는 일에 대해 수천 개의 안심할 수있는 비유를 생성하는 스크립트를 만드십시오.

XKCD # 1263

당신의 스크립트

  • 모든 언어로 작성 가능
  • 코드 골프이어야합니다
  • stdin뱉어 낼 비유 수를 입력해야 합니다 (이 값을 초과 MAX_INT하거나 동등 하지 않다고 가정 할 수 있음 ).
  • 무작위로 생성 된 많은 비유를 출력합니다 .

비유는 다음과 같습니다

  • 로 시작 'Computers will never '
  • 다음으로, 당신은 당신의 프로그램을 최적화하기 위해 자유롭게 선택할 수 있지만 16 명 독특한 영어 동사 중 하나 있어야 포함 code-golf하고 understand.
  • 다음, 다시, 당신은 당신의 프로그램을 최적화하기 위해 자유롭게 선택할 수 있지만 16 개 독특한 영어 명사 중 하나 있어야 포함 a salad하고 an octopus.
  • 다음으로, 프로그램을 최적화하기 위해 자유롭게 선택할 수있는 16 개의 고유 한 영어 조항 중 하나를 포함 해야 하지만 for fun및을 포함 해야합니다after lunch .
  • 줄 바꿈 문자 \n또는 이와 동등한 문자로 끝납니다.

예를 들어 입력이 2인 경우 유효한 출력은

Computers will never code-golf a salad for lunch
Computers will never hug a tree in vain

프로그램 크기는 문자가 아닌 바이트 단위로 계산되므로 유니 코드 횡설수설이 아닙니다. 표준 허점 은 허용되지 않습니다.

이것이 나의 첫 번째 도전이므로, 명백한 변경을해야한다면 의견을 말하십시오.

편집 : 사전 '압축'을 장려하기 위해 바이트 수에서 사전 크기를 빼는 것을 고려하고 있습니다. 이것이 원격으로 가능하다면 향후 답변에서 볼 수 있습니다. 그렇다면 보너스를 기대할 수 있습니다.


4
당신은 그 크기가됩니다 추가 할 수 있습니다 바이트 단위로 계산 하고, 그 표준 허점이 허용되지 않습니다.
matsjoyce

나머지 14 동사 / 명사 / 절을 스스로 선택해야합니까?
Optimizer

@Optimizer "... 프로그램을 최적화하기 위해 자유롭게 선택할 수 있습니다 ..."
Martin Ender

5
매우 짧지 만 완전히 알 수없는 단어 ( here와 같은 )를 사용하지 않도록 사전 크기를 뺄 수 있습니다 .
Falko

2
@matsjoyce : 바이트 수는 기본값입니다. 표준 허점을 갖는 점은 언급 할 필요가 없다는 것입니다.
Dennis

답변:


6

CJam, 238 (232) (또는 209) 바이트

ri{'C"!fmQ$h/q6fW*LC*hBd11(kA>.TfqJ0++#<>A]XThJkY b~os;vMg_D-}zYX%_,PozNxe5_8`}$H;2IUZ]&$c+m~HJ*|!n\A^:W-*O\"V-/8Kg ,_b(N#M/1Zh6*%\#t22'#|\"BJN=Za2_.R"32f-96b28b" -"'{,W%+f=)/(\[G/~["for ""after "]\m*\(a\"a "f{\+}+\]{mr0=}%S*N}*

이것은 이미 게시 된 답변에서 많은 동사 / 명사 / 절을 사용하지만 일부는 새로운 것입니다. 여분의 바이트를 제거하기 위해 문자를 기본 변환했습니다.

기본 변환 된 문자열은 24 바이트를 더 늘릴 수 있습니다 ( 209 바이트 솔루션 을 얻으려면 모든 문자가 255 미만의 ASCII 코드를 가지고 있기 때문에 바이트 수 대신 문자 수를 고려해야하지만 사이트는 여전히 일부는 유니 코드가 있다고 간주합니다 )하지만 문자열이 인쇄 가능한 ASCII 문자로만 구성되기를 원했습니다.

참고로 다음은 209 바이트 버전입니다.

ri{'C"9óßÂ/ÃC eG?dcÅoø£gaC#Yä©Ï¡áq¶hm)ð­aâ%ØNo=óÏrbÁz´¾;q·u¬&ñ*±äô©@6W±U¹¥¢)·«Åx¶óV¬¬dhja¼ ª\"r[çË74Äãгî,ó3gÈ$AïL"32f-222b28b" -"'{,W%+f=)/(\[G/~["for ""after "]\m*\(a\"a "f{\+}+\]{mr0=}%S*N}*

STDIN에서 인쇄 할 행 수를 다음과 같이 가져옵니다.

12

산출:

Computers will never code-golf an octopus for fun
Computers will never code-golf a bag after za
Computers will never eat a hem after tip
Computers will never eat an octopus for tip
Computers will never get a fax for you
Computers will never dry a gym for za
Computers will never get a guy for tip
Computers will never do a pen for fun
Computers will never see a bar after you
Computers will never tax a pen for ex
Computers will never get a hem for lunch
Computers will never win a pen for ex

여기에서 온라인으로 사용해보십시오


19

약간 다른 접근 방식이 있습니다.

파이썬, 368308 297 바이트

EDIT, 나는 이번에 실제로 골프를 쳤다. 60자를 깎았습니다.

from random import*
from en import*
C=choice
v=["code-golf","understand","go","do"]
n=["salad","octopus","fun","lunch"]
for f,l in("verbs",v),("nouns",n):exec"l.append(str(C(wordnet.all_"+f+"()))[:-4]);"*12
exec'print"Computers will never",C(v),noun.article(C(n)),C(("for","after")),C(n);'*input()

내가 가장 자랑스럽게 여기는 골프 트릭은 다음과 같습니다.

for f,l in("all_verbs",v),("all_nouns",n):

나는 파이썬이 그렇게 할 수 있다는 것을 몰랐다! 더 간단한 설명은 다음과 같습니다.

for (a, b) in ((0, 1), (1, 2), (2, 3)):

a와 b를 0과 1에 할당 한 다음 1과 2에 할당 한 다음 2와 3에 할당합니다.


이것은 NodeBox의 언어 라이브러리를 사용하여 동사 / 명사 / 절의 목록을 생성 한 다음 임의로 선택합니다.

이 라이브러리는 임의의 단어 (따라서 368 바이트)를 생성하기에는 좋지 않지만이 접근 방식의 좋은 점은 무작위로 안심할 수있는 비유를 얻는 것입니다. 여기 내가 의미하는 바가 있습니다.

Computers will never attempt a syria for synchronization.
Computers will never understand a salad for change of mind.
Computers will never brim an electric company for synchronization.
Computers will never pivot a dusk for fun.
Computers will never bedaze an electric company for genus osmerus.
Computers will never brim a salad for vital principle.
Computers will never attempt an erythroxylum after lunch.
Computers will never understand an uuq for water birch.
Computers will never brim an ictiobus for change of mind.
Computers will never brim an ictiobus for 17.
Computers will never lie in an octopus for change of mind.
Computers will never happen upon a toothpowder for water birch.
Computers will never typeset an electric company for change of mind.
Computers will never brim a french oceania after lunch.
Computers will never bring out an ictiobus for glossodia.
Computers will never bedazzle an animal fancier for ash cake.
Computers will never attempt a dusk for genus osmerus.
Computers will never understand an animal fancier for genus osmerus.
Computers will never accredit a prickly pear cactus for 17.
Computers will never typeset an erythroxylum for water birch.

그러나 다른 사람의 프로그램이 "컴퓨터가 애쉬 케이크를 좋아하는 동물을 더 이상 놀라게하지 않을 것"이라고 말하지 않을 것이라고 생각합니다.

다음은 ungolfed 버전입니다 (574 바이트).

import random
import en

v = ["code-golf", "understand"]#list of verbs
n = ["a salad", "an octopus"]#list of nouns
c = ["for fun", "after lunch"]#list of clauses
for i in range(14):
    v.append(str(random.choice(en.wordnet.all_verbs()))[:-4])
    n.append(en.noun.article(str(random.choice(en.wordnet.all_nouns()))[:-4]))
    c.append("for "+str(random.choice(en.wordnet.all_verbs()))[:-4])

N=input("Enter the number of reassuring phrases you want: ")
for i in range(N):
    print "Computers will never"+' '+random.choice(v)+' '+random.choice(n)+' '+random.choice(c )+'.' 

그리고 마지막으로 그러나 확실히 적어도 여기에는 내가 좋아하는 안심 비유가 있는데, 앞으로 10-15 년 안에 정말 인기있는 어구가 될 것으로 예상됩니다.

Computers will never move around a methenamine for godwin austen.
Computers will never conk an adzuki bean for bitterwood tree.
Computers will never jaywalk a cross-dresser for fun.
Computers will never hyperbolize an accessory after the fact for norfolk island pine.
Computers will never dissolve a salad for earth wax.
Computers will never acetylise an incontrovertibility for dictatorship.
Computers will never reciprocate a strizostedion vitreum glaucum for commelinaceae.
Computers will never goose an action replay for star chamber.
Computers will never veto a bottom lurkers for jackboot.
Computers will never reciprocate a visual cortex for oleaginousness.
Computers will never baptise a special relativity after lunch.
Computers will never understand a gipsywort for citrus tangelo.
Computers will never get it a brand-name drug for electronic computer.
Computers will never deforest a paperboy after lunch.
Computers will never bundle up a nazi for repurchase.
Computers will never elapse a bernhard riemann for counterproposal.

그리고 내 개인적인 마음에 드는 것 :

Computers will never romanticise a cockatoo parrot for cross-fertilization.

6
나는 컴퓨터가 결코 재구매를 위해 나치를 묶지 않을 것이라 확신한다 ...
Sanchises

아직 미세 톱니 빗 또는 아무것도이 일을 통해 사라하지 않은,하지만 난 틀리지 않는 from random import choice as Cfrom random import*;C=choice
undergroundmonorail

또한 두 번, 당신은 for i in ' '*(something)그렇게 할 수 있습니다 하찮게 사이의 공간을 제거하는 두 바이트를 저장 in하고' '
undergroundmonorail

네, 더 골프를 치는 것이 확실합니다. 압축에 많은 노력을 기울이지 않았습니다. 나는 정말로 그것을 무너 뜨리고 싶었다고 생각한다. 나는 임의의 단어 선택에 더 적합한 라이브러리를 찾아야했다.
DJMcMayhem

6

자바 스크립트 ES6, 331 336 바이트

n=prompt(a='')
r=s=>s+Math.random()*16>>0
p=q=>'OctopusSaladCutCueBatJamKidPenDogFanHemDotTaxSowDyeDigCode-golfUnderstandLunchFunMeYouUsItAdsPaZaMenTwoIceJamWarRumWax'.match(/[A-Z][^A-Z]+/g)[q].toLowerCase()
while(n-->0)y=r(0),z=r(18),a+=`Computers will never ${p(r(2))} a${y?'':'n'} ${p(y)} ${z<18?'afte':'fo'}r ${p(z)}
`
alert(a)

동사와 명사 모두로 사용되는 단어를 선택하여 목록을 줄 였지만 허용되지 않는 경우 알려주십시오. Stack Snippets (ES5를 사용하도록 포맷 된 코드) 또는 http://jsfiddle.net/5eq4knp3/2/ 에서 위의 코드를 사용해보십시오 . 다음은 예제 출력입니다.

Computers will never hem a cut for ads
Computers will never dot a pen after lunch
Computers will never code-golf a bat for free
Computers will never sow a dog for me
Computers will never cut an octopus for fun

도대체 것은입니다 ZA ?!
Beta Decay

3
피자를위한 @BetaDecay 속어.
NinjaBearMonkey

1
@MarkGabriel이 함수는 0에서 16 사이의 임의의 숫자를 오프셋 s으로 반환 하여 목록의 다른 음성 부분을 뛰어 넘는 함수입니다 . 두 개의 물결표는 비트 단위 NOT 연산자이며 더 짧은 방법으로 작동 Math.floor()합니다.
NinjaBearMonkey 1

1
@MarkGabriel ECMAScript 6가 함수를 나타내는 방법입니다. r=s=>12와 동일하지만 function r(s){return 12}더 짧습니다. MDN에 대한 문서도 참조하십시오 .
NinjaBearMonkey 1

1
@MarkGabriel 자세한 답변을 보려면 SO의 자바 스크립트에서 ~~ (“이중 물결표”)의 기능은 무엇입니까?를 참조하십시오. 그리고 무엇 자바 스크립트에서 F = A => 무슨 뜻? ~~는 일종의 Math.floor(그러나 음수에 대해 다르게 동작 함)이며 =>bound가있는 ES6 스타일 함수 정의입니다 this.
apillers

5

파이썬 -390 385 383

from pylab import*
S=str.split
n=input()
while n:n-=1;i,j,k=randint(0,16,3);print"Computers will never",S("buy cut dry eat fax get pay rob see sue tax tow wax win code-golf understand")[i],"a"+"n"*(j<1),S("octopus salad bag bar bee bow boy bra dad fax gym guy hat man mom pet")[j],"for "*(k>2)+S("after lunch,naked,ever,fun,me,you,us,tip,gas,cash,air,oil,beer,love,food,dope",",")[k]

무작위 출력 예 :

Computers will never pay an octopus for oil
Computers will never cut a bra for beer
Computers will never eat a bee for us
Computers will never rob a pet for you
Computers will never tax a pet for tip
Computers will never buy a salad for cash
Computers will never sue a boy naked
Computers will never see a bar for you
Computers will never wax a bra for beer
Computers will never sue an octopus for us

음 ... 이온 은 동사가 아닙니다.
John Dvorak

@ JanDvorak : Oooops ... 해결!
Falko

2
더 짧은 동사를 사용하지 않는 이유는 무엇입니까? 말, 바느질 ...
존 드보락

@ JanDvorak : 예, 교체했습니다. 그러나, 나는 확실히 나는 골프가 콘텐츠, 많은 있기 때문에 얼마나 멀리 아니에요 심지어 짧은 단어 하나가 사용합니다. 그러나 결과는 너무 지루할 것입니다.
Falko

1
'for + ...'와 부사 (나체)를 하나의 목록에 포함시키는 것이 좋습니다. 이것은 내가 바랐던 것입니다. 내 컴퓨터가 절대 옷을 벗지 않을 것이 매우 안심입니다.
Sanchises

2

펄-366

@w="Code-golfUnderstandBeDoTieSeeSawEatCutCapSitSetHateZapSipLoveSaladOctopusSeaBeeCatDogHatBatJobManLapCapRapMapDotAnt0fun1that1noon1work0good0sure0reason0nothing0you1you1lunch1all0me0nowToday1me"=~s/\d/("For ","After ")[$&]/reg=~/([A-Z][^A-Z]+)/g;print"Computers will never ".lc"$w[rand 16] a".$w[16+rand 16]=~s/^[AO]?/(n)[!$&]." $&"/re." $w[32+rand 16]
"for 1..<>

테스트는 다음과 같습니다.

$ perl ./parables.pl <<<3
Computers will never do an ant after noon
Computers will never do a lap after all
Computers will never love an octopus for sure

1

CJam, 353 (317) 301 바이트

나는 공정성을 위해 Falko의 단어 목록을 사용하므로 골프의 유일한 차이점은 내용이 아닌 언어 때문입니다 (사람들이 내용을 골프 시작하면 단어 목록을 변경할 수 있음).

"Computers will never ""buy
cut
dry
eat
fax
get
pay
rob
see
sue
tax
tow
wax
win
code-golf
understand"N/[" an octopus"" a ""salad
bag
bar
bee
bow
boy
bra
dad
fax
gym
guy
hat
man
mom
pet"{N/\f{\+}~]}:F~S["after lunch""naked""ever""for ""fun
me
you
us
tip
gas
cash
air
oil
beer
love
food
dope"Fm*m*m*mr0=

N 번 인쇄하기위한 입력을 읽지 않았습니다.
Optimizer

@Optimizer 아, 나는 그것을 완전히 간과했다. 순식간에 수정.
Martin Ender

0

넷 로고, 396

또한 Falko의 단어 목록을 사용했지만 프로그램 길이는 변경되지 않는 두 가지 예외가 있습니다.

to f let a["after lunch""ever""alone"]type(word"Computers will never "one-of["buy""cut""dry""eat""fax""get""pay""rob""see""sue""tax""tow""wax""win""code-golf""understand"]" a"one-of["n ocotpus"" salad"" bag"" bar"" bee"" bow"" boy"" bun"" dad"" fax"" gym"" guy"" hat"" man"" mom"" pet"]" "one-of fput word"for "one-of["fun""me""you""us""tip""gas""cash""air""oil""beer""love""food""dope"]a"\n")end

"프로그램"을 정의하는 방법에 따라 처음 5 자와 마지막 3자를 제거하여 점수 388을 제거 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.