俳句の階乗!


60

仕事

組み込みの階乗関数を使用せずに数値の階乗を計算するプログラムを作成します。簡単?問題は、プログラム全体(テストを含む)を俳句形式で記述する必要があることです。

仕事が足りない
必要な数の俳句を使用できますが、発音時には5-7-5音節形式に従う必要があります。

得点

これはですので、最も多くの賛成票を獲得する必要があります。プログラムは少なくとも1つの完全な俳句で構成され、すべての俳句が完成している必要があります。

コードを読むとき、各俳句の最初の行には5つの音節があり、2番目の行には7音節があり、3番目の行には5音節があります。


5
:シェイクスピアで書かれた何かのために完璧にフィットのような音shakespearelang.sourceforge.net/report/shakespeare/...
デニス・デ・Bernardy

2
ほとんどの答えは「テストを含む無視しているようです。
アンコ14

5
Haikuの重要なことを正しく言っているサイトにリンクする方法が好きです(a)kiruと(b)季節の参照であり、その後、モーラ(またはそうでない言語の音節「Tは本当に持っているモーラを 😸。
クリストファーCreutzig

1
私は@ChristopherCreutzigに同意します-季節ごとの参照と切り取りを確保しなければならなかったらもっと面白いでしょう。悲しいことに、これらの俳句の基本を見落とすことがよくあります。その私には思えるthenまたは句読点を切断するのを助けることができました。季語ので、わからない...
ダレン・ストーン

私は俳句の専門家ではありませんが、確かに叙情的な品質が期待されています。これまでのところ、私は1つだけの答えを見ています。
SebastianH 14

回答:


54

Smalltalk

(ワークスペースで評価します;ダイアログを開き、数字を要求し、結果を標準出力に出力します):

"in" "this" 'poem,' "you" "must"
"pronounce" "characters" "like" "these:"
"return(^)," "and" "times(*);" "please".

"but" 'never' "in" "here"
"tell" "anyone" "about" "those"
"few" "parentheses".

"otherwise" "these" "words" 
"are" "stupid" "and" "this" "coded" 
"rhyme" "is" "wasted" Time.

"let" "us" "now" "begin" 
"by" "defining," "in" Object
"and" compile: "the" "rhyme:"

'fac: "with" arg"ument"
"to" "compare" arg <"against" 2 ">"
"and" ifTrue: [ ^"return"

"["1] "or" ifFalse: "then"
["return"^ arg *"times" "the" "result"
"of" ("my"self ")getting"

"the" fac:"torial"
"of" "the" "number" arg "minus"-
1 "[(yes," "its" "easy")]'.

("Let" "me" "my"self "ask"
"for" "a" "number," "to" "compute"
"the" fac:"torial"

("by" "opening" "a" 
"nice" Dialog "which" "sends" "a"
request: "asking" "for"

'the Number to use' 
"(which" "is" "(" "treated" ) asNumber)
"then" print "the" "result".

私はいくつかの熟考(「この詩の中で」)と奇語も取り入れようとしました。また、いくつかの西洋スタイルの韻の要素が含まれています(してください->これら、時間->韻)。しかし、日本語も英語も母国語ではないので、文体の詳細を許しません;-)


ところで:Squeak / Pharoで試すには、「Dialog」を「FillInTheBlankMorph」に、「print」を「inspect」に置き換えてください。
blabla999 14

40

ハスケル

fact :: Int -> Int          -- fact is Int to Int
fact x = product (range x)  -- fact x is product range x
range x = [1..x]            -- range x is 1 [pause] x

Haskellの教育時間:

  • このrange x関数は、1からの値までの整数のリストを作成しますx
  • このfact x関数は、リストのすべての値を乗算しrange xて結果を計算します。
  • 最初の行は、fact関数が整数を受け取り、整数を返すことを示しています。

3
やや@JanDvorakのポイントが欠けていますか?
jwg 14

2
フォームオーバー機能。これが実際のプログラミングである場合、私は確かにオーバーフローのケースを説明します:)
danmcardle 14

7
range x is 1 to xしかし6音節です
デビッドZ 14

9
@David私はそれを「範囲xは1 [劇的な一時停止] x」と読みました。
アンコ14

3
Haskellを学びたいなら、Learn You a Haskellを強くお勧めします。
danmcardle 14

40

Java-2俳句

protected static
        int factorial(int n) {
    if (n == 0) {
        return n + 1;
    } return factorial(n
            - 1) * n;}

質問がではないときでさえ、私は自分自身がゴルフの答えを見つけているのをよく見ます。この場合、私は俳句の数をゴルフしました。

私はそれを発音します:

nがゼロの場合、static
int factorial int nを保護し
ます

返すnはプラス1つ
のリターン階乗nは
マイナス1倍のn


テストプログラム:

class Factorial {                                    // class Factorial
    public static void main(String[]                 // public static void main string
            command_line_run_args) {                 // command line run args

        int i = 0;                                   // int i is zero
        while (7 != 0)                               // while seven is not zero
            System.out.                              // System dot out dot

                    println(i + "!"                  // print line i plus not
                            + " = " + factorial(     // plus is plus factorial
                            i += 1));}               // i plus equals 1

    protected static
            int factorial(int n) {
        if (n == 0) {
            return n + 1;
        } return factorial(n
                - 1) * n;}}

このプログラムは0sの出力を高速で開始することに注意してください。それはオーバーフローの結果です。それぞれintをに変更することで、より大きな正しい数値を簡単に取得できますlong

以下のための標準的な発音System.out.printlnとは、public static void main(String[] args)プログラムに反映されています。


2
投票できなかったためごめんなさい。Haskellソリューションを強化したい
ジョンドヴォルザーク14

26

APL

factorial←{×/⍳⍵}

階乗

—オメガまでの自然の産物


1
あなたがそれをやっていたかどうかを知っていたかどうかにかかわらず、キレジとして機能するために+1。
ジョナサンヴァンマトレ14

@JonathanVanMatre LOLでも手がかりはありません!ただし、辞書を使用して音節を数えました(ネイティブスピーカーではありません)。キレジを示すダッシュを追加しました。
トビア14

2
+1は英語でもシンプルでわかりやすいものだからです。
イマレット14

シンプルでありながら美しい。
FUZxxl

1
factorial←×/⍳入力まで」の3バイトを保存します。
アダム

17

シェークスピア

The Products of Love:
A haiku tragedy with
mathy undertones.

Romeo, a man.
Juliet, a maiden fair.
Friar John, a monk.

Act I: A Cycle.
Scene I: Pertinent Values.
[Enter Romeo]

[Enter Friar John]
Romeo: Listen to thy
heart. Thou art thyself.

Friar John: Thou art
as forthright as a songbird.
[Exit Friar John]

[Enter Juliet]
Romeo: Thou art as fair
as a violet.

Scene II: Questioning
Themselves. [Exit Juliet]
[Enter Friar John]

Friar John: Art thou
as just as the sum of me
and a nobleman?

Romeo: If so,
let us proceed to scene III.
[Exit Friar John]

[Enter Juliet]
Romeo: Thou art as good
as the product of

thyself and myself.
Juliet: Thou art as fierce
as the sum of an

eagle and thyself.
We must return to scene II.
Scene III: A Lengthy

Title for a Brief
Dénouement; Or, The Last Word.
[Exit Friar John]

[Enter Juliet]
Romeo: Open your heart.
[Exit Romeo]

(想像される)テストケース:

その長さにもかかわらず、このプログラムは入力として単一の整数を取り、出力として単一の整数を提供します。そう:

6 ↵ 720
7 ↵ 5040
0 ↵ 1    1 ↵ 1

(「6、7〜20。/7、5000、40。/ゼロ、1。1、1。」)


5
これが合法的なコードであると言えるという事実について、私がどのように感じているのかわかりません。
randomra

12

Python 2、4 Haikus

完全なPython 2プログラムhaifac.py。として実行python haifac.py <n>

#run this full program
import operator as\
op; import sys#tem

#please provide an arg
n = sys.argv[1]
def haifac (n):

    if n < 1:
        return 1#to me at once
    else:#do something else

        return op.mul(
            n, haifac(n - 1))
print haifac(int(n))

発音:

この完全なプログラム
インポート演算子を
opインポートシステムとして実行します


sys arg v 1に等しいarg n を指定して、
hai fac nを定義してください

もしnは1以上の
私へのリターン1一度に
他の何かを行います

return op dot mul
n hai fac n-1
印刷hai fac int n


1
私が使用したいと#to me at once...メートルの仕事をするために
フロリス

2
そして、私は最初にエスケープされた改行が好きです:)
ヨハネスH. 14

2
コメントの使用は、不正行為のようなものだと思います。
Ypnypn 14

9

GolfScript、2俳句

),{0>},{,,*}*

各キーストロークを列挙して、俳句として読みます。

#close parenthesis
#comma open-brace zero
#greater-than close-brace

#comma open-brace
#comma comma asterisk
#close-brace asterisk

テストケース(5俳句)の場合:

[1 2 3]4+          #generate the array [1 2 3 4]
{                  #start creating block
),{0>},{,,*}*      #actual factorial code
}%                 #close block and map across array (so that we should have [1! 2! 3! 4!])
[1 2 6]2.3**12++=  #generate the array [1 2 6 24] and check for equality

俳句として読む:

#open-bracket one
#space two space three close-bracket
#four plus open-brace

#close parenthesis
#comma open-brace zero
#greater-than close-brace

#comma open-brace
#comma comma asterisk
#close-brace asterisk

#close-brace percent-sign
#open-bracket one space two
#space six close-bracket

#two period three
#asterisk asterisk one
#two plus plus equals

8

前方へ

: fugu 1              \ colon fugu one                = 5
swap 1 + 1 ?do        \ swap one plus one question do = 7
i * loop ;            \ eye star loop semi            = 5

フグは機能であり、私の気合の試みです。フグは冬の基準です。カウントループの前に、ターニングポイントのkireji?doになるつもりです。


7

PHP、4つの俳句

韻を踏んだ俳句!

function haiku($can) { // function haiku can (5)
    if ($can == 1) // if can is equal to one (7)
        return ++$stun; // return increase stun (5)

    if ($can == 0) { // if can equals ou (5)
        echo "It is one, you know! "; //echo "It is one, you know! " (7)
        return 1+$blow; } //return one plus blow (5)

    if ($can > $fun) { //if can exceeds fun (5)
        return haiku($can-1) //return haiku can less one (7)
            *$can; }} //multiplied by can (5)

if (null == $knee) { // if null equals knee (5)
    $free=0+3; // free equals zero plus three (7)
    echo haiku($free); } // echo haiku free (5)

1
3行目を読みますreturn plus plus stun
corsiKa 14

私はこれが本当に好きです。
BenjiWiebe 14

7

空白

これは次のいずれかの用途作る最も有名な 俳句秒、そして偉大な契約はそれについて書かれています。

なぜ誰もこれをやったことがないのか分かりません、努力さえしません!

まず第一に、詩を読む前に、詩を取り巻く大きな空虚によって作られた静けさを身に着けて、リラックスして楽しんでほしい。広大な風景に囲まれた池を強調しています。

古池や    
蛙飛びこむ               
水の音             






































































































































ファイルビンのソースコード

日本語が話せない場合、次のように発音します。

ふるいけや

かわずとびこむ

みずのをと

当然、モラエによってカウントされます。kirejiは(やあるYA季語((季節参照)を蛙である河津 - >春、カエル)

公式ページからLinuxインタープリターを使用すると、次のように使用できます。

$エコー5 | ./wspace .ws


6

Mathematica

f[x_]:=     (* f of x defined *)
 x f[x-1]   (* x times f of x less 1 *)
f[1]=1      (* Mogami River *) 

ペダルは最後の行を「1 of f is 1」と読むかもしれませんが、私はhoへの叫びに抵抗できませんでした。

テスト:

Table[f[n],     (* Table f of n *)
 {n, 1, 10, 1}] (* n from 1 to 10 by 1 *)
ListLogPlot[%]  (* ListLogPlot output *)

返品:

(1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800)

値の対数プロット

言語的特徴ボーナス俳句(@cormullionに触発)

Rewrite any term
High-level functions abound —
Mathematica

5

バッチ

@set /a t=1 &^
for /L %%a in (2, 1, %1) ^
do @set /a t*=%%a

発音 ; これらの記号と同様に数式を無視します@ / % ^ , ( )

1に設定し、
2 1 1におけるL Aの
ATAを設定してください

注意; これは階乗を計算し、それを出力しません-変数tは階乗を含みます。

次のHaiku /コードを同じバッチファイルに追加して、階乗を出力できます(|'はパイプとして発音されます):

@echo %t% ||^
When will you learn, unclemeat ^
Why must you use Batch?

5

クロージュア

(->> *command-line-args*                ; thrush com-mand line args
  seq last read-string range (map inc)  ; seq last read string range map inc
  (reduce *) println)                   ; re-duce times print-lin

5

F#

let fact n =
    [1..n] |>
    Seq.fold (*) 1

nの事実を
1からnまでとし、
Seqドットフォールドスター1を適用する


私を盗んだ...;)
ジョスティ14

5

newLISP

括弧は発音されません:

(define (fac n (so))            ; define fac n so 
(if (= n 0) 1                   ; if equals n zero 1
(* n (fac (dec n)))))           ; times n fac dec n

(for (n 0 10)                   ; for n zero ten
; let's test from zero to ten
(println (fac n thus)))         ; printline fac n thus

Lispコードは

多数の括弧

およびいくつかの機能


解説俳句が大好きです。それをインスピレーションと考えて、私の答えに加えます。
ジョナサンヴァンマトレ14

5

Perl

$r = 1; for(1           # r gets one for one
.. pop @ARGV) { $r *=   # to pop arg v r splat gets
$_; } print $r;         # the default print r

これをファイルに投げます f.pl

そして出力:

$ perl f.pl 3
6 $ perl f.pl 1-1
1 $ perl f.pl 10
3628800 $ 

次のように読みます:

perl fpl 3
perl fpl one less one
perl fpl ten

1
7-5-7のテストはどのように発音しますか?
クリストファー・クロイツィヒ14

@ChristopherCreutzig私はテストのためにそこに5と6をうまく入れることができます(「perl fpl three」(5)と「perl fpl ze-ro」(6))...必要なテスト。

@ChristopherCreutzigはそのためのトリックを見つけました。その要件を思い出させてくれてありがとう。(公平を期すために、1-1は実際には '0'をテストせず、同じ結果になります-ゼロでも機能します)

5

LiveScript

この中世:

prelude = ^^ do                       # prelude is clone do
  require \prelude-ls                 # require prelude dash ls
{ product } = prelude                 # product is prelude

story = (ah) ->                       # story is ah such:
  ones-misery = (one) ->              # one's misery is one such
    let death = product               # let death be product

      fight = [1 to one]              # fight is one to one
      why = (one) -> death <| fight   # why is one such death take fight
  ones-misery ah                      # one's misery ah

room = console.log                    # room is console log
room <| (story 10)!                   # room take story three bang
[null of { use : this }]              # no of use is this

印刷し3628800ています、10!。これは少し回り道です。関数storyは、ones-misery常に答えを返すfunctionを返します。そのように芸術的です。

フィラーコメントや不要な文字列はありません!


ボーナスデバッグストーリー:

私は爆笑
バグがあったことを知らされたとき
、「deathですundefined


3
ハハ、あなたが「死=!proud」を持っていれば、あなたはそのバグにぶつかりませんでした。 poetryfoundation.org/poem/173363
ジョナサンヴァンマトレ

5

ハスケル

これは韻を踏む俳句になります!

事実0 = 1-事実ゼロは1
fact ton = ton *(fact stun)--fact tonはton倍fact stunです
        where stun = pred ton --stunはpred tonです

うん!

注:Predは前の番号を意味します。また、haskellでは、関数の定義を複数持つことができ、意味のある最初の定義が使用されます。


エレガント!(フィラー)

4

Ruby-One Haiku

ARGV.first.to_i.
 tap do |please| puts 1.upto(
 please ).inject( :*) end

次のように読みます(句読点は無視しますが、1つの絵文字を含めます)。

 arg vee first to i
   tap do please puts one up to
 please inject smile end

0!の出力を生成しません。
200_success 14

@ 200_success:ありがとう。私はそれと一緒に暮らさなければならないかもしれません、それは厳密に要件ではないので、考えがあります
ニール・スレーター14

また、テストは俳句であることが意図されています。私は最初に自分自身を読んでそれを見逃した。
ジョナサンヴァンマトレ14

@ジョナサンヴァンマトレ:はい私もそれを見逃した。トップの答えでさえこれに悩まされていないようです。私はコマンドライン上にあるので、複数行を取得するのは難しいです。。。
ニールスレーター14

4

SMLの場合:

fun fact 0 = 1
  | fact n = n*fact(n-1)
  ;

として読む:

"fun fact 0 is one,
bar that, fact n is n times
fact of n less one"

3

Perl

既製の関数を使用することはルールに反することは知っていますが、ここに私が得たものがあります。

あなたの仕事が大きすぎるsized歯類に指示することだと想像してください:

use Math::BigRat; use
feature 'say'; use warnings; say
new Math::BigRat($_)->bfac

最後の言葉が何を意味するのか、どのように発音されるのかしか推測できませんが、1音節であると確信しています。どうやら彼はあなたが彼に何を望んでいるのか理解していないので、あなたは詳しく説明する必要があります(忍耐を失うと品質基準を緩和する):

use Math::BaseConvert
':all'; no strict subs; no warnings;
reset and say fact($_)

まだ役に立たない。次に、わかりやすい英語で説明する必要があります。

no strict; no warnings;
use Math::Combinatorics;
say factorial($_)

次に何が起こったのかわかりませんが、コードは有効です:

perl -nE 'use Math::BigRat; use feature "say"; use warnings; say new Math::BigRat($_)->bfac'
42
1405006117752879898543142606244511569936384000000000

そして

perl -nE 'use Math::BaseConvert ":all"; no strict subs; no warnings; reset and say fact($_)'
33
8683317618811886495518194401280000000

そして

perl -nE 'no strict; no warnings; use Math::Combinatorics; say factorial($_)'
16
20922789888000

3
「1音節であると
確信してい

1
残念ですが、そこにCoyエラーを投げることはできません。

これは、これまでのところ、叙情的な品質を備えた唯一の答えです:)
SebastianH 14

1
@SebastianH、感謝:)、他の人がルールでプレーしようとした一方で、私はだまされても
user2846289

2

Python

lambda n: reduce(
    lambda a, b: a * b,
    range(1, n), n)

私の読み方:

lambda n: reduce
lambda a b: a times b
range 1 to n, n

`


0!のバグのある出力を生成します。
200_success 14

2

C

#include <std\
io.h> 
#include \
<stdlib.h>

int main(int argc
 , char** argv)
{   // iteratively
    // compute factorial here
long int n = \
0, i \
= 0, r = \
1 /*
product starts at one*/;

if (argc 
> 1) { n = 
strtol(argv[\
1], NULL, 10)
; if (n 
< 0) {
       printf("Arg must\
       be >= 0\n");
       exit(-
    1);}
} i = 
n;
while (i) { r 
= r * i;
    i
--;
} /* print
the result*/ printf(
"%d factorial\
equals %d\
\n", n
, r);
/*done*/}

発音:

ポンドには標準
I / Oドットhが含まれますポンドには
標準libドットhが含まれます

int main int arg c
コンマchar star star arg v
オープンブレースコメント


ここで
long int nが等しい階乗を繰り返し計算します

ゼロコンマi
はゼロコンマr
は1つのコメントに等しい


arg c
が1より大きい場合、製品は1つのセミコロンで始まります

左中括弧nは
arg v subのstr-to-l
コンマNULLコンマ10


nがゼロより小さい場合はセミコロン
。printfargは


ゼロ以上のバックスラッシュ
nセミコロンである

負の
1つのセミコロンを終了終了ブレース
終了ブレースiが等しい

n個のセミコロンは、
私はブレースを開けながら、rは
r倍Iに等しいです

セミコロンi
デクリメントセミコロン
クローズブレースコメント印刷

結果のprintf
パーセントd階乗
はパーセントdに等しい

nカンマn
カンマrセミコロン
コメント終了ブレースを打ちます


#文字は、典型的には顕著であるシャープ又はシャープ Cコードで。
FUZxxl

1

C#-3つの俳句

4番目の俳句になる、名前空間とクラス定義の乱雑さを使用して、通常のC#を削除しました。

public static void
Main(){int num = Convert.
ToInt32

(Console.ReadLine());
 Console.WriteLine(num ==
 0 ? 1 :

Enumerable.
Range(1, num).Aggregate
((i, j) => i * j));}

私が読んだ

public static void 
Main int num equals Convert
To int thirty-two

Console dot Read line
Console Write line num equals
zero? then one, else

Enumerable
Range 1 to num aggregate
i j i times j

1

ハスケル

module Haiku where          -- read literally.
fac x = let in do           -- = is read as 'equals'
product [1..x]              -- product one to x

モジュールは、コンパイル時にモジュールなしでHaskellコードに自動的に追加されるため、実際には不正行為であることに注意してください。


今日まで、私はあなたが1つの声明を下に入力することができるdoとは知りませんでしたMonad a => a
オニキス鉱14

1

JAVA:

JavaのQuincunxが投稿した質問とDwaiku(Double-Haikuまたはそれを何でもいい)に応えて、正しいHaikuを次に示します。

public static int factorial(int n) {
   return (n==0) ? (n+1) : (factorial(n-1) * n);
}

1

Javascript-2つの俳句

function factor (a) {          // function factor a
  if(!a){ return 1 ||          // if not a return 1 or
    a & 17}                    // a and seventeen

  else if (a + 1){             // else if a plus one 
    return a * factor          // return a into factor
    (a + ( - 1) )  }}          // a plus minus one 

私はネイティブスピーカーではありません。そこで、辞書を使用して音節を数えました。うまくいけば、それで十分です。フィードバックは大歓迎です:)


1

Powershell、2 Haikus

function facto ($num){    # function facto num
$i = 1; 1..$num|          # i equals one; i to num
foreach { $i =            # for each i equals

$i * $_}; write $i}       # i times this write i
$answer = facto $args[    # answer equals facto args
0]; write $answer         # zero write answer

1

フィラーを使用できますか?

Python 2の俳句:

number = num + 1
a = 13 + 4
b = 14

nuum = len([1])
for i in range(1, number):
    nuum *= i

nuum equals length one
ピエールアラード14

リストの長さ
マルティセン14

最初の行の発音をお願いしています。num equals length of the list作る7 syllabesの代わりに、5
ピエール・Arlaud

1
あなたは置き換えることができnuumfoo(私がいるかのように読んでいるので、NU-ええと、制限を超えてあなたを置きます。)
ASCIIThenANSI

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.