JS實現古詩豎排從右至左

一個老題目,將下面古詩文由橫排,變成古文豎排模式:

靜夜思 李白
床前明月光,
疑似地上霜。
舉頭望明月,
低頭思故鄉。

變成:

低|舉|疑|床|靜
頭|頭|似|前|夜
思|望|地|明|思
故|明|上|月| 
鄉|月|霜|光|李
。|,|。|,|白

1.原始文本轉成二維數組,簡化起見,暫時去掉標點符號和標題作者:

console.log("床前明月光\n疑似地上霜\n舉頭望明月\n低頭思故鄉".split(/\n/).map( v => v.split(''))
);

輸出:

[[ '床', '前', '明', '月', '光' ],[ '疑', '似', '地', '上', '霜' ],[ '舉', '頭', '望', '明', '月' ],[ '低', '頭', '思', '故', '鄉' ]
]

直接一行行輸出的時候,就是橫排輸出,變成豎排,剛好是行列互換,在二維數組、矩陣中,就是矩陣轉置transpose,4x5的矩陣行列互換后,變成5x4,現在要實現一個transpose函數:

let arr = [[1, 2, 3],[4, 5, 6]
];
// 取首行,循環每一列,循環列的時候,取對應列的元素變成行返回,如果某行元素不足首行,可以填充空白字符
console.log( arr[0].map((_, col) =>arr.map(row => row[col]))
);

轉換后變成:

[ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]

封裝成一個函數:

// tranpose函數實現有很多種,這是最簡單一種
let transpose = arr => {return arr[0].map((_, col) =>arr.map(row => row[col]));
};
console.log( transpose("床前明月光\n疑似地上霜\n舉頭望明月\n低頭思故鄉".split(/\n/).map( v => v.split('')))
);

輸出:

[[ '床', '疑', '舉', '低' ],[ '前', '似', '頭', '頭' ],[ '明', '地', '望', '思' ],[ '月', '上', '明', '故' ],[ '光', '霜', '月', '鄉' ]
]

變成字符串輸出:

let transpose = arr => {return arr[0].map((_, col) =>arr.map(row => row[col]));
};
console.log( transpose("床前明月光\n疑似地上霜\n舉頭望明月\n低頭思故鄉".split(/\n/).map( v => v.split(''))).map( row => row.join("|") ).join("\n")
);

輸出:

|||低
前|||頭
明|||思
月|||故
光|||

現在是從左到右,要變成從右向左,每一行還需要先反轉數組:row.reverse()

let transpose = arr => {return arr[0].map((_, col) =>arr.map(row => row[col]));
};
let str = transpose("床前明月光\n疑似地上霜\n舉頭望明月\n低頭思故鄉".split(/\n/).map( v => v.split('')))
.map( row => row.reverse().join("|") )
.join("\n");
console.log(str);

輸出:

低|舉|疑|床
頭|頭|似|前
思|望|地|明
故|明|上|月
鄉|月|霜|光

如果不想定義函數,可以用reduce來實現:

console.log([[1, 2, 3],[4, 5, 6]].reduce((s, a) => (a.map((v, j)=> s[j] = (s[j] || []).concat([v])), s), [])
);

輸出:

[ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]

reduce改寫:

let str = '靜夜思 李白\n床前明月光,\n疑似地上霜。\n舉頭望明月,\n低頭思故鄉。'.split(/\n/)
.map( v => v.split('') )
.reduce((s, a) => (a.map((v, j)=> s[j] = (s[j] || []).concat([v])), s), [])
.map( d => d.reverse().join('|') )
.join('\n');
console.log(str);

輸出:

低|舉|疑|床|靜
頭|頭|似|前|夜
思|望|地|明|思
故|明|上|月| 
鄉|月|霜|光|李
。|,|。|,|白

ruby內置了transpose函數:

# puts "靜夜思 李白\n床前明月光,\n疑似地上霜。\n舉頭望明月,\n低頭思故鄉。".split(/\n/).map(&:chars).transpose.map{ it.reverse * '|' } * "\n"
# csdn的 ruby 版本過低,上面代碼不能正常運行
puts "靜夜思 李白\n床前明月光,\n疑似地上霜。\n舉頭望明月,\n低頭思故鄉。".split(/\n/).map(&:chars).transpose.map{|it| it.reverse.join('|') }.join("\n")

輸出:

低|舉|疑|床|靜
頭|頭|似|前|夜
思|望|地|明|思
故|明|上|月| 
鄉|月|霜|光|李
。|,|。|,|白

完。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81763.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81763.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81763.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在 Android 中實現支持多手勢交互的自定義 View(Kotlin 完整指南)

本文將手把手教你創建一個支持拖動、縮放、旋轉等多種手勢交互的自定義 View,并提供完整的代碼實現和優化建議。 一、基礎實現 1.1 創建自定義 View 骨架 import android.content.Context import android.graphics.* import android.util.AttributeSet import an…

Kotlin 協程 (一)

1. Kotlin 協程的核心概念 1.1 協程(Coroutine) 定義:協程是一種輕量級的執行上下文,可以在任何時候掛起和恢復,而不需要阻塞線程。特點: 比傳統線程更輕量,開銷更小。支持掛起和恢復&#xf…

機器學習 集成學習方法之隨機森林

集成學習方法之隨機森林 1 集成學習2 隨機森林的算法原理2.1 Sklearn API2.2 示例 1 集成學習 機器學習中有一種大類叫集成學習(Ensemble Learning),集成學習的基本思想就是將多個分類器組合,從而實現一個預測效果更好的集成分類…

thinkphp6實現統一監聽并記錄所有執行的sql語句除查詢外

創建文件app/middleware/SqlLogger.php <?php namespace app\middleware;use think\facade\Db; use think\facade\Session;class SqlLogger {public function handle($request, \Closure $next){// 監聽所有SQL $request->ip()Db::listen(function($sql, $time) {if (p…

pytorch訓練可視化工具---TensorBoard

一、目的&#xff1a;為什么使用 TensorBoard 調控模型 使用 TensorBoard 可以幫我們&#xff1a; 實時查看 loss / acc 曲線 → 判斷是否過擬合、欠擬合&#xff1b; 對比不同模型或超參數的效果&#xff1b; 可視化模型結構 → 幫助調試模型設計&#xff1b; 查看權重/梯…

機器學習知識自然語言處理入門

一、引言&#xff1a;當文字遇上數學 —— 自然語言的數字化革命 在自然語言處理&#xff08;NLP&#xff09;的世界里&#xff0c;計算機要理解人類語言&#xff0c;首先需要將文字轉化為數學向量。早期的 One-Hot 編碼如同給每個詞語分配一個唯一的 “房間號”&#xff0c;例…

Linux-線程概念和控制

1.Linux線程概念 1.1什么是線程 ? 在?個程序?的?個執?路線就叫做線程&#xff08;thread&#xff09;。更準確的定義是&#xff1a;線程是“?個進程內部 的控制序列” ? ?切進程?少都有?個執?線程 ? 線程在進程內部運?&#xff0c;本質是在進程地址空間內運?…

【氮化鎵】低劑量率對GaN HEMT柵極漏電的影響

2024 年 2 月 22 日,中國科學院新疆理化技術研究所的Li等人在《IEEE ACCESS》期刊發表了題為《Degradation Mechanisms of Gate Leakage in GaN-Based HEMTs at Low Dose Rate Irradiation》的文章,基于實驗分析和 TCAD 仿真,研究了低劑量率輻照下基于 GaN 的 p 型柵高電子遷…

.NET Core 中 Swagger 配置詳解:常用配置與實戰技巧

隨著微服務架構和 RESTful API 的廣泛應用&#xff0c;API 文檔的管理和自動化生成成為了開發中的重要部分。Swagger&#xff08;現為 OpenAPI&#xff09;是一款功能強大的工具&#xff0c;它可以自動生成 API 文檔&#xff0c;并提供交互式 UI&#xff0c;幫助開發者、測試人…

海康工業相機白平衡比選擇器對應的值被重置后,如何恢復原成像

做項目的時候&#xff0c;有時候手抖&#xff0c;一不小心把一個成熟穩定的項目的相機配置&#xff0c;重置了&#xff0c;如何進行恢復呢&#xff0c;在不知道之前配置數據的情況下。 我在做項目的時候&#xff0c;為了讓這個相機成像穩定一點&#xff0c;尤其是做顏色檢測時…

【八股戰神篇】Java虛擬機(JVM)高頻面試題

目錄 專欄簡介 一 請解釋Java虛擬機(JVM)及其主要功能 延伸 1. JVM的基本概念 2. JVM的主要功能 二 對象創建的過程了解嗎 延伸 1.Java 創建對象的四種常見方式 三 什么是雙親委派模型 延伸 1.雙親委派機制的作用: 2.雙親委派模型的核心思想: 3.雙親委派模型的…

win10 上刪除文件夾失敗的一個原因:sqlYog 備份/導出關聯了該文件夾

在嘗試刪除路徑為.../bak/sql的文件時&#xff0c;系統提示無權限操作。然而&#xff0c;關閉SQLyog后&#xff0c;刪除操作成功完成。這表明SQLyog可能正在占用該文件&#xff0c;導致刪除權限受限。關閉SQLyog后&#xff0c;文件被釋放&#xff0c;刪除操作得以順利進行。建議…

Oracle中如何解決LATCH:CACHE BUFFERS LRU CHAIN

簡單來講&#xff0c;Oracle為了高效管理BUFFER CACHE主要使用以下2種LRU列&#xff1a; ?LRU列&#xff0c;又叫替換列&#xff08;replacement list&#xff09;&#xff0c;其中又分為主列和輔助列。 主列&#xff1a;已使用的緩沖區列&#xff0c;分為HOT和COLD區域。HOT區…

C++:迭代器

迭代器的本質&#xff1a;對象。 迭代器與指針類似&#xff0c;通過迭代器可以指向容器中的某個元素&#xff0c;還可以對元素進行操作。 迭代器統一規范了遍歷方式。不同的數據結構可以用統一的方式去遍歷。 接下來是一個自定義迭代器的代碼示例。 #include<iostream&g…

(4)Java虛擬線程與傳統線程對比

虛擬線程與傳統線程對比 &#x1f504; &#x1f4cb; 核心問題 Project Loom的虛擬線程與傳統線程在資源消耗上有何區別&#xff1f;如何設計一個支持百萬級并發的服務&#xff1f; &#x1f4ca; 資源消耗比較 &#x1f418; 傳統線程 &#x1f4cf; 每線程約1MB棧空間&am…

Java 單元測試框架比較:JUnit、TestNG 哪個更適合你?

Java 單元測試框架比較&#xff1a;JUnit、TestNG 哪個更適合你&#xff1f; 在 Java 開發領域&#xff0c;單元測試是保證代碼質量的重要環節。而選擇一個合適的單元測試框架&#xff0c;對于提升測試效率和代碼可靠性至關重要。本文將深入比較 JUnit 和 TestNG 這兩個主流的…

從零開始的抽獎系統創作(2)

我們接著進行抽獎系統的完善。 前面我們完成了 1.結構初始化&#xff08;統一結果返回之類的&#xff0c;還有包的分類&#xff09; 2.加密&#xff08;基于Hutool進行的對稱與非對稱加密&#xff09; 3.用戶注冊 接下來我們先完善一下結構&#xff08;統一異常處理&#…

【vs2022的C#窗體項目】打開運行+sql Server改為mysql數據庫+發布

1. vs2022打開運行原sql Server的C#窗體項目更改為mysql數據庫 1.1. vs2022安裝基礎模塊即可 安裝1??vs核心編輯器2??.net桌面開發必選&#xff0c;可選均不安裝&#xff01;&#xff01;&#xff01; 為了成功連接mysql數據庫&#xff0c;需要安裝組件NuGet包管理器 安…

AI 編程 “幻覺” 風險頻發?飛算 JavaAI 硬核技術筑牢安全防線

AI 技術已深度融入編程領域&#xff0c;為開發者帶來前所未有的便利與效率提升。然而&#xff0c;AI 編程 “幻覺” 問題如影隨形&#xff0c;頻頻引發困擾&#xff0c;成為阻礙行業穩健發展的潛在風險。飛算 JavaAI 憑借一系列硬核技術&#xff0c;強勢出擊&#xff0c;為攻克…

數據庫----軟考中級軟件設計師(自用學習筆記)

目錄 1、E-R圖 2、結構數據模型 3、數據庫的三級模式結構 4、關系代數 5、查詢 6、SQL控制語句 7、視圖?編輯 8、索引 9、關系模式 10、函數依賴 11、通過閉包求候選碼 12、范式 13、無損連接和保持函數依賴 14、數據庫設計 15、數據庫的控制功能 16、數據庫…