私を愛している、私を愛していない


45

私を愛している、私を愛していない

このシンプルな子供向けゲームは古いですが、まだ人気があります。私たちは今21世紀に生きているので、デジタル化しましょう!

仕様

ランダムシードを生成できない言語を使用している場合を除き、プログラムは入力を受け付けません。その場合、シードを入力として取得できます。あなたの仕事は、ゲーム内のように、「Loves me ...」と「Loves me not ...」の合計3〜20行をランダムに出力するプログラムを作成することです(追加の1行。読書)。

ただし、いくつかの制限があります。各行の後に改行が必要です。最初の行は「Loves me ...」でなければなりません。最後の行(「Loves me」または「Loves me not」)は、それぞれ感嘆符または単一のドットで終わる必要があります。最後の行の後、「愛してる!」に応じて、新しい行にheart(<3)または壊れたハート(</3)を出力する必要があります。または「私を愛していない」。最後の文でした。

末尾の空白は許可されます。

出力例

出力:

私を愛して...私を
愛していない...
私を愛して...
私を愛していない...
私を愛して!
<3

別の出力:

私を愛して...私を
愛していない...
私を愛して...
私を愛していない。
</ 3

これがなので、最短のエントリーが勝ちです!

また、私の最初の挑戦:)がんばって!


行数の分布に制限はありますか、つまり、一様にランダムである必要がありますか、それとも3〜20のすべての長さが正の確率を持つのに十分ですか?
ズガルブ

私はこれについては考えていませんでしたが、どの分布でも問題ないと思います。したがって、それら一様にランダムである必要はありません
マシューロック

3から20([3, 20))または3から20([3, 20])までですか?
orlp

1
@MatthewRock使用する言語が独自に乱数をシードできない場合はどうなりますか?ユーザーはランダムシードを提供できますか?
mınxomaτ

3
@minxomatとにかく、それは単なるゲームです。続けて、ルールを変更しました。
マシューロック

回答:


23

Pyth、54 53 51 50 48バイト

pj+*3\.bm+W~!Z"Loves me"" not"+3O18@".!"Z%hZ"</3

%2tWZ"<</33心臓の印刷のために1を節約します。しかし、これが最良の方法であると確信していません。
FryAmTheEggman

@FryAmTheEggman 2つ保存しました。
orlp

最後の2つの文字列を結合すると別の文字列が保存されますが、に戻す必要がありました%
FryAmTheEggman

@".!"Z%hZ"</32バイト節約
ジャクベ

数日間エントリーがなかったため、この回答を受け入れます。おめでとうございます!
マシューロック

23

CJam、53 50 49バイト

1バイトを節約してくれたDennisに感謝します。

Imr3+{"Loves me"X!:X" not"*'.3*N}*&"!."X=N'<'/X*3

ここでテストしてください。

説明

コードは、文字列をビットとピースでスタックにダンプするだけで、プログラムの最後に自動的に出力されます。

Imr3+         e# Generate a random number in [3,20]
{             e# Execute this block that many times.
  "Loves me"  e#   Push "Loves me", we always need that.
  X!:X        e#   Toggle X (initially 1) between 0 and 1 and leave it on the stack.
  " not"*     e#   Repeat " not" that many times, removing it on every other line.
  '.3*N       e#   Push "..." and a newline.
}*
&             e# Set intersection of "..." and newline, turning them into an empty array.
"!."X=        e# Select "!" or "." based on the last value of X.
N'<           e# Push a newline and "<".
'/X*          e# Include "/" or not depending on the last value of X.
3             e# Push a 3.

CJamはコードゴルフ専用に開発されたと想像できます^^
larkey

11
@larkeyしかし
...-マシューロック

@larkey CJamはGolfScriptから派生しており、GolfScript(その名前が示すとおり)ゴルフ用に設計されています。
クリスジェスターヤング

@ ChrisJester-Youngそれは
ちょっとした口調でした

17

Brainfuck、2766バイト(現在無効)

という理由だけで。後でゴルフのないバージョンを追加します。

コード

>+<+[>[>[-]+<-]>[<+>>+[->,----------[<+>[>>>>>>>>>+<<<<<<<<<-]>>>>>>>>>[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]]<]<-]>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>>[<<<<<<<<<<+>>>>>>>>>>-]>[<<<<<<<<<<+>>>>>>>>>>-]<<<<<<<<+++++++[<+++++++++++>-]<[<<[>>>>>>>>>>+<<<<<<<+<<<-]>>>[<<<+>>>-]<<[>>>>>>>>>+<<<<<<<+>+<<<-]>>>[<<<+>>>-]<[>>>>>>>>+[<<<<<<<+>+>>>>>>-]<<<<<<[>>>>>>+<<<<<<-]+<[>-<[-]]>[>>>>>+<<<<<-]<<-]<-]++++++[>++++++++<-]>-[<<[>>>>>>>>>+<<<<<<<<+<-]>[<+>-]>-]<<<[-]>[-]+++++[<+++++>-]<[>>>>>>>>>>>+[<<<<<<<<<<+>+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]+<[>-<[-]]>[>>>>>>>>+<<<<<<<<-]<<-]++++++[>>>>>>>>>>+++++++++<<<<<<<<<<-]>>>>>>>>>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>[-]>[<+<<<<<<<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>>[-]++++++++++++++++++++<<[<<<+>>>-]>>[<<<<<<<<+>+<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>-<<<[-]]<<<[-]>>>>>>>>[-]<[>+<<<<<<<<<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>>>>>[-]+++<<<[<<<<<+>>>>>-]>>>[<<<<<<<<<<<+>+<<+>>>>>>>>>>>>-]<<<<<<<<<<<<[>>>>>>>>>>>>+<<<<<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]<[>>>>>>>>-<<<<<<<<[-]]>>>[-]>>>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>-<<<<<<<[-]]>>>>>>>>>[<<<<<<<<<+>+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]<[>>>>>>>[-]-<<<<<<<[-]]>>>>>>>[>>>>>>+<<<<<<<<<<<<<<<->>>>>>>>>[-]]<<<<<<<<-]>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>+++++++++++[>+++++++>++++++++++>+++++++++>+++>++++<<<<<-]>-.>+.+++++++.>++.<---.>>-.<<------.>.>>++...[-]<[-]<[-]<[-]<[-]<++++++++++.[-]>>>>>>>[-]>[<+<<<<<<<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>->[-]<[>+<-][-]>[<+<<<<<<<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>>[-]<<[<<<<<<+>>>>>>-]->>[<<<<<<<<-<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>[>>>>>>+<<<<<<[-]]<->>>>>>>[<<<<<<<->>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[>>>>>>>>+<<<<<<<<<<<<<<<<<->>>>>>>>>[-]]<<<<<<<<-]<[>[-]+<-]>[<+>>++++++[>++++++++++<-]>.---------.[-]<<<-<->>-]>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>+++++++++++[>+++++++>++++++++++>+++++++++>+++>++++<<<<<-]>-.>+.+++++++.>++.<---.>>-.<<------.>.>.<<+.+.+++++.>>>++...[-]<[-]<[-]<[-]<[-]<++++++++++.[-]>>>>>>>[-]>[<+<<<<<<<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>->[-]<[>+<-][-]>[<+<<<<<<<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>>[-]<<[<<<<<<+>>>>>>-]->>[<<<<<<<<-<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>[>>>>>>+<<<<<<[-]]<->>>>>>>[<<<<<<<->>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[>>>>>>>+<<<<<<<<<<<<<<<<->>>>>>>>>[-]]<<<<<<<<-]<[>[-]+<-]>[<+>>++++++[>++++++++++<-]>.-------------.++++.<<<<->>-]<<]

擬似コード

loop
    get a random byte
until random byte is >2 and <21

point to byte
[
    output "Loves me..."
    decrease byte by 1
    if byte is 0
        output "<3"
        exit
    eif
    output "Loves me not..."
    decrease byte by 1
]
output "</3"

サンプル

実行すると、プログラムは入力を待機する対話型セッションに入ります。入力は数字でなければなりません。この番号はシードとして使用されます。

シード:1(乱数は5、218,168,042回の操作になります)

1              
Loves me...    
Loves me not...
Loves me...    
Loves me not...
Loves me...    
<3             

シード:3(乱数は20、463,253,048回の操作が必要)

3
Loves me...
Loves me not...
(...)
Loves me...
Loves me not...
</3

結果を計算する6には2,105,900,375反復が必要になるため、をシードしないことをお勧めします。

コンパイル/実行

これには高速のインタープリターが必要です。私がテストしたオンラインインタープリターは、実行速度を処理できませんでした。ips(1秒あたりの反復)はより大きい必要があり100,000,000ます。そこで、別の解決策を思いつきました。

これはBrainfuckで書かれたBrainfuck to Cコンパイラです。任意のオンラインインタープリターを使用して、コードを純粋なCに変換できます。brainfuck.tkを使用することを勧めします。標準入力にコードを貼り付け、コード入力のこのコードを過ぎます:

+++[>+++++<-]>>+<[>>++++>++>+++++>+++++>+>>+<++[++<]>---]>++++.>>>.+++++.>------.<--.+++++++++.>+.+.<<<<---.[>]<<.<<<.-------.>++++.<+++++.+.>-----.>+.<++++.>>++.>-----.<<<-----.+++++.-------.<--.<<<.>>>.<<+.>------.-..--.+++.-----<++.<--[>+<-]>>>>>--.--.<++++.>>-.<<<.>>>--.>.<<<<-----.>----.++++++++.----<+.+++++++++>>--.+.++<<<<.[>]<.>>,[>>+++[<+++++++>-]<[<[-[-<]]>>[>]<-]<[<+++++>-[<+++>-[<-->-[<+++>-[<++++[>[->>]<[>>]<<-]>[<+++>-[<--->-[<++++>-[<+++[>[-[-[-[->>]]]]<[>>]<<-]>[<+>-[<->-[<++>-[<[-]>-]]]]]]]]]]]]]<[-[-[>+<-]>]<[<<<<.>+++.+.+++.-------.>---.++.<.>-.++<<<<.[>]>>>>>>>>>]<[[<]>++.--[>]>>>>>>>>]<[<<++..-->>>>>>]<[<<..>>>>>]<[<<..-.+>>>>]<[<<++..---.+>>>]<[<<<.>>.>>>>>]<[<<<<-----.+++++>.----.+++.+>---.<<<-.[>]>]<[<<<<.-----.>++++.<++.+++>----.>---.<<<.-[>]]<[<<<<<----.>>.<<.+++++.>>>+.++>.>>]<.>]>,]<<<<<.<+.>++++.<----.>>---.<<<-.>>>+.>.>.[<]>++.[>]<.>[.---->.---,....]

ソースをダウンロードしてコンパイルします。

gcc.exe -c main.c -o main.o
gcc.exe main.o -o loveme.exe

ここからオンラインでCコードのコピーを実行することもできます。CodingGround

最適化

まだやるべきことがいくつかありますが、セルの再利用はほぼ最適です。

備考

単語またはフレーズをシードとして使用できます。

Programming Puzzles & Code Golf
Loves me...
Loves me not...
Loves me...
Loves me not...
Loves me...
Loves me not...
Loves me...
Loves me not...
Loves me...
Loves me not...
Loves me...
Loves me not...
Loves me...
Loves me not...
Loves me...
Loves me not...
Loves me...
<3

3
BrainfuckでPRNGを書くための大胆さを持っているために+1 ...
AdmBorkBork

PRルール。
mınxomaτ

3
素敵な擬似コード。特に、あなたが知らない場合、ゴルフの言語の半分は基本的に読めないので、もっと多くの人がそうするべきです。
The_Basset_Hound

3
残念ながら、出力は間違っています。最後の「愛してる」は感嘆符で終わる(「愛してる!」)、「愛していない」は単一のドット(「愛していない」)で終わる必要があります。
マシューロック

1
RNGの擬似コードを入手できますか?
ベータ崩壊

7

Javascript(ES6)、119 104 99 98バイト

for(i=new Date%18+3,s=i&1?`!
<3`:`.
</3`;i--;)s=`...
Loves me`+(i&1?' not':'')+s
alert(s.slice(4))

いいね!ハートの作成、および場合によっては各行の作成に文字列連結を使用する方が短い場合があります。new Date答えでトリックを使用する場合は注意してください?
ETHproductions

@ETHproductionsハートを使って私が元気である限り、それでいいです(笑) 。)。私は実際にいくつかの他のトリックも使って、実際に104になりました=)
Mwr247

ダン...良い仕事:)私は私のものを再配置し続けますが、常に104になります。
ETHproductions

私にとってのブレークスルーは、逆方向に連結し、初期化でハートを定義することにより、長さ/反復変数を組み合わせることでした。少し節約して少し前に試しましたが、あなたの心の簡素化がはるかに効率的になりました。
Mwr247

ちょっと待っ...これをしようと、私が手Loves me not... Loves me... Loves me not! <3Loves me not... Loves me... Loves me not... Loves me. </3。これを修正するには、条件の1つを変更する必要があると思います。編集:ああ、4行目の''and ' not'を切り替えるだけです。
ETHproductions

6

Python、147

from random import*;t=randint(3,20)
print"\n".join("LLoovveess  mmee  n o t"[i%2::2].strip()+"..."*(i<t-1)for i in range(t))+"!.\n\n<<3/ 3"[t%2::2]

from random import*代わりにimport randomとのrandint代わりにrandrangeを使用して、数バイトを節約します。おそらくゴルフのために残っているバイトがいくつかあります。


3
交替"LLoovveess mmee n o t"[i%2::2].strip()は不必要に複雑なようです。できません"Loves me"+~i%2*" not"か?
xnor

でも["Loves me","Loves me not"][i%2]今で文字を無駄にしていることから、より最適で.strip()、スペースのカップル。しかし、はい、使用XNORのコード
nitro2k01

6

Javascript(ES6)、110 102バイト

a='';for(i=j=new Date%18+3;i--;)a+='Loves me'+(j-i&1?'':' not')+(i?`...
`:j&1?`!
<3`:`.
</3`);alert(a)

これは、短いが楽しい小さな挑戦でした。さらに短くすることも可能です。バイトを節約するためのMwr247に感謝します!

を使用する代替バージョンrepeat()、105バイト:

a='';for(i=j=new Date%18+3;i;)a+='Loves me'+' not'.repeat(j-i--&1)+(i?`...
`:j&1?`!
<3`:`.
</3`);alert(a)

Darn JS 5 + -charビルトイン名。しかたがない。提案を歓迎します!


印象的な凝縮。私は興味がありますが、なぜ18+3|0ですか?
Mwr247

@ Mwr247ああ、それは私が使用したときからMath.random()でした。今は必要ないと思います。
ETHproductions


5

ルビー、91バイト

(n=3+rand(18)).times{|i|puts"Loves me"+[""," not"][i%2]+(i<n-1?"...":i%2>0?".
</3":"!
<3")}

5

Common Lisp 106 104バイト

(format t"~{Loves me~[ not~]~#[~:*~[.~%</~;!~%<~]3~:;...~]~%~}"(subseq'#1=(1 0 . #1#)0(+ 3(random 18))))

これは、適切なシーケンス(cmucl、sbcl、clispなど)をチェックしないlispsでのみ機能します。cclは、デフォルトの安全レベルで循環性とエラーをチェックします。eclは永久にループします。

説明:

#1=(1 0 . #1#)10を含む循環リストを生成し、subseq長さ[3,20]のリストを作成するために使用されます(これは、subseq適切な(つまり非循環)リストで動作するために標準でのみ必要とされる、唯一の非可搬部分です)。

現在、フォーマットは1 0 1 0...長さ[3,20]のリストで動作しています。

formatディレクティブの説明:

~{ このリストを反復処理します

~[任意の数が続き、~;で終了する~]と、format引数の値に基づいてN番目の項目が選択されます。ここで使用されるのは、aの最初の項目が~[「私を愛していない」場合で、2番目の項目が「私を愛している」場合です。の~[セパレータ~:;を使用すると、デフォルトのケースが選択されることに注意してください。

~#[~[引数が残りの引数の数であること以外は同様に機能します。残りの引数が0であるということは、最後にいることを意味します。...

~:* 引数リストを1ポジションバックアップします。これにより、正しいトレーラーを出力できます。


1
これは、#lisp IRCチャネルによるグループ作業でした。賢い反復形式文字列とsubseqハックのphfに感謝します。
ジェイソン

4

ジュリア、98バイト

r=rand(3:20)
for i=1:r println("Loves me"*(i%2>0?" not":"")*(i<r?"...":i%2>0?".\n</3":"!\n<3"))end

ゴルフをしていない:

# Define a random number 3 ≤ r ≤ 20
r = rand(3:20)

for i = 1:r
    # The loveless lines occur when i is even
    println("Loves me" *
            (i % 2 > 0 ? " not" : "") *
            (i < r ? "..." : i % 2 > 0 ? ".\n</3" : "!\n<3"))
end

4

UNIXシェル、193バイト

t=$(seq 2 19|shuf|head -1)
l=t
p=...
while [ $t -ge 0 ];do
case $l:$t in t:0)p=!;h=\<3;;f:0)p=.;h=\</3;;esac
case $l in t)l=f;n=;; f)l=t;n=\ not;;esac
t=$((t-1))
echo Loves me$n$p
done
echo $h

4

Java、210 209 203 200 177バイト

  • 裏返しi%2==0i%2<1
  • -loopの{ ... }中括弧をfor削除し、e宣言をloop に移動しました
  • 並べ替えられた条件
  • 修飾子と不要な括弧を削除し、Random使用方法を修正し、i

注:このサイトでの書式設定のために改行が下に追加されます。上記のカウントは1行です。

class F{public static void main(String[]a){for(int e=3+(int)(Math.random()*18),i=0;++i<=e;)
System.out.println("Loves me"+(i%2>0?i<e?"...":"!\n<3":" not."+(i<e?"..":"\n</3")));}}

ゴルフをしていない:

class F {
    public static void main(String[] a) {
        for (int e = 3 + (int) (Math.random() * 18), i = 0; ++i <= e; )
            System.out.println("Loves me" + (i % 2 > 0 ? i < e ? "..." : "!\n<3"
                    : " not." + (i < e ? ".." : "\n</3")));
    }
}

1
publicを削除すると、13バイトを節約できます。
ルミナス

@Luminous私はまだのための1つ維持する必要がありますmain()...しかしを
HJK

@TimmyD 2番目にそれ。
RK。

4

C、123、121、109 106文字(108バイト)

(少し♥♥♥不正行為♥♥♥)

O;main(o){for(o=time(O)%18+3;o-O++;printf("Loves me%s%s\n",O&1?"":" not",o-O?"...":O%2?"!\n♥":".\n</3"));}

1f494にはUnicodeの失恋ポイントもありますが、それを実装するフォントを見つけるのは困難でした。


これは、120文字と122バイトを示しています...
AdmBorkBork

1
intを自動初期化するのでO=0、私はあなたが必要とは思わない?C0
FryAmTheEggman

@FryAmTheEggman良い発見!以前のバージョンmain(o,O)では、初期化する必要がある場所にOがありました。
イェンス

いいね、気に入った!私はtime乱数として使用することを考えていませんでした...賢い!
マシューロック

@MatthewRock考えてみれば、使用している他のすべてのプログラムsrand(time(0))は同じ頻度で回答を変更します。スランドは完全に役に立たない:
イェンス

4

パイソン2、161の 159 156 144バイト

from random import*;a=randrange(3,21)
for i in range(a):print'Loves me'+i%2*' not'+('...'if i!=a-1 else'.'if i%2 else'!')
print['<3','</3'][i%2]

乱数を取得するためだけに39バイトです。

muddyfishfryamtheeggman、およびorlpの支援に感謝します。

PYG、109バイト

a=RR(3,21)
for i in R(a):P('Loves me'+i%2*' not'+('...'if i!=a-1 else'.'if i%2 else'!'))
P(['<3','</3'][i%2])

範囲ステートメントは1行で実行できます。あなたもすることができますimport random as r
ブルー

最後のprintステートメントの内容を上の行に置くこともできます。
ブルー

に変更print'</3'if i%2 else'<3'print['<3','</3'][i%2]て3バイト節約できると思います。
カデ

はい、できます。ありがとう!
セレオ

ありがとう!興味深いことに、import random as r;a=r.randrange(3,21)import random;a=random.randrange(3,21)同じ長さです。
セレオ

3

PowerShell、121 119 111バイト

$i=2..19|Random;1..$i|%{"Loves me$(if(!($_%2)){" not"})..."};"Loves me$(if(!($i%2)){"!`n<"}else{" not.`n</"})3"

編集- "Loves me"宣言するのではなく、実際に短くして明示的に含める$l

Edit2- for()パイプライン処理によってループをゴルフできることを忘れていました... durr ...

汚すぎる格好はやめて。ループ中に$(...)、インラインコード実行ブロックを使用して、印刷される文字列を動的に調整しますfor()。これは、暗示Get-を使用しRandomて数バイトを節約するため、特定のPowerShellバージョンでは非常に遅くなる可能性があることに注意してください。参照

明確化のために以下に展開しました。

# Create a collection of (2,3,4,...18,19) and pipe it as input to Get-Random
$i = 2..19 | Get-Random

# Create a collection of (1,2,...$i-1,$i) and pipe it to seed a ForEach-Object loop
1..$i | ForEach-Object {
  if(!($_%2)) {
    # If the input number is even, we're on an even line
    Write-Output "Loves me not..."
  }
  Else {
    # The input number is odd
    Write-Output "Loves me..."
  }
}
If(!($i%2)) {
  # Our random number is odd
  Write-Output "Loves me!"
  Write-Output "<3"
}
Else {
  # Our random number is even
  Write-Output "Loves me not."
  Write-Output "</3"
}

3

C ++、 210 193 184 168バイト

C ++で..なぜなら..どうして?:)

#include <iostream>
main(){auto&c=std::cout;srand(time(0));int i,j=3+rand()%18;while(i++<j)c<<"Loves me"<<(i%2?"":" not")<<(i==j?"":"...\n");c<<(j%2?"!\n<3":".\n</3");}

ライブ: 210 193 184 168

私の変更がプラットフォームに依存しないことを願っています。

助けてくれたBen Voigtに感謝します。また、すべてのコメントのおかげで、彼らはとても役に立ちました。


Humn ..ちょうど3から20を実現します。後で修正します。おそらくさらに2バイトを追加しますj=3+(int)(rand()*17.0/RAND_MAX)
...-wendelbsilva

あなたは置き換えることで大幅に節約することができます#define c coutし、using namespace std;auto&c=std::cout;
ベン・フォークト

また、いくつかを保存するint i=0,j=rand()*20.0/RAND_MAX;while(i<j)
ベンフォイト

こんにちは、バグが見つかりました。最後の行は「Loves me!」ではなく「Loves me!」である必要があります。
マシューロック

1
大丈夫だと思います-CとC ++は似ています。そして今、このコードはJavaよりも長いです
...-MatthewRock


2

Python 2、117バイト

from random import*
n=randint(3,20)
print"...\n".join("Loves me"+i%2*" not"for i in range(n))+[".\n</3","!\n<3"][n%2]

最後の行を除き、すべてのLoves me( not)?後に...改行が続くことに注意してください。だから、これはの仕事のように見えjoinます。


少し遅れますが".!\n\n<</33"[n%2::2]、2バイト短くなります。
FryAmTheEggman

@FryAmTheEggmanええ、私はそれを見ましたが、Loovjoからそれを盗まないことに決めました。それまでの間、他の誰かがまさにその解決策を投稿しています。[肩をすくめる]
DLosc

私は他の誰かがそれを投稿していることに気付いていませんでしたが、私のコメントが最初に含まれていたと確信しているので、必要に応じて使用できます:P
FryAmTheEggman

2

R、141の 132 128 114 111 109バイト

コード

k=sample(3:23,1);for(i in 1:k)cat("Loves",c("me not...\n","me...\n","me not.\n</3","me!\n<3")[1+i%%2+2*!i<k])

非ゴルフ

k <- sample(3:23, 1)        # Generates random "k" number from 3 to 23
for(i in 1:k) {             # Loop this block increasing i from 1 until k by 1
  cat                       # Concatenate and paste everything inside this block
  ("Loves",                 # Push "Loves" on every iterations of the loop
      c(                    # Create a vector of strings
        "me not...\n",      # Push string to the index "1" of vector
        "me...\n",          #   to the index "2"
        "me not.\n</3",     #   to the index "3"
        "me!\n<3"           #   to the index "4"
        )[1+i%%2            # Subset the vector by the index (1 or 2)
          +2*!i<k])}        #   if final iteration of loop then index += 2 (3 or 4)

Eric Brooksのコードからインスピレーションを得ました。

編集1:コードはマーティン
編集2が指摘したように最後の句読点を正しく出力するようになりました。
編集3:削除{}、変更+(x==k)*2+2*!x<k
編集4:forループに戻る除去()から(i%%2)+1
編集5:書いたme4回の除去しましたsep=""


1

R、119の 111 105バイト

x<-sample(3:20,1);cat(rep(c("Loves me...\n","Loves me not...\n"),x)[1:x]);cat(ifelse(x%%2==1,"<3","</3"))

編集1、2:2つのオプションを明示的にコーディングすると、スペースが節約されます。


1
あなたは使用してバイトを保存することができます=割り当てるのではなくのために<-行うことで、別x%%2>0の場所にx%%2==1。また、これは最後の行を正しく処理しないことに注意してください。.またはが必要!です...。(質問の出力例を参照してください。)
アレックスA.

1
@AlexA。x%%2>0どちらも必要ありません。ちょうどx%%2
Flounderer

良い点、ありがとう。戻ってエンディングを修正する必要があります
エリックブルックス

1

C 226バイト

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main(){srand(time(NULL));int i=rand()%18+3;int j;for(j=0;j<i;j++)printf("Loves me%s%s\n",(j%2)?" not":"",(j==i-1)?(j%2)?".":"!":"...");printf("<%s3\n",(j%2)?"":"/");}

(フォーマット付き)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand(time(NULL));
    int i = rand()%18 + 3;
    int j;
    for (j = 0; j < i; j++)
        printf("Loves me%s%s\n", (j % 2) ? " not" : "", (j==i-1) ? (j % 2) ? "." : "!" : "...");
    printf("<%s3\n", (j%2) ? "" : "/");
    return 0;
}

1
メインから戻り型を削除し(-5バイト)、iおよびjをデフォルト型(-8バイト、jのデフォルト0のために-3バイト)でグローバルにし、NULL(-3)の代わりに0を使用します。その他-1つの変数のみを使用し、ループをカウントダウンします。通常、stdioのインポートはゴルフでは必要ありません。
aragaer

1

Python 2、115バイト

from random import*
n=randint(2,20)
print'...\n'.join('Loves me'+i%2*' not'for i in range(n))+'.!\n\n<</33'[n%2::2]

1

PHP、191 187 146 165のバイト

$x=rand(5,22);for($i=2;++$i<=$x;){echo"\nLoves me";if($i%2<1)echo" not";if($i<$x)echo"...";if($i==$x&&$i%2<1){echo".\n</3\n";}elseif($i==$x&&$i%2>0){echo"!\n<3\n";}}

ゴルフをしていない:

$x=rand(5,22);
for($i=2;++$i<=$x;){
    echo "\nLoves me";
    if($i%2<1) echo " not";
    if($i<$x) echo "...";
    if($i==$x && $i%2<1){
        echo ".\n</3\n";
    }
    elseif($i==$x && $i%2>0){
        echo "!\n<3\n";
    }
}

pythとcjamの場合は48,49バイト...うわー:)


<!I $ = 0〜1(×2)と$ I%2%2> $ I%2 == 0から$ I%2を変更0(×2)
マレクベットマン

三項演算子は常に最良の答えではないことが判明します:)
マレックベットマン

1

MSL、178の 176 156 154バイト

編集1:変更== 0< 1
編集2:削除不要な空白、感謝ALEXA!
編集3:括弧を削除

alias l {
var %n 1
while %n <= $rand(3,20) {
var %m $+(Love me,$iif($calc(%n % 2) < 1,$chr(32) $+ not),...)
echo %m
inc %n
}
echo $iif(n isin %m,</3,<3)
}

1
現在、ソリューションは177バイトではなく176バイトです。空白はすべて必要ですか?そうでない場合、不要な空白を削除するだけでコードを大幅に短縮できます。
アレックスA.

@AlexA。なぜ私が177を書いたのかわからない、そして空白の必要性を指摘してくれてありがとう、それは本当に必要ない!
デニー

1

Perl、97バイト

$_='She loves me...
'x(3+rand 18);s/(me.*?)me/$1me not/gs;s/e...
$/e!
<3/;s/t...
$/t.
<\/3/;print

読み取り可能なバージョン:

$_="She loves me...\n"x(3+rand 18);
s/(me.*?)me/$1me not/gs;
s/e...$/e!\n<3/;
s/t...$/t.\n<\/3/;
print

1

ハッシウム、265バイト

func main(){rnd=new Random();times=rnd.next(3,21);println("Loves me...");for(x=0;x<times-1;x++){if(x%2==0)println("Loves me not...");else println("Loves me...");}if((times-1)%2==0){println("Loves me not.");println("</3");}else{println("Loves me!");println("<3");}}

答えはゴルフです。


現在、解決策は523 バイトではなく458バイトです。不要な空白を削除し、変数名を短くすると、スコアを改善できます。例については、他のHassiumソリューションを参照してください。
アレックスA.

1
他のHassiumの回答で述べたように、乱数ジェネレーターは非常に偏っているようです。私はこれを最新バージョンで500回実行しましたが、たった2つしかありませんでした</3
デニス

+ Dennisランダムジェネレーターは、C#乱数ジェネレーターの上に直接構築されます。参照:github.com/HassiumTeam/Hassium/blob/master/src/Hassium/...
ジェイコブMisirian

3
正しくシードされていないようです。rnd = new Random();rnd.next(0,2);1000回実行すると、配布は問題ありません。ただし、rnd = new Random();1回とrnd.next(0,2);1000回実行すると、常に533 0秒と467 1秒になります。
デニス

1

C#(160)

コードはhjkからの回答に触発されており、彼の功績です。

class P{static void Main(){for(int e=3+new Random().Next(0,18),i=0;++i<=e;)Console.WriteLine("Loves me"+(i%2>0?i<e?"...":"!\n<3":" not."+(i<e?"..":"\n</3")));}}

ゴルフをしていない:

class P
{
    private static void Main()
    {
        for (int e = 3 + new Random().Next(0, 18), i = 0; ++i <= e;)
            Console.WriteLine("Loves me" + (i % 2 > 0 ? i < e ? "..." : "!\n<3" : " not." + (i < e ? ".." : "\n</3")));
    }
}

1

Lua、137132バイト

おそらくもっと多くのゴルフをすることができますが、ここでは今のところ:

t=math.random(3,20)for i=1,t do io.write(i%2==0 and"Loves me"or"Loves me not")print(i==t and(i%2==0 and"!\n<3"or".\n</3")or"...")end

コードの説明と無制限:

t=math.random(3,20) --Generates a random number between 1 and 30. We need to assign it to a variable to check if the loop is over later.
for i=1,t do
  io.write(i%2==0 and"Loves me"or"Loves me not") --If i%2 is 0 write without a newline Loves me, if not print Loves me not.
  print(i==t and (i%2==0 and"!\n<3" or ".\n</3") or "...") --If it is not the end of the loop, put ..., else if we ended on an even print ! a newline, and then a heart, but if we ended on an odd put ., a newline and a broken heart :(
end

編集:いくつかの空白を切り落とした。



1

PowerShell85 88バイト

Veskahのおかげで+3バイト:それは良い点です。

0..(1..19|Random)|%{($l='Loves me')+' not'*($n=$_%2)+'...'}
$l+('!
<3',' not.
</3')[!$n]

オンラインでお試しください!


1
これにより、「Loves me、Loves me not </ 3」が生成される可能性があります。これは、仕様の読み方に基づいて、最小行数を下回っています。
ヴェスカ

確かにof *3* to 20 lines inclusive。ありがとう!
マジーな
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.