Pali-n-dromeこのリスト


13

ここでの課題は、入力として以下を与えられた回文の実装を拡張することです。

  • n > 1およびリストl

プログラムは、リストを垂直および水平の両方で回文化する必要があります。つまり、最初にリスト自体を回文化し、次にリスト内の各要素を後回しにする必要があります。またはその逆です。回文化の前に、すべての要素が同じ長さであることが保証されます。次に、パリンドロームアクションはn、目的の出力が満たされるまで順番に実行されます。予想される出力を表示する最も簡単な方法は、いくつかの例を実行することです。


で実行される1つの反復[123,456,789]

最初にリストを回文化します[123,456,789,456,123]

  • これは、一緒に結合された場合は回文ではありませんが、リストの観点では回文です。
  • [a,b,c]となった[a,b,c,b,a]ので、リストは回文化されました。

次に、各リスト要素を回文化します[12321,45654,78987,45654,12321]

これが各反復の実行方法であり、本質的に全方向性回文です。


与えられたn=1 and l=[123,456,789]

12321
45654
78987
45654
12321

与えられた n=2 and l=[123,456,789]

123212321
456545654
789878987
456545654
123212321
456545654
789878987
456545654
123212321

与えられたn=1 and l=[3,2,1]

3
2
1
2
3

与えられたn=2 and l=["hat","mad"," a "]

hatahatah
madamadam
 a a a a 
madamadam
hatahatah
madamadam
 a a a a 
madamadam
hatahatah

与えられたn=2 and l=[" 3 ","2000"," 100"]

 3   3 3   3 
2000002000002
100 00100 001
2000002000002
 3   3 3   3 
2000002000002
100 00100 001
2000002000002
 3   3 3   3 

与えられたn=4 and l=["3 ","20","1 "]

3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3
20202020202020202
1 1 1 1 1 1 1 1 1
20202020202020202
3 3 3 3 3 3 3 3 3

与えられたn=3 and l=["_|__","__|_","___|"]

_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_
__|_|___|_|___|_|___|_|__
___|_____|_____|_____|___
__|_|___|_|___|_|___|_|__
_|___|_|___|_|___|_|___|_

与えられたn=2 and l=["---|---","__|","___|","____|"]

---|-----|-----|-----|---
  __|   |__   __|   |__  
 ___|   |___ ___|   |___ 
 ____| |____ ____| |____ 
 ___|   |___ ___|   |___ 
  __|   |__   __|   |__  
---|-----|-----|-----|---
  __|   |__   __|   |__  
 ___|   |___ ___|   |___ 
 ____| |____ ____| |____ 
 ___|   |___ ___|   |___ 
  __|   |__   __|   |__  
---|-----|-----|-----|---

ルール

  • n 常に1より大きくなります。
  • l 常に複数の要素があります。
  • のすべての要素はl同じ長さです。
  • これは、最短のソリューションが勝者としてマークされます。

9
要素をパディングする必要がなければ、これはより良い課題です。
mbomb007

2
@JonathanAllanそれは全方向性回文、またはあなたが言うことができる2D回文です。説明を更新しました。また、パディングは、小さな文字列がすでにパリンドロームであるいくつかの奇妙なフリンジケースを防ぎます。
魔法のタコUr

1
@JonathanAllanは、リストを回文化するアイテムとして見ている場合、リストの観点からです。ない要素によって、リストとしてそれを見たときにだけ、[@ 1、@ 2、@ 1]のようにも回文です...
マジックタコ壺

1
@JonathanAllanええ、基本的には、必要に応じてそのように見ることができます。
魔法のタコUr

1
最後の例ではパディングが必要です。
ジョナサンアラン

回答:


9

05AB1E、4バイト

反復が1回だけ必要な場合(n=1)、プログラムは回文になりû€ûます。

Fû€û

オンラインで試す

F       Do n times
 û      Palindromize the list
  €û    Palindromize each element in the list

入力の埋め込みがプログラムの必須部分である場合(11バイト):

€R.B€RIFû€û

私は右揃えするより短い方法を見つけることができなかった。左揃えとセンタリングはすべて簡単ですが、何らかの理由でこれが長くなりました。Eまたはの²代わりに使用してIも動作します。


7

パイソン271の 63バイト

lambda x,n,f=lambda x:x+x[-2::-1]:eval('f(map(f,'*n+`x`+'))'*n)

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

回文関数をに割り当て、f次のパターンを生成および評価します(for n=4
f(map(f,f(map(f,f(map(f,f(map(f,<input>))))))))


1
私はあなたが割り当てることを意味すると思います。私は考えていないASSINGが笑、動詞です。
mbomb007

@ mbomb007ウェルプ、もっとコーヒーを飲む時間〜-
ロッド

6

ゼリー、6バイト

ŒḄŒB$¡

二項リンク、またはリストとを取得する完全なプログラムn

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

Lynnの素晴らしいビルトイン「バウンス」の両方のバージョンを使用します。

ŒḄŒB$¡ - Main link: l, n
     ¡ - repeat n times
    $  -     last two links as a monad (firstly with l then the result...)
ŒḄ     -         bounce ("palindromise") the list
  ŒB   -         bounce the elements

5

Python 2、64バイト

h=lambda a:a+a[-2::-1]
f=lambda a,n:n and f(h(map(h,a)),n-1)or a

オンラインでお試しください!-フッターは、結果のリストの各要素を1行に1つずつ「きれいに印刷」して印刷します。

h は、回文化機能であり、入力に追加されます。リストの最後から2番目のインデックス-2から、サイズ-1のステップのすべての要素が追加されます。

f通話h呼び出しの結果にh順番に各要素には、減少nつによってれるまで自身を呼び出しnた時点で到達0、a完成品です。


...そして、私はまだf=再帰関数のために忘れている、いつか思い出すでしょう。
ジョナサンアラン

2

APL、15バイト

(Z¨Z←⊢,1↓⌽)⍣⎕⊢⎕

説明:

  • (... )⍣⎕⊢⎕:リストNを入力として、および実行N時間を読み取ります。
    • ⊢,1↓⌽:リスト、その後に反転したリストの末尾
    • Z←:この関数を保存する Z
    • :そして、それをリストの各要素にも適用します

テスト:

          (Z¨Z←⊢、1↓⌽)⍣⎕⊢⎕ 
    :
          「帽子」「気違い」「a」
    :
          2
    ┌─────────┬─────────┬─────────┬─────────┬─────────── ┬─────────┬─────────┬─────────┬──────────┐
    │hatahatah│madamadam│aaaa│madamadam│hatahatah│madamadam│aaaa│madamadam│hatahatah│
    └─────────┴─────────┴─────────┴─────────┴─────────── ┴─────────┴─────────┴─────────┴──────────┘


1

Haskell、51バイト

x%n=iterate((++)<*>reverse.init)x!!n
x?n=(%n)<$>x%n

使用例:["123","456","789"] ? 1-> ["12321","45654","78987","45654","12321"]オンラインでお試しください!

(++)<*>reverse.initリストから回文を作成し、iterate(...)xこれを何度も繰り返してリストの中間結果を収集し、!!nこのリストのn番目の要素を選択します。(%n)<$>x%nのn-回文の各要素のn-回文を作成しxます。


1

JavaScript(ES6)、87バイト

f=(n,l,r=l=>[...a].reverse().slice(1))=>n--?f(l.concat(r(l)).map(s=>s+r(s).join``),n):l

1

ピップ、25バイト

24バイトのコード、-lフラグの場合は+1 。

Lq{gM:_.@>RV_gAL:@>RVg}g

リストをコマンドライン引数として受け取り、標準入力からnを取得します。オンラインでお試しください!

説明

                          g is list of cmdline args (implicit)
Lq{                   }   Read a line of input and loop that many times:
      _.@>RV_             Lambda function: take all but the first character (@>) of the
                           reverse (RV) of the argument (_), and concatenate that (.) to
                           the argument (_)
   gM:                    Map this function to g and assign the result back to g
                 @>RVg    Take all but the first element of the reverse of g
             gAL:         Append that list to g and assign the result back to g
                       g  After the loop, print g (each item on its own line due to -l)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.