リバーシブルリバーサー


19

あなたの仕事は簡単です。プログラムは標準入力からテキスト行を読み取り、同じテキストを文字反転形式で出力します。他のものを印刷することはできません。

例えば:

入力:「Hello!」、出力:「!olleH」

キャッチは、ソースコード自体が文字反転されている場合、プログラムはまったく同じことを実行できる必要があるということです。

スコアリング:標準のコードゴルフスコアリングが適用されますが、退屈を制限するために次の変更が加えられます

//margorp
program//

スタイルの答え:回文である解決策はすべて、スコアに+ 25%のペナルティが課せられ、切り上げられます。このペナルティは、たとえば回文を壊すために、有用な効果のない文字をプログラムに挿入する場合にも適用されます。


2
「有用な効果」は、おそらく客観的に指定することはできません。GolfScriptで例えば、どの程度-1%#%1-/1-1%#%(0
ピーターテイラー

回答:


14

APL、5

⌽⍞⍝⍞⊖

これは、入力()を反転し(最後の軸に沿って)、コメントが続きます(行コメントをマークします)。反転すると、プログラムは入力を反転し(最初の軸に沿って)、コメントが続きます。入力は常にこのような場合には、一次元になるだろうので、かつ機能的に同等です。おそらくGolfScriptソリューションよりもひそかなので、ここでは9のスコアのクリーンなソリューション(コメントなし)を紹介します。

⍬,⌽,⍞,⊖,⍬

これは最初に空のベクターを取得し()、それを平坦化し(単項,)、逆にします(、最初の軸に沿って)。これは空のベクターのままです。次に,、入力()に連結(ダイアディック)し、入力はそのままにします。次に,、すでにフラットな入力を平坦化(単項)し、それを反転します(最後の軸に沿って)。次に、,別の空のベクトル()を逆の入力に連結(ダイアディック)します。これは何もせず、逆の入力を残します。逆に、このプログラムは同じことを行います。これは、およびが1次元引数と機能的に同等であるという事実に基づいています。

パリンドロームを壊すために役に立たないキャラクターを追加しているとは本当に言えませんでした(2つ以上の逆関数は2次元以上の入力とは異なります。次元入力)


14

Unixシェル-8 + 25%= 10

rev||ver

の以前の答えはcat|tac実際には機能しませんtacでした。行の文字の順序ではなく、行の順序を逆にします。


10

ハスケル、53

main=niam
niam=interact reverse
esrever tcaretni=main

技術的には回文ではありませんが、関数宣言の順序は重要ではないため、逆にすると、まったく同じプログラムになります。


ナイス(+1)。試してみる前に、これが実際に何もしないとは信じていませんでした(リンク)。
マーティントーマ

main=niam宣言を中央に移動すると、回文が表示されます。
ヨハネ

@JohannesKuhnはい、私はそれがまだ「退屈な」パリンドロームの解決策であり、外観が異なることを認めています。
lortabac

10

ルビー、37

eval <<1.reverse#
esrever.steg stup
1

反転:

1
puts gets.reverse
#esrever.1<< lave

ひそかな、卑劣な!+1
ドアノブ

6

Tcl、78

puts [string rev [gets stdin]];#\
]]nidts steg[ ver gnirts[ stup;# tixe emaner

回文ではありません。



このプログラムでは、「出口の名前を変更」がどのような効果をもたらしますか (私はTclを知りません)
-vsz

コマンドの名前を変更exitする#(#パラメータではなく、コメントの開始です)。\#次の行で実行されます#(エスケープされているためコメントの開始ではありません)これは新しいexitです。
ヨハネ

6

gs2、2

(はい、この言語はチャレンジの前に作成されました。いいえ、冗談や抜け穴ではありません 。ASCIIスペース(0x20)は逆です。)

編集:ああ、男、この質問は超古いですか?もっと早くコミットした場合に限ります。:<しかし、この答えは、渡すのが良すぎるという理由だけで残しておきます。


3

Golfscript、9(7 * 1.25 = 8.75)

-1%#%1-

汚い、汚い、汚い、しかし非常に短い。-1%は、「各要素(文字)を後方に選択」を#意味し、「行コメント」を意味します。残りは、GolfScriptのI / Oマジックのほんの一部です。

これは、私が見つけた最短の「クリーン」(コメントなし)ソリューションです(14 * 1.25 = 17.5):

'';-1%..%1-;''

意味:空の文字列をプッシュ、ドロップ、入力を反転、2回クローン、それ自体で分割(2つのコピーを使用して空の配列を生成)、空の配列からすべてを削除、空の配列をドロップ、空の文字列をプッシュそして(暗黙的に)スタックを印刷します。


これを期待していたはずです。500%のペナルティでも、勝者になる可能性が高くなります。
-vsz

@vszただし、golfscriptでコメントなしの(つまりクリーンな)ソリューションを探しています。
ジョンドボラック

入力が1つの..含まれていない場合
ヨハネス・クーン

@JohannesKuhnあなたは正しいです。私はその「解決策」を落としました。
ジョンドヴォルザーク

@vszのより興味深い課題は、コメント文字を禁止することです(それでも回文を罰しますか?)これに対する私の出場者は、私が推測するかなり多くの14文字です。
ジョンドボラック

3

ルビー、44

puts gets.reverse#esrever.steg stup

通常のプログラムの最後にあるコメント:P

35文字、+ 25%= 44



2

Python 3、42

print(input()[::-1]);#)]1-::[)(tupni(tnirp

クレジット

  • 私が作成したスコア49 + 25%= 61.25の初期バージョン
  • スコアを61.25から51.25に改善したarshajiiに感謝
  • :-)私が作成したスコア42()の新しいバージョン

print(input()[::-1])#)]1-::[)(tupni(tnirp代わりにPython 3 を使用して、スコアを51.25に減らすことができます。
アルシャジー

1
それはカットしていません...
オリバーNi

「パリンドロームであるソリューションは、スコアに+ 25%のペナルティを切り上げます。このペナルティは、たとえば、パリンドロームを壊すために、有用な効果のない文字をプログラムに挿入する場合にも適用されます」私;は、このような挿入は有用な効果をもたらさないと主張します。
オリバーNi

2

Rebmu:9(ペナルティ付き)または13(なし)

退屈なRebmuソリューションは9であり、パリンドロームペナルティを負います。とにかく「理由」で表示します。

rnRVaVRnr

大文字の大文字に気付くというunmushingトリックを使用すると、別の単語になります。先頭に大文字が付いていないということは、セットワードを作成しないことを意味し、通常の5つの単語を生成します。

rn rv a vr nr

これは、同等のコードの短縮形です(法的なRebmuも):

return reverse a vr nr

vrとnrが無意味であるという事実は重要ではありません。何にも割り当てられていないにもかかわらず、それらは有効な単語だからです。そのため、評価者はreturn reverse a...を実行するだけで、両方の方法で機能します。しかし、これはある意味で退屈なチートに似ています。コードはコメントアウトされていませんが、デッドであり、1つのパスで実行されていません。

ペナルティを受けない、よりエキサイティングなものについては、この13文字のソリューションはどうですか。

a VR :rv AvrA

展開されたときに、フォワードパスとリバースパスでこれがどのように処理されるかを見てみましょう。転送:

a               ; evaluate a, as it is a string it has no side effects
vr: :reverse    ; "set" vr to mean what a "get" of reverse means now
a: vr a         ; assign a to calling "vr" on a, effectively reversing
                ;   ^-- result of assign is last expression, the answer!

後方としてArvA vr: RV a

a: reverse a    ; assign A to its reversal
vr: rv: a       ; make the abbreviation vr equal to assignment of a to rv
                ;   ^-- result of assign is last expression, the answer!

マイナス面として、backwardsバリアントは、reverseの略語を上書きしています。しかし、ちょっと、それは回文ではありません、そして、それはわずか13文字です。:-)

(注:これは、Rebmuを/ argsモードで実行していることを前提としています。aは、コマンドラインでインタープリターに渡されるプログラムのデフォルト引数であり、結果を受け入れます。標準入力からの読み取りが実際に必要な場合は、シンプルなソリューションでは、たとえば9文字から11文字に成長しrnRVrArVRnrます。また、インタープリターの式出力を受け入れて数文字も追加する代わりに、プログラム内から標準出力に出力する必要がある場合。


2

JavaScript、62 * 1.25 = 78

i.split('').reverse().join('')//)''(nioj.)(esrever.)''(tilps.i

創造的ではありませんが、思いつく最高のものです。(入力が変数に保存されると仮定しますi

私はこれを手に入れました:

63文字、回文なし

i.split('').reverse().join('')//)a(nioj.)(esrever.)''=a(tilps.i

しかし、それは不正行為のように感じました。:PIは、もっとささいな変更を行うことができます(のi['split']代わりに使用するなどi.split)が、それらはすべて不正行為のように感じます:P


入力が変数iに格納されていると仮定すると、(p=a=>a&&p()==`(p=${p})(i)`?i:i.split``.reverse().join``)(i)(60バイト)そのことを行います。
EscĐiệp

2

パイク、2(+ 25%)、非競合

_

Pykeは暗黙的に入力を受け取り、暗黙的に出力します。

_ は逆関数です。


1

Tcl、99

proc unknown args {puts "Hello World!"}
}"!dlroW olleH" stup{ sgra nwonknu corp

存在しないunknownコマンドが呼び出されると、コマンドをロードできる特別なコマンドが呼び出されます。または、他の面白いことをします。


1

T-SQL、86 * 1.25 = 108

以下は、それが可能であることを示すための、SQL Server 2008(およびそれ以降)の退屈な回文エントリです。

DECLARE @ VARCHAR(MAX)='Hi'PRINT REVERSE(@)--)@(ESREVER TNIRP''=)XAM(RAHCRAV @ ERALCED

@は入力テキストを保持し、文字列の例は「Hi」です。このエントリの文字カウントは、2文字の入力文字列用です。


1

、ceil(1 + 0.25)= 2バイト

?

これは入力を取得し、反転し、暗黙の出力は文字通りそれを出力します。 TIO



0

QBIC、14 + 25%= 18バイト

;?_fA|#|Af_?;

回文のソースコードを使用します。これを行うための2つの異なる方法を使用すると、多少長くなります(34バイト)。

;[_lA|,1,-1|Z=Z+mid$(A,a,1)#|Af_?;

説明:

Read the input string from the command line as A$
;

FOR len(A$); a >= 1; a--
[        Starts a FOR loop
_l...|   returns the length the argument(here, A$); sets the starting point of the loop
,1       set the end point of the loop
,-1      FOR loop incrementer (or decrementer in this case)
|        Ends the argument list for the FOR loop

On each FOR iteration, add the right-most character of the input to Z$
Z=Z+mid$(A,a,1)

The cheat:
# starts a string literal, hiding the flipped source.
    The literal is closed implicitly at the end-of-file.
    The FOR loop is closed implicitly at the end-of-file.
    Z$ gets printed implicitly at the end of the program if it's non-empty

The flipped source is the same as my palindrome-code:
;       reads in A$ from the cmd line   
 ?      PRINT
  _fA|  The reversed version of A$
      # And hide the rest of our source in a literal  

0

Pushy、7バイト(5 + 25%)

@"i"@

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

これはパリンドロームであるため、25%のペナルティが発生しますが、私ができる最善の方法です。プログラムの実行方法に関係なく、次の3つのコマンドを実行します。

@     \ Reverse the input
 "    \ Print
  i   \ Exit

代入iのために c(明確なスタック)または\(コメント)は同じ効果があります。



0

R、65バイト

編集:Grimyによる変更は些細だが、私には見えないおかげで、25%のペナルティを廃止しました。

stringi::stri_reverse(scan(,""))#))'',(nacs(esrever_irts::ignirts

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

stringi... barfのような文字列用に設計されたパッケージを使用する場合でも、文字列を処理するRのひどい機能に挨拶します。


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